Class: ROM::Factory::DSL

Inherits:
BasicObject
Defined in:
lib/rom/factory/dsl.rb

Overview

Factory builder DSL

Instance Attribute Summary collapse

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(meth, *args, &block) ⇒ Object (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



140
141
142
143
144
145
146
# File 'lib/rom/factory/dsl.rb', line 140

def method_missing(meth, *args, &block)
  if _valid_names.include?(meth)
    define_attr(meth, *args, &block)
  else
    super
  end
end

Instance Attribute Details

#_attributesObject (readonly)



30
31
32
# File 'lib/rom/factory/dsl.rb', line 30

def _attributes
  @_attributes
end

#_factoriesObject (readonly)



30
31
32
# File 'lib/rom/factory/dsl.rb', line 30

def _factories
  @_factories
end

#_nameObject (readonly)



30
31
32
# File 'lib/rom/factory/dsl.rb', line 30

def _name
  @_name
end

#_relationObject (readonly)



30
31
32
# File 'lib/rom/factory/dsl.rb', line 30

def _relation
  @_relation
end

#_traitsObject (readonly)



31
32
33
# File 'lib/rom/factory/dsl.rb', line 31

def _traits
  @_traits
end

#_valid_namesObject (readonly)



30
31
32
# File 'lib/rom/factory/dsl.rb', line 30

def _valid_names
  @_valid_names
end

Instance Method Details

#association(name, *traits, **options) ⇒ Object

Create an association attribute

Examples:

belongs-to

f.association(:group)

has-many

f.association(:posts, count: 2)

Parameters:

  • name (Symbol)

    The name of the configured association

  • options (Hash)

    Additional options

Options Hash (**options):

  • count (Integer)

    Number of objects to generate (has-many only)



130
131
132
133
134
135
# File 'lib/rom/factory/dsl.rb', line 130

def association(name, *traits, **options)
  assoc = _relation.associations[name]
  builder = -> { _factories.for_relation(assoc.target) }

  _attributes << attributes::Association.new(assoc, builder, *traits, **options)
end

#create(name, *args) ⇒ Object

Delegate to a builder and persist a struct

Parameters:

  • The (Symbol)

    name of the registered builder



54
55
56
# File 'lib/rom/factory/dsl.rb', line 54

def create(name, *args)
  _factories[name, *args]
end

#fake(type) ⇒ Object #fake(api, type) ⇒ Object #fake(api, type, *args) ⇒ Object

Create a fake value using Faker gem

Overloads:

  • #fake(type) ⇒ Object

    Examples:

    f.email { fake(:name) }

    Parameters:

    • type (Symbol)

      The value type to generate

  • #fake(api, type) ⇒ Object

    Examples:

    f.email { fake(:internet, :email) }

    Parameters:

    • api (Symbol)

      The faker API identifier ie. :internet, :product etc.

    • type (Symbol)

      The value type to generate

  • #fake(api, type, *args) ⇒ Object

    Examples:

    f.email { fake(:number, :between, 10, 100) }

    Parameters:

    • api (Symbol)

      The faker API identifier ie. :internet, :product etc.

    • type (Symbol)

      The value type to generate

    • args (Array)

      Additional arguments

See Also:



101
102
103
# File 'lib/rom/factory/dsl.rb', line 101

def fake(*args)
  ::ROM::Factory.fake(*args)
end

#timestampsObject

Set timestamp attributes



70
71
72
73
# File 'lib/rom/factory/dsl.rb', line 70

def timestamps
  created_at { ::Time.now }
  updated_at { ::Time.now }
end

#trait(name, parents = [], &block) ⇒ Object



105
106
107
108
109
110
111
112
113
114
115
# File 'lib/rom/factory/dsl.rb', line 105

def trait(name, parents = [], &block)
  _traits[name] = DSL.new(
    "#{_name}_#{name}",
    attributes: _traits.values_at(*parents).flat_map(&:elements).inject(
      AttributeRegistry.new, :<<
    ),
    relation: _relation,
    factories: _factories,
    &block
  )._attributes
end