Module: Glimmer
- Defined in:
- lib/glimmer.rb,
lib/glimmer/error.rb,
lib/glimmer/config.rb,
lib/glimmer/dsl/engine.rb,
lib/glimmer/dsl/expression.rb,
lib/glimmer/data_binding/observer.rb,
lib/glimmer/dsl/parent_expression.rb,
lib/glimmer/dsl/static_expression.rb,
lib/glimmer/invalid_keyword_error.rb,
lib/glimmer/dsl/expression_handler.rb,
lib/glimmer/excluded_keyword_error.rb,
lib/glimmer/data_binding/observable.rb,
lib/glimmer/dsl/top_level_expression.rb,
lib/glimmer/data_binding/model_binding.rb,
lib/glimmer/data_binding/observable_array.rb,
lib/glimmer/data_binding/observable_model.rb
Overview
Glimmer provides a JRuby Desktop UI DSL + Data-Binding functionality
A desktop UI application class must include Glimmer to gain access to Glimmer DSL
Glimmer DSL static keywords (e.g. rgb, bind, etc..) are available as inherited methods Glimmer DSL dynamic keywords (e.g. label, combo, etc…) are available via method_missing
Defined Under Namespace
Modules: Config, DSL, DataBinding Classes: Error, ExcludedKeywordError, InvalidKeywordError
Constant Summary collapse
- REGEX_METHODS_EXCLUDED =
TODO make it configurable to include or not include perhaps reverting to using included
/^(to_|\[)/
Class Attribute Summary collapse
-
.loop_last_data ⇒ Object
Returns the value of attribute loop_last_data.
Class Method Summary collapse
Instance Method Summary collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_symbol, *args, &block) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/glimmer.rb', line 40 def method_missing(method_symbol, *args, &block) new_loop_data = [method_symbol, args, block] if new_loop_data == Glimmer.loop_last_data Glimmer.loop_increment! if Glimmer.loop == Config.loop_max_count raise "Glimmer looped #{Config.loop_max_count} times with keyword '#{new_loop_data[0]}'! Check code for errors." end else Glimmer.loop_reset! end Glimmer.loop_last_data = new_loop_data # This if statement speeds up Glimmer in girb or whenever directly including on main object if method_symbol.to_s.match(REGEX_METHODS_EXCLUDED) raise ExcludedKeywordError, "Glimmer excluded keyword: #{method_symbol}" end Glimmer::Config.logger&.debug "Interpreting keyword: #{method_symbol}" Glimmer::DSL::Engine.interpret(method_symbol, *args, &block) rescue ExcludedKeywordError => e # TODO add a feature to show excluded keywords optionally for debugging purposes super(method_symbol, *args, &block) rescue InvalidKeywordError => e if !method_symbol.to_s.match(REGEX_METHODS_EXCLUDED) Glimmer::Config.logger&.error e. end Glimmer::Config.logger&.debug "#{e.}\n#{e.backtrace.join("\n")}" super(method_symbol, *args, &block) end |
Class Attribute Details
.loop_last_data ⇒ Object
Returns the value of attribute loop_last_data.
24 25 26 |
# File 'lib/glimmer.rb', line 24 def loop_last_data @loop_last_data end |
Class Method Details
.loop ⇒ Object
31 32 33 |
# File 'lib/glimmer.rb', line 31 def loop @loop ||= loop_reset! end |
.loop_increment! ⇒ Object
35 36 37 |
# File 'lib/glimmer.rb', line 35 def loop_increment! @loop = loop + 1 end |
.loop_reset!(including_loop_last_data = false) ⇒ Object
26 27 28 29 |
# File 'lib/glimmer.rb', line 26 def loop_reset!(including_loop_last_data = false) @loop_last_data = nil if including_loop_last_data @loop = 1 end |