lhs 4.1.0 → 4.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e27399738c34692f15a9ba1068981cf12443631e
4
- data.tar.gz: e8eaccb70ea546cefbe1257cf381710ca238efc3
3
+ metadata.gz: 9054af3b33bec8e693c84c84e44ba80845e4525c
4
+ data.tar.gz: 6ebd3acdaa73985d3f1845c92fe3cf57803c604f
5
5
  SHA512:
6
- metadata.gz: c8a1c670452d45d81ed4d107887f40911b20909a4c834877571ad1d2d2ea7192506fe5fd15dde441446bd544f679b625143af9d78882d790a069a5e336f9ead5
7
- data.tar.gz: 5f6a52abd26aa3521f1afeef73ab872b6f7d1a121d56a5f660aec54796c6c413f2694afe688ead9fade514c5cce0b87a5be809dbf5760942a4f1079662d567b8
6
+ metadata.gz: 51165a2c4256deb6cf82f445c8a597b7c1830a40edc1004239c32b34bf629bd5e81417590351e0f88159c5a60aebaf68f79199042ccffb8b80a078096879fe1e
7
+ data.tar.gz: ee0fe6d834cf6194276852903e7a33215fba61eb6b0b1715bea3da2b9a2c8478c465c32c8c13fb9371131c907d09d506bb7e20efcce5e32cb438498d7aba6d80
@@ -16,12 +16,14 @@ class LHS::Item < LHS::Proxy
16
16
  def save!
17
17
  record = _data.class
18
18
  data = _data._raw.dup
19
- url =
20
- if href.present?
21
- href
22
- else
23
- record.find_endpoint(data).compile(data)
24
- end
19
+ if href.present?
20
+ url = href
21
+ else
22
+ endpoint = record.find_endpoint(data)
23
+ url = endpoint.compile(data)
24
+ endpoint.remove_interpolated_params!(data)
25
+ end
26
+
25
27
  data = record.request(method: :post, url: url, body: data.to_json, headers: { 'Content-Type' => 'application/json' })
26
28
  _data.merge_raw!(data)
27
29
  true
@@ -7,19 +7,15 @@ class LHS::Record
7
7
 
8
8
  module ClassMethods
9
9
  def create(data = {})
10
- create!(data)
11
- rescue LHC::Error => e
12
- json = JSON.parse(data.to_json)
13
- data = LHS::Data.new(json, nil, self, e.response.request)
14
- item = LHS::Item.new(data)
15
- item.errors = LHS::Errors.new(e.response)
16
- data._record.new(LHS::Data.new(item, data))
10
+ record = new(data)
11
+ record.save
12
+ record
17
13
  end
18
14
 
19
15
  def create!(data = {})
20
- url = compute_url!(data)
21
- data = request(url: url, method: :post, body: data.to_json, headers: { 'Content-Type' => 'application/json' })
22
- data._record.new(data)
16
+ record = new(data)
17
+ record.save!
18
+ record
23
19
  end
24
20
  end
25
21
  end
@@ -1,3 +1,3 @@
1
1
  module LHS
2
- VERSION = "4.1.0"
2
+ VERSION = "4.2.0"
3
3
  end
@@ -76,5 +76,59 @@ describe LHS::Record do
76
76
  }).to raise_error
77
77
  end
78
78
  end
79
+
80
+ context 'custom setters' do
81
+ before(:each) do
82
+ class Feedback
83
+ def ratings=(ratings)
84
+ _raw[:ratings] = ratings.map { |k, v| { name: k.to_s, value: v } }
85
+ end
86
+ end
87
+
88
+ stub_request(:post, "#{datastore}/feedbacks")
89
+ .with(body: { ratings: converted_ratings }.to_json)
90
+ .to_return(status: 200, body: { ratings: converted_ratings }.to_json)
91
+ end
92
+
93
+ let(:ratings) do
94
+ {
95
+ a: 1,
96
+ b: 2
97
+ }
98
+ end
99
+
100
+ let(:converted_ratings) do
101
+ [
102
+ { name: 'a', value: 1 },
103
+ { name: 'b', value: 2 }
104
+ ]
105
+ end
106
+
107
+ it 'are used by create' do
108
+ feedback = Feedback.create(ratings: ratings)
109
+ expect(feedback.ratings.raw).to eq(converted_ratings)
110
+ end
111
+
112
+ it 'can be used directly to change raw data' do
113
+ feedback = Feedback.create(ratings: ratings)
114
+ feedback.ratings = { z: 3 }
115
+ expect(feedback.ratings.first.name).to eq 'z'
116
+ end
117
+
118
+ context 'and custom getters' do
119
+ before(:each) do
120
+ class Feedback
121
+ def ratings
122
+ Hash[_raw[:ratings].map { |r| [r[:name].to_sym, r[:value]] }]
123
+ end
124
+ end
125
+ end
126
+
127
+ it 'uses custom getters to show data for exploration' do
128
+ feedback = Feedback.create(ratings: ratings)
129
+ expect(feedback.ratings).to eq(ratings)
130
+ end
131
+ end
132
+ end
79
133
  end
80
134
  end
@@ -6,15 +6,15 @@ describe LHS::Record do
6
6
 
7
7
  before(:each) do
8
8
  LHC.config.placeholder('datastore', datastore)
9
- class Feedback < LHS::Record
9
+ class Rating < LHS::Record
10
10
  endpoint ':datastore/content-ads/:campaign_id/feedbacks'
