Class: Supai::Resource
- Inherits:
-
Object
show all
- Defined in:
- lib/supai/resource.rb
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.attr_accessor(*attrs) ⇒ Object
10
11
12
13
14
|
# File 'lib/supai/resource.rb', line 10
def self.attr_accessor(*attrs)
@json_attrs ||= []
@json_attrs += attrs
super
end
|
.attr_collections(hash) ⇒ Object
27
28
29
30
31
32
33
34
35
36
|
# 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) ⇒ Object
16
17
18
19
20
21
22
23
24
25
|
# 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) ⇒ Object
38
39
40
41
42
43
44
45
46
47
|
# 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 ⇒ Object
6
7
8
|
# File 'lib/supai/resource.rb', line 6
def self.attributes
@json_attrs
end
|
Instance Method Details
#as_json ⇒ Object
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# 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 ⇒ Object
108
109
110
|
# File 'lib/supai/resource.rb', line 108
def inspect
"#<#{self.class} #{[@id, @name || @display_name].compact.join(" ")}>"
end
|
#parse_collection(ary, klass) ⇒ Object
84
85
86
87
88
|
# File 'lib/supai/resource.rb', line 84
def parse_collection(ary, klass)
ary.map { |obj|
parse_object(obj, klass)
}
end
|
#parse_object(obj, klass) ⇒ Object
90
91
92
93
94
95
96
|
# 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) ⇒ Object
98
99
100
101
102
103
104
105
106
|
# File 'lib/supai/resource.rb', line 98
def parse_timestamp(value)
return nil if value.nil?
if value.is_a? Time
value
else
Time.parse(value)
end
end
|
#set_attribute(key, value) ⇒ Object
73
74
75
76
|
# 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) ⇒ Object
78
79
80
81
82
|
# File 'lib/supai/resource.rb', line 78
def set_attributes(hash)
hash.each do |key, value|
set_attribute(key, value)
end
end
|
#underscore(value) ⇒ Object
64
65
66
67
68
69
70
71
|
# 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
|