ducktape 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
data/lib/ducktape/bindable.rb
CHANGED
@@ -6,14 +6,28 @@ module Ducktape
|
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
|
+
class InconsistentAccessorError < StandardError
|
10
|
+
def initialize(writeonly, name)
|
11
|
+
type, accessor = writeonly ? [:Write, :getter] : [:Read, :setter]
|
12
|
+
super("#{type} only property with a custom #{accessor}: #{name}")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
9
16
|
module Bindable
|
10
17
|
module ClassMethods
|
11
18
|
def bindable(name, options = {})
|
12
19
|
name = name.to_s
|
20
|
+
options[:access] ||= :both
|
13
21
|
m = BindableAttributeMetadata.new(metadata(name) || name, options)
|
14
22
|
bindings_metadata[name] = m
|
15
|
-
|
16
|
-
|
23
|
+
raise InconsistentAccessorError.new(true, name) if options[:access] == :writeonly && options[:getter]
|
24
|
+
raise InconsistentAccessorError.new(false, name) if options[:access] == :readonly && options[:setter]
|
25
|
+
|
26
|
+
define_method name, options[:getter] || ->() { get_value(name) } unless options[:access] == :writeonly
|
27
|
+
|
28
|
+
unless options[:access] == :readonly
|
29
|
+
define_method "#{name}=", options[:setter] || ->(value) { set_value(name, value) }
|
30
|
+
end
|
17
31
|
nil
|
18
32
|
end
|
19
33
|
|
@@ -79,10 +79,10 @@ module Ducktape
|
|
79
79
|
old_value = @value
|
80
80
|
@value = value
|
81
81
|
|
82
|
-
old_value.remove_hook(
|
83
|
-
@value.on_changed(method(
|
82
|
+
old_value.remove_hook(:on_changed, method(:hookable_value_changed)) if old_value.is_a?(Hookable)
|
83
|
+
@value.on_changed(method(:hookable_value_changed)) if @value.is_a?(Hookable)
|
84
84
|
|
85
|
-
call_hooks(
|
85
|
+
call_hooks(:on_changed, owner, attribute: name.dup, value: @value, old_value: old_value)
|
86
86
|
end
|
87
87
|
|
88
88
|
propagate_value(exclusions)
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module Ducktape
|
2
2
|
class BindableAttributeMetadata
|
3
3
|
|
4
|
-
VALID_OPTIONS = [:access, :default, :
|
4
|
+
VALID_OPTIONS = [:access, :coerce, :default, :getter, :setter, :validate].freeze
|
5
5
|
|
6
|
-
attr_reader :name
|
6
|
+
attr_reader :name, :access, :getter, :setter
|
7
7
|
|
8
8
|
def initialize(name, options = {})
|
9
9
|
|
@@ -15,11 +15,17 @@ module Ducktape
|
|
15
15
|
@default = options.has_key?(:default) ? options[:default] : name.instance_variable_get(:@default)
|
16
16
|
@validation = options.has_key?(:validate) ? options[:validate] : name.instance_variable_get(:@validation)
|
17
17
|
@coercion = options.has_key?(:coerce) ? options[:coerce] : name.instance_variable_get(:@coercion)
|
18
|
+
@access = options.has_key?(:access) ? options[:access] : name.access
|
19
|
+
@getter = options.has_key?(:getter) ? options[:getter] : name.getter
|
20
|
+
@setter = options.has_key?(:setter) ? options[:setter] : name.setter
|
18
21
|
else
|
19
22
|
@name = name
|
20
23
|
@default = options[:default]
|
21
24
|
@validation = options[:validate]
|
22
25
|
@coercion = options[:coerce]
|
26
|
+
@access = options[:access]
|
27
|
+
@getter = options[:getter]
|
28
|
+
@setter = options[:setter]
|
23
29
|
end
|
24
30
|
|
25
31
|
@validation = [*@validation] unless @validation.nil?
|
data/lib/ducktape.rb
CHANGED
@@ -3,7 +3,7 @@ module Ducktape
|
|
3
3
|
# may represent an incompatible implementation with the previous minor version, which should have been
|
4
4
|
# represented by a major version number increase.
|
5
5
|
|
6
|
-
VERSION = '0.3.
|
6
|
+
VERSION = '0.3.2'
|
7
7
|
|
8
8
|
camelize = ->(f){ f.gsub(/(^|_)([^_]+)/) { |_| $2.capitalize } }
|
9
9
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ducktape
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-12-
|
13
|
+
date: 2012-12-27 00:00:00.000000000 Z
|
14
14
|
dependencies: []
|
15
15
|
description: Truly outrageous bindable attributes
|
16
16
|
email:
|