11
11
  endpoint ':datastore/feedbacks'
12
12
  end
13
13
  end
14
14
 
15
15
  it 'builds a new item from scratch (like build)' do
16
- feedback = Feedback.new recommended: true
17
- expect(feedback).to be_kind_of Feedback
16
+ feedback = Rating.new recommended: true
17
+ expect(feedback).to be_kind_of Rating
18
18
  expect(feedback.recommended).to eq true
19
19
  stub_request(:post, "http://local.ch/v2/feedbacks")
20
20
  .with(body: "{\"recommended\":true}")
@@ -22,7 +22,7 @@ describe LHS::Record do
22
22
  end
23
23
 
24
24
  it 'builds new items also with keys containing dashes' do
25
- feedback = Feedback.new('some-key' => [])
25
+ feedback = Rating.new('some-key' => [])
26
26
  expect(feedback._raw[:'some-key']).to eq([])
27
27
  end
28
28
 
@@ -47,7 +47,7 @@ describe LHS::Record do
47
47
 
48
48
  context 'custom setters' do
49
49
  before(:each) do
50
- class Feedback
50
+ class Rating
51
51
  def ratings=(ratings)
52
52
  _raw[:ratings] = ratings.map { |k, v| { name: k, value: v } }
53
53
  end
@@ -55,19 +55,19 @@ describe LHS::Record do
55
55
  end
56
56
 
57
57
  it 'are used by initializer' do
58
- feedback = Feedback.new(ratings: { a: 1, b: 2 })
58
+ feedback = Rating.new(ratings: { a: 1, b: 2 })
59
59
  expect(feedback.ratings.raw).to eq([{ name: :a, value: 1 }, { name: :b, value: 2 }])
60
60
  end
61
61
 
62
62
  it 'can be used directly to change raw data' do
63
- feedback = Feedback.new(ratings: { a: 1 })
63
+ feedback = Rating.new(ratings: { a: 1 })
64
64
  feedback.ratings = { z: 3 }
65
65
  expect(feedback.ratings.first.name).to eq :z
66
66
  end
67
67
 
68
68
  context 'and custom getters' do
69
69
  before(:each) do
70
- class Feedback
70
+ class Rating
71
71
  def ratings
72
72
  Hash[_raw[:ratings].map { |r| [r[:name], r[:value]] }]
73
73
  end
@@ -75,7 +75,7 @@ describe LHS::Record do
75
75
  end
76
76
 
77
77
  it 'uses custom getters to show data for exploration' do
78
- feedback = Feedback.new(ratings: { a: 1, b: 2 })
78
+ feedback = Rating.new(ratings: { a: 1, b: 2 })
79
79
  expect(feedback.ratings).to eq(a: 1, b: 2)
80
80
  end
81
81
  end
@@ -21,13 +21,8 @@ describe LHS::Record do
21
21
 
22
22
  context 'for saved record' do
23
23
  let(:campaign_id) { 'aaa' }
24
- let(:parameters) do
25
- {
26
- recommended: true,
27
- campaign_id: campaign_id
28
- }
29
- end
30
- subject { Feedback.new(parameters) }
24
+ let(:parameters) { { recommended: true } }
25
+ subject { Feedback.new(parameters.merge(campaign_id: campaign_id)) }
31
26
 
32
27
  before do
33
28
  stub_request(:post, "#{datastore}/content-ads/#{campaign_id}/feedbacks")
@@ -0,0 +1,28 @@
1
+ require 'rails_helper'
2
+
3
+ describe LHS::Record do
4
+ context 'save!' do
5
+ context 'without href' do
6
+ before do
7
+ LHC.config.placeholder('datastore', datastore)
8
+ class Feedback < LHS::Record
9
+ endpoint ':datastore/content-ads/:campaign_id/feedbacks'
10
+ end
11
+ end
12
+
13
+ let(:datastore) { 'http://local.ch/v2' }
14
+ let(:campaign_id) { 12345 }
15
+ let(:object) { { recommended: true } }
16
+ let(:item) { Feedback.new(object.merge(campaign_id: campaign_id)) }
17
+
18
+ it 'removes params used to compute url from send data' do
19
+ datastore_request = stub_request(:post, "#{datastore}/content-ads/#{campaign_id}/feedbacks")
20
+ .with(body: object.to_json)
21
+ .to_return(status: 200, body: object.to_json)
22
+
23
+ item.save!
24
+ expect(datastore_request).to have_been_made.once
25
+ end
26
+ end
27
+ end
28
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lhs
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.0
4
+ version: 4.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - https://github.com/local-ch/lhs/graphs/contributors
@@ -295,6 +295,7 @@ files:
295
295
  - spec/record/pagination_spec.rb
296
296
  - spec/record/persisted_spec.rb
297
297
  - spec/record/request_spec.rb
298
+ - spec/record/save_spec.rb
298
299
  - spec/record/select_spec.rb
299
300
  - spec/record/to_json_spec.rb
300
301
  - spec/record/where_spec.rb
@@ -419,6 +420,7 @@ test_files:
419
420
  - spec/record/pagination_spec.rb
420
421
  - spec/record/persisted_spec.rb
421
422
  - spec/record/request_spec.rb
423
+ - spec/record/save_spec.rb
422
424
  - spec/record/select_spec.rb
423
425
  - spec/record/to_json_spec.rb
424
426
  - spec/record/where_spec.rb