yaks 0.7.5 → 0.7.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/yaks/attributes.rb +22 -0
- data/lib/yaks/breaking_changes.rb +22 -0
- data/lib/yaks/changelog.rb +21 -0
- data/lib/yaks/configurable.rb +8 -0
- data/lib/yaks/format/halo.rb +11 -1
- data/lib/yaks/html5_forms.rb +35 -0
- data/lib/yaks/mapper/config.rb +7 -2
- data/lib/yaks/mapper/control.rb +48 -14
- data/lib/yaks/mapper.rb +6 -8
- data/lib/yaks/resource.rb +0 -21
- data/lib/yaks/stateful_builder.rb +9 -4
- data/lib/yaks/util.rb +11 -2
- data/lib/yaks/version.rb +1 -1
- data/lib/yaks.rb +3 -0
- data/spec/unit/yaks/format/json_api_spec.rb +3 -2
- data/spec/unit/yaks/mapper/control/field_spec.rb +5 -1
- data/spec/unit/yaks/mapper/control_spec.rb +1 -1
- data/spec/unit/yaks/mapper/link_spec.rb +2 -2
- data/spec/unit/yaks/mapper_spec.rb +2 -2
- data/yaks.gemspec +3 -0
- metadata +60 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3eb709b078f05c15a877f6c3008df313d09e2bbe
|
4
|
+
data.tar.gz: cd8d14498bbf3c74b2362b66c30dee5ec00d3c53
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4cc2b5d05868b2869684481a6a9a37d513b66da63dfe995307b1c2c933ab349bf0bf200f5342e60ef485f756046e2308854227f895ec1b302ed4ec0b91f1d6c8
|
7
|
+
data.tar.gz: cde85afd3d63e33420ebe61e24638f1d00ceb26f93db91f48f19f42f7de531d4cd84e17dc7e74586a95afd5369d22293b4431f2208073a2ac48d84788bb67526
|
data/lib/yaks/attributes.rb
CHANGED
@@ -40,6 +40,28 @@ module Yaks
|
|
40
40
|
def append_to(type, *objects)
|
41
41
|
update(type => instance_variable_get("@#{type}") + objects)
|
42
42
|
end
|
43
|
+
|
44
|
+
def pp
|
45
|
+
indent = ->(str) { str.lines.map {|l| " #{l}"}.join }
|
46
|
+
format = ->(val) { val.respond_to?(:pp) ? val.pp : val.inspect }
|
47
|
+
|
48
|
+
fmt_attrs = self.class.attributes.attributes.map do |attr|
|
49
|
+
value = public_send(attr)
|
50
|
+
fmt_val = case value
|
51
|
+
when Array
|
52
|
+
if value.inspect.length < 50
|
53
|
+
value.inspect
|
54
|
+
else
|
55
|
+
"[\n#{indent[value.map(&format).join(",\n")]}\n]"
|
56
|
+
end
|
57
|
+
else
|
58
|
+
format[value]
|
59
|
+
end
|
60
|
+
"#{attr}: #{fmt_val}"
|
61
|
+
end.join(",\n")
|
62
|
+
|
63
|
+
"#{self.class.name}.new(\n#{indent[fmt_attrs]}\n)"
|
64
|
+
end
|
43
65
|
end
|
44
66
|
end
|
45
67
|
end
|
@@ -5,6 +5,28 @@ module Yaks
|
|
5
5
|
|
6
6
|
BreakingChanges = {
|
7
7
|
|
8
|
+
'0.7.6' => %q~
|
9
|
+
Breaking Changes in Yaks 0.7.6
|
10
|
+
==============================
|
11
|
+
Breaking change: using a symbol instead of link template no longer
|
12
|
+
works, use a lambda.
|
13
|
+
|
14
|
+
link :foo, :bar
|
15
|
+
|
16
|
+
Becomes
|
17
|
+
|
18
|
+
link :foo, ->{ bar }
|
19
|
+
|
20
|
+
Strictly speaking the equivalent version would be `link :foo, ->{
|
21
|
+
load_attribute(:bar) }`. Depending on if `bar` is implemented on the
|
22
|
+
mapper or is an attribute of the object, this would simplify to `link
|
23
|
+
:foo, ->{ bar }` or `link :foo, ->{ object.bar }` respectively.
|
24
|
+
|
25
|
+
The `href` attribute of a control has been renamed `action`, in line
|
26
|
+
with the attribute name in HTML. An alias is available but will output
|
27
|
+
a deprecation warning.
|
28
|
+
~,
|
29
|
+
|
8
30
|
'0.7.0' => %q~
|
9
31
|
Breaking Changes in Yaks 0.7.0
|
10
32
|
==============================
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Yaks
|
2
|
+
module Changelog
|
3
|
+
extend self
|
4
|
+
|
5
|
+
def current
|
6
|
+
versions[Yaks::VERSION]
|
7
|
+
end
|
8
|
+
|
9
|
+
def versions
|
10
|
+
markdown.split(/(?=###\s*[\d\.]+\n)/).each_with_object({}) do |section, hsh|
|
11
|
+
version = section.each_line.first[/[\d\.]+/]
|
12
|
+
log = section.each_line.drop(1).join.strip
|
13
|
+
hsh[version] = log
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def markdown
|
18
|
+
Pathname(__FILE__).join('../../../../CHANGELOG.md').read
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/yaks/configurable.rb
CHANGED
@@ -9,6 +9,14 @@ module Yaks
|
|
9
9
|
module ClassMethods
|
10
10
|
def config_method(name, options)
|
11
11
|
define_method name do |*args, &block|
|
12
|
+
defaults = options[:defaults]
|
13
|
+
if defaults
|
14
|
+
if args.last.is_a? Hash
|
15
|
+
args[-1] = defaults.merge(args[-1])
|
16
|
+
else
|
17
|
+
args << defaults
|
18
|
+
end
|
19
|
+
end
|
12
20
|
append_to(
|
13
21
|
options.fetch(:append_to),
|
14
22
|
options.fetch(:create).create(*args, &block)
|
data/lib/yaks/format/halo.rb
CHANGED
@@ -22,7 +22,17 @@ module Yaks
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def serialize_control(control)
|
25
|
-
|
25
|
+
raw = control.to_h
|
26
|
+
raw[:href] = raw.delete(:action)
|
27
|
+
raw[:fields] = control.fields.map(&:to_h)
|
28
|
+
raw[:fields].each do |field|
|
29
|
+
if field[:options].empty?
|
30
|
+
field.delete(:options)
|
31
|
+
else
|
32
|
+
field[:options] || field[:options].map(&:to_h)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
raw
|
26
36
|
end
|
27
37
|
end
|
28
38
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Yaks
|
2
|
+
# Based on the HTML living standard over at WHATWG
|
3
|
+
# https://html.spec.whatwg.org/multipage/forms.html
|
4
|
+
#
|
5
|
+
# Does not aim to be complete, does aim to be a strict subset.
|
6
|
+
module HTML5Forms
|
7
|
+
|
8
|
+
INPUT_TYPES = [
|
9
|
+
:checkbox,
|
10
|
+
:color,
|
11
|
+
:date,
|
12
|
+
:datetime,
|
13
|
+
:datetime_local, # :datetime-local in the spec
|
14
|
+
:email,
|
15
|
+
:file,
|
16
|
+
:hidden,
|
17
|
+
:image,
|
18
|
+
:month,
|
19
|
+
:number,
|
20
|
+
:password,
|
21
|
+
:radio,
|
22
|
+
:range,
|
23
|
+
:reset,
|
24
|
+
:search,
|
25
|
+
:tel,
|
26
|
+
:text,
|
27
|
+
:time,
|
28
|
+
:url,
|
29
|
+
:week,
|
30
|
+
|
31
|
+
:select
|
32
|
+
]
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
data/lib/yaks/mapper/config.rb
CHANGED
@@ -22,8 +22,13 @@ module Yaks
|
|
22
22
|
config_method :attribute, create: Attribute, append_to: :attributes
|
23
23
|
config_method :attribute, create: Attribute, append_to: :attributes
|
24
24
|
config_method :control,
|
25
|
-
|
26
|
-
|
25
|
+
append_to: :controls,
|
26
|
+
create: StatefulBuilder.new(
|
27
|
+
Control,
|
28
|
+
Control.anima.attribute_names +
|
29
|
+
HTML5Forms::INPUT_TYPES +
|
30
|
+
[:field]
|
31
|
+
)
|
27
32
|
end
|
28
33
|
end
|
29
34
|
end
|
data/lib/yaks/mapper/control.rb
CHANGED
@@ -1,35 +1,43 @@
|
|
1
1
|
module Yaks
|
2
2
|
class Mapper
|
3
3
|
class Control
|
4
|
+
extend Util::Deprecated
|
4
5
|
include Attributes.new(
|
5
|
-
name: nil,
|
6
|
+
name: nil, action: nil, title: nil, method: nil, media_type: nil, fields: []
|
6
7
|
),
|
7
8
|
Configurable
|
8
9
|
|
10
|
+
alias enctype media_type
|
11
|
+
deprecated_alias :href, :action
|
12
|
+
|
9
13
|
def self.create(name = nil, options = {})
|
10
14
|
new({name: name}.merge(options))
|
11
15
|
end
|
12
16
|
|
13
|
-
def add_to_resource(resource,
|
14
|
-
resource.add_control(
|
17
|
+
def add_to_resource(resource, mapper, _context)
|
18
|
+
resource.add_control(to_resource(mapper))
|
15
19
|
end
|
16
20
|
|
17
|
-
def
|
21
|
+
def to_resource(mapper)
|
18
22
|
attrs = {
|
19
|
-
fields: resource_fields,
|
20
|
-
|
23
|
+
fields: resource_fields(mapper),
|
24
|
+
action: mapper.expand_uri(action, true)
|
21
25
|
}
|
22
|
-
|
26
|
+
[:name, :title, :method, :media_type].each do |attr|
|
27
|
+
attrs[attr] = mapper.expand_value(public_send(attr))
|
28
|
+
end
|
29
|
+
Resource::Control.new(attrs)
|
23
30
|
end
|
24
31
|
|
25
|
-
def resource_fields
|
26
|
-
fields.map(
|
32
|
+
def resource_fields(mapper)
|
33
|
+
fields.map { |field| field.to_resource(mapper) }
|
27
34
|
end
|
28
35
|
|
29
36
|
class Field
|
30
|
-
include Attributes.new(:name, label: nil, type: "text", value: nil)
|
37
|
+
include Attributes.new(:name, label: nil, type: "text", value: nil, options: []),
|
38
|
+
Configurable
|
31
39
|
|
32
|
-
def self.create(*args)
|
40
|
+
def self.create(*args, &block)
|
33
41
|
attrs = args.last.instance_of?(Hash) ? args.pop : {}
|
34
42
|
if name = args.shift
|
35
43
|
attrs = attrs.merge(name: name)
|
@@ -37,12 +45,38 @@ module Yaks
|
|
37
45
|
new(attrs)
|
38
46
|
end
|
39
47
|
|
40
|
-
def
|
41
|
-
Resource::Control::Field.new(
|
48
|
+
def to_resource(mapper)
|
49
|
+
Resource::Control::Field.new(
|
50
|
+
[:name, :label, :type, :value].each_with_object({}) do |attr, attrs|
|
51
|
+
attrs[attr] = mapper.expand_value(public_send(attr))
|
52
|
+
end.merge(options: options.map(&:to_resource))
|
53
|
+
)
|
54
|
+
end
|
55
|
+
|
56
|
+
class Option
|
57
|
+
include Attributes.new(:value, :label, selected: false)
|
58
|
+
|
59
|
+
def self.create(value, opts = {})
|
60
|
+
new(opts.merge(value: value))
|
61
|
+
end
|
62
|
+
|
63
|
+
def to_resource
|
64
|
+
to_h #placeholder
|
65
|
+
end
|
42
66
|
end
|
67
|
+
|
68
|
+
config_method :option,
|
69
|
+
append_to: :options,
|
70
|
+
create: Option
|
43
71
|
end
|
44
72
|
|
45
|
-
|
73
|
+
FieldBuilder = StatefulBuilder.new(Field, [:name, :label, :type, :value, :option])
|
74
|
+
|
75
|
+
config_method :field, create: FieldBuilder, append_to: :fields
|
76
|
+
|
77
|
+
HTML5Forms::INPUT_TYPES.each do |type|
|
78
|
+
config_method type, create: FieldBuilder, append_to: :fields, defaults: { type: type }
|
79
|
+
end
|
46
80
|
end
|
47
81
|
end
|
48
82
|
end
|
data/lib/yaks/mapper.rb
CHANGED
@@ -55,15 +55,13 @@ module Yaks
|
|
55
55
|
end
|
56
56
|
alias load_association load_attribute
|
57
57
|
|
58
|
+
def expand_value(value)
|
59
|
+
Resolve(value, self)
|
60
|
+
end
|
61
|
+
|
58
62
|
def expand_uri(uri, expand)
|
59
|
-
|
60
|
-
|
61
|
-
return
|
62
|
-
when Symbol
|
63
|
-
return load_attribute(uri)
|
64
|
-
when Method, Proc
|
65
|
-
return Resolve(uri, self)
|
66
|
-
end
|
63
|
+
return if uri.nil?
|
64
|
+
return Resolve(uri, self) if uri.respond_to?(:to_proc)
|
67
65
|
|
68
66
|
template = URITemplate.new(uri)
|
69
67
|
expand_vars = case expand
|
data/lib/yaks/resource.rb
CHANGED
@@ -64,26 +64,5 @@ module Yaks
|
|
64
64
|
append_to(:subresources, subresource)
|
65
65
|
end
|
66
66
|
|
67
|
-
def pp
|
68
|
-
indent = ->(str) { str.lines.map {|l| " #{l}"}.join }
|
69
|
-
format = ->(val) { val.respond_to?(:pp) ? val.pp : val.inspect }
|
70
|
-
|
71
|
-
fmt_attrs = self.class.attributes.attributes.map do |attr|
|
72
|
-
value = public_send(attr)
|
73
|
-
fmt_val = case value
|
74
|
-
when Array
|
75
|
-
if value.inspect.length < 50
|
76
|
-
value.inspect
|
77
|
-
else
|
78
|
-
"[\n#{indent[value.map(&format).join(",\n")]}\n]"
|
79
|
-
end
|
80
|
-
else
|
81
|
-
format[value]
|
82
|
-
end
|
83
|
-
"#{attr}=#{fmt_val}"
|
84
|
-
end.join("\n")
|
85
|
-
|
86
|
-
"#<#{self.class.name}\n#{indent[fmt_attrs]}\n>"
|
87
|
-
end
|
88
67
|
end
|
89
68
|
end
|
@@ -8,23 +8,24 @@ module Yaks
|
|
8
8
|
# # This code
|
9
9
|
# Control.create(:search)
|
10
10
|
# .method("POST")
|
11
|
-
# .
|
11
|
+
# .action("/search")
|
12
12
|
#
|
13
13
|
# # Can be written as
|
14
|
-
# StatefulBuilder.new(Control, [:method, :
|
14
|
+
# StatefulBuilder.new(Control, [:method, :action]).create(:search) do
|
15
15
|
# method "POST"
|
16
|
-
#
|
16
|
+
# action "/search"
|
17
17
|
# end
|
18
18
|
#
|
19
19
|
class StatefulBuilder < BasicObject
|
20
20
|
def create(*args, &block)
|
21
21
|
@state = @klass.create(*args)
|
22
|
-
instance_eval(&block)
|
22
|
+
instance_eval(&block) if block
|
23
23
|
@state
|
24
24
|
end
|
25
25
|
|
26
26
|
def initialize(klass, methods)
|
27
27
|
@klass = klass
|
28
|
+
@methods = methods
|
28
29
|
StatefulMethods.new(methods).send(:extend_object, self)
|
29
30
|
end
|
30
31
|
|
@@ -38,6 +39,10 @@ module Yaks
|
|
38
39
|
end
|
39
40
|
end
|
40
41
|
|
42
|
+
def inspect
|
43
|
+
"#<#{self.class} #{@klass} #{@methods.inspect}>"
|
44
|
+
end
|
45
|
+
|
41
46
|
class StatefulMethods < ::Module
|
42
47
|
def initialize(methods)
|
43
48
|
methods.each { |name| define_stateful_method(name) }
|
data/lib/yaks/util.rb
CHANGED
@@ -36,7 +36,7 @@ module Yaks
|
|
36
36
|
# @param [Object] context
|
37
37
|
# (optional) A context used to instance_eval the proc
|
38
38
|
def Resolve(maybe_proc, context = nil)
|
39
|
-
if maybe_proc.
|
39
|
+
if maybe_proc.respond_to?(:to_proc) && !maybe_proc.instance_of?(Symbol)
|
40
40
|
if context
|
41
41
|
if maybe_proc.arity > 0
|
42
42
|
context.instance_eval(&maybe_proc)
|
@@ -45,12 +45,21 @@ module Yaks
|
|
45
45
|
context.instance_exec(&maybe_proc)
|
46
46
|
end
|
47
47
|
else
|
48
|
-
maybe_proc.()
|
48
|
+
maybe_proc.to_proc.()
|
49
49
|
end
|
50
50
|
else
|
51
51
|
maybe_proc
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
+
module Deprecated
|
56
|
+
def deprecated_alias(name, actual)
|
57
|
+
define_method name do |*args, &block|
|
58
|
+
$stderr.puts "WARNING: #{self.class}##{name} is deprecated, use `#{actual}'. at #{caller.first}"
|
59
|
+
send(actual, *args, &block)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
55
64
|
end
|
56
65
|
end
|
data/lib/yaks/version.rb
CHANGED
data/lib/yaks.rb
CHANGED
@@ -11,6 +11,7 @@ require 'inflection'
|
|
11
11
|
require 'uri_template'
|
12
12
|
require 'rack/accept'
|
13
13
|
|
14
|
+
require 'yaks/version'
|
14
15
|
require 'yaks/util'
|
15
16
|
require 'yaks/configurable'
|
16
17
|
require 'yaks/fp'
|
@@ -44,6 +45,8 @@ require 'yaks/null_resource'
|
|
44
45
|
require 'yaks/resource/link'
|
45
46
|
require 'yaks/collection_resource'
|
46
47
|
|
48
|
+
require 'yaks/html5_forms'
|
49
|
+
|
47
50
|
require 'yaks/mapper/association'
|
48
51
|
require 'yaks/mapper/has_one'
|
49
52
|
require 'yaks/mapper/has_many'
|
@@ -15,8 +15,8 @@ RSpec.describe Yaks::Format::JsonAPI do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
context 'with both a "href" attribute and a self link' do
|
18
|
-
|
19
|
-
|
18
|
+
let(:resource) {
|
19
|
+
Yaks::Resource.new(
|
20
20
|
type: 'wizard',
|
21
21
|
attributes: {
|
22
22
|
href: '/the/href'
|
@@ -27,6 +27,7 @@ RSpec.describe Yaks::Format::JsonAPI do
|
|
27
27
|
)
|
28
28
|
}
|
29
29
|
|
30
|
+
# TODO should it really behave this way? better to give preference to self link.
|
30
31
|
it 'should give preference to the href attribute' do
|
31
32
|
expect(format.call(resource)).to eql(
|
32
33
|
{'wizards' => [
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
RSpec.describe Yaks::Mapper::Control::Field do
|
4
|
+
include_context 'yaks context'
|
5
|
+
|
4
6
|
let(:field) { described_class.new( full_args ) }
|
5
7
|
let(:name) { :the_field }
|
6
8
|
let(:full_args) { {name: name}.merge(args) }
|
@@ -12,6 +14,8 @@ RSpec.describe Yaks::Mapper::Control::Field do
|
|
12
14
|
}
|
13
15
|
}
|
14
16
|
|
17
|
+
let(:mapper) { Yaks::Mapper.new(yaks_context) }
|
18
|
+
|
15
19
|
describe '.create' do
|
16
20
|
it 'can take all args as a hash' do
|
17
21
|
expect(described_class.create(full_args)).to eql described_class.new(full_args)
|
@@ -28,7 +32,7 @@ RSpec.describe Yaks::Mapper::Control::Field do
|
|
28
32
|
|
29
33
|
describe '#to_resource_field' do
|
30
34
|
it 'creates a Yaks::Resource::Control::Field with the same attributes' do
|
31
|
-
expect(field.
|
35
|
+
expect(field.to_resource(mapper)).to eql Yaks::Resource::Control::Field.new(full_args)
|
32
36
|
end
|
33
37
|
end
|
34
38
|
end
|
@@ -31,7 +31,7 @@ RSpec.describe Yaks::Mapper::Link do
|
|
31
31
|
end
|
32
32
|
|
33
33
|
context 'with a link function returning nothing' do
|
34
|
-
let(:template) {
|
34
|
+
let(:template) { ->{ link_computer } }
|
35
35
|
before do
|
36
36
|
mapper_class.class_eval do
|
37
37
|
def link_computer ; end
|
@@ -157,7 +157,7 @@ RSpec.describe Yaks::Mapper::Link do
|
|
157
157
|
end
|
158
158
|
|
159
159
|
context 'with a link generation method that returns nil' do
|
160
|
-
let(:template) {
|
160
|
+
let(:template) { ->{ object.returns_nil } }
|
161
161
|
|
162
162
|
it 'should return nil' do
|
163
163
|
expect(resource_link).to be_nil
|
@@ -187,7 +187,7 @@ RSpec.describe Yaks::Mapper do
|
|
187
187
|
before do
|
188
188
|
mapper_class.class_eval do
|
189
189
|
attributes :id
|
190
|
-
link :bar_link,
|
190
|
+
link :bar_link, -> { link_generating_method }
|
191
191
|
|
192
192
|
def link_generating_method
|
193
193
|
end
|
@@ -365,7 +365,7 @@ RSpec.describe Yaks::Mapper do
|
|
365
365
|
end
|
366
366
|
|
367
367
|
context 'with a symbol for a template' do
|
368
|
-
let(:template) {
|
368
|
+
let(:template) { -> { object.foo } }
|
369
369
|
|
370
370
|
it 'should use the lookup mechanism for finding the link' do
|
371
371
|
expect(expanded).to eq '/foo/foo'
|
data/yaks.gemspec
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require File.expand_path('../lib/yaks/version', __FILE__)
|
4
4
|
require File.expand_path('../lib/yaks/breaking_changes', __FILE__)
|
5
|
+
require File.expand_path('../lib/yaks/changelog', __FILE__)
|
5
6
|
|
6
7
|
Gem::Specification.new do |gem|
|
7
8
|
gem.name = 'yaks'
|
@@ -18,6 +19,8 @@ Gem::Specification.new do |gem|
|
|
18
19
|
gem.test_files = gem.files.grep(/^spec/)
|
19
20
|
gem.extra_rdoc_files = %w[README.md]
|
20
21
|
|
22
|
+
gem.metadata = {'changelog' => Yaks::Changelog.current[0...1000]}
|
23
|
+
|
21
24
|
if Yaks::BreakingChanges.key? Yaks::VERSION
|
22
25
|
gem.post_install_message = Yaks::BreakingChanges[Yaks::VERSION]
|
23
26
|
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.7.
|
4
|
+
version: 0.7.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arne Brasseur
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: inflection
|
@@ -247,6 +247,7 @@ files:
|
|
247
247
|
- lib/yaks.rb
|
248
248
|
- lib/yaks/attributes.rb
|
249
249
|
- lib/yaks/breaking_changes.rb
|
250
|
+
- lib/yaks/changelog.rb
|
250
251
|
- lib/yaks/collection_mapper.rb
|
251
252
|
- lib/yaks/collection_resource.rb
|
252
253
|
- lib/yaks/config.rb
|
@@ -261,6 +262,7 @@ files:
|
|
261
262
|
- lib/yaks/format/json_api.rb
|
262
263
|
- lib/yaks/fp.rb
|
263
264
|
- lib/yaks/fp/callable.rb
|
265
|
+
- lib/yaks/html5_forms.rb
|
264
266
|
- lib/yaks/mapper.rb
|
265
267
|
- lib/yaks/mapper/association.rb
|
266
268
|
- lib/yaks/mapper/association_mapper.rb
|
@@ -345,8 +347,62 @@ files:
|
|
345
347
|
homepage: https://github.com/plexus/yaks
|
346
348
|
licenses:
|
347
349
|
- MIT
|
348
|
-
metadata:
|
349
|
-
|
350
|
+
metadata:
|
351
|
+
changelog: |-
|
352
|
+
Much expanded form support, simplified link DSL, pretty-print objects
|
353
|
+
to Ruby code.
|
354
|
+
|
355
|
+
Breaking change: using a symbol instead of link template no longer
|
356
|
+
works, use a lambda.
|
357
|
+
|
358
|
+
link :foo, :bar
|
359
|
+
|
360
|
+
Becomes
|
361
|
+
|
362
|
+
link :foo, ->{ bar }
|
363
|
+
|
364
|
+
Strictly speaking the equivalent version would be `link :foo, ->{
|
365
|
+
load_attribute(:bar) }`. Depending on if `bar` is implemented on the
|
366
|
+
mapper or is an attribute of the object, this would simplify to `link
|
367
|
+
:foo, ->{ bar }` or `link :foo, ->{ object.bar }` respectively.
|
368
|
+
|
369
|
+
The form control DSL has been expanded, instead of `field type:
|
370
|
+
'text'` and similar there are now aliases, e.g. `text :name, value:
|
371
|
+
'foo'`.
|
372
|
+
|
373
|
+
All attributes on the form control itself, and on fields, now
|
374
|
+
optionally take a lambda (any `#to_proc`-able) for dynamic
|
375
|
+
content. e.g.
|
376
|
+
|
377
|
+
control :add_product do
|
378
|
+
method 'POST'
|
379
|
+
action ->{ '/cart/#{cart.id}/line_items' }
|
380
|
+
hidden :product_id, value: -> { product.id }
|
381
|
+
number :quantity, value: 0
|
382
|
+
end
|
383
|
+
|
384
|
+
As with lambdas used for links, i
|
385
|
+
post_install_message: |2
|
386
|
+
|
387
|
+
Breaking Changes in Yaks 0.7.6
|
388
|
+
==============================
|
389
|
+
Breaking change: using a symbol instead of link template no longer
|
390
|
+
works, use a lambda.
|
391
|
+
|
392
|
+
link :foo, :bar
|
393
|
+
|
394
|
+
Becomes
|
395
|
+
|
396
|
+
link :foo, ->{ bar }
|
397
|
+
|
398
|
+
Strictly speaking the equivalent version would be `link :foo, ->{
|
399
|
+
load_attribute(:bar) }`. Depending on if `bar` is implemented on the
|
400
|
+
mapper or is an attribute of the object, this would simplify to `link
|
401
|
+
:foo, ->{ bar }` or `link :foo, ->{ object.bar }` respectively.
|
402
|
+
|
403
|
+
The `href` attribute of a control has been renamed `action`, in line
|
404
|
+
with the attribute name in HTML. An alias is available but will output
|
405
|
+
a deprecation warning.
|
350
406
|
rdoc_options: []
|
351
407
|
require_paths:
|
352
408
|
- lib
|