yaks 0.7.1 → 0.7.2
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/lib/yaks/mapper.rb +27 -0
- data/lib/yaks/mapper/control.rb +15 -5
- data/lib/yaks/mapper/link.rb +1 -30
- data/lib/yaks/version.rb +1 -1
- data/spec/spec_helper.rb +2 -0
- data/spec/unit/yaks/mapper/control/field_spec.rb +2 -2
- data/spec/unit/yaks/mapper/control_spec.rb +1 -1
- data/spec/unit/yaks/mapper/link_spec.rb +0 -41
- data/spec/unit/yaks/mapper_spec.rb +44 -0
- metadata +2 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 64f29f0a260835544b10149465159018b6c4c3cf
|
4
|
+
data.tar.gz: 89cbcaece5f55c9cbc24a570318f68d5740867d5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd0847555ab0d6907f2883acc4ef58d2c6fbf5abc40b07ef45a2f78018d9db62b8eae4ad52877df3ca5882f79d0e197859064ac272dc7d9d38de480a97a7ce55
|
7
|
+
data.tar.gz: ff1c2fd464fd5ec9faea3233bde76d0a12f55023fb25d9c4b53bb0f25c38f8b8a2739d5397a804b55c0afa934c6876eb4ea117a578594059e06c50de9e39b458
|
data/lib/yaks/mapper.rb
CHANGED
@@ -55,6 +55,33 @@ module Yaks
|
|
55
55
|
end
|
56
56
|
alias load_association load_attribute
|
57
57
|
|
58
|
+
def expand_uri(uri, expand)
|
59
|
+
case uri
|
60
|
+
when nil
|
61
|
+
return
|
62
|
+
when Symbol
|
63
|
+
return load_attribute(uri)
|
64
|
+
when Method, Proc
|
65
|
+
return Resolve(uri, self)
|
66
|
+
end
|
67
|
+
|
68
|
+
template = URITemplate.new(uri)
|
69
|
+
expand_vars = case expand
|
70
|
+
when true
|
71
|
+
template.variables
|
72
|
+
when false
|
73
|
+
[]
|
74
|
+
else
|
75
|
+
expand
|
76
|
+
end
|
77
|
+
|
78
|
+
mapping = expand_vars.each_with_object({}) do |name, hsh|
|
79
|
+
hsh[name] = load_attribute(name)
|
80
|
+
end
|
81
|
+
|
82
|
+
template.expand_partial(mapping).to_s
|
83
|
+
end
|
84
|
+
|
58
85
|
private
|
59
86
|
|
60
87
|
def map_attributes(resource)
|
data/lib/yaks/mapper/control.rb
CHANGED
@@ -10,10 +10,20 @@ module Yaks
|
|
10
10
|
new({name: name}.merge(options))
|
11
11
|
end
|
12
12
|
|
13
|
-
def add_to_resource(resource,
|
14
|
-
resource.add_control(
|
15
|
-
|
16
|
-
|
13
|
+
def add_to_resource(resource, parent_mapper, _context)
|
14
|
+
resource.add_control(map_to_resource_control(resource, parent_mapper))
|
15
|
+
end
|
16
|
+
|
17
|
+
def map_to_resource_control(resource, parent_mapper)
|
18
|
+
attrs = {
|
19
|
+
fields: resource_fields,
|
20
|
+
href: parent_mapper.expand_uri(href, true)
|
21
|
+
}
|
22
|
+
Resource::Control.new(to_h.merge(attrs))
|
23
|
+
end
|
24
|
+
|
25
|
+
def resource_fields
|
26
|
+
fields.map(&:to_resource_field)
|
17
27
|
end
|
18
28
|
|
19
29
|
class Field
|
@@ -27,7 +37,7 @@ module Yaks
|
|
27
37
|
new(attrs)
|
28
38
|
end
|
29
39
|
|
30
|
-
def
|
40
|
+
def to_resource_field
|
31
41
|
Resource::Control::Field.new(to_h)
|
32
42
|
end
|
33
43
|
end
|
data/lib/yaks/mapper/link.rb
CHANGED
@@ -28,8 +28,6 @@ module Yaks
|
|
28
28
|
include Attributes.new(:rel, :template, options: {})
|
29
29
|
include Util
|
30
30
|
|
31
|
-
def_delegators :uri_template, :expand_partial
|
32
|
-
|
33
31
|
def self.create(rel, template, options = {})
|
34
32
|
new(rel: rel, template: template, options: options)
|
35
33
|
end
|
@@ -49,29 +47,8 @@ module Yaks
|
|
49
47
|
!options.fetch(:expand) { true }.equal? true
|
50
48
|
end
|
51
49
|
|
52
|
-
def template_variables
|
53
|
-
case options.fetch(:expand) { true }
|
54
|
-
when true
|
55
|
-
uri_template.variables
|
56
|
-
when false
|
57
|
-
[]
|
58
|
-
else
|
59
|
-
options[:expand]
|
60
|
-
end.map(&:to_sym)
|
61
|
-
end
|
62
|
-
|
63
|
-
def expansion_mapping(lookup)
|
64
|
-
template_variables.each_with_object({}) do |name, hsh|
|
65
|
-
hsh[name] = lookup[name]
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def uri_template
|
70
|
-
URITemplate.new(template)
|
71
|
-
end
|
72
|
-
|
73
50
|
def map_to_resource_link(mapper)
|
74
|
-
uri =
|
51
|
+
uri = mapper.expand_uri(template, options.fetch(:expand, true))
|
75
52
|
return if uri.nil?
|
76
53
|
|
77
54
|
Resource::Link.new(
|
@@ -81,12 +58,6 @@ module Yaks
|
|
81
58
|
)
|
82
59
|
end
|
83
60
|
|
84
|
-
def expand_with(lookup)
|
85
|
-
return lookup[template] if template.instance_of? Symbol
|
86
|
-
|
87
|
-
expand_partial(expansion_mapping(lookup)).to_s
|
88
|
-
end
|
89
|
-
|
90
61
|
def resource_link_options(mapper)
|
91
62
|
options = options()
|
92
63
|
options = options.merge(title: Resolve(options[:title], mapper)) if options.key?(:title)
|
data/lib/yaks/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -26,9 +26,9 @@ RSpec.describe Yaks::Mapper::Control::Field do
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
describe 'to_resource_field' do
|
29
|
+
describe '#to_resource_field' do
|
30
30
|
it 'creates a Yaks::Resource::Control::Field with the same attributes' do
|
31
|
-
expect(field.
|
31
|
+
expect(field.to_resource_field).to eql Yaks::Resource::Control::Field.new(full_args)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -27,7 +27,7 @@ RSpec.describe Yaks::Mapper::Control do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
describe '#add_to_resource' do
|
30
|
-
let(:resource) { control.add_to_resource(Yaks::Resource.new, nil, nil) }
|
30
|
+
let(:resource) { control.add_to_resource(Yaks::Resource.new, Yaks::Mapper.new(nil), nil) }
|
31
31
|
|
32
32
|
it 'should add a control to the resource' do
|
33
33
|
expect(resource.controls.length).to be 1
|
@@ -9,9 +9,6 @@ RSpec.describe Yaks::Mapper::Link do
|
|
9
9
|
let(:template) { '/foo/bar/{x}/{y}' }
|
10
10
|
let(:options) { {} }
|
11
11
|
|
12
|
-
its(:template_variables) { should eq [:x, :y] }
|
13
|
-
its(:uri_template) { should eq URITemplate.new(template) }
|
14
|
-
|
15
12
|
let(:object) { Struct.new(:x, :y, :returns_nil).new(3, 4, nil) }
|
16
13
|
|
17
14
|
let(:mapper_class) do
|
@@ -71,44 +68,6 @@ RSpec.describe Yaks::Mapper::Link do
|
|
71
68
|
end
|
72
69
|
end
|
73
70
|
|
74
|
-
describe '#expand_with' do
|
75
|
-
it 'should look up expansion values through the provided callable' do
|
76
|
-
expect(link.expand_with(->(var){ var.upcase })).to eq '/foo/bar/X/Y'
|
77
|
-
end
|
78
|
-
|
79
|
-
context 'with expansion turned off' do
|
80
|
-
let(:options) { {expand: false} }
|
81
|
-
|
82
|
-
it 'should keep the template in the response' do
|
83
|
-
expect(link.expand_with(->{ })).to eq '/foo/bar/{x}/{y}'
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
context 'with a URI without expansion variables' do
|
88
|
-
let(:template) { '/orders' }
|
89
|
-
|
90
|
-
it 'should return the link as is' do
|
91
|
-
expect(link.expand_with(->{ })).to eq '/orders'
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
context 'with partial expansion' do
|
96
|
-
let(:options) { { expand: [:y] } }
|
97
|
-
|
98
|
-
it 'should only expand the given variables' do
|
99
|
-
expect(link.expand_with({:y => 7}.method(:[]))).to eql '/foo/bar/{x}/7'
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
context 'with a symbol for a template' do
|
104
|
-
let(:template) { :a_symbol }
|
105
|
-
|
106
|
-
it 'should use the lookup mechanism for finding the link' do
|
107
|
-
expect(link.expand_with({:a_symbol => '/foo/foo'}.method(:[]))).to eq '/foo/foo'
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
71
|
describe '#map_to_resource_link' do
|
113
72
|
subject(:resource_link) { link.map_to_resource_link(mapper) }
|
114
73
|
|
@@ -329,4 +329,48 @@ RSpec.describe Yaks::Mapper do
|
|
329
329
|
expect(mapper.mapper_stack).to eql [:foo]
|
330
330
|
end
|
331
331
|
end
|
332
|
+
|
333
|
+
describe '#expand_uri' do
|
334
|
+
let(:template) { '/foo/bar/{x}/{y}' }
|
335
|
+
let(:expand) { true }
|
336
|
+
|
337
|
+
subject(:expanded) { mapper.expand_uri(template, expand) }
|
338
|
+
|
339
|
+
before do
|
340
|
+
mapper.call( Struct.new(:x, :y) { def foo ; '/foo/foo' ; end }.new(6, 7) )
|
341
|
+
end
|
342
|
+
|
343
|
+
context 'with expansion turned off' do
|
344
|
+
let(:expand) { false }
|
345
|
+
|
346
|
+
it 'should keep the template in the response' do
|
347
|
+
expect(expanded).to eq '/foo/bar/{x}/{y}'
|
348
|
+
end
|
349
|
+
end
|
350
|
+
|
351
|
+
context 'with a URI without expansion variables' do
|
352
|
+
let(:template) { '/orders' }
|
353
|
+
|
354
|
+
it 'should return the link as is' do
|
355
|
+
expect(expanded).to eq '/orders'
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
359
|
+
context 'with partial expansion' do
|
360
|
+
let(:expand) { [:y] }
|
361
|
+
|
362
|
+
it 'should only expand the given variables' do
|
363
|
+
expect(expanded).to eql '/foo/bar/{x}/7'
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
context 'with a symbol for a template' do
|
368
|
+
let(:template) { :foo }
|
369
|
+
|
370
|
+
it 'should use the lookup mechanism for finding the link' do
|
371
|
+
expect(expanded).to eq '/foo/foo'
|
372
|
+
end
|
373
|
+
end
|
374
|
+
end
|
375
|
+
|
332
376
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yaks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arne Brasseur
|
@@ -346,18 +346,7 @@ homepage: https://github.com/plexus/yaks
|
|
346
346
|
licenses:
|
347
347
|
- MIT
|
348
348
|
metadata: {}
|
349
|
-
post_install_message:
|
350
|
-
|
351
|
-
Breaking Changes in Yaks 0.7.0
|
352
|
-
==============================
|
353
|
-
Yaks::Resource#subresources is now an array, not a hash. The rel is
|
354
|
-
stored on the resource itself as Yaks::Resource#rels (an array). This
|
355
|
-
should only be of concern if you implement custom output formats
|
356
|
-
|
357
|
-
The general signature of all processing steps (mapper, formatter,
|
358
|
-
hooks) has changed to incldue a second parameter, the rack env. If you
|
359
|
-
have custom implementations of any of these, or hooks that are not
|
360
|
-
specified as ruby blocks, you will need to take this into account
|
349
|
+
post_install_message:
|
361
350
|
rdoc_options: []
|
362
351
|
require_paths:
|
363
352
|
- lib
|