glimmer 0.2.3 → 0.2.4
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f23c9710bdd925d4c539caf3f610b2b7c223d606ad83f9639704cb745d760b6
|
4
|
+
data.tar.gz: f8345c248ce903b335c5dbb734b66e5b83671dac2bff9fb981292c759fe20161
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75c523cddf99e08c89931b29ac0c81faed4a62612d740181af2b9d9bf5ed8c861b646a1487026f2cb8773cbb22be520234f76cada898bca992ddead22e677676
|
7
|
+
data.tar.gz: 5e4771b3eda1930e9f54677e2e4be2064f89f966efe4c4b18038acba79fad60fcdb7a6f3cacb7aeede4f759e2f1e8dfd09e0f9e1070035704a782e9d98e9f320
|
data/README.markdown
CHANGED
@@ -66,14 +66,14 @@ Please follow these instructions to make the `glimmer` command available on your
|
|
66
66
|
|
67
67
|
Run this command to install directly:
|
68
68
|
```
|
69
|
-
jgem install glimmer -v 0.2.
|
69
|
+
jgem install glimmer -v 0.2.4
|
70
70
|
```
|
71
71
|
|
72
72
|
### Option 2: Bundler
|
73
73
|
|
74
74
|
Add the following to `Gemfile`:
|
75
75
|
```
|
76
|
-
gem 'glimmer', '~> 0.2.
|
76
|
+
gem 'glimmer', '~> 0.2.4'
|
77
77
|
```
|
78
78
|
|
79
79
|
And, then run:
|
@@ -133,6 +133,7 @@ Data-binding examples:
|
|
133
133
|
- `text bind(contact, 'address.street')`
|
134
134
|
- `text bind(contact, 'addresses[1].street')`
|
135
135
|
- `text bind(contact, :name, computed_by: [:first_name, :last_name])`
|
136
|
+
- `text bind(contact, 'profiles[0].name', computed_by: ['profiles[0].first_name', 'profiles[0].last_name'])`
|
136
137
|
|
137
138
|
The first example binds the text property of a widget like `label` to the first name of a contact model.
|
138
139
|
|
@@ -141,7 +142,9 @@ the address of a contact. This is called nested property data binding.
|
|
141
142
|
|
142
143
|
The third example binds the text property of a widget like `label` to the nested indexed address street of a contact. This is called nested indexed property data binding.
|
143
144
|
|
144
|
-
The fourth example demonstrates computed value data binding whereby the value of `name` depends on changes to both `first_name` and `last_name
|
145
|
+
The fourth example demonstrates computed value data binding whereby the value of `name` depends on changes to both `first_name` and `last_name`.
|
146
|
+
|
147
|
+
The fifth example demonstrates nested indexed computed value data binding whereby the value of `profiles[0].name` depends on changes to both nested `profiles[0].first_name` and `profiles[0].last_name`.
|
145
148
|
|
146
149
|
You may learn more about Glimmer's syntax by reading the Eclipse Zone Tutorial mentioned in resources and opening up the samples under the `samples` folder.
|
147
150
|
|
@@ -56,15 +56,9 @@ class DataBindingCommandHandler
|
|
56
56
|
def do_handle(parent, command_symbol, *args, &block)
|
57
57
|
model_binding = args[0]
|
58
58
|
widget_binding_parameters = [parent, command_symbol.to_s]
|
59
|
-
widget_binding_parameters << proc {|value| model_binding.evaluate_property} if model_binding.binding_options.has_key?(:computed_by)
|
60
59
|
widget_binding = WidgetBinding.new(*widget_binding_parameters)
|
61
60
|
widget_binding.update(model_binding.evaluate_property)
|
62
|
-
model = model_binding.model
|
63
61
|
model_binding.add_observer(widget_binding)
|
64
|
-
computed_by_property_names = model_binding.binding_options[:computed_by]
|
65
|
-
computed_by_property_names&.each do |computed_by_property_name|
|
66
|
-
model.add_observer(computed_by_property_name, widget_binding)
|
67
|
-
end
|
68
62
|
widget_data_binder_map = @@widget_data_binders[parent.widget.class]
|
69
63
|
widget_data_binder = widget_data_binder_map[command_symbol.to_s.to_sym] if widget_data_binder_map
|
70
64
|
widget_data_binder.call(parent, model_binding) if widget_data_binder
|
@@ -15,6 +15,11 @@ class ModelBinding
|
|
15
15
|
@property_name_expression = property_name_expression
|
16
16
|
@property_type = property_type
|
17
17
|
@binding_options = binding_options || {}
|
18
|
+
if computed?
|
19
|
+
@computed_model_bindings = computed_by.map do |computed_by_property_expression|
|
20
|
+
self.class.new(base_model, computed_by_property_expression, :undefined, computed_binding_options)
|
21
|
+
end
|
22
|
+
end
|
18
23
|
end
|
19
24
|
def model
|
20
25
|
nested_property? ? nested_model : base_model
|
@@ -65,6 +70,15 @@ class ModelBinding
|
|
65
70
|
def property_name_expression
|
66
71
|
@property_name_expression
|
67
72
|
end
|
73
|
+
def computed?
|
74
|
+
!!computed_by
|
75
|
+
end
|
76
|
+
def computed_by
|
77
|
+
@binding_options[:computed_by]
|
78
|
+
end
|
79
|
+
def computed_binding_options
|
80
|
+
@binding_options.reject {|k,v| k == :computed_by}
|
81
|
+
end
|
68
82
|
def nested_property_observers_for(observer)
|
69
83
|
@nested_property_observers_collection ||= {}
|
70
84
|
unless @nested_property_observers_collection.has_key?(observer)
|
@@ -81,6 +95,21 @@ class ModelBinding
|
|
81
95
|
@nested_property_observers_collection[observer]
|
82
96
|
end
|
83
97
|
def add_observer(observer)
|
98
|
+
if computed?
|
99
|
+
add_computed_observers(observer)
|
100
|
+
else
|
101
|
+
add_direct_observer(observer)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
def add_computed_observers(observer)
|
105
|
+
computed_observer = BlockObserver.new do |changed_value|
|
106
|
+
observer.update(evaluate_property)
|
107
|
+
end
|
108
|
+
@computed_model_bindings.each do |computed_model_binding|
|
109
|
+
computed_model_binding.add_observer(computed_observer)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
def add_direct_observer(observer)
|
84
113
|
if nested_property?
|
85
114
|
nested_property_observers = nested_property_observers_for(observer)
|
86
115
|
nested_models.zip(nested_property_names).each do |model, property_name|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glimmer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- AndyMaleh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|