class Supai::Resource
Public Class Methods
attr_accessor(*attrs)
click to toggle source
Calls superclass method
# File lib/supai/resource.rb, line 10 def self.attr_accessor(*attrs) @json_attrs ||= [] @json_attrs += attrs super end
attr_collections(hash)
click to toggle source
# File lib/supai/resource.rb, line 27 def self.attr_collections(hash) @json_attrs ||= [] hash.each do |name, klass| @json_attrs << name attr_reader(name) define_method("#{name}=") { |ary| instance_variable_set("@#{name}", parse_collection(ary, klass)) } end end
attr_objects(hash)
click to toggle source
# File lib/supai/resource.rb, line 16 def self.attr_objects(hash) @json_attrs ||= [] hash.each do |name, klass| @json_attrs << name attr_reader(name) define_method("#{name}=") { |obj| instance_variable_set("@#{name}", parse_object(obj, klass)) } end end
attr_timestamp_accessor(*attrs)
click to toggle source
# File lib/supai/resource.rb, line 38 def self.attr_timestamp_accessor(*attrs) @json_attrs ||= [] attrs.each do |name| @json_attrs << name attr_reader(name) define_method("#{name}=") { |value| instance_variable_set("@#{name}", parse_timestamp(value)) } end end
attributes()
click to toggle source
# File lib/supai/resource.rb, line 6 def self.attributes @json_attrs end
Public Instance Methods
as_json()
click to toggle source
# File lib/supai/resource.rb, line 49 def as_json self.class.attributes.to_h { |attr| value = send(attr) json_value = case when value.respond_to?(:as_json) value.as_json when value.is_a?(Array) value.map(&:as_json) else value end [attr, json_value] } end
inspect()
click to toggle source
# File lib/supai/resource.rb, line 112 def inspect "#<#{self.class} #{[@id, @name || @display_name].compact.join(" ")}>" end
parse_collection(ary, klass)
click to toggle source
# File lib/supai/resource.rb, line 84 def parse_collection(ary, klass) ary.map { |obj| parse_object(obj, klass) } end
parse_object(obj, klass)
click to toggle source
# File lib/supai/resource.rb, line 90 def parse_object(obj, klass) if obj.is_a?(klass) obj else klass.new(obj) end end
parse_timestamp(value)
click to toggle source
# File lib/supai/resource.rb, line 98 def parse_timestamp(value) return nil if value.nil? if value.is_a? Time value else if Time.respond_to? :zone Time.zone.parse(value) else Time.parse(value) end end end
set_attribute(key, value)
click to toggle source
# File lib/supai/resource.rb, line 73 def set_attribute(key, value) setter = "#{underscore(key)}=" send(setter, value) if respond_to?(setter) end
set_attributes(hash)
click to toggle source
# File lib/supai/resource.rb, line 78 def set_attributes(hash) hash.each do |key, value| set_attribute(key, value) end end
underscore(value)
click to toggle source
# File lib/supai/resource.rb, line 64 def underscore(value) return value unless /[A-Z-]/.match?(value) word = value.to_s.gsub(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2') word.gsub!(/([a-z\d])([A-Z])/, '\1_\2') word.tr!("-", "_") word.downcase! word end