yaks 0.8.0.beta2 → 0.8.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 +49 -4
- data/lib/yaks/format/collection_json.rb +1 -5
- data/lib/yaks/mapper/association.rb +3 -1
- data/lib/yaks/mapper/form.rb +2 -0
- data/lib/yaks/mapper/form/config.rb +6 -1
- data/lib/yaks/mapper/form/field.rb +3 -3
- data/lib/yaks/mapper/form/field/option.rb +6 -2
- data/lib/yaks/mapper/link.rb +3 -1
- data/lib/yaks/resource/form.rb +10 -2
- data/lib/yaks/version.rb +1 -1
- data/spec/unit/yaks/mapper/association_spec.rb +20 -1
- data/spec/unit/yaks/mapper/form/field/option_spec.rb +19 -0
- data/spec/unit/yaks/mapper/form_spec.rb +20 -2
- data/spec/unit/yaks/mapper/link_spec.rb +52 -0
- data/spec/unit/yaks/resource/form_spec.rb +35 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1784c312fc3b6f4a71be14c06506fafcc0dddcef
|
4
|
+
data.tar.gz: b44cc96127c4311a2ee91a74404d702a189b54b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10c08be52835165067815e4df2c53dde58109f704efc1b2557a4be3813321d524452ed7799481fa6c422a8be84e6abbd8e9a67e7cf796918c5621ac50e50b853
|
7
|
+
data.tar.gz: 0c2d814f5022ddf9f29d64bb7424da0de584d69a46d48fd5ab58d9397e4f3c73757ae93b0bff49a2f1ded8072b90ef7595cc35108119dbd27f23c86a3c10d5e0
|
data/README.md
CHANGED
@@ -26,7 +26,7 @@ requested. These formats are presently supported:
|
|
26
26
|
## State of Development
|
27
27
|
|
28
28
|
This library came into existence because we at
|
29
|
-
[Ticketsolve](
|
29
|
+
[Ticketsolve](http://www.ticketsolve.com) wanted to build a rich
|
30
30
|
hypermedia API, and were dissatisfied with any of the existing Ruby
|
31
31
|
solutions at the time (November 2013).
|
32
32
|
|
@@ -37,7 +37,7 @@ supporting hypermedia formats in Ruby.
|
|
37
37
|
Yaks can be used in production today, as we do, but until 1.0 is
|
38
38
|
released there will regularly be breaking changes, as we figure out
|
39
39
|
the best way to do things. These are all documented clearly in the
|
40
|
-
[changelog](
|
40
|
+
[changelog](/CHANGELOG.md). At this point we recommend locking to an
|
41
41
|
exact version number.
|
42
42
|
|
43
43
|
## Concepts
|
@@ -138,6 +138,30 @@ class CommentMapper < Yaks::Mapper
|
|
138
138
|
end
|
139
139
|
```
|
140
140
|
|
141
|
+
### Forms
|
142
|
+
|
143
|
+
Mapper can contain form defintions, for formats that support them. The
|
144
|
+
form DSL mimics the HTML5 field and attribute names.
|
145
|
+
|
146
|
+
```ruby
|
147
|
+
class PostMapper < Yaks::Mapper
|
148
|
+
attributes :id, :body, :date
|
149
|
+
|
150
|
+
form :add_comment do
|
151
|
+
action '/api/comments'
|
152
|
+
method 'POST'
|
153
|
+
media_type 'application/json'
|
154
|
+
|
155
|
+
text :body
|
156
|
+
hidden :post_id, value: -> { object.id }
|
157
|
+
end
|
158
|
+
end
|
159
|
+
```
|
160
|
+
|
161
|
+
TODO: add more info on form element types, attributes, conditional
|
162
|
+
rendering of forms, dynamic form sections, ...
|
163
|
+
|
164
|
+
|
141
165
|
#### Filtering
|
142
166
|
|
143
167
|
You can override `#attributes`, or `#associations`.
|
@@ -196,11 +220,16 @@ end
|
|
196
220
|
|
197
221
|
```
|
198
222
|
|
199
|
-
You can pass a
|
223
|
+
You can pass a proc instead of a template, in that case the proc will
|
224
|
+
be resolved in the context of the mapper. What this means is that, if
|
225
|
+
the proc takes no arguments, it will be evaluated with the mapper
|
226
|
+
instance as the value of `self`. If the proc does take an argument,
|
227
|
+
then it will receive the mapper instance, and will be evaluated as a
|
228
|
+
closure, i.e. with access to the scope in which it was defined.
|
200
229
|
|
201
230
|
```ruby
|
202
231
|
class FooMapper < Yaks::Mapper
|
203
|
-
link 'http://api.foo.com/rels/go_home',
|
232
|
+
link 'http://api.foo.com/rels/go_home', -> { home_url }
|
204
233
|
# by default calls object.home_url
|
205
234
|
|
206
235
|
def home_url
|
@@ -209,6 +238,21 @@ class FooMapper < Yaks::Mapper
|
|
209
238
|
end
|
210
239
|
```
|
211
240
|
|
241
|
+
|
242
|
+
To only include links based on certain conditions, add an `:if`
|
243
|
+
option, passing it a block. The block will be resolved in the context
|
244
|
+
of the mapper, as explained before.
|
245
|
+
|
246
|
+
For example, say you want to notify the consumer of your API that upon
|
247
|
+
confirming an order, the previously held cart is no longer valid, you
|
248
|
+
could use the IANA standard `invalidates` rel to communicate this.
|
249
|
+
|
250
|
+
``` ruby
|
251
|
+
class OrderMapper < BaseMapper
|
252
|
+
link :invalidates, '/api/cart', if: ->{ env['api.invalidate_cart'] }
|
253
|
+
end
|
254
|
+
```
|
255
|
+
|
212
256
|
### Associations
|
213
257
|
|
214
258
|
Use `has_one` for an association that returns a single object, or `has_many` for embedding a collection.
|
@@ -218,6 +262,7 @@ Options
|
|
218
262
|
* `:mapper` : Use a specific for each instance, will be derived from the class name if omitted (see Policy vs Configuration)
|
219
263
|
* `:collection_mapper` : For mapping the collection as a whole, this defaults to Yaks::CollectionMapper, but you can subclass it for example to add links or attributes on the collection itself
|
220
264
|
* `:rel` : Set the relation (symbol or URI) this association has with the object. Will be derived from the association name and the configured rel_template if ommitted
|
265
|
+
* `:if`: Only render the association if a condition holds
|
221
266
|
* `:link_if`: Conditionally render the association as a link. A `:href` option is required
|
222
267
|
|
223
268
|
```ruby
|
@@ -77,11 +77,7 @@ module Yaks
|
|
77
77
|
protected
|
78
78
|
|
79
79
|
def form_is_query?(form)
|
80
|
-
|
81
|
-
end
|
82
|
-
|
83
|
-
def method_is_get?(method)
|
84
|
-
!method.nil? && method.downcase.to_sym === :get
|
80
|
+
form.method?(:get) && form.has_action?
|
85
81
|
end
|
86
82
|
|
87
83
|
def template_form_exists?(resource)
|
@@ -6,7 +6,8 @@ module Yaks
|
|
6
6
|
item_mapper: Undefined,
|
7
7
|
rel: Undefined,
|
8
8
|
href: Undefined,
|
9
|
-
link_if: Undefined
|
9
|
+
link_if: Undefined,
|
10
|
+
if: Undefined
|
10
11
|
),
|
11
12
|
Util
|
12
13
|
|
@@ -21,6 +22,7 @@ module Yaks
|
|
21
22
|
end
|
22
23
|
|
23
24
|
def add_to_resource(resource, parent_mapper, context)
|
25
|
+
return resource if self.if != Undefined && !parent_mapper.expand_value(self.if)
|
24
26
|
AssociationMapper.new(parent_mapper, self, context).call(resource)
|
25
27
|
end
|
26
28
|
|
data/lib/yaks/mapper/form.rb
CHANGED
@@ -15,6 +15,7 @@ module Yaks
|
|
15
15
|
)
|
16
16
|
end
|
17
17
|
def_forward :dynamic
|
18
|
+
def_forward :condition
|
18
19
|
end
|
19
20
|
|
20
21
|
def_delegators :config, :name, :action, :title, :method,
|
@@ -36,6 +37,7 @@ module Yaks
|
|
36
37
|
include Concord.new(:config)
|
37
38
|
|
38
39
|
def add_to_resource(resource, mapper, _context)
|
40
|
+
return resource if config.if && !mapper.expand_value(config.if)
|
39
41
|
resource.add_form(to_resource(mapper))
|
40
42
|
end
|
41
43
|
|
@@ -9,12 +9,17 @@ module Yaks
|
|
9
9
|
method: nil,
|
10
10
|
media_type: nil,
|
11
11
|
fields: [],
|
12
|
-
dynamic_blocks: []
|
12
|
+
dynamic_blocks: [],
|
13
|
+
if: nil
|
13
14
|
)
|
14
15
|
|
15
16
|
def dynamic(&blk)
|
16
17
|
append_to(:dynamic_blocks, blk)
|
17
18
|
end
|
19
|
+
|
20
|
+
def condition(prc = nil, &blk)
|
21
|
+
with(if: prc || blk)
|
22
|
+
end
|
18
23
|
end
|
19
24
|
end
|
20
25
|
end
|
@@ -28,14 +28,14 @@ module Yaks
|
|
28
28
|
Resource::Form::Field.new(
|
29
29
|
resource_attributes.each_with_object({}) do |attr, attrs|
|
30
30
|
attrs[attr] = mapper.expand_value(public_send(attr))
|
31
|
-
end.merge(options: resource_options)
|
31
|
+
end.merge(options: resource_options(mapper))
|
32
32
|
)
|
33
33
|
end
|
34
34
|
|
35
|
-
def resource_options
|
35
|
+
def resource_options(mapper)
|
36
36
|
# make sure all empty options arrays are the same instance,
|
37
37
|
# makes for prettier #pp
|
38
|
-
options.empty? ? options : options.map(
|
38
|
+
options.empty? ? options : options.map {|opt| opt.to_resource_field_option(mapper) }
|
39
39
|
end
|
40
40
|
|
41
41
|
# All attributes that can be converted 1-to-1 to
|
@@ -10,8 +10,12 @@ module Yaks
|
|
10
10
|
new(opts.merge(value: value))
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
Resource::Form::Field::Option.new(
|
13
|
+
def to_resource_field_option(mapper)
|
14
|
+
Resource::Form::Field::Option.new(
|
15
|
+
value: mapper.expand_value(value),
|
16
|
+
label: mapper.expand_value(label),
|
17
|
+
selected: mapper.expand_value(selected),
|
18
|
+
)
|
15
19
|
end
|
16
20
|
end
|
17
21
|
end
|
data/lib/yaks/mapper/link.rb
CHANGED
@@ -55,6 +55,8 @@ module Yaks
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def map_to_resource_link(mapper)
|
58
|
+
return unless mapper.expand_value(options.fetch(:if, true))
|
59
|
+
|
58
60
|
uri = mapper.expand_uri(template, options.fetch(:expand, true))
|
59
61
|
return if uri.nil?
|
60
62
|
|
@@ -69,7 +71,7 @@ module Yaks
|
|
69
71
|
options = options()
|
70
72
|
options = options.merge(title: Resolve(options[:title], mapper)) if options.key?(:title)
|
71
73
|
options = options.merge(templated: true) if templated?
|
72
|
-
options.reject{|key| [:expand, :replace].include? key }
|
74
|
+
options.reject{|key| [:expand, :replace, :if].include? key }
|
73
75
|
end
|
74
76
|
|
75
77
|
end
|
data/lib/yaks/resource/form.rb
CHANGED
@@ -14,8 +14,8 @@ module Yaks
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
def fields_flat(
|
18
|
-
|
17
|
+
def fields_flat(fs = fields)
|
18
|
+
fs.each_with_object([]) do |field, acc|
|
19
19
|
if field.type.equal? :fieldset
|
20
20
|
acc.concat(fields_flat field.fields)
|
21
21
|
else
|
@@ -23,6 +23,14 @@ module Yaks
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
26
|
+
|
27
|
+
def method?(meth)
|
28
|
+
!method.nil? && method.downcase.to_sym === meth.downcase.to_sym
|
29
|
+
end
|
30
|
+
|
31
|
+
def has_action?
|
32
|
+
!action.nil?
|
33
|
+
end
|
26
34
|
end
|
27
35
|
end
|
28
36
|
end
|
data/lib/yaks/version.rb
CHANGED
@@ -7,7 +7,8 @@ RSpec.describe Yaks::Mapper::Association do
|
|
7
7
|
item_mapper: mapper,
|
8
8
|
rel: rel,
|
9
9
|
href: href,
|
10
|
-
link_if: link_if
|
10
|
+
link_if: link_if,
|
11
|
+
if: self.if
|
11
12
|
)
|
12
13
|
end
|
13
14
|
|
@@ -16,6 +17,7 @@ RSpec.describe Yaks::Mapper::Association do
|
|
16
17
|
let(:rel) { Yaks::Undefined }
|
17
18
|
let(:href) { Yaks::Undefined }
|
18
19
|
let(:link_if) { Yaks::Undefined }
|
20
|
+
let(:if) { Yaks::Undefined }
|
19
21
|
|
20
22
|
its(:name) { should equal :shoes }
|
21
23
|
its(:item_mapper) { should equal Yaks::Mapper }
|
@@ -45,6 +47,23 @@ RSpec.describe Yaks::Mapper::Association do
|
|
45
47
|
it 'should delegate to AssociationMapper' do
|
46
48
|
expect(association.add_to_resource(Yaks::Resource.new, parent_mapper, yaks_context)).to eql Yaks::Resource.new(subresources: [Yaks::Resource.new(rels: ['rel:shoes'])])
|
47
49
|
end
|
50
|
+
|
51
|
+
context 'with a truthy condition' do
|
52
|
+
let(:if) { ->{ true } }
|
53
|
+
|
54
|
+
it 'should add the association' do
|
55
|
+
expect(association.add_to_resource(Yaks::Resource.new, parent_mapper, yaks_context).subresources.length).to be 1
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'with a falsey condition' do
|
60
|
+
let(:if) { ->{ false } }
|
61
|
+
|
62
|
+
it 'should not add the association' do
|
63
|
+
expect(association.add_to_resource(Yaks::Resource.new, parent_mapper, yaks_context).subresources.length).to be 0
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
48
67
|
end
|
49
68
|
|
50
69
|
describe '#render_as_link?' do
|
@@ -0,0 +1,19 @@
|
|
1
|
+
RSpec.describe Yaks::Mapper::Form::Field::Option do
|
2
|
+
include_context 'yaks context'
|
3
|
+
|
4
|
+
let(:mapper_class) do
|
5
|
+
Class.new(Yaks::Mapper) do
|
6
|
+
def color
|
7
|
+
:yellow
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:mapper) { mapper_class.new(yaks_context) }
|
13
|
+
|
14
|
+
let(:option) { described_class.new(value: ->{color}, label: :color) }
|
15
|
+
|
16
|
+
it 'should expand procs in the context of the mapper' do
|
17
|
+
expect(option.to_resource_field_option(mapper)).to eql Yaks::Resource::Form::Field::Option.new(value: :yellow, label: :color, selected: false)
|
18
|
+
end
|
19
|
+
end
|
@@ -1,4 +1,6 @@
|
|
1
1
|
RSpec.describe Yaks::Mapper::Form do
|
2
|
+
include_context 'yaks context'
|
3
|
+
|
2
4
|
let(:form) { described_class.create( full_args ) }
|
3
5
|
let(:name) { :the_name }
|
4
6
|
let(:full_args) { {name: name}.merge(args) }
|
@@ -20,8 +22,8 @@ RSpec.describe Yaks::Mapper::Form do
|
|
20
22
|
end
|
21
23
|
|
22
24
|
describe '#add_to_resource' do
|
23
|
-
let(:
|
24
|
-
|
25
|
+
let(:mapper) { Yaks::Mapper.new(yaks_context) }
|
26
|
+
let(:resource) { form.new.add_to_resource(Yaks::Resource.new, mapper, nil) }
|
25
27
|
|
26
28
|
context 'with fields' do
|
27
29
|
let(:fields) {
|
@@ -34,7 +36,23 @@ RSpec.describe Yaks::Mapper::Form do
|
|
34
36
|
)
|
35
37
|
]
|
36
38
|
}
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'with a truthy condition' do
|
42
|
+
let(:form) { described_class.create { condition { true }}}
|
37
43
|
|
44
|
+
it 'should add the form' do
|
45
|
+
expect(form.add_to_resource(Yaks::Resource.new, mapper, nil).forms.length).to be 1
|
46
|
+
end
|
38
47
|
end
|
48
|
+
|
49
|
+
context 'with a falsey condition' do
|
50
|
+
let(:form) { described_class.create { condition { false }}}
|
51
|
+
|
52
|
+
it 'should not add the form' do
|
53
|
+
expect(form.add_to_resource(Yaks::Resource.new, mapper, nil).forms.length).to be 0
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
39
57
|
end
|
40
58
|
end
|
@@ -68,6 +68,26 @@ RSpec.describe Yaks::Mapper::Link do
|
|
68
68
|
)
|
69
69
|
end
|
70
70
|
end
|
71
|
+
|
72
|
+
context 'with :if defined and resolving to true' do
|
73
|
+
let(:options) { { if: ->{ true } } }
|
74
|
+
|
75
|
+
it 'should render the link' do
|
76
|
+
expect(link.add_to_resource(Yaks::Resource.new, mapper, yaks_context)).to eql(
|
77
|
+
Yaks::Resource.new(links: [Yaks::Resource::Link.new(rel: :next, uri: "/foo/bar/3/4")])
|
78
|
+
)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'with :if defined and resolving to false' do
|
83
|
+
let(:options) { { if: ->{ false } } }
|
84
|
+
|
85
|
+
it 'should not render the link' do
|
86
|
+
expect(link.add_to_resource(Yaks::Resource.new, mapper, yaks_context)).to eql(
|
87
|
+
Yaks::Resource.new
|
88
|
+
)
|
89
|
+
end
|
90
|
+
end
|
71
91
|
end
|
72
92
|
|
73
93
|
describe '#rel?' do
|
@@ -174,6 +194,38 @@ RSpec.describe Yaks::Mapper::Link do
|
|
174
194
|
expect(resource_link).to be_nil
|
175
195
|
end
|
176
196
|
end
|
197
|
+
|
198
|
+
context 'with a if lambda resolving to true' do
|
199
|
+
let(:options) { { if: -> { add_link? } } }
|
200
|
+
|
201
|
+
before do
|
202
|
+
mapper_class.class_eval do
|
203
|
+
def add_link?
|
204
|
+
true
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
it 'should evaluate the lambda in the context of the mapper' do
|
210
|
+
expect(resource_link).to be_a(Yaks::Resource::Link)
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
context 'with a if lambda resolving to false' do
|
215
|
+
let(:options) { { if: -> { add_link? } } }
|
216
|
+
|
217
|
+
before do
|
218
|
+
mapper_class.class_eval do
|
219
|
+
def add_link?
|
220
|
+
false
|
221
|
+
end
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
it 'should evaluate the lambda in the context of the mapper' do
|
226
|
+
expect(resource_link).to be_nil
|
227
|
+
end
|
228
|
+
end
|
177
229
|
end
|
178
230
|
|
179
231
|
describe '.create' do
|
@@ -49,4 +49,39 @@ RSpec.describe Yaks::Resource::Form do
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
+
describe "#method?" do
|
53
|
+
it 'should return true if method matches' do
|
54
|
+
form_sym = Yaks::Resource::Form.new(name: :foo, method: :get)
|
55
|
+
form_str = Yaks::Resource::Form.new(name: :foo, method: 'GET')
|
56
|
+
|
57
|
+
expect(form_sym.method?(:get)).to eq(true)
|
58
|
+
expect(form_sym.method?('get')).to eq(true)
|
59
|
+
expect(form_str.method?(:get)).to eq(true)
|
60
|
+
expect(form_str.method?('GET')).to eq(true)
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'should return false if method does not match' do
|
64
|
+
form_sym = Yaks::Resource::Form.new(name: :foo, method: :get)
|
65
|
+
form_str = Yaks::Resource::Form.new(name: :foo, method: 'GET')
|
66
|
+
|
67
|
+
expect(form_sym.method?(:post)).to eq(false)
|
68
|
+
expect(form_sym.method?('patch')).to eq(false)
|
69
|
+
expect(form_str.method?(:delete)).to eq(false)
|
70
|
+
expect(form_str.method?('PUT')).to eq(false)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "#has_action?" do
|
75
|
+
it 'should return true if form has an action url' do
|
76
|
+
form = Yaks::Resource::Form.new(name: :foo, action: "/my-action")
|
77
|
+
|
78
|
+
expect(form.has_action?).to eq(true)
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'should return false if form has not an action url' do
|
82
|
+
form = Yaks::Resource::Form.new(name: :foo)
|
83
|
+
|
84
|
+
expect(form.has_action?).to eq(false)
|
85
|
+
end
|
86
|
+
end
|
52
87
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yaks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.0
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arne Brasseur
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-02-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: inflection
|
@@ -339,6 +339,7 @@ files:
|
|
339
339
|
- spec/unit/yaks/mapper/association_spec.rb
|
340
340
|
- spec/unit/yaks/mapper/attribute_spec.rb
|
341
341
|
- spec/unit/yaks/mapper/config_spec.rb
|
342
|
+
- spec/unit/yaks/mapper/form/field/option_spec.rb
|
342
343
|
- spec/unit/yaks/mapper/form/field_spec.rb
|
343
344
|
- spec/unit/yaks/mapper/form_spec.rb
|
344
345
|
- spec/unit/yaks/mapper/has_many_spec.rb
|
@@ -374,9 +375,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
374
375
|
version: '0'
|
375
376
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
376
377
|
requirements:
|
377
|
-
- - "
|
378
|
+
- - ">="
|
378
379
|
- !ruby/object:Gem::Version
|
379
|
-
version:
|
380
|
+
version: '0'
|
380
381
|
requirements: []
|
381
382
|
rubyforge_project:
|
382
383
|
rubygems_version: 2.2.2
|
@@ -429,6 +430,7 @@ test_files:
|
|
429
430
|
- spec/unit/yaks/mapper/association_spec.rb
|
430
431
|
- spec/unit/yaks/mapper/attribute_spec.rb
|
431
432
|
- spec/unit/yaks/mapper/config_spec.rb
|
433
|
+
- spec/unit/yaks/mapper/form/field/option_spec.rb
|
432
434
|
- spec/unit/yaks/mapper/form/field_spec.rb
|
433
435
|
- spec/unit/yaks/mapper/form_spec.rb
|
434
436
|
- spec/unit/yaks/mapper/has_many_spec.rb
|