glimmer 0.10.4 → 1.0.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/CHANGELOG.md +361 -0
- data/CONTRIBUTING.md +62 -0
- data/LICENSE.txt +1 -1
- data/PROCESS.md +35 -0
- data/README.md +465 -3527
- data/VERSION +1 -1
- data/lib/glimmer.rb +21 -5
- data/lib/glimmer/config.rb +21 -0
- data/lib/glimmer/data_binding/model_binding.rb +37 -27
- data/lib/glimmer/data_binding/observable.rb +21 -0
- data/lib/glimmer/data_binding/observable_array.rb +35 -39
- data/lib/glimmer/data_binding/observable_model.rb +42 -21
- data/lib/glimmer/data_binding/observer.rb +21 -0
- data/lib/glimmer/dsl/engine.rb +66 -58
- data/lib/glimmer/dsl/expression.rb +21 -0
- data/lib/glimmer/dsl/expression_handler.rb +21 -0
- data/lib/glimmer/dsl/parent_expression.rb +21 -0
- data/lib/glimmer/dsl/static_expression.rb +21 -0
- data/lib/glimmer/dsl/top_level_expression.rb +21 -0
- data/lib/glimmer/error.rb +21 -0
- data/lib/glimmer/invalid_keyword_error.rb +21 -0
- metadata +23 -17
- data/lib/glimmer/excluded_keyword_error.rb +0 -5
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
1.0.0
|
data/lib/glimmer.rb
CHANGED
@@ -1,7 +1,24 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
#
|
4
|
-
#
|
1
|
+
# Copyright (c) 2007-2020 Andy Maleh
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
# a copy of this software and associated documentation files (the
|
5
|
+
# "Software"), to deal in the Software without restriction, including
|
6
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
# the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be
|
12
|
+
# included in all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
5
22
|
require 'logger'
|
6
23
|
require 'set'
|
7
24
|
require 'array_include_methods'
|
@@ -62,6 +79,5 @@ module Glimmer
|
|
62
79
|
end
|
63
80
|
|
64
81
|
require 'glimmer/error'
|
65
|
-
require 'glimmer/excluded_keyword_error'
|
66
82
|
require 'glimmer/invalid_keyword_error'
|
67
83
|
require 'glimmer/dsl/engine'
|
data/lib/glimmer/config.rb
CHANGED
@@ -1,3 +1,24 @@
|
|
1
|
+
# Copyright (c) 2007-2020 Andy Maleh
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
# a copy of this software and associated documentation files (the
|
5
|
+
# "Software"), to deal in the Software without restriction, including
|
6
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
# the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be
|
12
|
+
# included in all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
1
22
|
module Glimmer
|
2
23
|
module Config
|
3
24
|
class << self
|
@@ -1,3 +1,24 @@
|
|
1
|
+
# Copyright (c) 2007-2020 Andy Maleh
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
# a copy of this software and associated documentation files (the
|
5
|
+
# "Software"), to deal in the Software without restriction, including
|
6
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
# the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be
|
12
|
+
# included in all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
1
22
|
require 'glimmer/data_binding/observable'
|
2
23
|
require 'glimmer/data_binding/observer'
|
3
24
|
|
@@ -7,7 +28,7 @@ module Glimmer
|
|
7
28
|
include Observable
|
8
29
|
include Observer
|
9
30
|
|
10
|
-
attr_reader :binding_options
|
31
|
+
attr_reader :binding_options, :property_name_expression
|
11
32
|
|
12
33
|
def initialize(base_model, property_name_expression, binding_options = nil)
|
13
34
|
@base_model = base_model
|
@@ -60,19 +81,10 @@ module Glimmer
|
|
60
81
|
end
|
61
82
|
|
62
83
|
def apply_converter(converter, value)
|
63
|
-
if converter.nil?
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
value.send(converter)
|
68
|
-
else
|
69
|
-
raise Glimmer::Error, "Unsupported bind converter: #{converter.inspect}"
|
70
|
-
end
|
71
|
-
elsif converter.respond_to?(:call, value)
|
72
|
-
converter.call(value)
|
73
|
-
else
|
74
|
-
raise Glimmer::Error, "Unsupported bind converter: #{converter.inspect}"
|
75
|
-
end
|
84
|
+
return value if converter.nil?
|
85
|
+
return value.send(converter) if (converter.is_a?(String) || converter.is_a?(Symbol)) && value.respond_to?(converter)
|
86
|
+
return converter.call(value) if converter.respond_to?(:call, value)
|
87
|
+
raise Glimmer::Error, "Unsupported bind converter: #{converter.inspect}"
|
76
88
|
end
|
77
89
|
|
78
90
|
# All nested property names
|
@@ -99,10 +111,6 @@ module Glimmer
|
|
99
111
|
property_name_expression.match(/[.\[]/)
|
100
112
|
end
|
101
113
|
|
102
|
-
def property_name_expression
|
103
|
-
@property_name_expression
|
104
|
-
end
|
105
|
-
|
106
114
|
def computed?
|
107
115
|
!computed_by.empty?
|
108
116
|
end
|
@@ -179,17 +187,19 @@ module Glimmer
|
|
179
187
|
model, property_name = zip
|
180
188
|
nested_property_observer = nested_property_observers[property_name]
|
181
189
|
previous_index = i - 1
|
182
|
-
|
183
|
-
|
184
|
-
|
190
|
+
if previous_index.negative?
|
191
|
+
parent_model = self
|
192
|
+
parent_property_name = nil
|
193
|
+
parent_observer = observer
|
194
|
+
else
|
195
|
+
parent_model = nested_models[previous_index]
|
196
|
+
parent_property_name = nested_property_names[previous_index]
|
197
|
+
parent_observer = nested_property_observers[parent_property_name]
|
198
|
+
end
|
185
199
|
parent_property_name = nil if parent_property_name.to_s.start_with?('[')
|
186
200
|
unless model.nil?
|
187
|
-
|
188
|
-
|
189
|
-
observer_registration = nested_property_observer.observe(model)
|
190
|
-
else
|
191
|
-
observer_registration = nested_property_observer.observe(model, property_name)
|
192
|
-
end
|
201
|
+
# TODO figure out a way to deal with this more uniformly
|
202
|
+
observer_registration = property_indexed?(property_name) ? nested_property_observer.observe(model) : nested_property_observer.observe(model, property_name)
|
193
203
|
parent_registration = parent_observer.registration_for(parent_model, parent_property_name)
|
194
204
|
parent_observer.add_dependent(parent_registration => observer_registration)
|
195
205
|
end
|
@@ -1,3 +1,24 @@
|
|
1
|
+
# Copyright (c) 2007-2020 Andy Maleh
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
# a copy of this software and associated documentation files (the
|
5
|
+
# "Software"), to deal in the Software without restriction, including
|
6
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
# the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be
|
12
|
+
# included in all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
1
22
|
require 'glimmer/error'
|
2
23
|
|
3
24
|
module Glimmer
|
@@ -1,13 +1,32 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# Copyright (c) 2007-2020 Andy Maleh
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
# a copy of this software and associated documentation files (the
|
5
|
+
# "Software"), to deal in the Software without restriction, including
|
6
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
# the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be
|
12
|
+
# included in all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
3
21
|
|
22
|
+
require 'set'
|
4
23
|
require 'glimmer/data_binding/observable'
|
24
|
+
require 'array_include_methods'
|
5
25
|
|
6
26
|
using ArrayIncludeMethods
|
7
27
|
|
8
28
|
module Glimmer
|
9
29
|
module DataBinding
|
10
|
-
# TODO prefix utility methods with double-underscore
|
11
30
|
module ObservableArray
|
12
31
|
include Observable
|
13
32
|
|
@@ -37,11 +56,7 @@ module Glimmer
|
|
37
56
|
if !element_properties.empty?
|
38
57
|
old_element_properties = element_properties_for(observer)
|
39
58
|
observer_element_properties[observer] = element_properties_for(observer) - Set.new(element_properties)
|
40
|
-
each
|
41
|
-
element_properties.each do |property|
|
42
|
-
observer.unobserve(element, property)
|
43
|
-
end
|
44
|
-
end
|
59
|
+
each { |element| element_properties.each { |property| observer.unobserve(element, property) } }
|
45
60
|
end
|
46
61
|
if element_properties_for(observer).empty?
|
47
62
|
property_observer_list.delete(observer)
|
@@ -169,9 +184,7 @@ module Glimmer
|
|
169
184
|
remove_element_observers(old_value)
|
170
185
|
end
|
171
186
|
super(&block).tap do
|
172
|
-
each
|
173
|
-
add_element_observers(element)
|
174
|
-
end
|
187
|
+
each { |element| add_element_observers(element) }
|
175
188
|
notify_observers
|
176
189
|
end
|
177
190
|
else
|
@@ -181,9 +194,7 @@ module Glimmer
|
|
181
194
|
alias map! collect!
|
182
195
|
|
183
196
|
def compact!
|
184
|
-
super.tap
|
185
|
-
notify_observers
|
186
|
-
end
|
197
|
+
super.tap { notify_observers }
|
187
198
|
end
|
188
199
|
|
189
200
|
def flatten!(level=nil)
|
@@ -192,17 +203,13 @@ module Glimmer
|
|
192
203
|
remove_element_observers(old_value)
|
193
204
|
end
|
194
205
|
(level.nil? ? super() : super(level)).tap do
|
195
|
-
each
|
196
|
-
add_element_observers(element)
|
197
|
-
end
|
206
|
+
each { |element| add_element_observers(element) }
|
198
207
|
notify_observers
|
199
208
|
end
|
200
209
|
end
|
201
210
|
|
202
211
|
def rotate!(count=1)
|
203
|
-
super(count).tap
|
204
|
-
notify_observers
|
205
|
-
end
|
212
|
+
super(count).tap { notify_observers }
|
206
213
|
end
|
207
214
|
|
208
215
|
def select!(&block)
|
@@ -221,9 +228,7 @@ module Glimmer
|
|
221
228
|
end
|
222
229
|
|
223
230
|
def shuffle!(hash = nil)
|
224
|
-
(hash.nil? ? super() : super(random: hash[:random])).tap
|
225
|
-
notify_observers
|
226
|
-
end
|
231
|
+
(hash.nil? ? super() : super(random: hash[:random])).tap { notify_observers }
|
227
232
|
end
|
228
233
|
|
229
234
|
def slice!(arg1, arg2=nil)
|
@@ -238,15 +243,11 @@ module Glimmer
|
|
238
243
|
end
|
239
244
|
|
240
245
|
def sort!(&block)
|
241
|
-
(block.nil? ? super() : super(&block)).tap
|
242
|
-
notify_observers
|
243
|
-
end
|
246
|
+
(block.nil? ? super() : super(&block)).tap { notify_observers }
|
244
247
|
end
|
245
248
|
|
246
249
|
def sort_by!(&block)
|
247
|
-
(block.nil? ? super() : super(&block)).tap
|
248
|
-
notify_observers
|
249
|
-
end
|
250
|
+
(block.nil? ? super() : super(&block)).tap { notify_observers }
|
250
251
|
end
|
251
252
|
|
252
253
|
def uniq!(&block)
|
@@ -255,15 +256,15 @@ module Glimmer
|
|
255
256
|
remove_element_observers(old_value)
|
256
257
|
end
|
257
258
|
(block.nil? ? super() : super(&block)).tap do
|
258
|
-
each
|
259
|
-
add_element_observers(element)
|
260
|
-
end
|
259
|
+
each { |element| add_element_observers(element) }
|
261
260
|
notify_observers
|
262
261
|
end
|
263
262
|
end
|
264
263
|
|
265
264
|
def reject!(&block)
|
266
|
-
if
|
265
|
+
if block.nil?
|
266
|
+
super
|
267
|
+
else
|
267
268
|
old_array = Array.new(self)
|
268
269
|
super(&block).tap do
|
269
270
|
(old_array - self).each do |old_value|
|
@@ -272,17 +273,12 @@ module Glimmer
|
|
272
273
|
end
|
273
274
|
notify_observers
|
274
275
|
end
|
275
|
-
else
|
276
|
-
super
|
277
276
|
end
|
278
277
|
end
|
279
278
|
|
280
279
|
def unregister_dependent_observers(old_value)
|
281
|
-
# TODO look into optimizing this
|
282
280
|
return unless old_value.is_a?(ObservableModel) || old_value.is_a?(ObservableArray)
|
283
|
-
property_observer_list.each
|
284
|
-
observer.unregister_dependents_with_observable(observer.registration_for(self), old_value)
|
285
|
-
end
|
281
|
+
property_observer_list.each { |observer| observer.unregister_dependents_with_observable(observer.registration_for(self), old_value) }
|
286
282
|
end
|
287
283
|
end
|
288
284
|
end
|
@@ -1,9 +1,29 @@
|
|
1
|
+
# Copyright (c) 2007-2020 Andy Maleh
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
# a copy of this software and associated documentation files (the
|
5
|
+
# "Software"), to deal in the Software without restriction, including
|
6
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
# the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be
|
12
|
+
# included in all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
1
22
|
require 'glimmer/data_binding/observable'
|
2
23
|
require 'glimmer/data_binding/observer'
|
3
24
|
|
4
25
|
module Glimmer
|
5
26
|
module DataBinding
|
6
|
-
# TODO prefix utility methods with double-underscore
|
7
27
|
module ObservableModel
|
8
28
|
include Observable
|
9
29
|
|
@@ -17,6 +37,17 @@ module Glimmer
|
|
17
37
|
@observable_model.notify_observers(@property_name)
|
18
38
|
end
|
19
39
|
end
|
40
|
+
|
41
|
+
PROPERTY_WRITER_FACTORY = lambda do |property_name|
|
42
|
+
property_writer_name = "#{property_name}="
|
43
|
+
lambda do |value|
|
44
|
+
old_value = self.send(property_name)
|
45
|
+
unregister_dependent_observers(property_name, old_value)
|
46
|
+
self.send("__original_#{property_writer_name}", value)
|
47
|
+
notify_observers(property_name)
|
48
|
+
ensure_array_object_observer(property_name, value, old_value)
|
49
|
+
end
|
50
|
+
end
|
20
51
|
|
21
52
|
def add_observer(observer, property_name)
|
22
53
|
return observer if has_observer?(observer, property_name)
|
@@ -47,11 +78,8 @@ module Glimmer
|
|
47
78
|
end
|
48
79
|
|
49
80
|
def notify_observers(property_name)
|
50
|
-
property_observer_list(property_name).to_a.each
|
51
|
-
observer.call(send(property_name))
|
52
|
-
end
|
81
|
+
property_observer_list(property_name).to_a.each { |observer| observer.call(send(property_name)) }
|
53
82
|
end
|
54
|
-
#TODO upon updating values, make sure dependent observers are cleared (not added as dependents here)
|
55
83
|
|
56
84
|
def add_property_writer_observers(property_name)
|
57
85
|
property_writer_name = "#{property_name}="
|
@@ -60,27 +88,22 @@ module Glimmer
|
|
60
88
|
begin
|
61
89
|
singleton_method("__original_#{property_writer_name}")
|
62
90
|
rescue
|
63
|
-
|
64
|
-
define_singleton_method(
|
65
|
-
define_singleton_method(property_writer_name) do |value|
|
66
|
-
old_value = self.send(property_name)
|
67
|
-
unregister_dependent_observers(property_name, old_value)
|
68
|
-
self.send("__original_#{property_writer_name}", value)
|
69
|
-
notify_observers(property_name)
|
70
|
-
ensure_array_object_observer(property_name, value, old_value)
|
71
|
-
end
|
91
|
+
define_singleton_method("__original_#{property_writer_name}", property_writer_method(property_writer_name))
|
92
|
+
define_singleton_method(property_writer_name, &PROPERTY_WRITER_FACTORY.call(property_name))
|
72
93
|
end
|
73
94
|
rescue => e
|
74
95
|
#ignore writing if no property writer exists
|
75
96
|
Glimmer::Config.logger.debug {"No need to observe property writer: #{property_writer_name}\n#{e.message}\n#{e.backtrace.join("\n")}"}
|
76
97
|
end
|
98
|
+
|
99
|
+
def property_writer_method(property_writer_name)
|
100
|
+
self.class.instance_method(property_writer_name) rescue self.method(property_writer_name)
|
101
|
+
end
|
77
102
|
|
78
103
|
def unregister_dependent_observers(property_name, old_value)
|
79
104
|
# TODO look into optimizing this
|
80
105
|
return unless old_value.is_a?(ObservableModel) || old_value.is_a?(ObservableArray)
|
81
|
-
property_observer_list(property_name).each
|
82
|
-
observer.unregister_dependents_with_observable(observer.registration_for(self, property_name), old_value)
|
83
|
-
end
|
106
|
+
property_observer_list(property_name).each { |observer| observer.unregister_dependents_with_observable(observer.registration_for(self, property_name), old_value) }
|
84
107
|
end
|
85
108
|
|
86
109
|
def ensure_array_object_observer(property_name, object, old_object = nil)
|
@@ -95,10 +118,8 @@ module Glimmer
|
|
95
118
|
end
|
96
119
|
|
97
120
|
def array_object_observer_for(property_name)
|
98
|
-
@array_object_observers ||= {}
|
99
|
-
unless @array_object_observers.has_key?(property_name)
|
100
|
-
@array_object_observers[property_name] = ObservableModel::Notifier.new(self, property_name)
|
101
|
-
end
|
121
|
+
@array_object_observers ||= {}
|
122
|
+
@array_object_observers[property_name] = ObservableModel::Notifier.new(self, property_name) unless @array_object_observers.has_key?(property_name)
|
102
123
|
@array_object_observers[property_name]
|
103
124
|
end
|
104
125
|
end
|