Class: Pinkman::Serializer::Scope
- Inherits:
-
Object
- Object
- Pinkman::Serializer::Scope
- Defined in:
- lib/pinkman/serializer/scope.rb
Instance Attribute Summary collapse
-
#access ⇒ Object
Returns the value of attribute access.
-
#assoc_scopes ⇒ Object
Returns the value of attribute assoc_scopes.
-
#name ⇒ Object
Returns the value of attribute name.
-
#read ⇒ Object
Returns the value of attribute read.
-
#serializer ⇒ Object
Returns the value of attribute serializer.
-
#write ⇒ Object
Returns the value of attribute write.
Instance Method Summary collapse
- #access_actions(*args) ⇒ Object
- #associations ⇒ Object
- #associations_inclusion ⇒ Object
- #associations_inclusion=(val) ⇒ Object
- #attribute_assoc_scope(attribute) ⇒ Object
-
#attribute_has_nested_associated?(attribute) ⇒ Boolean
given that a attribute is a association, and the associated serializer has same scope defined, checks if a nested association is present.
- #attribute_inclusion_clause(attribute) ⇒ Object
- #attribute_is_association?(attribute) ⇒ Boolean
- #attribute_is_in_db?(attribute) ⇒ Boolean
- #can_access ⇒ Object
- #can_access?(action) ⇒ Boolean
- #can_read ⇒ Object
- #can_read?(attribute) ⇒ Boolean
- #can_write ⇒ Object
- #can_write?(attribute) ⇒ Boolean
- #fields ⇒ Object
- #get_associated_model(reflection) ⇒ Object
- #get_associated_serializer(attribute) ⇒ Object
- #include_associations(*args) ⇒ Object
- #include_optimizer ⇒ Object
- #including ⇒ Object
-
#initialize(hash) ⇒ Scope
constructor
A new instance of Scope.
- #query_optimizer ⇒ Object
- #read_attributes(*args) ⇒ Object
- #read_ghost ⇒ Object
- #read_ghost=(value) ⇒ Object
- #read_ghost_attributes(*args) ⇒ Object
-
#reflections ⇒ Object
private.
- #select_optimizer ⇒ Object
- #selecting ⇒ Object
- #write_attributes(*args) ⇒ Object
Constructor Details
#initialize(hash) ⇒ Scope
Returns a new instance of Scope.
7 8 9 10 11 12 13 |
# File 'lib/pinkman/serializer/scope.rb', line 7 def initialize hash if hash.is_a?(Hash) self.serializer = hash[:serializer] self.name = hash[:name] end self end |
Instance Attribute Details
#access ⇒ Object
Returns the value of attribute access.
5 6 7 |
# File 'lib/pinkman/serializer/scope.rb', line 5 def access @access end |
#assoc_scopes ⇒ Object
Returns the value of attribute assoc_scopes.
5 6 7 |
# File 'lib/pinkman/serializer/scope.rb', line 5 def assoc_scopes @assoc_scopes end |
#name ⇒ Object
Returns the value of attribute name.
5 6 7 |
# File 'lib/pinkman/serializer/scope.rb', line 5 def name @name end |
#read ⇒ Object
Returns the value of attribute read.
5 6 7 |
# File 'lib/pinkman/serializer/scope.rb', line 5 def read @read end |
#serializer ⇒ Object
Returns the value of attribute serializer.
5 6 7 |
# File 'lib/pinkman/serializer/scope.rb', line 5 def serializer @serializer end |
#write ⇒ Object
Returns the value of attribute write.
5 6 7 |
# File 'lib/pinkman/serializer/scope.rb', line 5 def write @write end |
Instance Method Details
#access_actions(*args) ⇒ Object
89 90 91 92 93 |
# File 'lib/pinkman/serializer/scope.rb', line 89 def access_actions *args self.access = args self.access = [] unless args.first access end |
#associations ⇒ Object
40 41 42 |
# File 'lib/pinkman/serializer/scope.rb', line 40 def associations read.select{ |attribute| attribute_is_association?(attribute) } end |
#associations_inclusion ⇒ Object
95 96 97 |
# File 'lib/pinkman/serializer/scope.rb', line 95 def associations_inclusion @associations_inclusion ||= [] end |
#associations_inclusion=(val) ⇒ Object
99 100 101 |
# File 'lib/pinkman/serializer/scope.rb', line 99 def associations_inclusion= val @associations_inclusion = val end |
#attribute_assoc_scope(attribute) ⇒ Object
176 177 178 179 180 181 182 183 184 |
# File 'lib/pinkman/serializer/scope.rb', line 176 def attribute_assoc_scope(attribute) assoc_serializer = get_associated_serializer(attribute) if assoc_serializer assoc_serializer.scope(name.to_sym) else binding.pry raise ArgumentError, "#{serializer}.#{name}: association named - #{attribute} - found but I can't find its serializer." end end |
#attribute_has_nested_associated?(attribute) ⇒ Boolean
given that a attribute is a association, and the associated serializer has same scope defined, checks if a nested association is present
189 190 191 192 193 194 195 |
# File 'lib/pinkman/serializer/scope.rb', line 189 def attribute_has_nested_associated?(attribute) attribute = attribute.to_s if attribute_is_association?(attribute) assoc_scope = attribute_assoc_scope(attribute) assoc_scope && assoc_scope.associations.any? && assoc_scope.serializer.model != serializer.model end end |
#attribute_inclusion_clause(attribute) ⇒ Object
145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/pinkman/serializer/scope.rb', line 145 def attribute_inclusion_clause attribute if attribute_has_nested_associated?(attribute) a = [] assoc_scope = attribute_assoc_scope(attribute) assoc_scope.associations.each do |assoc_attribute| a << assoc_scope.attribute_inclusion_clause(assoc_attribute) end { attribute.to_sym => a } else attribute.to_sym end end |
#attribute_is_association?(attribute) ⇒ Boolean
141 142 143 |
# File 'lib/pinkman/serializer/scope.rb', line 141 def attribute_is_association?(attribute) attribute.to_s.in?(reflections.keys.map(&:to_s)) end |
#attribute_is_in_db?(attribute) ⇒ Boolean
137 138 139 |
# File 'lib/pinkman/serializer/scope.rb', line 137 def attribute_is_in_db?(attribute) attribute.to_s.in?(serializer.model.column_names) end |
#can_access ⇒ Object
127 128 129 |
# File 'lib/pinkman/serializer/scope.rb', line 127 def can_access access end |
#can_access?(action) ⇒ Boolean
115 116 117 |
# File 'lib/pinkman/serializer/scope.rb', line 115 def can_access? action access.include?(:all) or access.include?(action.to_sym) end |
#can_read ⇒ Object
119 120 121 |
# File 'lib/pinkman/serializer/scope.rb', line 119 def can_read read + read_ghost end |
#can_read?(attribute) ⇒ Boolean
107 108 109 |
# File 'lib/pinkman/serializer/scope.rb', line 107 def can_read? attribute read.include?(:all) or read.include?(attribute.to_sym) or attribute.to_sym == :error or attribute.to_sym == :errors or read_ghost.include?(attribute.to_sym) end |
#can_write ⇒ Object
123 124 125 |
# File 'lib/pinkman/serializer/scope.rb', line 123 def can_write write end |
#can_write?(attribute) ⇒ Boolean
111 112 113 |
# File 'lib/pinkman/serializer/scope.rb', line 111 def can_write? attribute (write.include?(:all) or write.include?(attribute.to_sym)) and (serializer.model.column_names.include?(attribute.to_s) or (serializer.model.instance_methods.include?("#{attribute.to_s}=".to_sym) and write.include?(attribute.to_sym))) end |
#fields ⇒ Object
44 45 46 |
# File 'lib/pinkman/serializer/scope.rb', line 44 def fields read.select{ |attribute| attribute_is_in_db?(attribute) } end |
#get_associated_model(reflection) ⇒ Object
160 161 162 163 164 165 166 |
# File 'lib/pinkman/serializer/scope.rb', line 160 def get_associated_model(reflection) if reflection.[:polymorphic] reflection.klass else reflection.active_record end end |
#get_associated_serializer(attribute) ⇒ Object
168 169 170 171 172 173 174 |
# File 'lib/pinkman/serializer/scope.rb', line 168 def get_associated_serializer(attribute) begin get_associated_model(reflections[attribute.to_s]).serializer if attribute_is_association?(attribute.to_s) rescue raise ArgumentError, "#{serializer}.#{name}: association named - #{attribute} - found but I can't find its serializer." end end |
#include_associations(*args) ⇒ Object
103 104 105 |
# File 'lib/pinkman/serializer/scope.rb', line 103 def include_associations *args self.associations_inclusion = args end |
#include_optimizer ⇒ Object
62 63 64 65 66 67 |
# File 'lib/pinkman/serializer/scope.rb', line 62 def include_optimizer associations.each do |attribute| including << attribute_inclusion_clause(attribute) end including end |
#including ⇒ Object
73 74 75 |
# File 'lib/pinkman/serializer/scope.rb', line 73 def including @including ||= [] end |
#query_optimizer ⇒ Object
48 49 50 51 |
# File 'lib/pinkman/serializer/scope.rb', line 48 def query_optimizer select_optimizer include_optimizer end |
#read_attributes(*args) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/pinkman/serializer/scope.rb', line 23 def read_attributes *args read_attrs = [] assoc_scopes = {} args.each do |field| if field.is_a?(Hash) assoc_scopes.merge!(field) read_attrs = read_attrs + field.keys if field.any? else read_attrs << field end end self.read = read_attrs self.assoc_scopes = assoc_scopes query_optimizer read end |
#read_ghost ⇒ Object
15 16 17 |
# File 'lib/pinkman/serializer/scope.rb', line 15 def read_ghost @read_ghost || [] end |
#read_ghost=(value) ⇒ Object
19 20 21 |
# File 'lib/pinkman/serializer/scope.rb', line 19 def read_ghost= value @read_ghost = value end |
#read_ghost_attributes(*args) ⇒ Object
77 78 79 80 81 |
# File 'lib/pinkman/serializer/scope.rb', line 77 def read_ghost_attributes *args self.read_ghost = args self.read_ghost = [] unless args.first read_ghost end |
#reflections ⇒ Object
private
133 134 135 |
# File 'lib/pinkman/serializer/scope.rb', line 133 def reflections serializer.reflections end |
#select_optimizer ⇒ Object
53 54 55 56 57 58 59 60 |
# File 'lib/pinkman/serializer/scope.rb', line 53 def select_optimizer unless :all.in?(read.map { |read_attr| begin read_attr.to_sym rescue read_attr end}) fields.each do |attribute| selecting << "#{serializer.table_name}.#{attribute}" end end selecting end |
#selecting ⇒ Object
69 70 71 |
# File 'lib/pinkman/serializer/scope.rb', line 69 def selecting @selecting ||= [] end |
#write_attributes(*args) ⇒ Object
83 84 85 86 87 |
# File 'lib/pinkman/serializer/scope.rb', line 83 def write_attributes *args self.write = args self.write = [] unless args.first write end |