lhs 10.0.0 → 10.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +16 -11
- data/lib/lhs/concerns/record/find.rb +9 -2
- data/lib/lhs/version.rb +1 -1
- data/spec/record/find_spec.rb +17 -6
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60b6bf77d4c64a170300990ecc6d783a3a63ddae
|
4
|
+
data.tar.gz: 84dbd1de5a4ce2010b04db5af5e75412d34e6823
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a793212e6532c238884005e278bf02e3c996ea78e3d72cdc007494af88d726e20f007d95e4b0d6f52199833d4e5878543c5eda0210dbae73ba92e5c39441352
|
7
|
+
data.tar.gz: e4afed4db96bf107f4a76cb2003679ac2fd27b2c34f11541cfd381ad884f53e4f487b4770d6e0b640c614a2bf27a57c6bb22f120998cb5edbad3579d9e6b7539
|
data/README.md
CHANGED
@@ -77,12 +77,12 @@ Some endpoints could respond a plain list of links without any expanded data. Li
|
|
77
77
|
If you want to have LHS expand those items, use `expanded` as part of a Query-Chain:
|
78
78
|
|
79
79
|
```json
|
80
|
-
{
|
80
|
+
{
|
81
81
|
"items" : [
|
82
82
|
{"href": "http://local.ch/customer/1/accounts/1"},
|
83
83
|
{"href": "http://local.ch/customer/1/accounts/2"},
|
84
84
|
{"href": "http://local.ch/customer/1/accounts/3"}
|
85
|
-
]
|
85
|
+
]
|
86
86
|
}
|
87
87
|
end
|
88
88
|
```
|
@@ -99,7 +99,7 @@ You can also apply options to `expanded` in order to apply anything on the reque
|
|
99
99
|
|
100
100
|
## Chaining where statements
|
101
101
|
|
102
|
-
LHS supports chaining where statements.
|
102
|
+
LHS supports chaining where statements.
|
103
103
|
That allows you to chain multiple where-queries:
|
104
104
|
|
105
105
|
```ruby
|
@@ -170,7 +170,12 @@ record = Record.where(color: 'blue')
|
|
170
170
|
|
171
171
|
## Find single records
|
172
172
|
|
173
|
-
`find` finds a unique record by
|
173
|
+
`find` finds a unique record by unique identifier (usualy id or href).
|
174
|
+
|
175
|
+
```ruby
|
176
|
+
Record.find(123)
|
177
|
+
Record.find('https://api.example.com/records/123')
|
178
|
+
```
|
174
179
|
|
175
180
|
If no record is found an error is raised.
|
176
181
|
|
@@ -237,14 +242,14 @@ You can apply options to the request chain. Those options will be forwarded to t
|
|
237
242
|
```ruby
|
238
243
|
# Authenticate with OAuth
|
239
244
|
options = { auth: { bearer: '123456' } }
|
240
|
-
|
245
|
+
|
241
246
|
AuthenticatedRecord = Record.options(options)
|
242
|
-
|
247
|
+
|
243
248
|
blue_records = AuthenticatedRecord.where(color: 'blue')
|
244
249
|
active_records = AuthenticatedRecord.where(active: true)
|
245
250
|
|
246
251
|
AuthenticatedRecord.create(color: 'red')
|
247
|
-
|
252
|
+
|
248
253
|
record = AuthenticatedRecord.find(123)
|
249
254
|
# Find resolves the current query and applies all options from the chain
|
250
255
|
# All further requests are made from scratch and not based on the previous options
|
@@ -316,7 +321,7 @@ See [Validation](#Validation) for handling validation errors when creating recor
|
|
316
321
|
```ruby
|
317
322
|
class Review < LHS::Record
|
318
323
|
endpoint ':service/reviews'
|
319
|
-
end
|
324
|
+
end
|
320
325
|
|
321
326
|
class Comment < LHS::Record
|
322
327
|
endpoint ':service/reviews/:review_id/comments'
|
@@ -396,7 +401,7 @@ Build and persist new items from scratch are done either with `new` or it's alia
|
|
396
401
|
|
397
402
|
## Custom setters and getters
|
398
403
|
|
399
|
-
Sometimes it is the case that you want to have your custom getters and setters and convert the data to a processable format behind the scenes.
|
404
|
+
Sometimes it is the case that you want to have your custom getters and setters and convert the data to a processable format behind the scenes.
|
400
405
|
The initializer will now use custom setter if one is defined:
|
401
406
|
|
402
407
|
```ruby
|
@@ -889,9 +894,9 @@ Example.find(1) # GET records/1
|
|
889
894
|
|
890
895
|
## Testing: How to write tests when using LHS
|
891
896
|
|
892
|
-
[WebMock](https://github.com/bblimke/webmock)!
|
897
|
+
[WebMock](https://github.com/bblimke/webmock)!
|
893
898
|
|
894
|
-
Best practice is to let LHS fetch your records and Webmock to stub/mock endpoints responses.
|
899
|
+
Best practice is to let LHS fetch your records and Webmock to stub/mock endpoints responses.
|
895
900
|
This follows the [Black Box Testing](https://en.wikipedia.org/wiki/Black-box_testing) approach and prevents you from building up constraints to LHS' internal structures/mechanisms, which will break when we change internal things.
|
896
901
|
LHS provides interfaces that result in HTTP requests, this is what you should test.
|
897
902
|
|
@@ -60,12 +60,19 @@ class LHS::Record
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def request_options(args, options)
|
63
|
+
options ||= {}
|
63
64
|
if args.is_a? Hash
|
64
|
-
|
65
|
+
options.merge(params: args)
|
66
|
+
elsif href?(args)
|
67
|
+
options.merge(url: args)
|
65
68
|
else
|
66
|
-
|
69
|
+
options.merge(params: { id: args })
|
67
70
|
end
|
68
71
|
end
|
72
|
+
|
73
|
+
def href?(str)
|
74
|
+
str.is_a?(String) && %r{^https?://}.match(str)
|
75
|
+
end
|
69
76
|
end
|
70
77
|
end
|
71
78
|
end
|
data/lib/lhs/version.rb
CHANGED
data/spec/record/find_spec.rb
CHANGED
@@ -14,12 +14,23 @@ describe LHS::Record do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
context 'find' do
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
context 'finds a single unique record' do
|
18
|
+
before(:each) do
|
19
|
+
stub_request(:get, "#{datastore}/feedbacks/z12f-3asm3ngals")
|
20
|
+
.to_return(status: 200, body: load_json(:feedback))
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'by id' do
|
24
|
+
record = Record.find('z12f-3asm3ngals')
|
25
|
+
expect(record).to be_kind_of Record
|
26
|
+
expect(record.source_id).to be_kind_of String
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'by href' do
|
30
|
+
record = Record.find("#{datastore}/feedbacks/z12f-3asm3ngals")
|
31
|
+
expect(record).to be_kind_of Record
|
32
|
+
expect(record.source_id).to be_kind_of String
|
33
|
+
end
|
23
34
|
end
|
24
35
|
|
25
36
|
it 'raises if nothing was found' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lhs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 10.
|
4
|
+
version: 10.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- https://github.com/local-ch/lhs/graphs/contributors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-03-
|
11
|
+
date: 2017-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: lhc
|
@@ -387,7 +387,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
387
387
|
requirements:
|
388
388
|
- Ruby >= 2.0.0
|
389
389
|
rubyforge_project:
|
390
|
-
rubygems_version: 2.
|
390
|
+
rubygems_version: 2.5.1
|
391
391
|
signing_key:
|
392
392
|
specification_version: 4
|
393
393
|
summary: Rails gem providing an easy, active-record-like interface for http json services
|