Module: ActiveConformity::ConformableExtensions

Extended by:
ActiveSupport::Concern
Defined in:
lib/active_conformity/conformable_extensions.rb

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

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



79
80
81
82
83
84
85
# File 'lib/active_conformity/conformable_extensions.rb', line 79

def method_missing(m, *args, &block)
  if m.to_sym == :conformity_set && !self.class.column_names.include?(m.to_s)
    conformable.try(:conformity_set)
  else
    super
  end
end

Instance Method Details

#add_conformity_set!(conformity_set = {}, conformist_type) ⇒ Object



61
62
63
64
65
66
# File 'lib/active_conformity/conformable_extensions.rb', line 61

def add_conformity_set!(conformity_set = {}, conformist_type)
  conformable_attrs = {conformable_id: self.id, conformable_type: self.class.name, conformist_type: conformist_type}
  @conformable = Conformable.where(conformable_attrs).first_or_create
  @conformable.add_conformity_set(conformity_set)
  @conformable.save!
end

#aggregate_conformity_setObject



31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/active_conformity/conformable_extensions.rb', line 31

def aggregate_conformity_set
  acs = {}
  return acs if !conformable_references.any? #need to think about this a little more
  conformable_references.each do |c|
    # This could be more efficient with some advanced sql techniques
    # Also need indexes on these
    c = Conformable.find_by!(conformable_id: c.id, conformable_type: c.class.name).conformity_set
    c = JSON.parse(c) if c.is_a?(String)
    acs.merge!(c)
  end
  acs
end

#conformableObject



56
57
58
59
# File 'lib/active_conformity/conformable_extensions.rb', line 56

def conformable
  @conformable ||= Conformable.find_by(conformable_id: self.id, conformable_type: self.class.name)
  @conformable
end

#conformable_referencesObject



68
69
70
71
# File 'lib/active_conformity/conformable_extensions.rb', line 68

def conformable_references
  [conformable_references_from_associations + add_self_to_conformable_references.to_a]
  .flatten.compact.uniq
end

#conforming_dependents_conform?Boolean

Returns:

  • (Boolean)


44
45
46
47
48
# File 'lib/active_conformity/conformable_extensions.rb', line 44

def conforming_dependents_conform?
  return true if dependents.blank?
  !dependents.flat_map { |da| self.send(da)}
  .any?{ |da| !da.conforms? }
end

#conformity_errorsObject



27
28
29
# File 'lib/active_conformity/conformable_extensions.rb', line 27

def conformity_errors
  validator.errors.messages
end

#conformity_sets_by_referenceObject



50
51
52
53
54
# File 'lib/active_conformity/conformable_extensions.rb', line 50

def conformity_sets_by_reference
  conformable_references.flat_map do |cr|
    {"#{cr.class.name} id: #{cr.id}"=> cr.conformable.conformity_set}
  end
end

#conforms?Boolean

Returns:

  • (Boolean)


23
24
25
# File 'lib/active_conformity/conformable_extensions.rb', line 23

def conforms?
  validator.conforms? && conforming_dependents_conform?
end