api_resource 0.6.18 → 0.6.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +4 -8
- data/Guardfile +5 -17
- data/api_resource.gemspec +4 -7
- data/lib/api_resource.rb +20 -19
- data/lib/api_resource/associations.rb +39 -23
- data/lib/api_resource/associations/association_proxy.rb +14 -13
- data/lib/api_resource/attributes.rb +555 -156
- data/lib/api_resource/base.rb +376 -305
- data/lib/api_resource/connection.rb +22 -12
- data/lib/api_resource/finders.rb +17 -18
- data/lib/api_resource/finders/single_finder.rb +1 -1
- data/lib/api_resource/mocks.rb +37 -31
- data/lib/api_resource/scopes.rb +70 -12
- data/lib/api_resource/serializer.rb +264 -0
- data/lib/api_resource/typecast.rb +13 -2
- data/lib/api_resource/typecasters/unknown_typecaster.rb +33 -0
- data/lib/api_resource/version.rb +1 -1
- data/spec/lib/associations/has_many_remote_object_proxy_spec.rb +3 -3
- data/spec/lib/associations_spec.rb +49 -94
- data/spec/lib/attributes_spec.rb +40 -56
- data/spec/lib/base_spec.rb +290 -382
- data/spec/lib/callbacks_spec.rb +6 -6
- data/spec/lib/connection_spec.rb +20 -20
- data/spec/lib/finders_spec.rb +14 -0
- data/spec/lib/mocks_spec.rb +9 -9
- data/spec/lib/prefixes_spec.rb +4 -5
- data/spec/lib/scopes_spec.rb +98 -0
- data/spec/lib/serializer_spec.rb +156 -0
- data/spec/spec_helper.rb +1 -4
- data/spec/support/test_resource.rb +1 -1
- metadata +14 -38
- data/spec/tmp/DIR +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b18f870fcfb29b4ffb83c8c580b12c55c81462e0
|
4
|
+
data.tar.gz: 2667fb9ea45c86ef67f5d10ddf4d8b850db3e83f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4d100621cbaad1f11eef96fe05ae963f83ed5a51a392d1bc483d1adedf53a1a881d736f5cf1c1b73063e7e2f3d4a6b44be89b56a16cafa1ccb959fb80923802e
|
7
|
+
data.tar.gz: d9ebcf5a2777642ef95d308e1737ebd1700513cbf7ff8c522b2b7991127f7448e2e97183b3744566d044a1efe33f02b58bcd464cbbaab20d64276e9b210872c2
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
api_resource (0.6.
|
4
|
+
api_resource (0.6.18)
|
5
|
+
activemodel
|
5
6
|
colorize
|
6
7
|
differ
|
8
|
+
httpclient
|
7
9
|
json
|
8
10
|
log4r
|
9
11
|
rails
|
10
|
-
rest-client
|
11
12
|
|
12
13
|
GEM
|
13
14
|
remote: https://rubygems.org/
|
@@ -83,6 +84,7 @@ GEM
|
|
83
84
|
colorize
|
84
85
|
i18n
|
85
86
|
hike (1.2.3)
|
87
|
+
httpclient (2.3.4.1)
|
86
88
|
i18n (0.6.1)
|
87
89
|
journey (1.0.4)
|
88
90
|
json (1.8.1)
|
@@ -130,8 +132,6 @@ GEM
|
|
130
132
|
rb-fsevent (0.9.3)
|
131
133
|
rdoc (3.12.2)
|
132
134
|
json (~> 1.4)
|
133
|
-
rest-client (1.6.7)
|
134
|
-
mime-types (>= 1.16)
|
135
135
|
rspec (2.12.0)
|
136
136
|
rspec-core (~> 2.12.0)
|
137
137
|
rspec-expectations (~> 2.12.0)
|
@@ -154,7 +154,6 @@ GEM
|
|
154
154
|
multi_json (~> 1.0)
|
155
155
|
rack (~> 1.0)
|
156
156
|
tilt (~> 1.1, != 1.3.0)
|
157
|
-
sqlite3 (1.3.6)
|
158
157
|
thor (0.16.0)
|
159
158
|
tilt (1.4.1)
|
160
159
|
treetop (1.4.15)
|
@@ -182,8 +181,5 @@ DEPENDENCIES
|
|
182
181
|
mocha (= 0.12.7)
|
183
182
|
rake
|
184
183
|
rb-fsevent
|
185
|
-
rspec
|
186
184
|
simplecov
|
187
|
-
spork
|
188
|
-
sqlite3
|
189
185
|
yarjuf
|
data/Guardfile
CHANGED
@@ -12,22 +12,10 @@ guard 'rspec', :version => 2, :cli => "--color --format nested --drb", :all_on_s
|
|
12
12
|
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
13
13
|
watch(%r{^lib/api_resource/(.+)\.rb$}) {|m| "spec/lib/#{m[1]}_spec.rb"}
|
14
14
|
watch('spec/spec_helper.rb') { "spec/" }
|
15
|
-
|
16
|
-
# Rails example
|
17
|
-
watch(%r{^spec/.+_spec\.rb$})
|
18
|
-
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
19
|
-
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
20
|
-
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
|
21
|
-
watch(%r{^spec/support/(.+)\.rb$}) { "spec/" }
|
22
|
-
watch('spec/spec_helper.rb') { "spec/" }
|
23
|
-
watch('config/routes.rb') { "spec/routing" }
|
24
|
-
watch('app/controllers/application_controller.rb') { "spec/controllers" }
|
25
|
-
# Capybara request specs
|
26
|
-
watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
|
27
15
|
end
|
28
16
|
|
29
|
-
guard 'spork' do
|
30
|
-
watch('api_resource.gemspec')
|
31
|
-
watch('Gemfile.lock')
|
32
|
-
watch('spec/spec_helper.rb') { :rspec }
|
33
|
-
end
|
17
|
+
#guard 'spork' do
|
18
|
+
# watch('api_resource.gemspec')
|
19
|
+
# watch('Gemfile.lock')
|
20
|
+
# watch('spec/spec_helper.rb') { :rspec }
|
21
|
+
#end
|
data/api_resource.gemspec
CHANGED
@@ -17,9 +17,7 @@ Gem::Specification.new do |gem|
|
|
17
17
|
|
18
18
|
# Development Dependencies
|
19
19
|
gem.add_development_dependency "rake"
|
20
|
-
gem.add_development_dependency "
|
21
|
-
gem.add_development_dependency "spork"
|
22
|
-
gem.add_development_dependency "yarjuf"
|
20
|
+
gem.add_development_dependency "yarjuf"
|
23
21
|
# this latest version of mocha is not compatible with the rails
|
24
22
|
# 3.2.9
|
25
23
|
gem.add_development_dependency "mocha", ["=0.12.7"]
|
@@ -32,14 +30,13 @@ Gem::Specification.new do |gem|
|
|
32
30
|
gem.add_development_dependency "flog"
|
33
31
|
gem.add_development_dependency "hash_dealer"
|
34
32
|
gem.add_development_dependency "rb-fsevent"
|
35
|
-
gem.add_development_dependency "byebug"
|
36
33
|
gem.add_development_dependency "simplecov"
|
37
|
-
|
38
|
-
gem.add_development_dependency "sqlite3"
|
34
|
+
gem.add_development_dependency 'byebug'
|
39
35
|
|
36
|
+
gem.add_dependency "httpclient"
|
40
37
|
gem.add_dependency "rails"
|
38
|
+
gem.add_dependency 'activemodel'
|
41
39
|
gem.add_dependency "json"
|
42
|
-
gem.add_dependency "rest-client"
|
43
40
|
gem.add_dependency "log4r"
|
44
41
|
gem.add_dependency "differ"
|
45
42
|
gem.add_dependency "colorize"
|
data/lib/api_resource.rb
CHANGED
@@ -14,9 +14,9 @@ require 'differ'
|
|
14
14
|
require 'colorize'
|
15
15
|
|
16
16
|
module ApiResource
|
17
|
-
|
17
|
+
|
18
18
|
extend ActiveSupport::Autoload
|
19
|
-
|
19
|
+
|
20
20
|
autoload :Associations
|
21
21
|
autoload :AssociationActivation
|
22
22
|
autoload :Attributes
|
@@ -34,53 +34,54 @@ module ApiResource
|
|
34
34
|
autoload :ModelErrors
|
35
35
|
autoload :Observing
|
36
36
|
autoload :Scopes
|
37
|
+
autoload :Serializer
|
37
38
|
autoload :Typecast
|
38
39
|
autoload :Validations
|
39
|
-
|
40
|
+
|
40
41
|
require 'api_resource/railtie'
|
41
|
-
|
42
|
+
|
42
43
|
mattr_writer :logger
|
43
44
|
mattr_accessor :raise_missing_definition_error; self.raise_missing_definition_error = false
|
44
45
|
|
45
46
|
DEFAULT_TIMEOUT = 10 # seconds
|
46
|
-
|
47
|
+
|
47
48
|
# Load a fix for inflections for words ending in ess
|
48
49
|
ActiveSupport::Inflector.inflections do |inflect|
|
49
50
|
inflect.singular(/ess$/i, 'ess')
|
50
51
|
end
|
51
|
-
|
52
|
+
|
52
53
|
def self.load_mocks_and_factories
|
53
54
|
require 'hash_dealer'
|
54
55
|
Mocks.clear_endpoints
|
55
56
|
Mocks.init
|
56
|
-
|
57
|
-
Dir["#{File.dirname(__FILE__)}/../spec/support/requests/*.rb"].each {|f|
|
57
|
+
|
58
|
+
Dir["#{File.dirname(__FILE__)}/../spec/support/requests/*.rb"].each {|f|
|
58
59
|
require f
|
59
60
|
}
|
60
|
-
Dir["#{File.dirname(__FILE__)}/../spec/support/**/*.rb"].each {|f|
|
61
|
+
Dir["#{File.dirname(__FILE__)}/../spec/support/**/*.rb"].each {|f|
|
61
62
|
require f
|
62
63
|
}
|
63
64
|
end
|
64
65
|
|
65
66
|
class << self
|
66
|
-
|
67
|
-
delegate :site, :site=, :format, :format=,
|
68
|
-
:token, :token=, :timeout,
|
69
|
-
:open_timeout,
|
67
|
+
|
68
|
+
delegate :site, :site=, :format, :format=,
|
69
|
+
:token, :token=, :timeout,
|
70
|
+
:open_timeout,
|
70
71
|
:reset_connection, :ttl, :ttl=,
|
71
72
|
:to => "ApiResource::Base"
|
72
|
-
|
73
|
+
|
73
74
|
end
|
74
75
|
|
75
76
|
def self.cache(reset = false)
|
76
77
|
@cache = nil if reset
|
77
78
|
@cache ||= begin
|
78
79
|
defined?(Rails) ? Rails.cache : ActiveSupport::Cache::MemoryStore.new
|
79
|
-
rescue
|
80
|
+
rescue
|
80
81
|
ActiveSupport::Cache::MemoryStore.new
|
81
82
|
end
|
82
83
|
end
|
83
|
-
|
84
|
+
|
84
85
|
# set the timeout val and reset the connection
|
85
86
|
def self.timeout=(val)
|
86
87
|
ApiResource::Base.timeout = val
|
@@ -116,7 +117,7 @@ module ApiResource
|
|
116
117
|
self.ttl = old_ttl
|
117
118
|
end
|
118
119
|
end
|
119
|
-
|
120
|
+
|
120
121
|
# logger
|
121
122
|
def self.logger
|
122
123
|
return @logger if @logger
|
@@ -125,11 +126,11 @@ module ApiResource
|
|
125
126
|
@logger.level = Log4r::INFO
|
126
127
|
@logger
|
127
128
|
end
|
128
|
-
|
129
|
+
|
129
130
|
# Use this method to enable logging in the future
|
130
131
|
# def self.logging(val = nil)
|
131
132
|
# return (@@logging || false) unless val
|
132
133
|
# return @@logging = val
|
133
134
|
# end
|
134
|
-
|
135
|
+
|
135
136
|
end
|
@@ -2,7 +2,7 @@ require 'active_support'
|
|
2
2
|
require 'active_support/string_inquirer'
|
3
3
|
|
4
4
|
module ApiResource
|
5
|
-
|
5
|
+
|
6
6
|
module Associations
|
7
7
|
|
8
8
|
#TODO: many of these methods should also force loading of the resource definition
|
@@ -20,10 +20,10 @@ module ApiResource
|
|
20
20
|
autoload :SingleObjectProxy
|
21
21
|
|
22
22
|
included do
|
23
|
-
|
23
|
+
|
24
24
|
unless self.ancestors.include?(ApiResource::AssociationActivation)
|
25
25
|
raise Exception.new(
|
26
|
-
"Can't include Associations without AssociationActivation"
|
26
|
+
"Can't include Associations without AssociationActivation"
|
27
27
|
)
|
28
28
|
end
|
29
29
|
|
@@ -42,7 +42,7 @@ module ApiResource
|
|
42
42
|
extend InheritedMethod
|
43
43
|
|
44
44
|
self.define_association_methods
|
45
|
-
|
45
|
+
|
46
46
|
end
|
47
47
|
|
48
48
|
# module methods to include the proper associations in various libraries - this is usually loaded in Railties
|
@@ -50,8 +50,8 @@ module ApiResource
|
|
50
50
|
ActiveRecord::Base.class_eval do
|
51
51
|
include ApiResource::AssociationActivation
|
52
52
|
self.activate_associations(
|
53
|
-
:has_many_remote => :has_many_remote,
|
54
|
-
:belongs_to_remote => :belongs_to_remote,
|
53
|
+
:has_many_remote => :has_many_remote,
|
54
|
+
:belongs_to_remote => :belongs_to_remote,
|
55
55
|
:has_one_remote => :has_one_remote,
|
56
56
|
)
|
57
57
|
end
|
@@ -71,7 +71,7 @@ module ApiResource
|
|
71
71
|
end
|
72
72
|
|
73
73
|
module ClassMethods
|
74
|
-
|
74
|
+
|
75
75
|
# Define the methods for creating and testing for associations, unfortunately
|
76
76
|
# scopes are different enough to require different methods :(
|
77
77
|
def define_association_methods
|
@@ -82,7 +82,7 @@ module ApiResource
|
|
82
82
|
options = options.with_indifferent_access
|
83
83
|
# Raise an error if we have multiple args and options
|
84
84
|
raise "Invalid arguments to #{assoc}" unless options.blank? || args.length == 1
|
85
|
-
args.each do |arg|
|
85
|
+
args.each do |arg|
|
86
86
|
klass_name = (options[:class_name] ? options[:class_name].to_s.classify : arg.to_s.classify)
|
87
87
|
# add this to any descendants - the other methods etc are handled by inheritance
|
88
88
|
([self] + self.descendants).each do |klass|
|
@@ -93,15 +93,15 @@ module ApiResource
|
|
93
93
|
define_association_as_attribute(:#{assoc}, arg, options)
|
94
94
|
end
|
95
95
|
end
|
96
|
-
|
96
|
+
|
97
97
|
def #{assoc}?(name)
|
98
98
|
return self.related_objects[:#{assoc}][name.to_s.pluralize.to_sym].present? || self.related_objects[:#{assoc}][name.to_s.singularize.to_sym].present?
|
99
99
|
end
|
100
|
-
|
100
|
+
|
101
101
|
def #{assoc}_class_name(name)
|
102
102
|
raise "No such" + :#{assoc}.to_s + " association on #{name}" unless self.#{assoc}?(name)
|
103
103
|
return self.find_namespaced_class_name(self.related_objects[:#{assoc}][name.to_sym])
|
104
|
-
end
|
104
|
+
end
|
105
105
|
|
106
106
|
EOE
|
107
107
|
# For convenience we will define the methods for testing for the existence of an association
|
@@ -117,14 +117,14 @@ module ApiResource
|
|
117
117
|
EOE
|
118
118
|
end
|
119
119
|
end
|
120
|
-
|
120
|
+
|
121
121
|
def association?(assoc)
|
122
122
|
self.related_objects.any? do |key, value|
|
123
123
|
next if key.to_s == "scopes"
|
124
124
|
value.detect { |k,v| k.to_sym == assoc.to_sym }
|
125
125
|
end
|
126
126
|
end
|
127
|
-
|
127
|
+
|
128
128
|
def association_names
|
129
129
|
# structure is {:has_many => {"myname" => "ClassName"}}
|
130
130
|
self.related_objects.clone.delete_if{|k,v| k.to_s == "scopes"}.collect{|k,v| v.keys.collect(&:to_sym)}.flatten
|
@@ -133,7 +133,7 @@ module ApiResource
|
|
133
133
|
def association_class(assoc)
|
134
134
|
self.association_class_name(assoc).constantize
|
135
135
|
end
|
136
|
-
|
136
|
+
|
137
137
|
def association_class_name(assoc)
|
138
138
|
raise ArgumentError, "#{assoc} is not a valid association of #{self}" unless self.association?(assoc)
|
139
139
|
result = self.related_objects.detect do |key,value|
|
@@ -144,7 +144,7 @@ module ApiResource
|
|
144
144
|
|
145
145
|
# TODO: add a special foreign_key option to associations
|
146
146
|
def association_foreign_key_field(assoc, type = nil)
|
147
|
-
|
147
|
+
|
148
148
|
if type.nil? && has_many?(assoc)
|
149
149
|
type = :has_many
|
150
150
|
else
|
@@ -160,7 +160,7 @@ module ApiResource
|
|
160
160
|
|
161
161
|
str.to_sym
|
162
162
|
end
|
163
|
-
|
163
|
+
|
164
164
|
protected
|
165
165
|
|
166
166
|
def clear_related_objects
|
@@ -184,6 +184,22 @@ module ApiResource
|
|
184
184
|
self.related_objects[:scopes] = self.related_objects[:scopes].clone
|
185
185
|
end
|
186
186
|
|
187
|
+
#
|
188
|
+
# Wrapper method to define all associations from the
|
189
|
+
# resource definition
|
190
|
+
#
|
191
|
+
# @return [Boolean] true
|
192
|
+
def define_all_associations
|
193
|
+
if self.resource_definition["associations"]
|
194
|
+
self.resource_definition["associations"].each_pair do |key, hash|
|
195
|
+
hash.each_pair do |assoc_name, assoc_options|
|
196
|
+
self.send(key, assoc_name, assoc_options)
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
true
|
201
|
+
end
|
202
|
+
|
187
203
|
def define_association_as_attribute(assoc_type, assoc_name, opts)
|
188
204
|
opts.stringify_keys!
|
189
205
|
|
@@ -198,7 +214,7 @@ module ApiResource
|
|
198
214
|
define_attribute_method(assoc_name)
|
199
215
|
define_attribute_method(id_method_name)
|
200
216
|
end
|
201
|
-
|
217
|
+
|
202
218
|
# a module to contain our generated methods
|
203
219
|
cattr_accessor :api_resource_generated_methods
|
204
220
|
self.api_resource_generated_methods = Module.new
|
@@ -216,7 +232,7 @@ module ApiResource
|
|
216
232
|
)
|
217
233
|
klass.define_association_as_attribute(self, assoc_name, opts)
|
218
234
|
end
|
219
|
-
|
235
|
+
|
220
236
|
def find_namespaced_class_name(klass)
|
221
237
|
# return the name if it is itself namespaced
|
222
238
|
return klass if klass =~ /::/
|
@@ -233,13 +249,13 @@ module ApiResource
|
|
233
249
|
|
234
250
|
return klass
|
235
251
|
end
|
236
|
-
|
252
|
+
|
237
253
|
end
|
238
|
-
|
254
|
+
|
239
255
|
def association?(assoc)
|
240
256
|
self.class.association?(assoc)
|
241
257
|
end
|
242
|
-
|
258
|
+
|
243
259
|
def association_class(assoc)
|
244
260
|
self.class.association_class(assoc)
|
245
261
|
end
|
@@ -247,12 +263,12 @@ module ApiResource
|
|
247
263
|
def association_class_name(assoc)
|
248
264
|
self.class.association_class_name(assoc)
|
249
265
|
end
|
250
|
-
|
266
|
+
|
251
267
|
# list of all association names
|
252
268
|
def association_names
|
253
269
|
self.class.association_names
|
254
270
|
end
|
255
271
|
|
256
272
|
end
|
257
|
-
|
273
|
+
|
258
274
|
end
|
@@ -1,22 +1,22 @@
|
|
1
1
|
module ApiResource
|
2
|
-
|
2
|
+
|
3
3
|
module Associations
|
4
|
-
|
4
|
+
|
5
5
|
class AssociationProxy
|
6
6
|
|
7
7
|
|
8
8
|
class_attribute :remote_path_element
|
9
|
-
self.remote_path_element = :service_uri
|
9
|
+
self.remote_path_element = :service_uri
|
10
10
|
|
11
11
|
attr_accessor :remote_path
|
12
12
|
attr_reader :owner, :klass, :finder_opts
|
13
13
|
|
14
14
|
# TODO: add the other load forcing methods here for collections
|
15
|
-
delegate :[], :[]=, :<<, :first, :second, :last, :blank?, :nil?,
|
16
|
-
:include?, :push, :pop, :+, :concat, :flatten, :flatten!, :compact,
|
17
|
-
:compact!, :empty?, :fetch, :map, :reject, :reject!, :reverse,
|
18
|
-
:select, :select!, :size, :sort, :sort!, :uniq, :uniq!, :to_a,
|
19
|
-
:sample, :slice, :slice!, :count, :present?,
|
15
|
+
delegate :[], :[]=, :<<, :first, :second, :last, :blank?, :nil?,
|
16
|
+
:include?, :push, :pop, :+, :concat, :flatten, :flatten!, :compact,
|
17
|
+
:compact!, :empty?, :fetch, :map, :reject, :reject!, :reverse,
|
18
|
+
:select, :select!, :size, :sort, :sort!, :uniq, :uniq!, :to_a,
|
19
|
+
:sample, :slice, :slice!, :count, :present?,
|
20
20
|
:to => :internal_object
|
21
21
|
|
22
22
|
# define association methods on the class
|
@@ -27,7 +27,7 @@ module ApiResource
|
|
27
27
|
|
28
28
|
# pass this along
|
29
29
|
opts[:name] = assoc_name
|
30
|
-
|
30
|
+
|
31
31
|
klass.api_resource_generated_methods.module_eval <<-EOE, __FILE__, __LINE__ + 1
|
32
32
|
def #{assoc_name}
|
33
33
|
@attributes_cache[:#{assoc_name}] ||= begin
|
@@ -60,7 +60,8 @@ module ApiResource
|
|
60
60
|
#{id_method_name}_will_change!
|
61
61
|
end
|
62
62
|
@attributes_cache[:#{id_method_name}] = val
|
63
|
-
write_attribute(:#{id_method_name}, val)
|
63
|
+
# write_attribute(:#{id_method_name}, val)
|
64
|
+
@attributes[:#{id_method_name}] = val
|
64
65
|
end
|
65
66
|
|
66
67
|
EOE
|
@@ -76,7 +77,7 @@ module ApiResource
|
|
76
77
|
public
|
77
78
|
|
78
79
|
def initialize(klass, owner, options = {})
|
79
|
-
|
80
|
+
|
80
81
|
# the base class for our scope, e.g. ApiResource::SomeClass
|
81
82
|
@klass = klass.is_a?(String) ? klass.constantize : klass
|
82
83
|
|
@@ -150,7 +151,7 @@ module ApiResource
|
|
150
151
|
end
|
151
152
|
|
152
153
|
end
|
153
|
-
|
154
|
+
|
154
155
|
end
|
155
|
-
|
156
|
+
|
156
157
|
end
|