module Her::Model::Attributes::ClassMethods
Public Instance Methods
attributes(*attributes)
click to toggle source
Define the attributes that will be used to track dirty attributes and validations
@param [Array] attributes @example
class User include Her::Model attributes :name, :email end
# File lib/her/model/attributes.rb, line 186 def attributes(*attributes) define_attribute_methods attributes attributes.each do |attribute| unless method_defined?(:"#{attribute}=") define_method("#{attribute}=") do |value| @attributes[:"#{attribute}"] = nil unless @attributes.include?(:"#{attribute}") self.send(:"#{attribute}_will_change!") if @attributes[:"#{attribute}"] != value @attributes[:"#{attribute}"] = value end end unless method_defined?(:"#{attribute}?") define_method("#{attribute}?") do @attributes.include?(:"#{attribute}") && @attributes[:"#{attribute}"].present? end end end end
new_collection(parsed_data)
click to toggle source
Initialize a collection of resources with raw data from an HTTP request
@param [Array] parsed_data @private
# File lib/her/model/attributes.rb, line 166 def new_collection(parsed_data) Her::Model::Attributes.initialize_collection(self, parsed_data) end
new_from_parsed_data(parsed_data)
click to toggle source
Initialize a new object with the “raw” parsed_data from the parsing middleware
@private
# File lib/her/model/attributes.rb, line 173 def new_from_parsed_data(parsed_data) parsed_data = parsed_data.with_indifferent_access new(parse(parsed_data[:data]).merge :_metadata => parsed_data[:metadata], :_errors => parsed_data[:errors]) end
setter_method_names()
click to toggle source
@private
# File lib/her/model/attributes.rb, line 233 def setter_method_names @_her_setter_method_names ||= instance_methods.inject(Set.new) do |memo, method_name| memo << method_name.to_s if method_name.to_s.end_with?('=') memo end end
store_metadata(value = nil)
click to toggle source
Define the accessor in which the API response metadata (obtained from the parsing middleware) will be stored
@param [Symbol] #store_metadata
@example
class User include Her::Model store_metadata :server_data end
# File lib/her/model/attributes.rb, line 228 def store_metadata(value = nil) store_her_data(:metadata, value) end
store_response_errors(value = nil)
click to toggle source
Define the accessor in which the API response errors (obtained from the parsing middleware) will be stored
@param [Symbol] #store_response_errors
@example
class User include Her::Model store_response_errors :server_errors end
# File lib/her/model/attributes.rb, line 215 def store_response_errors(value = nil) store_her_data(:response_errors, value) end
Private Instance Methods
store_her_data(name, value)
click to toggle source
@private
# File lib/her/model/attributes.rb, line 242 def store_her_data(name, value) class_eval " if @_her_store_#{name} && value.present? remove_method @_her_store_#{name}.to_sym remove_method @_her_store_#{name}.to_s + '=' end @_her_store_#{name} ||= begin superclass.store_#{name} if superclass.respond_to?(:store_#{name}) end return @_her_store_#{name} unless value @_her_store_#{name} = value define_method(value) { @#{name} } define_method(value.to_s+'=') { |value| @#{name} = value } ", __FILE__, __LINE__ + 1 end