File: trait.rb

package info (click to toggle)
ruby-factory-bot 6.5.6-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,492 kB
  • sloc: ruby: 9,242; makefile: 6; sh: 4
file content (39 lines) | stat: -rw-r--r-- 882 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
module FactoryBot
  # @api private
  class Trait
    attr_reader :name, :uid, :definition

    delegate :add_callback, :declare_attribute, :to_create, :define_trait, :constructor,
      :callbacks, :attributes, :klass, :klass=, to: :@definition

    def initialize(name, **options, &block)
      @name = name.to_s
      @block = block
      @uri_manager = FactoryBot::UriManager.new(names, paths: options[:uri_paths])

      @definition = Definition.new(@name, uri_manager: @uri_manager)
      proxy = FactoryBot::DefinitionProxy.new(@definition)

      if block
        proxy.instance_eval(&@block)
      end
    end

    def clone
      Trait.new(name, uri_paths: definition.uri_manager.paths, &block)
    end

    def names
      [@name]
    end

    def ==(other)
      name == other.name &&
        block == other.block
    end

    protected

    attr_reader :block
  end
end