Module: Stratagem::ApplicationExtensions::Models::Metadata

Included in:
Annotations
Defined in:
lib/stratagem/framework_extensions/models/metadata.rb

Defined Under Namespace

Classes: StratagemAssociation

Constant Summary collapse

INSTANCE_ENUMERATION_METHODS =
[:relations, :attribute_names, :ignore_attributes, :internal_attributes, :unaccessible_attributes, :invalid_columns, :exclude_attributes_for_mocking]
INSTANCE_ENTITY_METHODS =
[:attribute_type, :column_from_error, :authenticates?, :whitelists_attributes?, :blacklists_attributes?]

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(mod) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/stratagem/framework_extensions/models/metadata.rb', line 9

def Metadata.included(mod)
  mod.class_eval do
    INSTANCE_ENUMERATION_METHODS.each do |name|
      define_method(name) do |*args|
        run_callbacks(name, *args)
      end
    end

    INSTANCE_ENTITY_METHODS.each do |name|
      define_method(name) do |*args|
        val = run_callbacks(name, *args).first
        val ||= false if (name.to_s.include?('?'))
        val
      end
    end

  end
end

Instance Method Details

#callbacksObject



61
62
63
# File 'lib/stratagem/framework_extensions/models/metadata.rb', line 61

def callbacks
  adapters.select {|a| a.detector.supports?(model) }.map {|a| a. }
end

#foreign_keysObject

Convenience methods



30
31
32
# File 'lib/stratagem/framework_extensions/models/metadata.rb', line 30

def foreign_keys
  relations(:belongs_to).map {|relation| relation.foreign_key }
end

#relation(name) ⇒ Object



34
35
36
# File 'lib/stratagem/framework_extensions/models/metadata.rb', line 34

def relation(name)
  relations.find {|relation| relation.name == name }
end

#relation_names(relation_type = nil) ⇒ Object



38
39
40
41
# File 'lib/stratagem/framework_extensions/models/metadata.rb', line 38

def relation_names(relation_type=nil)
  @relation_names ||= {}
  @relation_names[relation_type || :all] ||= relations(relation_type).map {|relation| relation.name }
end

#validations(field = nil, validation = nil) ⇒ Object

Tracking of validates_xyz methods. Population of this data can be found in the tracing library



46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/stratagem/framework_extensions/models/metadata.rb', line 46

def validations(field=nil, validation=nil)
  validators = self.validators

  if (field || validation)
    validators.select {|v| 
      conditions = []
      conditions << (v.field == field) if field
      conditions << (v.validation == validation) if validation
      !conditions.include?(false)
    }
  else
    validators
  end
end

#validatorsObject



65
66
67
# File 'lib/stratagem/framework_extensions/models/metadata.rb', line 65

def validators
  @validators ||= []
end