lhs 19.8.2 → 19.9.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 +15 -0
- data/lib/lhs/concerns/record/href_for.rb +19 -0
- data/lib/lhs/record.rb +3 -0
- data/lib/lhs/version.rb +1 -1
- data/spec/record/href_for_spec.rb +25 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ae06289222aa01014699262ca1538093d7388f5e6a4fa689c3351d2fd6cf1d7
|
4
|
+
data.tar.gz: f0308f117f2f2dc44d0e0ada944c74ed0819b91198756fcedfeecebf472b0da9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4778c1456b9f0aea0308f7a505d27641aa6a0bb1dc18170724c80542d182df8f5198f2e1a5de6db749722e22a59d1c1ea701934f8f89f365c05a4cc00af061c3
|
7
|
+
data.tar.gz: c64c7dece11ba95192669df9ea91d33a40262156eeac930efdfd8e432a4bfc51add6350746c937203309d67012499d15880c5b5b694ac66740556b9798dd8be6
|
data/README.md
CHANGED
@@ -2020,6 +2020,21 @@ With `includes` or `includes_all` (to enforce fetching all remote objects for pa
|
|
2020
2020
|
|
2021
2021
|
Including linked resources/records is heavily influenced by [https://guides.rubyonrails.org/active_record_querying.html](https://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations) and you should read it to understand this feature in all it's glory.
|
2022
2022
|
|
2023
|
+
#### Generate links from parameters
|
2024
|
+
|
2025
|
+
Sometimes you need to generate full hrefs/urls for records but you just have parameters that describe that record, like the ID.
|
2026
|
+
|
2027
|
+
For those usecases you can use `href_for(params)`:
|
2028
|
+
|
2029
|
+
```ruby
|
2030
|
+
# app/controllers/some_controller.rb
|
2031
|
+
|
2032
|
+
Presence.create(place: { href: Place.href_for(123) })
|
2033
|
+
```
|
2034
|
+
```
|
2035
|
+
POST '/presences' { place: { href: "http://datastore/places/123" } }
|
2036
|
+
```
|
2037
|
+
|
2023
2038
|
#### Ensure the whole linked collection is included: includes_all
|
2024
2039
|
|
2025
2040
|
In case endpoints are paginated and you are certain that you'll need all objects of a set and not only the first page/batch, use `includes_all`.
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support'
|
4
|
+
|
5
|
+
class LHS::Record
|
6
|
+
|
7
|
+
module HrefFor
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
def href_for(args = nil)
|
12
|
+
return unless [Integer, String].include?(args.class)
|
13
|
+
params = { id: args }
|
14
|
+
find_endpoint(params).compile(params)
|
15
|
+
end
|
16
|
+
alias url_for href_for
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/lhs/record.rb
CHANGED
@@ -23,6 +23,8 @@ class LHS::Record
|
|
23
23
|
'lhs/concerns/record/find_by'
|
24
24
|
autoload :First,
|
25
25
|
'lhs/concerns/record/first'
|
26
|
+
autoload :HrefFor,
|
27
|
+
'lhs/concerns/record/href_for'
|
26
28
|
autoload :Last,
|
27
29
|
'lhs/concerns/record/last'
|
28
30
|
autoload :Mapping,
|
@@ -64,6 +66,7 @@ class LHS::Record
|
|
64
66
|
include Find
|
65
67
|
include FindBy
|
66
68
|
include First
|
69
|
+
include HrefFor
|
67
70
|
include LHS::IsHref
|
68
71
|
include Last
|
69
72
|
include LHS::Inspect
|
data/lib/lhs/version.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails_helper'
|
4
|
+
|
5
|
+
describe LHS::Record do
|
6
|
+
before do
|
7
|
+
class Record < LHS::Record
|
8
|
+
endpoint 'http://datastore/records/'
|
9
|
+
endpoint 'http://datastore/records/{id}'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'href_for' do
|
14
|
+
|
15
|
+
it 'injects variables and returns href' do
|
16
|
+
expect(Record.href_for(1)).to eq 'http://datastore/records/1'
|
17
|
+
expect(Record.href_for('vmasd241')).to eq 'http://datastore/records/vmasd241'
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'also works with url_for (alias)' do
|
21
|
+
expect(Record.url_for(1)).to eq 'http://datastore/records/1'
|
22
|
+
expect(Record.url_for('vmasd241')).to eq 'http://datastore/records/vmasd241'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
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: 19.
|
4
|
+
version: 19.9.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: 2019-
|
11
|
+
date: 2019-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -252,6 +252,7 @@ files:
|
|
252
252
|
- lib/lhs/concerns/record/find.rb
|
253
253
|
- lib/lhs/concerns/record/find_by.rb
|
254
254
|
- lib/lhs/concerns/record/first.rb
|
255
|
+
- lib/lhs/concerns/record/href_for.rb
|
255
256
|
- lib/lhs/concerns/record/last.rb
|
256
257
|
- lib/lhs/concerns/record/mapping.rb
|
257
258
|
- lib/lhs/concerns/record/merge.rb
|
@@ -427,6 +428,7 @@ files:
|
|
427
428
|
- spec/record/handle_includes_errors_spec.rb
|
428
429
|
- spec/record/has_many_spec.rb
|
429
430
|
- spec/record/has_one_spec.rb
|
431
|
+
- spec/record/href_for_spec.rb
|
430
432
|
- spec/record/ignore_errors_spec.rb
|
431
433
|
- spec/record/immutable_chains_spec.rb
|
432
434
|
- spec/record/includes_all_spec.rb
|
@@ -639,6 +641,7 @@ test_files:
|
|
639
641
|
- spec/record/handle_includes_errors_spec.rb
|
640
642
|
- spec/record/has_many_spec.rb
|
641
643
|
- spec/record/has_one_spec.rb
|
644
|
+
- spec/record/href_for_spec.rb
|
642
645
|
- spec/record/ignore_errors_spec.rb
|
643
646
|
- spec/record/immutable_chains_spec.rb
|
644
647
|
- spec/record/includes_all_spec.rb
|