glimmer 0.10.1 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +365 -0
- data/CONTRIBUTING.md +62 -0
- data/LICENSE.txt +1 -1
- data/PROCESS.md +35 -0
- data/README.md +485 -2871
- data/VERSION +1 -1
- data/glimmer.gemspec +81 -0
- data/lib/glimmer.rb +37 -19
- data/lib/glimmer/config.rb +31 -9
- 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 +228 -29
- data/lib/glimmer/data_binding/observable_model.rb +43 -22
- data/lib/glimmer/data_binding/observer.rb +22 -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 +47 -20
- data/lib/glimmer/excluded_keyword_error.rb +0 -5
@@ -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)
|
@@ -34,7 +65,7 @@ module Glimmer
|
|
34
65
|
end
|
35
66
|
|
36
67
|
def has_observer_for_any_property?(observer)
|
37
|
-
property_observer_hash.values.map(&:to_a).
|
68
|
+
property_observer_hash.values.map(&:to_a).reduce(:+).include?(observer)
|
38
69
|
end
|
39
70
|
|
40
71
|
def property_observer_hash
|
@@ -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
|
@@ -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
|
@@ -59,6 +80,7 @@ module Glimmer
|
|
59
80
|
# registers observer in an observable on a property (optional)
|
60
81
|
# observer maintains registration list to unregister later
|
61
82
|
def register(observable, property = nil)
|
83
|
+
return if observable.nil?
|
62
84
|
unless observable.is_a?(Observable)
|
63
85
|
# TODO refactor code to be more smart/polymorphic/automated and honor open/closed principle
|
64
86
|
if observable.is_a?(Array)
|
data/lib/glimmer/dsl/engine.rb
CHANGED
@@ -1,3 +1,25 @@
|
|
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
|
+
|
22
|
+
require 'forwardable'
|
1
23
|
require 'facets/string/camelcase'
|
2
24
|
|
3
25
|
require 'glimmer/dsl/expression_handler'
|
@@ -12,20 +34,42 @@ module Glimmer
|
|
12
34
|
# with ordered expression array specified via `.expressions=` method.
|
13
35
|
class Engine
|
14
36
|
MESSAGE_NO_DSLS = "Glimmer has no DSLs configured. Add glimmer-dsl-swt gem or visit https://github.com/AndyObtiva/glimmer#multi-dsl-support for more details.\n"
|
37
|
+
STATIC_EXPRESSION_METHOD_FACTORY = lambda do |keyword|
|
38
|
+
lambda do |*args, &block|
|
39
|
+
if Glimmer::DSL::Engine.no_dsls?
|
40
|
+
puts Glimmer::DSL::Engine::MESSAGE_NO_DSLS
|
41
|
+
else
|
42
|
+
retrieved_static_expression = Glimmer::DSL::Engine.static_expressions[keyword][Glimmer::DSL::Engine.dsl]
|
43
|
+
static_expression_dsl = (Glimmer::DSL::Engine.static_expressions[keyword].keys - Glimmer::DSL::Engine.disabled_dsls).first if retrieved_static_expression.nil?
|
44
|
+
interpretation = nil
|
45
|
+
if retrieved_static_expression.nil? && Glimmer::DSL::Engine.dsl && (static_expression_dsl.nil? || !Glimmer::DSL::Engine.static_expressions[keyword][static_expression_dsl].is_a?(TopLevelExpression))
|
46
|
+
begin
|
47
|
+
interpretation = Glimmer::DSL::Engine.interpret(keyword, *args, &block)
|
48
|
+
rescue => e
|
49
|
+
raise e if static_expression_dsl.nil? || !Glimmer::DSL::Engine.static_expressions[keyword][static_expression_dsl].is_a?(TopLevelExpression)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
if interpretation
|
53
|
+
interpretation
|
54
|
+
else
|
55
|
+
raise Glimmer::Error, "Unsupported keyword: #{keyword}" unless static_expression_dsl || retrieved_static_expression
|
56
|
+
Glimmer::DSL::Engine.dsl_stack.push(static_expression_dsl || Glimmer::DSL::Engine.dsl)
|
57
|
+
static_expression = Glimmer::DSL::Engine.static_expressions[keyword][Glimmer::DSL::Engine.dsl]
|
58
|
+
if !static_expression.can_interpret?(Glimmer::DSL::Engine.parent, keyword, *args, &block)
|
59
|
+
raise Error, "Invalid use of Glimmer keyword #{keyword} with args #{args} under parent #{Glimmer::DSL::Engine.parent}"
|
60
|
+
else
|
61
|
+
Glimmer::Config.logger.info {"#{static_expression.class.name} will handle expression keyword #{keyword}"}
|
62
|
+
Glimmer::DSL::Engine.interpret_expression(static_expression, keyword, *args, &block)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
15
68
|
|
16
69
|
class << self
|
17
|
-
|
18
|
-
dsl_name = dsl_name&.to_sym
|
19
|
-
if dsl_name
|
20
|
-
dsl_stack.push(dsl_name)
|
21
|
-
else
|
22
|
-
dsl_stack.clear
|
23
|
-
end
|
24
|
-
end
|
70
|
+
extend Forwardable
|
25
71
|
|
26
|
-
|
27
|
-
dsl_stack.last
|
28
|
-
end
|
72
|
+
def_delegator :dsl_stack, :last, :dsl
|
29
73
|
|
30
74
|
def dsls
|
31
75
|
static_expressions.values.map(&:keys).flatten.uniq
|
@@ -74,14 +118,10 @@ module Glimmer
|
|
74
118
|
end
|
75
119
|
|
76
120
|
# Sets dynamic expression chains of responsibility. Useful for internal testing
|
77
|
-
|
78
|
-
@dynamic_expression_chains_of_responsibility = chains
|
79
|
-
end
|
121
|
+
attr_writer :dynamic_expression_chains_of_responsibility
|
80
122
|
|
81
123
|
# Sets static expressions. Useful for internal testing
|
82
|
-
|
83
|
-
@static_expressions = expressions
|
84
|
-
end
|
124
|
+
attr_writer :static_expressions
|
85
125
|
|
86
126
|
# Sets an ordered array of DSL expressions to support
|
87
127
|
#
|
@@ -109,38 +149,7 @@ module Glimmer
|
|
109
149
|
static_expression_dsl = static_expression.class.dsl
|
110
150
|
static_expressions[keyword] ||= {}
|
111
151
|
static_expressions[keyword][static_expression_dsl] = static_expression
|
112
|
-
Glimmer.send(:define_method, keyword
|
113
|
-
if Glimmer::DSL::Engine.no_dsls?
|
114
|
-
puts Glimmer::DSL::Engine::MESSAGE_NO_DSLS
|
115
|
-
else
|
116
|
-
retrieved_static_expression = Glimmer::DSL::Engine.static_expressions[keyword][Glimmer::DSL::Engine.dsl]
|
117
|
-
static_expression_dsl = (Glimmer::DSL::Engine.static_expressions[keyword].keys - Glimmer::DSL::Engine.disabled_dsls).first if retrieved_static_expression.nil?
|
118
|
-
interpretation = nil
|
119
|
-
if retrieved_static_expression.nil? && Glimmer::DSL::Engine.dsl && (static_expression_dsl.nil? || !Glimmer::DSL::Engine.static_expressions[keyword][static_expression_dsl].is_a?(TopLevelExpression))
|
120
|
-
begin
|
121
|
-
interpretation = Glimmer::DSL::Engine.interpret(keyword, *args, &block)
|
122
|
-
rescue => e
|
123
|
-
raise e if static_expression_dsl.nil? || !Glimmer::DSL::Engine.static_expressions[keyword][static_expression_dsl].is_a?(TopLevelExpression)
|
124
|
-
end
|
125
|
-
end
|
126
|
-
if interpretation
|
127
|
-
interpretation
|
128
|
-
else
|
129
|
-
raise Glimmer::Error, "Unsupported keyword: #{keyword}" unless static_expression_dsl || retrieved_static_expression
|
130
|
-
Glimmer::DSL::Engine.dsl_stack.push(static_expression_dsl || Glimmer::DSL::Engine.dsl)
|
131
|
-
static_expression = Glimmer::DSL::Engine.static_expressions[keyword][Glimmer::DSL::Engine.dsl]
|
132
|
-
if !static_expression.can_interpret?(Glimmer::DSL::Engine.parent, keyword, *args, &block)
|
133
|
-
raise Error, "Invalid use of Glimmer keyword #{keyword} with args #{args} under parent #{Glimmer::DSL::Engine.parent}"
|
134
|
-
else
|
135
|
-
Glimmer::Config.logger.info {"#{static_expression.class.name} will handle expression keyword #{keyword}"}
|
136
|
-
static_expression.interpret(Glimmer::DSL::Engine.parent, keyword, *args, &block).tap do |ui_object|
|
137
|
-
Glimmer::DSL::Engine.add_content(ui_object, static_expression, &block) unless block.nil?
|
138
|
-
Glimmer::DSL::Engine.dsl_stack.pop
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|
152
|
+
Glimmer.send(:define_method, keyword, &STATIC_EXPRESSION_METHOD_FACTORY.call(keyword))
|
144
153
|
end
|
145
154
|
|
146
155
|
def expression_class(dsl_namespace, expression_name)
|
@@ -152,16 +161,17 @@ module Glimmer
|
|
152
161
|
end
|
153
162
|
|
154
163
|
# Interprets Glimmer dynamic DSL expression consisting of keyword, args, and block (e.g. shell(:no_resize) { ... })
|
155
|
-
def interpret(keyword, *args, &block)
|
156
|
-
if no_dsls?
|
157
|
-
puts MESSAGE_NO_DSLS
|
158
|
-
return
|
159
|
-
end
|
164
|
+
def interpret(keyword, *args, &block)
|
165
|
+
return puts(MESSAGE_NO_DSLS) if no_dsls?
|
160
166
|
keyword = keyword.to_s
|
161
167
|
dynamic_expression_dsl = (dynamic_expression_chains_of_responsibility.keys - disabled_dsls).first if dsl.nil?
|
162
168
|
dsl_stack.push(dynamic_expression_dsl || dsl)
|
163
169
|
expression = dynamic_expression_chains_of_responsibility[dsl].handle(parent, keyword, *args, &block)
|
164
|
-
expression
|
170
|
+
interpret_expression(expression, keyword, *args, &block)
|
171
|
+
end
|
172
|
+
|
173
|
+
def interpret_expression(expression, keyword, *args, &block)
|
174
|
+
expression.interpret(parent, keyword, *args, &block).tap do |ui_object|
|
165
175
|
add_content(ui_object, expression, &block)
|
166
176
|
dsl_stack.pop
|
167
177
|
end
|
@@ -189,9 +199,7 @@ module Glimmer
|
|
189
199
|
#
|
190
200
|
# Parents are maintained in a stack while evaluating Glimmer DSL
|
191
201
|
# to ensure properly ordered interpretation of DSL syntax
|
192
|
-
|
193
|
-
parent_stack.last
|
194
|
-
end
|
202
|
+
def_delegator :parent_stack, :last, :parent
|
195
203
|
|
196
204
|
def parent_stack
|
197
205
|
parent_stacks[dsl] ||= []
|
@@ -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,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/invalid_keyword_error'
|
2
23
|
|
3
24
|
module Glimmer
|
@@ -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,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 'facets/string/underscore'
|
2
23
|
|
3
24
|
require 'glimmer/error'
|
@@ -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 DSL
|
3
24
|
# Mixin that represents expressions that are always at the top with parent nil
|
data/lib/glimmer/error.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
|
# Represents Glimmer errors that occur due to invalid use of Glimmer
|
3
24
|
# without handing control flow back to original method_missing
|