Module: EPlat::Concerns::OverwriteInstanceMethods
- Extended by:
- ActiveSupport::Concern
- Included in:
- Base
- Defined in:
- lib/e_plat/resource/concerns/overwrite_instance_methods.rb
Instance Method Summary collapse
- #as_eplat_json ⇒ Object
- #as_json(options = {}) ⇒ Object
- #create ⇒ Object
-
#create_resource_for(resource_name) ⇒ Object
Create and return a class definition for a resource inside the current resource.
- #to_eplat_json(options = {}) ⇒ Object
- #to_json(options = {}) ⇒ Object
- #update ⇒ Object
Instance Method Details
permalink #as_eplat_json ⇒ Object
[View source]
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/e_plat/resource/concerns/overwrite_instance_methods.rb', line 63 def as_eplat_json schema_keys = self.class.schema.keys schema_keys.each_with_object({}) do |key, hash| value = send(key) hash[key] = if value.is_a?(Array) value.map { |item| item.respond_to?(:as_eplat_json) ? item.as_eplat_json : item } elsif value.respond_to?(:as_eplat_json) value.as_eplat_json else value end end end |
permalink #as_json(options = {}) ⇒ Object
[View source]
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/e_plat/resource/concerns/overwrite_instance_methods.rb', line 14 def as_json( = {}) full_json = super() return {} if read_only? if mapping.class.virtual_collections.present? virtual_keys = mapping.class.virtual_collections.map{|c| c[:name]}.map(&:to_s) full_json.reject!{|key, value| virtual_keys.include?(key) } # not needed in JSON, as it's just a proxy for setting the real attributes end return full_json if new_record? # new records request with all attributes request_json = if include_root_in_json or [:root].present? { element_name => select_changed_attributes_and_collection_keys(full_json[element_name]) } else select_changed_attributes_and_collection_keys(full_json) end if top_level_resource? # then check that any present collections have all entries represented with atleast an ID, so they're not removed hash_without_root(request_json).each do |key, value| next unless arrayOfPresentHashes?(value) hash_without_root(request_json)[key].filter!(&:present?) hash_without_root(request_json)[key] += unrepresented_collection_ids(key, value).map{ |id| { "id" => id } } end end add_root_if_needed(request_json, [:root]).reject do |k,v| if v.is_a?(Array) v.reject(&:empty?).empty? else v.nil? || v.blank? end end end |
permalink #create ⇒ Object
[View source]
90 91 92 93 |
# File 'lib/e_plat/resource/concerns/overwrite_instance_methods.rb', line 90 def create self.attributes = mapping.via_native_attributes_where_possible(attributes) super end |
permalink #create_resource_for(resource_name) ⇒ Object
Create and return a class definition for a resource inside the current resource
81 82 83 84 85 86 87 88 |
# File 'lib/e_plat/resource/concerns/overwrite_instance_methods.rb', line 81 def create_resource_for(resource_name) resource = Class.new(EPlat::Base) # <- this line changed resource.prefix = self.class.prefix resource.site = self.class.site self.class.const_set(resource_name, resource) resource end |
permalink #to_eplat_json(options = {}) ⇒ Object
[View source]
51 52 53 54 55 56 57 58 59 60 |
# File 'lib/e_plat/resource/concerns/overwrite_instance_methods.rb', line 51 def to_eplat_json( = {}) root_at_top_of_json = self.mapping.include_root_in_request_body?(self) [:root] = self.element_name if root_at_top_of_json result = '{' result << as_eplat_json.map do |key, value| "#{ActiveSupport::JSON.encode(key.to_s)}:#{ActiveSupport::JSON.encode(value, )}" end * ',' result << '}' end |
permalink #to_json(options = {}) ⇒ Object
[View source]
6 7 8 9 10 11 12 |
# File 'lib/e_plat/resource/concerns/overwrite_instance_methods.rb', line 6 def to_json( = {}) #add this option here so root is added at the top of the JSON, as_json to every nested resource root_at_top_of_json = self.mapping.include_root_in_request_body?(self) [:root] = self.element_name if root_at_top_of_json super() end |
permalink #update ⇒ Object
[View source]
95 96 97 98 |
# File 'lib/e_plat/resource/concerns/overwrite_instance_methods.rb', line 95 def update self.attributes = mapping.via_native_attributes_where_possible(attributes) super end |