her 1.0.0 → 1.1.1
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 +5 -5
- data/.rubocop.yml +19 -1279
- data/.rubocop_todo.yml +232 -0
- data/.ruby-version +1 -0
- data/.travis.yml +16 -4
- data/README.md +25 -1
- data/gemfiles/Gemfile.faraday-1.0 +6 -0
- data/her.gemspec +4 -3
- data/lib/her/api.rb +8 -7
- data/lib/her/collection.rb +2 -1
- data/lib/her/errors.rb +3 -1
- data/lib/her/json_api/model.rb +8 -12
- data/lib/her/middleware.rb +1 -1
- data/lib/her/middleware/accept_json.rb +1 -0
- data/lib/her/middleware/first_level_parse_json.rb +6 -5
- data/lib/her/middleware/json_api_parser.rb +6 -5
- data/lib/her/middleware/parse_json.rb +2 -1
- data/lib/her/middleware/second_level_parse_json.rb +6 -5
- data/lib/her/model/associations.rb +7 -7
- data/lib/her/model/associations/association.rb +7 -9
- data/lib/her/model/associations/association_proxy.rb +2 -3
- data/lib/her/model/associations/belongs_to_association.rb +2 -3
- data/lib/her/model/attributes.rb +14 -6
- data/lib/her/model/base.rb +2 -2
- data/lib/her/model/http.rb +7 -2
- data/lib/her/model/introspection.rb +5 -3
- data/lib/her/model/nested_attributes.rb +1 -1
- data/lib/her/model/orm.rb +27 -9
- data/lib/her/model/parse.rb +10 -12
- data/lib/her/model/paths.rb +3 -4
- data/lib/her/model/relation.rb +5 -4
- data/lib/her/version.rb +1 -1
- data/spec/api_spec.rb +3 -0
- data/spec/middleware/accept_json_spec.rb +1 -0
- data/spec/middleware/first_level_parse_json_spec.rb +2 -1
- data/spec/middleware/json_api_parser_spec.rb +1 -0
- data/spec/middleware/second_level_parse_json_spec.rb +1 -0
- data/spec/model/associations/association_proxy_spec.rb +1 -0
- data/spec/model/associations_spec.rb +98 -14
- data/spec/model/attributes_spec.rb +9 -3
- data/spec/model/callbacks_spec.rb +14 -15
- data/spec/model/dirty_spec.rb +1 -0
- data/spec/model/http_spec.rb +29 -18
- data/spec/model/introspection_spec.rb +3 -2
- data/spec/model/nested_attributes_spec.rb +1 -0
- data/spec/model/orm_spec.rb +39 -16
- data/spec/model/parse_spec.rb +24 -0
- data/spec/model/paths_spec.rb +1 -0
- data/spec/model/relation_spec.rb +3 -2
- data/spec/model/validations_spec.rb +1 -0
- data/spec/model_spec.rb +1 -0
- data/spec/support/extensions/array.rb +1 -0
- data/spec/support/extensions/hash.rb +1 -0
- metadata +15 -19
@@ -25,7 +25,7 @@ module Her
|
|
25
25
|
|
26
26
|
associations.each do |association_name|
|
27
27
|
unless allowed_association_names.include?(association_name)
|
28
|
-
raise Her::Errors::AssociationUnknownError
|
28
|
+
raise Her::Errors::AssociationUnknownError, "Unknown association name :#{association_name}"
|
29
29
|
end
|
30
30
|
|
31
31
|
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
data/lib/her/model/orm.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
|
2
3
|
module Her
|
3
4
|
module Model
|
4
5
|
# This module adds ORM-like capabilities to the model
|
@@ -54,12 +55,22 @@ module Her
|
|
54
55
|
|
55
56
|
# Similar to save(), except that ResourceInvalid is raised if the save fails
|
56
57
|
def save!
|
57
|
-
|
58
|
+
unless save
|
58
59
|
raise Her::Errors::ResourceInvalid, self
|
59
60
|
end
|
60
61
|
self
|
61
62
|
end
|
62
63
|
|
64
|
+
# Update a resource and return it
|
65
|
+
#
|
66
|
+
# @example
|
67
|
+
# @user = User.find(1)
|
68
|
+
# @user.update_attributes(:name => "Tobias Fünke")
|
69
|
+
# # Called via PUT "/users/1"
|
70
|
+
def update_attributes(attributes)
|
71
|
+
assign_attributes(attributes) && save
|
72
|
+
end
|
73
|
+
|
63
74
|
# Destroy a resource
|
64
75
|
#
|
65
76
|
# @example
|
@@ -195,7 +206,7 @@ module Her
|
|
195
206
|
#
|
196
207
|
# User.all # Called via GET "/users?admin=1"
|
197
208
|
# User.new.admin # => 1
|
198
|
-
def default_scope(block=nil)
|
209
|
+
def default_scope(block = nil)
|
199
210
|
@_her_default_scope ||= (!respond_to?(:default_scope) && superclass.respond_to?(:default_scope)) ? superclass.default_scope : scoped
|
200
211
|
@_her_default_scope = @_her_default_scope.instance_exec(&block) unless block.nil?
|
201
212
|
@_her_default_scope
|
@@ -217,8 +228,15 @@ module Her
|
|
217
228
|
# @user = User.save_existing(1, { :fullname => "Tobias Fünke" })
|
218
229
|
# # Called via PUT "/users/1"
|
219
230
|
def save_existing(id, params)
|
231
|
+
save_existing!(id, params)
|
232
|
+
rescue Her::Errors::ResourceInvalid => e
|
233
|
+
e.resource
|
234
|
+
end
|
235
|
+
|
236
|
+
# Similar to .save_existing but raises ResourceInvalid if save fails
|
237
|
+
def save_existing!(id, params)
|
220
238
|
resource = new(params.merge(primary_key => id))
|
221
|
-
resource.save
|
239
|
+
resource.save!
|
222
240
|
resource
|
223
241
|
end
|
224
242
|
|
@@ -227,7 +245,7 @@ module Her
|
|
227
245
|
# @example
|
228
246
|
# User.destroy_existing(1)
|
229
247
|
# # Called via DELETE "/users/1"
|
230
|
-
def destroy_existing(id, params={})
|
248
|
+
def destroy_existing(id, params = {})
|
231
249
|
request(params.merge(:_method => method_for(:destroy), :_path => build_request_path(params.merge(primary_key => id)))) do |parsed_data, response|
|
232
250
|
data = parse(parsed_data[:data])
|
233
251
|
metadata = parsed_data[:metadata]
|
@@ -256,15 +274,15 @@ module Her
|
|
256
274
|
# If the request_new_object_on_build flag is set, the new object is requested via API.
|
257
275
|
def build(attributes = {})
|
258
276
|
params = attributes
|
259
|
-
return
|
277
|
+
return new(params) unless request_new_object_on_build?
|
260
278
|
|
261
|
-
path =
|
262
|
-
method =
|
279
|
+
path = build_request_path(params.merge(primary_key => 'new'))
|
280
|
+
method = method_for(:new)
|
263
281
|
|
264
282
|
resource = nil
|
265
|
-
|
283
|
+
request(params.merge(:_method => method, :_path => path)) do |parsed_data, response|
|
266
284
|
if response.success?
|
267
|
-
resource =
|
285
|
+
resource = new_from_parsed_data(parsed_data)
|
268
286
|
end
|
269
287
|
end
|
270
288
|
resource
|
data/lib/her/model/parse.rb
CHANGED
@@ -10,7 +10,7 @@ module Her
|
|
10
10
|
# @user.to_params
|
11
11
|
# # => { :id => 1, :name => 'John Smith' }
|
12
12
|
def to_params
|
13
|
-
self.class.to_params(
|
13
|
+
self.class.to_params(attributes, changes)
|
14
14
|
end
|
15
15
|
|
16
16
|
module ClassMethods
|
@@ -31,7 +31,7 @@ module Her
|
|
31
31
|
end
|
32
32
|
|
33
33
|
# @private
|
34
|
-
def to_params(attributes, changes={})
|
34
|
+
def to_params(attributes, changes = {})
|
35
35
|
filtered_attributes = attributes.each_with_object({}) do |(key, value), memo|
|
36
36
|
case value
|
37
37
|
when Her::Model
|
@@ -45,10 +45,7 @@ module Her
|
|
45
45
|
filtered_attributes.merge!(embeded_params(attributes))
|
46
46
|
|
47
47
|
if her_api.options[:send_only_modified_attributes]
|
48
|
-
filtered_attributes
|
49
|
-
hash[attribute] = filtered_attributes[attribute]
|
50
|
-
hash
|
51
|
-
end
|
48
|
+
filtered_attributes.slice! *changes.keys.map(&:to_sym)
|
52
49
|
end
|
53
50
|
|
54
51
|
if include_root_in_json?
|
@@ -133,11 +130,11 @@ module Her
|
|
133
130
|
# user.name # => "Tobias"
|
134
131
|
def root_element(value = nil)
|
135
132
|
if value.nil?
|
136
|
-
if json_api_format?
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
133
|
+
@_her_root_element ||= if json_api_format?
|
134
|
+
name.split("::").last.pluralize.underscore.to_sym
|
135
|
+
else
|
136
|
+
name.split("::").last.underscore.to_sym
|
137
|
+
end
|
141
138
|
else
|
142
139
|
@_her_root_element = value.to_sym
|
143
140
|
end
|
@@ -145,7 +142,8 @@ module Her
|
|
145
142
|
|
146
143
|
# @private
|
147
144
|
def root_element_included?(data)
|
148
|
-
data
|
145
|
+
element = data[parsed_root_element]
|
146
|
+
element.is_a?(Hash) || element.is_a?(Array)
|
149
147
|
end
|
150
148
|
|
151
149
|
# @private
|
data/lib/her/model/paths.rb
CHANGED
@@ -19,7 +19,6 @@ module Her
|
|
19
19
|
end
|
20
20
|
|
21
21
|
module ClassMethods
|
22
|
-
|
23
22
|
# Define the primary key field that will be used to find and save records
|
24
23
|
#
|
25
24
|
# @example
|
@@ -88,13 +87,13 @@ module Her
|
|
88
87
|
# Return a custom path based on the collection path and variable parameters
|
89
88
|
#
|
90
89
|
# @private
|
91
|
-
def build_request_path(path=nil, parameters={})
|
90
|
+
def build_request_path(path = nil, parameters = {})
|
92
91
|
parameters = parameters.try(:with_indifferent_access)
|
93
92
|
|
94
93
|
unless path.is_a?(String)
|
95
94
|
parameters = path.try(:with_indifferent_access) || parameters
|
96
95
|
path =
|
97
|
-
if parameters.include?(primary_key) && parameters[primary_key] && !parameters[primary_key].
|
96
|
+
if parameters.include?(primary_key) && parameters[primary_key] && !parameters[primary_key].is_a?(Array)
|
98
97
|
resource_path.dup
|
99
98
|
else
|
100
99
|
collection_path.dup
|
@@ -117,7 +116,7 @@ module Her
|
|
117
116
|
end
|
118
117
|
|
119
118
|
# @private
|
120
|
-
def build_request_path_from_string_or_symbol(path, params={})
|
119
|
+
def build_request_path_from_string_or_symbol(path, params = {})
|
121
120
|
path.is_a?(Symbol) ? "#{build_request_path(params)}/#{path}" : path
|
122
121
|
end
|
123
122
|
end
|
data/lib/her/model/relation.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Her
|
2
2
|
module Model
|
3
3
|
class Relation
|
4
|
+
|
4
5
|
# @private
|
5
6
|
attr_accessor :params
|
6
7
|
attr_writer :parent
|
@@ -32,7 +33,7 @@ module Her
|
|
32
33
|
# # Fetched via GET "/users?approved=1"
|
33
34
|
def where(params = {})
|
34
35
|
return self if params.blank? && !@_fetch.nil?
|
35
|
-
|
36
|
+
clone.tap do |r|
|
36
37
|
r.params = r.params.merge(params)
|
37
38
|
r.clear_fetch_cache!
|
38
39
|
end
|
@@ -58,7 +59,7 @@ module Her
|
|
58
59
|
|
59
60
|
# @private
|
60
61
|
def kind_of?(thing)
|
61
|
-
fetch.
|
62
|
+
fetch.is_a?(thing)
|
62
63
|
end
|
63
64
|
|
64
65
|
# Fetch a collection of resources
|
@@ -68,7 +69,7 @@ module Her
|
|
68
69
|
@_fetch ||= begin
|
69
70
|
path = @parent.build_request_path(@parent.collection_path, @params)
|
70
71
|
method = @parent.method_for(:find)
|
71
|
-
@parent.request(@params.merge(:_method => method, :_path => path)) do |parsed_data,
|
72
|
+
@parent.request(@params.merge(:_method => method, :_path => path)) do |parsed_data, _|
|
72
73
|
@parent.new_collection(parsed_data)
|
73
74
|
end
|
74
75
|
end
|
@@ -106,7 +107,7 @@ module Her
|
|
106
107
|
resource
|
107
108
|
end
|
108
109
|
|
109
|
-
ids.length > 1 || ids.first.
|
110
|
+
ids.length > 1 || ids.first.is_a?(Array) ? results : results.first
|
110
111
|
end
|
111
112
|
|
112
113
|
# Fetch first resource with the given attributes.
|
data/lib/her/version.rb
CHANGED
data/spec/api_spec.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
|
2
3
|
require File.join(File.dirname(__FILE__), "spec_helper.rb")
|
3
4
|
|
4
5
|
describe Her::API do
|
@@ -32,6 +33,7 @@ describe Her::API do
|
|
32
33
|
describe "#request" do
|
33
34
|
before do
|
34
35
|
class SimpleParser < Faraday::Response::Middleware
|
36
|
+
|
35
37
|
def on_complete(env)
|
36
38
|
env[:body] = { data: env[:body] }
|
37
39
|
end
|
@@ -85,6 +87,7 @@ describe Her::API do
|
|
85
87
|
let(:parsed_data) { subject.request(_method: :get, _path: "users/1")[:parsed_data] }
|
86
88
|
before do
|
87
89
|
class CustomParser < Faraday::Response::Middleware
|
90
|
+
|
88
91
|
def on_complete(env)
|
89
92
|
json = MultiJson.load(env[:body], symbolize_keys: true)
|
90
93
|
errors = json.delete(:errors) || []
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
|
2
3
|
require "spec_helper"
|
3
4
|
|
4
5
|
describe Her::Middleware::FirstLevelParseJSON do
|
@@ -31,7 +32,7 @@ describe Her::Middleware::FirstLevelParseJSON do
|
|
31
32
|
end
|
32
33
|
|
33
34
|
it "ensures the errors are a hash if there are no errors" do
|
34
|
-
expect(subject.parse(body_with_errors)[:errors]).to eq(name: %w
|
35
|
+
expect(subject.parse(body_with_errors)[:errors]).to eq(name: %w[not_valid should_be_present])
|
35
36
|
end
|
36
37
|
|
37
38
|
it "ensures that malformed JSON throws an exception" do
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
|
2
3
|
require File.join(File.dirname(__FILE__), "../spec_helper.rb")
|
3
4
|
|
4
5
|
describe Her::Model::Associations do
|
@@ -111,8 +112,7 @@ describe Her::Model::Associations do
|
|
111
112
|
data_key: :organization,
|
112
113
|
default: nil,
|
113
114
|
class_name: "Organization",
|
114
|
-
foreign_key: "organization_id"
|
115
|
-
path: "/organizations/:id"
|
115
|
+
foreign_key: "organization_id"
|
116
116
|
}
|
117
117
|
end
|
118
118
|
before { Foo::User.belongs_to :organization }
|
@@ -120,7 +120,8 @@ describe Her::Model::Associations do
|
|
120
120
|
it { is_expected.to eql [organization_association] }
|
121
121
|
end
|
122
122
|
|
123
|
-
context "
|
123
|
+
context "specifying non-default path" do
|
124
|
+
let(:path) { 'my_special_path' }
|
124
125
|
let(:organization_association) do
|
125
126
|
{
|
126
127
|
name: :organization,
|
@@ -128,7 +129,22 @@ describe Her::Model::Associations do
|
|
128
129
|
default: nil,
|
129
130
|
class_name: "Organization",
|
130
131
|
foreign_key: "organization_id",
|
131
|
-
path:
|
132
|
+
path: path
|
133
|
+
}
|
134
|
+
end
|
135
|
+
before { Foo::User.belongs_to :organization, path: path }
|
136
|
+
|
137
|
+
it { is_expected.to eql [organization_association] }
|
138
|
+
end
|
139
|
+
|
140
|
+
context "multiple" do
|
141
|
+
let(:organization_association) do
|
142
|
+
{
|
143
|
+
name: :organization,
|
144
|
+
data_key: :organization,
|
145
|
+
default: nil,
|
146
|
+
class_name: "Organization",
|
147
|
+
foreign_key: "organization_id"
|
132
148
|
}
|
133
149
|
end
|
134
150
|
let(:family_association) do
|
@@ -137,8 +153,7 @@ describe Her::Model::Associations do
|
|
137
153
|
data_key: :family,
|
138
154
|
default: nil,
|
139
155
|
class_name: "Family",
|
140
|
-
foreign_key: "family_id"
|
141
|
-
path: "/families/:id"
|
156
|
+
foreign_key: "family_id"
|
142
157
|
}
|
143
158
|
end
|
144
159
|
before do
|
@@ -215,8 +230,7 @@ describe Her::Model::Associations do
|
|
215
230
|
data_key: :org,
|
216
231
|
default: true,
|
217
232
|
class_name: "Business",
|
218
|
-
foreign_key: "org_id"
|
219
|
-
path: "/organizations/:id"
|
233
|
+
foreign_key: "org_id"
|
220
234
|
}
|
221
235
|
end
|
222
236
|
before do
|
@@ -296,7 +310,7 @@ describe Her::Model::Associations do
|
|
296
310
|
stub.get("/users/1/comments") { [200, {}, [{ comment: { id: 4, body: "They're having a FIRESALE?" } }].to_json] }
|
297
311
|
stub.get("/users/1/role") { [200, {}, { id: 3, body: "User" }.to_json] }
|
298
312
|
stub.get("/users/1/posts") { [200, {}, [{ id: 1, body: "blogging stuff", admin_id: 1 }].to_json] }
|
299
|
-
stub.get("/organizations/1") { [200, {}, { organization:
|
313
|
+
stub.get("/organizations/1") { [200, {}, { organization: { id: 1, name: "Bluth Company Foo" } }.to_json] }
|
300
314
|
end
|
301
315
|
end
|
302
316
|
end
|
@@ -446,6 +460,9 @@ describe Her::Model::Associations do
|
|
446
460
|
Her::API.setup url: "https://api.example.com" do |builder|
|
447
461
|
builder.use Her::Middleware::FirstLevelParseJSON
|
448
462
|
builder.use Faraday::Request::UrlEncoded
|
463
|
+
builder.adapter :test do |stub|
|
464
|
+
stub.get("/users/1") { [200, {}, { id: 1, name: "Lindsay Fünke", organization_id: 2 }.to_json] }
|
465
|
+
end
|
449
466
|
end
|
450
467
|
end
|
451
468
|
|
@@ -526,6 +543,74 @@ describe Her::Model::Associations do
|
|
526
543
|
end
|
527
544
|
end
|
528
545
|
|
546
|
+
context "handling associations with collection_path" do
|
547
|
+
before do
|
548
|
+
spawn_model "Foo::Organization" do
|
549
|
+
has_many :users
|
550
|
+
parse_root_in_json true
|
551
|
+
collection_path '/special/organizations'
|
552
|
+
end
|
553
|
+
spawn_model "Foo::User" do
|
554
|
+
belongs_to :organization
|
555
|
+
end
|
556
|
+
end
|
557
|
+
|
558
|
+
context "without included data" do
|
559
|
+
before(:context) do
|
560
|
+
Her::API.setup url: "https://api.example.com" do |builder|
|
561
|
+
builder.use Her::Middleware::FirstLevelParseJSON
|
562
|
+
builder.use Faraday::Request::UrlEncoded
|
563
|
+
builder.adapter :test do |stub|
|
564
|
+
stub.get("/users/2") { [200, {}, { id: 2, name: "Lindsay Fünke", organization_id: 2 }.to_json] }
|
565
|
+
stub.get("/special/organizations/2") { [200, {}, { organization: { id: 2, name: "Bluth Company" } }.to_json] }
|
566
|
+
end
|
567
|
+
end
|
568
|
+
end
|
569
|
+
|
570
|
+
let(:user) { Foo::User.find(2) }
|
571
|
+
|
572
|
+
it "fetches data that was not included through belongs_to" do
|
573
|
+
expect(user.organization).to be_a(Foo::Organization)
|
574
|
+
expect(user.organization.id).to eq(2)
|
575
|
+
expect(user.organization.name).to eq("Bluth Company")
|
576
|
+
end
|
577
|
+
end
|
578
|
+
end
|
579
|
+
|
580
|
+
context "handling associations with path_prefix" do
|
581
|
+
before do
|
582
|
+
spawn_model "Foo::Organization" do
|
583
|
+
has_many :users
|
584
|
+
parse_root_in_json true
|
585
|
+
end
|
586
|
+
spawn_model "Foo::User" do
|
587
|
+
belongs_to :organization
|
588
|
+
end
|
589
|
+
end
|
590
|
+
|
591
|
+
context "without included data" do
|
592
|
+
before(:context) do
|
593
|
+
Her::API.setup url: "https://api.example.com" do |builder|
|
594
|
+
builder.use Her::Middleware::FirstLevelParseJSON
|
595
|
+
builder.use Faraday::Request::UrlEncoded
|
596
|
+
builder.path_prefix = 'special'
|
597
|
+
builder.adapter :test do |stub|
|
598
|
+
stub.get("/special/users/2") { [200, {}, { id: 2, name: "Lindsay Fünke", organization_id: 2 }.to_json] }
|
599
|
+
stub.get("/special/organizations/2") { [200, {}, { organization: { id: 2, name: "Bluth Company" } }.to_json] }
|
600
|
+
end
|
601
|
+
end
|
602
|
+
end
|
603
|
+
|
604
|
+
let(:user) { Foo::User.find(2) }
|
605
|
+
|
606
|
+
it "fetches data that was not included through belongs_to" do
|
607
|
+
expect(user.organization).to be_a(Foo::Organization)
|
608
|
+
expect(user.organization.id).to eq(2)
|
609
|
+
expect(user.organization.name).to eq("Bluth Company")
|
610
|
+
end
|
611
|
+
end
|
612
|
+
end
|
613
|
+
|
529
614
|
context "handling associations with details in active_model_serializers format" do
|
530
615
|
before do
|
531
616
|
spawn_model "Foo::User" do
|
@@ -558,7 +643,7 @@ describe Her::Model::Associations do
|
|
558
643
|
builder.adapter :test do |stub|
|
559
644
|
stub.get("/users/1") { [200, {}, { user: { id: 1, name: "Tobias Fünke", comments: [{ id: 2, body: "Tobias, you blow hard!", user_id: 1 }, { id: 3, body: "I wouldn't mind kissing that man between the cheeks, so to speak", user_id: 1 }], role: { id: 1, body: "Admin" }, organization: { id: 1, name: "Bluth Company" }, organization_id: 1 } }.to_json] }
|
560
645
|
stub.get("/users/1/comments") { [200, {}, { comments: [{ id: 4, body: "They're having a FIRESALE?" }] }.to_json] }
|
561
|
-
stub.get("/organizations/1") { [200, {}, { organization:
|
646
|
+
stub.get("/organizations/1") { [200, {}, { organization: { id: 1, name: "Bluth Company Foo" } }.to_json] }
|
562
647
|
end
|
563
648
|
end
|
564
649
|
end
|
@@ -616,7 +701,7 @@ describe Her::Model::Associations do
|
|
616
701
|
stub.get("/users/2") { [200, {}, { user: { id: 2, name: "Lindsay Fünke", organization_id: 1 } }.to_json] }
|
617
702
|
stub.get("/users/2/comments") { [200, {}, { comments: [{ id: 4, body: "They're having a FIRESALE?" }, { id: 5, body: "Is this the tiny town from Footloose?" }] }.to_json] }
|
618
703
|
stub.get("/users/2/comments/5") { [200, {}, { comment: { id: 5, body: "Is this the tiny town from Footloose?" } }.to_json] }
|
619
|
-
stub.get("/organizations/1") { [200, {}, { organization:
|
704
|
+
stub.get("/organizations/1") { [200, {}, { organization: { id: 1, name: "Bluth Company Foo" } }.to_json] }
|
620
705
|
end
|
621
706
|
end
|
622
707
|
end
|
@@ -661,8 +746,7 @@ describe Her::Model::Associations do
|
|
661
746
|
builder.adapter :test do |stub|
|
662
747
|
stub.get("/users/1") { [200, {}, { id: 1, name: "Tobias Fünke", organization: { id: 1, name: "Bluth Company Inc." }, organization_id: 1 }.to_json] }
|
663
748
|
stub.get("/users/4") { [200, {}, { id: 1, name: "Tobias Fünke", organization: { id: 1, name: "Bluth Company Inc." } }.to_json] }
|
664
|
-
stub.get("/users/3") { [200, {}, { id: 2, name: "Lindsay Fünke",
|
665
|
-
stub.get("/companies/1") { [200, {}, { id: 1, name: "Bluth Company" }.to_json] }
|
749
|
+
stub.get("/users/3") { [200, {}, { id: 2, name: "Lindsay Fünke", organization: nil }.to_json] }
|
666
750
|
end
|
667
751
|
end
|
668
752
|
end
|
@@ -699,7 +783,7 @@ describe Her::Model::Associations do
|
|
699
783
|
builder.use Faraday::Request::UrlEncoded
|
700
784
|
builder.adapter :test do |stub|
|
701
785
|
stub.get("/users/2") { [200, {}, { id: 2, name: "Lindsay Fünke", organization_id: 1 }.to_json] }
|
702
|
-
stub.get("/
|
786
|
+
stub.get("/organizations/1") { [200, {}, { id: 1, name: "Bluth Company" }.to_json] }
|
703
787
|
end
|
704
788
|
end
|
705
789
|
end
|