Skip to content

Commit 0629511

Browse files
committed
MWEB-1217: separated Defaultable#default from Finders#find
1 parent 8c42221 commit 0629511

File tree

4 files changed

+32
-35
lines changed

4 files changed

+32
-35
lines changed

lib/spark_api/models/defaultable.rb

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,19 @@ class << base
1919
module ClassMethods
2020

2121
def default(options = {})
22-
find(DEFAULT_ID, options)
22+
response = connection.get("/#{element_name}/default", options).first
23+
unless response.nil?
24+
response[:Id] = DEFAULT_ID if response[:Id].nil?
25+
new(response)
26+
end
2327
end
2428

2529
def find(*arguments)
26-
result = original_find(*arguments)
27-
if arguments.first == DEFAULT_ID && result != nil
28-
result.Id = DEFAULT_ID if result.Id.nil?
30+
if arguments.first == DEFAULT_ID
31+
default
32+
else
33+
original_find(*arguments)
2934
end
30-
result
3135
end
3236

3337
end

lib/spark_api/models/finders.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,7 @@ def find_every(options)
3737

3838
def find_single(scope, options)
3939
resp = connection.get("#{path}/#{scope}", options)
40-
unless resp.first.nil?
41-
new(resp.first)
42-
end
40+
new(resp.first)
4341
end
4442

4543
end

spec/unit/spark_api/models/defaultable_spec.rb

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,33 @@ class TestClass < Base
1414

1515
describe 'default' do
1616

17-
it 'calls find' do
18-
expect(TestClass).to receive(:find).with('default', {})
19-
TestClass.default
17+
it 'returns an instance of the class' do
18+
allow(TestClass).to receive(:connection).and_return(double(get: [{Name: 'foo'}]))
19+
expect(TestClass.default).to be_a TestClass
2020
end
21-
22-
end
23-
24-
describe 'find' do
2521

26-
it "adds the id 'default'" do
27-
allow(TestClass).to receive(:connection).and_return(double(get: [{Id: nil, Name: 'foo'}]))
28-
default = TestClass.find(TestClass::DEFAULT_ID)
29-
expect(default.Id).to eq 'default'
22+
it 'returns nil when there are no results' do
23+
allow(TestClass).to receive(:connection).and_return(double(get: []))
24+
expect(TestClass.default).to be nil
25+
end
26+
27+
it "assigns the default id to the instance if it doesn't have an id" do
28+
allow(TestClass).to receive(:connection).and_return(double(get: [{Name: 'foo'}]))
29+
expect(TestClass.default.Id).to eq TestClass::DEFAULT_ID
3030
end
3131

3232
it "doesn't override the id if one is present" do
3333
allow(TestClass).to receive(:connection).and_return(double(get: [{Id: '5', Name: 'foo'}]))
34-
expect(TestClass.find(TestClass::DEFAULT_ID).Id).to eq '5'
34+
expect(TestClass.default.Id).to eq '5'
35+
end
36+
37+
end
38+
39+
describe 'find' do
40+
41+
it "calls 'default' when given the default id" do
42+
expect(TestClass).to receive(:default)
43+
TestClass.find(TestClass::DEFAULT_ID)
3544
end
3645

3746
it "calls Finders.find when given a normal id" do
@@ -40,11 +49,6 @@ class TestClass < Base
4049
allow(TestClass).to receive(:connection).and_return(connection)
4150
TestClass.find('5', foo: true)
4251
end
43-
44-
it "returns nil when the original find method returns nil" do
45-
allow(TestClass).to receive(:original_find).and_return(nil)
46-
expect(TestClass.find(TestClass::DEFAULT_ID)).to be nil
47-
end
4852

4953
end
5054

spec/unit/spark_api/models/finders_spec.rb

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,6 @@ class MyResource < Base
4848
}.should raise_error(ArgumentError)
4949
end
5050

51-
context "when finding a single resource" do
52-
53-
it "returns nil when no results are found" do
54-
stub_api_get("/my_resource/no_results", 'no_results.json')
55-
expect(MyResource.find('no_results')).to be nil
56-
end
57-
58-
end
59-
6051
end
61-
52+
6253
end

0 commit comments

Comments
 (0)