Class: ModalFields::DeclarationsDsl

Inherits:
DslBase
  • Object
show all
Defined in:
lib/modalfields/modalfields.rb

Instance Method Summary collapse

Constructor Details

#initialize(model) ⇒ DeclarationsDsl

Returns a new instance of DeclarationsDsl.



100
101
102
# File 'lib/modalfields/modalfields.rb', line 100

def initialize(model)
  @model = model
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, type, *args) ⇒ Object



126
127
128
# File 'lib/modalfields/modalfields.rb', line 126

def method_missing(name, type, *args)
  field(name, type, *args)
end

Instance Method Details

#field(name, type, *args) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/modalfields/modalfields.rb', line 103

def field(name, type, *args)
  declaration = FieldDeclaration.declare(name, type, *args)
  specific_hook = ModalFields.hooks[type.to_sym]
  general_hook = ModalFields.hooks[:all_fields]
  [specific_hook, general_hook].compact.each do |hook|
    hook[@model, declaration] if hook
  end
  if ModalFields.validate(declaration)
    @model.fields_info << declaration
    if @model.table_exists? && @model.columns.detect{|c| c.name==declaration.name.to_s}
      if declaration.specifiers.include?(:unique)
        @model.validates_uniqueness_of declaration.name
      end
      if declaration.specifiers.include?(:required)
        @model.validates_presence_of declaration.name
      end
    end
  end
end

#timestampsObject



122
123
124
125
# File 'lib/modalfields/modalfields.rb', line 122

def timestamps
  field :created_at, :datetime
  field :updated_at, :datetime
end