lhs 2.2.2 → 3.0.0
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/README.md +296 -30
- data/lhs.gemspec +3 -3
- data/lib/lhs.rb +0 -7
- data/lib/lhs/collection.rb +4 -4
- data/lib/lhs/concerns/item/destroy.rb +2 -2
- data/lib/lhs/concerns/item/save.rb +3 -3
- data/lib/lhs/concerns/item/update.rb +2 -2
- data/lib/lhs/concerns/item/validation.rb +4 -5
- data/lib/lhs/concerns/{service → record}/all.rb +2 -2
- data/lib/lhs/concerns/{service → record}/batch.rb +3 -3
- data/lib/lhs/concerns/{service → record}/create.rb +4 -3
- data/lib/lhs/concerns/{service → record}/endpoints.rb +6 -6
- data/lib/lhs/concerns/{service → record}/find.rb +3 -2
- data/lib/lhs/concerns/{service → record}/find_by.rb +3 -2
- data/lib/lhs/concerns/{service → record}/first.rb +1 -1
- data/lib/lhs/concerns/{service → record}/includes.rb +4 -2
- data/lib/lhs/concerns/{service → record}/mapping.rb +1 -1
- data/lib/lhs/concerns/{service → record}/model.rb +1 -1
- data/lib/lhs/concerns/{service → record}/request.rb +12 -12
- data/lib/lhs/concerns/{service → record}/where.rb +3 -2
- data/lib/lhs/data.rb +25 -53
- data/lib/lhs/endpoint.rb +2 -2
- data/lib/lhs/item.rb +8 -2
- data/lib/lhs/proxy.rb +2 -2
- data/lib/lhs/record.rb +42 -0
- data/lib/lhs/version.rb +1 -1
- data/spec/collection/meta_data_spec.rb +2 -2
- data/spec/collection/without_object_items_spec.rb +1 -1
- data/spec/data/item_spec.rb +2 -14
- data/spec/data/merge_spec.rb +3 -3
- data/spec/data/raw_spec.rb +1 -1
- data/spec/data/respond_to_spec.rb +3 -3
- data/spec/data/root_spec.rb +2 -2
- data/spec/data/to_json_spec.rb +2 -2
- data/spec/endpoint/for_url_spec.rb +1 -1
- data/spec/item/delegate_spec.rb +2 -2
- data/spec/item/destroy_spec.rb +4 -4
- data/spec/item/errors_spec.rb +4 -4
- data/spec/item/getter_spec.rb +2 -2
- data/spec/item/internal_data_structure_spec.rb +1 -1
- data/spec/item/save_spec.rb +3 -4
- data/spec/item/setter_spec.rb +2 -2
- data/spec/item/update_spec.rb +2 -2
- data/spec/item/validation_spec.rb +47 -75
- data/spec/proxy/load_spec.rb +2 -2
- data/spec/{service → record}/all_spec.rb +7 -7
- data/spec/{service → record}/build_spec.rb +5 -4
- data/spec/{service → record}/create_spec.rb +6 -5
- data/spec/{service → record}/creation_failed_spec.rb +6 -5
- data/spec/record/definitions_spec.rb +29 -0
- data/spec/{service → record}/endpoint_misconfiguration_spec.rb +3 -3
- data/spec/{service → record}/endpoint_options_spec.rb +4 -4
- data/spec/{service → record}/endpoints_spec.rb +15 -15
- data/spec/{service → record}/find_by_spec.rb +8 -8
- data/spec/{service → record}/find_each_spec.rb +3 -3
- data/spec/{service → record}/find_in_batches_spec.rb +6 -6
- data/spec/{service → record}/find_spec.rb +10 -9
- data/spec/{service → record}/first_spec.rb +7 -6
- data/spec/{service → record}/includes_spec.rb +7 -7
- data/spec/{service → record}/mapping_spec.rb +27 -16
- data/spec/{service → record}/model_name_spec.rb +2 -2
- data/spec/{service → record}/new_spec.rb +4 -3
- data/spec/{service → record}/request_spec.rb +3 -3
- data/spec/record/where_spec.rb +34 -0
- data/spec/support/cleanup_endpoints.rb +1 -1
- data/spec/support/{cleanup_services.rb → cleanup_records.rb} +2 -2
- metadata +60 -67
- data/docs/collections.md +0 -28
- data/docs/data.md +0 -39
- data/docs/items.md +0 -79
- data/docs/service.jpg +0 -0
- data/docs/service.pdf +2 -650
- data/docs/services.md +0 -266
- data/lib/lhs/concerns/service/build.rb +0 -19
- data/lib/lhs/service.rb +0 -18
- data/spec/data/pagination_spec.rb +0 -60
- data/spec/dummy/README.rdoc +0 -28
- data/spec/service/where_spec.rb +0 -33
data/spec/proxy/load_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require 'rails_helper'
|
|
3
3
|
describe LHS::Proxy do
|
4
4
|
|
5
5
|
before(:each) do
|
6
|
-
class
|
6
|
+
class Record < LHS::Record
|
7
7
|
endpoint ':datastore/v2/feedbacks'
|
8
8
|
end
|
9
9
|
end
|
@@ -13,7 +13,7 @@ describe LHS::Proxy do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
let(:data) do
|
16
|
-
LHS::Data.new(json, nil,
|
16
|
+
LHS::Data.new(json, nil, Record)
|
17
17
|
end
|
18
18
|
|
19
19
|
let(:item) do
|
@@ -6,7 +6,7 @@ describe LHS::Collection do
|
|
6
6
|
|
7
7
|
before(:each) do
|
8
8
|
LHC.config.placeholder('datastore', datastore)
|
9
|
-
class
|
9
|
+
class Record < LHS::Record
|
10
10
|
endpoint ':datastore/:campaign_id/feedbacks'
|
11
11
|
endpoint ':datastore/feedbacks'
|
12
12
|
end
|
@@ -21,8 +21,8 @@ describe LHS::Collection do
|
|
21
21
|
.to_return(status: 200, body: {items: (101..200).to_a, total: 300, limit: 100, offset: 101}.to_json)
|
22
22
|
stub_request(:get, "#{datastore}/feedbacks?limit=100&offset=201")
|
23
23
|
.to_return(status: 200, body: {items: (201..300).to_a, total: 300, limit: 100, offset: 201}.to_json)
|
24
|
-
all =
|
25
|
-
expect(all).to be_kind_of
|
24
|
+
all = Record.all
|
25
|
+
expect(all).to be_kind_of Record
|
26
26
|
expect(all._proxy).to be_kind_of LHS::Collection
|
27
27
|
expect(all.count).to eq 300
|
28
28
|
expect(all.last).to eq 300
|
@@ -35,8 +35,8 @@ describe LHS::Collection do
|
|
35
35
|
.to_return(status: 200, body: {items: (101..200).to_a, total: 300, offset: 101}.to_json)
|
36
36
|
stub_request(:get, "#{datastore}/feedbacks?limit=100&offset=201")
|
37
37
|
.to_return(status: 200, body: {items: (201..300).to_a, total: 300, offset: 201}.to_json)
|
38
|
-
all =
|
39
|
-
expect(all).to be_kind_of
|
38
|
+
all = Record.all
|
39
|
+
expect(all).to be_kind_of Record
|
40
40
|
expect(all._proxy).to be_kind_of LHS::Collection
|
41
41
|
expect(all.count).to eq 300
|
42
42
|
expect(all.last).to eq 300
|
@@ -45,8 +45,8 @@ describe LHS::Collection do
|
|
45
45
|
it 'also works when there is no item in the first response' do
|
46
46
|
stub_request(:get, "#{datastore}/feedbacks?limit=100")
|
47
47
|
.to_return(status: 200, body: {items: [], total: 300, offset: 0}.to_json)
|
48
|
-
all =
|
49
|
-
expect(all).to be_kind_of
|
48
|
+
all = Record.all
|
49
|
+
expect(all).to be_kind_of Record
|
50
50
|
expect(all._proxy).to be_kind_of LHS::Collection
|
51
51
|
expect(all.count).to eq 0
|
52
52
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'rails_helper'
|
2
2
|
|
3
|
-
describe LHS::
|
3
|
+
describe LHS::Record do
|
4
4
|
|
5
5
|
context 'build' do
|
6
6
|
|
@@ -8,7 +8,7 @@ describe LHS::Service do
|
|
8
8
|
|
9
9
|
before(:each) do
|
10
10
|
LHC.config.placeholder('datastore', datastore)
|
11
|
-
class Feedback < LHS::
|
11
|
+
class Feedback < LHS::Record
|
12
12
|
endpoint ':datastore/content-ads/:campaign_id/feedbacks'
|
13
13
|
endpoint ':datastore/feedbacks'
|
14
14
|
end
|
@@ -16,9 +16,10 @@ describe LHS::Service do
|
|
16
16
|
|
17
17
|
it 'builds a new item from scratch' do
|
18
18
|
feedback = Feedback.build recommended: true
|
19
|
+
expect(feedback).to be_kind_of Feedback
|
19
20
|
expect(feedback.recommended).to eq true
|
20
|
-
stub_request(:post,
|
21
|
-
|
21
|
+
stub_request(:post, 'http://local.ch/v2/feedbacks')
|
22
|
+
.with(body: "{\"recommended\":true}")
|
22
23
|
feedback.save
|
23
24
|
end
|
24
25
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'rails_helper'
|
2
2
|
|
3
|
-
describe LHS::
|
3
|
+
describe LHS::Record do
|
4
4
|
|
5
5
|
context 'create' do
|
6
6
|
|
@@ -8,7 +8,7 @@ describe LHS::Service do
|
|
8
8
|
|
9
9
|
before(:each) do
|
10
10
|
LHC.config.placeholder('datastore', datastore)
|
11
|
-
class Feedback < LHS::
|
11
|
+
class Feedback < LHS::Record
|
12
12
|
endpoint ':datastore/content-ads/:campaign_id/feedbacks'
|
13
13
|
endpoint ':datastore/feedbacks'
|
14
14
|
end
|
@@ -23,9 +23,10 @@ describe LHS::Service do
|
|
23
23
|
|
24
24
|
it 'creates new record on the backend' do
|
25
25
|
stub_request(:post, "#{datastore}/feedbacks")
|
26
|
-
|
27
|
-
|
26
|
+
.with(body: object.to_json)
|
27
|
+
.to_return(status: 200, body: object.to_json)
|
28
28
|
record = Feedback.create(object)
|
29
|
+
expect(record).to be_kind_of Feedback
|
29
30
|
expect(record.recommended).to eq true
|
30
31
|
expect(record.errors).to eq nil
|
31
32
|
end
|
@@ -64,7 +65,7 @@ describe LHS::Service do
|
|
64
65
|
|
65
66
|
it 'provides errors accessor on the record when creation failed using create' do
|
66
67
|
stub_request(:post, "#{datastore}/content-ads/12345/feedbacks")
|
67
|
-
|
68
|
+
.to_return(status: 400, body: creation_error.to_json)
|
68
69
|
feedback = Feedback.create(object.merge(campaign_id: '12345'))
|
69
70
|
expect(feedback.errors).to be_kind_of LHS::Errors
|
70
71
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'rails_helper'
|
2
2
|
|
3
|
-
describe LHS::
|
3
|
+
describe LHS::Record do
|
4
4
|
|
5
5
|
context 'creation failed' do
|
6
6
|
|
@@ -8,7 +8,7 @@ describe LHS::Service do
|
|
8
8
|
|
9
9
|
before(:each) do
|
10
10
|
LHC.config.placeholder(:datastore, datastore)
|
11
|
-
class
|
11
|
+
class Record < LHS::Record
|
12
12
|
endpoint ':datastore/:campaign_id/feedbacks'
|
13
13
|
endpoint ':datastore/feedbacks'
|
14
14
|
end
|
@@ -34,8 +34,9 @@ describe LHS::Service do
|
|
34
34
|
|
35
35
|
it 'provides errors when creation failed' do
|
36
36
|
stub_request(:post, "#{datastore}/feedbacks")
|
37
|
-
|
38
|
-
record =
|
37
|
+
.to_return(status: 400, body: creation_error.to_json)
|
38
|
+
record = Record.create(name: 'Steve')
|
39
|
+
expect(record).to be_kind_of Record
|
39
40
|
expect(record.errors).to be
|
40
41
|
expect(record.name).to eq 'Steve'
|
41
42
|
expect(record.errors.include?(:ratings)).to eq true
|
@@ -48,7 +49,7 @@ describe LHS::Service do
|
|
48
49
|
it 'doesnt fail when no fields are provided by the backend' do
|
49
50
|
stub_request(:post, "#{datastore}/feedbacks")
|
50
51
|
.to_return(status: 400, body: {}.to_json)
|
51
|
-
|
52
|
+
Record.create(name: 'Steve')
|
52
53
|
end
|
53
54
|
end
|
54
55
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
describe LHS::Record do
|
4
|
+
|
5
|
+
context 'definitions' do
|
6
|
+
|
7
|
+
let(:datastore) { 'http://local.ch/v2' }
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
LHC.config.placeholder('datastore', datastore)
|
11
|
+
class LocalEntry < LHS::Record
|
12
|
+
endpoint ':datastore/local-entries'
|
13
|
+
endpoint ':datastore/local-entries/:id'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'allows mappings in all functions/defitions' do
|
18
|
+
class LocalEntry < LHS::Record
|
19
|
+
def name
|
20
|
+
addresses.first.business.identities.first.name
|
21
|
+
end
|
22
|
+
end
|
23
|
+
stub_request(:get, "#{datastore}/local-entries/1")
|
24
|
+
.to_return(status: 200, body: {addresses: [{business: {identities: [{name: 'Löwenzorn'}]}}]}.to_json)
|
25
|
+
entry = LocalEntry.find(1)
|
26
|
+
expect(entry.name).to eq 'Löwenzorn'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'rails_helper'
|
2
2
|
|
3
|
-
describe LHS::
|
3
|
+
describe LHS::Record do
|
4
4
|
|
5
5
|
context 'misconfiguration of endpoints' do
|
6
6
|
|
7
7
|
it 'fails trying to add clashing endpoints' do
|
8
8
|
expect(
|
9
9
|
->{
|
10
|
-
class
|
10
|
+
class Record < LHS::Record
|
11
11
|
endpoint ':datastore/v2/feedbacks'
|
12
12
|
endpoint ':datastore/v2/reviews'
|
13
13
|
end
|
@@ -15,7 +15,7 @@ describe LHS::Service do
|
|
15
15
|
).to raise_error('Clashing endpoints.')
|
16
16
|
expect(
|
17
17
|
->{
|
18
|
-
class
|
18
|
+
class Record < LHS::Record
|
19
19
|
endpoint ':datastore/v2/:campaign_id/feedbacks'
|
20
20
|
endpoint ':datastore/v2/:campaign_id/reviews'
|
21
21
|
end
|
@@ -1,23 +1,23 @@
|
|
1
1
|
require 'rails_helper'
|
2
2
|
|
3
|
-
describe LHS::
|
3
|
+
describe LHS::Record do
|
4
4
|
|
5
5
|
context 'set options for an endpoint' do
|
6
6
|
|
7
7
|
before(:each) do
|
8
|
-
class
|
8
|
+
class Record < LHS::Record
|
9
9
|
endpoint 'backend/v2/feedbacks/:id', cache_expires_in: 1.day, retry: 2, cache: true
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'stores endpoints with options' do
|
14
|
-
expect(
|
14
|
+
expect(Record.endpoints[0].options).to eq(cache_expires_in: 86400, retry: 2, cache: true)
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'uses the options that are configured for an endpoint' do
|
18
18
|
expect(LHC).to receive(:request).with(cache_expires_in: 1.day, retry: 2, cache: true, url: 'backend/v2/feedbacks/1').and_call_original
|
19
19
|
stub_request(:get, "http://backend/v2/feedbacks/1").to_return(status: 200)
|
20
|
-
|
20
|
+
Record.find(1)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'rails_helper'
|
2
2
|
|
3
|
-
describe LHS::
|
3
|
+
describe LHS::Record do
|
4
4
|
|
5
5
|
context 'endpoints' do
|
6
6
|
|
@@ -8,7 +8,7 @@ describe LHS::Service do
|
|
8
8
|
|
9
9
|
before(:each) do
|
10
10
|
LHC.config.placeholder(:datastore, datastore)
|
11
|
-
class
|
11
|
+
class Record < LHS::Record
|
12
12
|
endpoint ':datastore/entries/:entry_id/content-ads/:campaign_id/feedbacks'
|
13
13
|
endpoint ':datastore/:campaign_id/feedbacks'
|
14
14
|
endpoint ':datastore/feedbacks'
|
@@ -16,37 +16,37 @@ describe LHS::Service do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'stores all the endpoints by url' do
|
19
|
-
expect(LHS::
|
20
|
-
expect(LHS::
|
21
|
-
expect(LHS::
|
19
|
+
expect(LHS::Record::Endpoints.all[':datastore/entries/:entry_id/content-ads/:campaign_id/feedbacks']).to be
|
20
|
+
expect(LHS::Record::Endpoints.all[':datastore/:campaign_id/feedbacks']).to be
|
21
|
+
expect(LHS::Record::Endpoints.all[':datastore/feedbacks']).to be
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'stores the endpoints of the service' do
|
25
|
-
expect(
|
26
|
-
expect(
|
27
|
-
expect(
|
28
|
-
expect(
|
25
|
+
expect(Record.endpoints.count).to eq 3
|
26
|
+
expect(Record.endpoints[0].url).to eq ':datastore/entries/:entry_id/content-ads/:campaign_id/feedbacks'
|
27
|
+
expect(Record.endpoints[1].url).to eq ':datastore/:campaign_id/feedbacks'
|
28
|
+
expect(Record.endpoints[2].url).to eq ':datastore/feedbacks'
|
29
29
|
end
|
30
30
|
|
31
31
|
it 'finds the endpoint by the one with the most route param hits' do
|
32
32
|
expect(
|
33
|
-
|
33
|
+
Record.find_endpoint(campaign_id: '12345').url
|
34
34
|
).to eq ':datastore/:campaign_id/feedbacks'
|
35
35
|
expect(
|
36
|
-
|
36
|
+
Record.find_endpoint(campaign_id: '12345', entry_id: '123').url
|
37
37
|
).to eq ':datastore/entries/:entry_id/content-ads/:campaign_id/feedbacks'
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'finds the base endpoint (endpoint with least amount of route params)' do
|
41
41
|
expect(
|
42
|
-
|
42
|
+
Record.find_endpoint.url
|
43
43
|
).to eq ':datastore/feedbacks'
|
44
44
|
end
|
45
45
|
|
46
46
|
context 'compute url from endpoint' do
|
47
47
|
|
48
48
|
before(:each) do
|
49
|
-
class Feedback < LHS::
|
49
|
+
class Feedback < LHS::Record
|
50
50
|
endpoint ':datastore/feedbacks'
|
51
51
|
endpoint ':datastore/feedbacks/:id'
|
52
52
|
end
|
@@ -61,7 +61,7 @@ describe LHS::Service do
|
|
61
61
|
context 'unsorted endpoints' do
|
62
62
|
|
63
63
|
before(:each) do
|
64
|
-
class
|
64
|
+
class AnotherRecord < LHS::Record
|
65
65
|
endpoint ':datastore/feedbacks'
|
66
66
|
endpoint ':datastore/:campaign_id/feedbacks'
|
67
67
|
endpoint ':datastore/entries/:entry_id/content-ads/:campaign_id/feedbacks'
|
@@ -70,7 +70,7 @@ describe LHS::Service do
|
|
70
70
|
|
71
71
|
it 'sorts endpoints before trying to find the best endpoint' do
|
72
72
|
stub_request(:get, "#{datastore}/entries/123/content-ads/123/feedbacks").to_return(status: 200)
|
73
|
-
|
73
|
+
AnotherRecord.where(campaign_id: 123, entry_id: 123)
|
74
74
|
end
|
75
75
|
|
76
76
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'rails_helper'
|
2
2
|
|
3
|
-
describe LHS::
|
3
|
+
describe LHS::Record do
|
4
4
|
let(:datastore) { 'http://local.ch/v2' }
|
5
5
|
|
6
6
|
before(:each) do
|
7
7
|
LHC.config.placeholder(:datastore, datastore)
|
8
|
-
class
|
8
|
+
class Record < LHS::Record
|
9
9
|
endpoint ':datastore/content-ads/:campaign_id/feedbacks'
|
10
10
|
endpoint ':datastore/content-ads/:campaign_id/feedbacks/:id'
|
11
11
|
endpoint ':datastore/feedbacks'
|
@@ -17,16 +17,16 @@ describe LHS::Service do
|
|
17
17
|
it 'finds a single record' do
|
18
18
|
stub_request(:get, "#{datastore}/feedbacks/z12f-3asm3ngals?limit=1")
|
19
19
|
.to_return(status: 200, body: load_json(:feedback))
|
20
|
-
|
21
|
-
|
22
|
-
).to be_kind_of
|
20
|
+
record = Record.find_by(id: 'z12f-3asm3ngals')
|
21
|
+
expect(record.source_id).to be_kind_of String
|
22
|
+
expect(record).to be_kind_of Record
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'returns nil if no record was found' do
|
26
26
|
stub_request(:get, "#{datastore}/feedbacks/something-inexistent?limit=1")
|
27
27
|
.to_return(status: 404)
|
28
28
|
expect(
|
29
|
-
|
29
|
+
Record.find_by(id: 'something-inexistent')
|
30
30
|
).to eq nil
|
31
31
|
end
|
32
32
|
|
@@ -35,7 +35,7 @@ describe LHS::Service do
|
|
35
35
|
stub_request(:get, "#{datastore}/feedbacks?has_reviews=true&limit=1")
|
36
36
|
.to_return(status: 200, body: json)
|
37
37
|
expect(
|
38
|
-
|
38
|
+
Record.find_by(has_reviews: true).id
|
39
39
|
).to eq json['items'].first['id']
|
40
40
|
end
|
41
41
|
end
|
@@ -44,7 +44,7 @@ describe LHS::Service do
|
|
44
44
|
it 'raises if nothing was found with parameters' do
|
45
45
|
stub_request(:get, "#{datastore}/feedbacks?has_reviews=true&limit=1")
|
46
46
|
.to_return(status: 200, body: { items: [] }.to_json)
|
47
|
-
expect {
|
47
|
+
expect { Record.find_by!(has_reviews: true) }
|
48
48
|
.to raise_error LHC::NotFound
|
49
49
|
end
|
50
50
|
end
|
@@ -20,7 +20,7 @@ describe LHS::Collection do
|
|
20
20
|
|
21
21
|
before(:each) do
|
22
22
|
LHC.config.placeholder('datastore', datastore)
|
23
|
-
class
|
23
|
+
class Record < LHS::Record
|
24
24
|
endpoint ':datastore/:campaign_id/feedbacks'
|
25
25
|
endpoint ':datastore/feedbacks'
|
26
26
|
end
|
@@ -35,10 +35,10 @@ describe LHS::Collection do
|
|
35
35
|
stub_request(:get, "#{datastore}/feedbacks?limit=100&offset=301").to_return(status: 200, body: api_response((301..400).to_a, 301))
|
36
36
|
stub_request(:get, "#{datastore}/feedbacks?limit=100&offset=401").to_return(status: 200, body: api_response((401..total).to_a, 401))
|
37
37
|
count = 0
|
38
|
-
|
38
|
+
Record.find_each do |record|
|
39
39
|
count += 1
|
40
40
|
expect(record.id).to eq(count)
|
41
|
-
expect(record).to be_kind_of
|
41
|
+
expect(record).to be_kind_of Record
|
42
42
|
expect(record._proxy).to be_kind_of LHS::Item
|
43
43
|
end
|
44
44
|
expect(count).to eq total
|
@@ -20,7 +20,7 @@ describe LHS::Collection do
|
|
20
20
|
|
21
21
|
before(:each) do
|
22
22
|
LHC.config.placeholder('datastore', datastore)
|
23
|
-
class
|
23
|
+
class Record < LHS::Record
|
24
24
|
endpoint ':datastore/:campaign_id/feedbacks'
|
25
25
|
endpoint ':datastore/feedbacks'
|
26
26
|
end
|
@@ -35,9 +35,9 @@ describe LHS::Collection do
|
|
35
35
|
stub_request(:get, "#{datastore}/feedbacks?limit=100&offset=301").to_return(status: 200, body: api_response((301..400).to_a, 301))
|
36
36
|
stub_request(:get, "#{datastore}/feedbacks?limit=100&offset=401").to_return(status: 200, body: api_response((401..total).to_a, 401))
|
37
37
|
count = 0
|
38
|
-
|
38
|
+
Record.find_in_batches do |records|
|
39
39
|
count += records.count
|
40
|
-
expect(records).to be_kind_of
|
40
|
+
expect(records).to be_kind_of Record
|
41
41
|
expect(records._proxy).to be_kind_of LHS::Collection
|
42
42
|
end
|
43
43
|
expect(count).to eq total
|
@@ -50,9 +50,9 @@ describe LHS::Collection do
|
|
50
50
|
stub_request(:get, "#{datastore}/feedbacks?limit=100&offset=301").to_return(status: 200, body: api_response((301..400).to_a, 301))
|
51
51
|
stub_request(:get, "#{datastore}/feedbacks?limit=100&offset=401").to_return(status: 200, body: api_response((401..total).to_a, 401))
|
52
52
|
count = 0
|
53
|
-
|
53
|
+
Record.find_in_batches(batch_size: 230) do |records|
|
54
54
|
count += records.count
|
55
|
-
expect(records).to be_kind_of
|
55
|
+
expect(records).to be_kind_of Record
|
56
56
|
expect(records._proxy).to be_kind_of LHS::Collection
|
57
57
|
end
|
58
58
|
expect(count).to eq total
|
@@ -60,7 +60,7 @@ describe LHS::Collection do
|
|
60
60
|
|
61
61
|
it 'forwards offset' do
|
62
62
|
stub_request(:get, "#{datastore}/feedbacks?limit=100&offset=401").to_return(status: 200, body: api_response((401..total).to_a, 401))
|
63
|
-
|
63
|
+
Record.find_in_batches(start: 401) do |records|
|
64
64
|
expect(records.count).to eq(total-400)
|
65
65
|
end
|
66
66
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'rails_helper'
|
2
2
|
|
3
|
-
describe LHS::
|
3
|
+
describe LHS::Record do
|
4
4
|
|
5
5
|
let(:datastore) { 'http://local.ch/v2' }
|
6
6
|
|
7
7
|
before(:each) do
|
8
8
|
LHC.config.placeholder(:datastore, datastore)
|
9
|
-
class
|
9
|
+
class Record < LHS::Record
|
10
10
|
endpoint ':datastore/content-ads/:campaign_id/feedbacks'
|
11
11
|
endpoint ':datastore/content-ads/:campaign_id/feedbacks/:id'
|
12
12
|
endpoint ':datastore/feedbacks'
|
@@ -19,20 +19,21 @@ describe LHS::Service do
|
|
19
19
|
it 'finds a single unique record' do
|
20
20
|
stub_request(:get, "#{datastore}/feedbacks/z12f-3asm3ngals").
|
21
21
|
to_return(status: 200, body: load_json(:feedback))
|
22
|
-
record =
|
22
|
+
record = Record.find('z12f-3asm3ngals')
|
23
|
+
expect(record).to be_kind_of Record
|
23
24
|
expect(record.source_id).to be_kind_of String
|
24
25
|
end
|
25
26
|
|
26
27
|
it 'raises if nothing was found' do
|
27
28
|
stub_request(:get, "#{datastore}/feedbacks/not-existing").
|
28
29
|
to_return(status: 404)
|
29
|
-
expect {
|
30
|
+
expect { Record.find('not-existing') }.to raise_error LHC::NotFound
|
30
31
|
end
|
31
32
|
|
32
33
|
it 'finds unique item by providing parameters' do
|
33
34
|
stub_request(:get, "#{datastore}/content-ads/123/feedbacks/123")
|
34
35
|
.to_return(body: "{}")
|
35
|
-
data =
|
36
|
+
data = Record.find(campaign_id: '123', id: '123')
|
36
37
|
expect(data._proxy).to be_kind_of LHS::Item
|
37
38
|
end
|
38
39
|
|
@@ -41,7 +42,7 @@ describe LHS::Service do
|
|
41
42
|
data['items'] = [data['items'].first]
|
42
43
|
stub_request(:get, "#{datastore}/content-ads/123/feedbacks/123")
|
43
44
|
.to_return(body: data.to_json)
|
44
|
-
data =
|
45
|
+
data = Record.find(campaign_id: '123', id: '123')
|
45
46
|
expect(data._proxy).to be_kind_of LHS::Item
|
46
47
|
end
|
47
48
|
|
@@ -49,7 +50,7 @@ describe LHS::Service do
|
|
49
50
|
stub_request(:get, "#{datastore}/content-ads/123/feedbacks/123")
|
50
51
|
.to_return(body: load_json(:feedbacks))
|
51
52
|
expect(->{
|
52
|
-
|
53
|
+
Record.find(campaign_id: '123', id: '123')
|
53
54
|
}).to raise_error LHC::NotFound
|
54
55
|
end
|
55
56
|
|
@@ -59,14 +60,14 @@ describe LHS::Service do
|
|
59
60
|
stub_request(:get, "#{datastore}/content-ads/123/feedbacks/123")
|
60
61
|
.to_return(body: data.to_json)
|
61
62
|
expect(->{
|
62
|
-
|
63
|
+
Record.find(campaign_id: '123', id: '123')
|
63
64
|
}).to raise_error LHC::NotFound
|
64
65
|
end
|
65
66
|
|
66
67
|
it 'raises if nothing was found with parameters' do
|
67
68
|
stub_request(:get, "#{datastore}/content-ads/123/feedbacks/123")
|
68
69
|
.to_return(status: 404)
|
69
|
-
expect {
|
70
|
+
expect { Record.find(campaign_id: '123', id: '123') }.to raise_error LHC::NotFound
|
70
71
|
end
|
71
72
|
|
72
73
|
end
|