Class: HasHelpers::Resources::Meta

Inherits:
Object
  • Object
show all
Includes:
Attributes
Defined in:
lib/has_helpers/resources.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Attributes

included

Constructor Details

#initialize(resource_name, **options) ⇒ Meta

Returns a new instance of Meta.



45
46
47
48
# File 'lib/has_helpers/resources.rb', line 45

def initialize(resource_name, **options)
  @resource_name = resource_name
  super(options)
end

Instance Attribute Details

#alias_name(name = nil) ⇒ Object



50
51
52
# File 'lib/has_helpers/resources.rb', line 50

def alias_name(name = nil)
  @alias_name ||= name
end

#klass(safe: false) ⇒ Object



70
71
72
# File 'lib/has_helpers/resources.rb', line 70

def klass(safe: false)
  @klass ||= safe ? resource_name.safe_constantize : resource_name.constantize
end

#resource_nameObject

Returns the value of attribute resource_name.



42
43
44
# File 'lib/has_helpers/resources.rb', line 42

def resource_name
  @resource_name
end

#resource_type(rt = nil) ⇒ Object



106
107
108
109
# File 'lib/has_helpers/resources.rb', line 106

def resource_type(rt = nil)
  self.resource_type = rt if rt
  @resource_type ||= (klass.base_class != klass && ::HasHelpers::Resources.lookup(klass.base_class.name).resource_type == ::HasHelpers::ResourceType::BASE) ? ::HasHelpers::ResourceType::TYPE : ::HasHelpers::ResourceType::NESTED
end

Instance Method Details

#add(*resources) ⇒ Object



54
55
56
# File 'lib/has_helpers/resources.rb', line 54

def add(*resources)
  @added_nested_resources = normalize_resource_names(resources)
end

#added_nested_resourcesObject



62
63
64
# File 'lib/has_helpers/resources.rb', line 62

def added_nested_resources
  @added_nested_resources ||= []
end

#associationsObject



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/has_helpers/resources.rb', line 83

def associations
  @associations ||= begin
                      associations = {}
                      klass.reflect_on_all_associations.map do |assoc|
                        # HasManyReflection, HasOneReflection, and BelongsToReflection
                        if (assoc.is_a?(ActiveRecord::Reflection::HasManyReflection) || assoc.is_a?(ActiveRecord::Reflection::HasOneReflection) || assoc.is_a?(ActiveRecord::Reflection::BelongsToReflection)) &&
                           klass.reflect_on_association(assoc.name).klass.respond_to?(:table_exists?) && klass.reflect_on_association(assoc.name).klass.table_exists?
                          associations["#{assoc.name}_id"] = { class_name: klass.reflect_on_association(assoc.name).klass.name, assoc_type: assoc.class.to_s.split("::").last }
                        end
                      rescue NameError
                        if assoc.class_name.present?
                          if (assoc.is_a?(ActiveRecord::Reflection::HasManyReflection) || assoc.is_a?(ActiveRecord::Reflection::HasOneReflection) || assoc.is_a?(ActiveRecord::Reflection::BelongsToReflection)) &&
                             assoc.class_name.safe_constantize.respond_to?(:table_exists?) && assoc.class_name.safe_constantize.table_exists?
                            associations["#{assoc.name}_id"] = { class_name: assoc.class_name.delete_prefix("::"), assoc_type: assoc.class.to_s.split("::").last }
                          end
                        end
                      rescue => e
                        p e
                      end if klass.respond_to?(:reflect_on_all_associations)
                      associations
                    end
end

#excluded_nested_resourcesObject



66
67
68
# File 'lib/has_helpers/resources.rb', line 66

def excluded_nested_resources
  @excluded_nested_resources ||= []
end

#fields_resourcesObject



78
79
80
# File 'lib/has_helpers/resources.rb', line 78

def fields_resources
  klass.table_exists? ? klass.column_names : []
end

#nested_resourcesObject



111
112
113
114
115
116
117
118
119
# File 'lib/has_helpers/resources.rb', line 111

def nested_resources
  return [] if klass(safe: true).blank?
  nested_resources = klass.nested_attributes_options.
                           lazy.
                           map { |nested_attribute, _| klass.reflect_on_association(nested_attribute).klass.name }.
                           reject { |nested_attribute| excluded_nested_resources.include?(nested_attribute) }.
    reject { |nested_attribute| ::HasHelpers::Resources.lookup(nested_attribute).resource_type == ::HasHelpers::ResourceType::SUB }.to_a.compact if klass.respond_to?(:nested_attributes_options)
  added_nested_resources.concat(nested_resources).uniq
end

#remove(*resources) ⇒ Object



58
59
60
# File 'lib/has_helpers/resources.rb', line 58

def remove(*resources)
  @excluded_nested_resources = normalize_resource_names(resources)
end

#split_resources(*resources) ⇒ Object



74
75
76
# File 'lib/has_helpers/resources.rb', line 74

def split_resources(*resources)
  @split_resources ||= normalize_resource_names(resources)
end