glimmer 1.2.0 → 1.3.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 +4 -0
 - data/README.md +4 -1
 - data/VERSION +1 -1
 - data/glimmer.gemspec +3 -3
 - data/lib/glimmer/dsl/engine.rb +10 -6
 - data/lib/glimmer/dsl/expression.rb +13 -3
 - data/lib/glimmer/dsl/parent_expression.rb +5 -2
 - data/lib/glimmer/dsl/static_expression.rb +2 -1
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: bc60f9fe9c141b35fe836c661860faf448bccccad9f4bfe14c885301e393e75d
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 994743aae8636eea4f89fbad60850942854f2d7388bf7f13ce465e4cbe1a809e
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 777b7ce413bec3f1cf75accdedcb905e393a9b94e2be4572c590f6e3108d2cee7923f83c02e0753ba2f2bb21427b77116da37d8af1a86e477da5821be9d4e5d5
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: baa2ed05d9cd5759b08a8555ceba26f2672be40f28d868c975e5286a5daf484a7128709093332e7f3f69dc99a5a43cde8550ebe472891cee65c20882751defa0
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -3,6 +3,10 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            Related Change Logs:
         
     | 
| 
       4 
4 
     | 
    
         
             
            - [glimmer-dsl-swt/CHANGELOG.md](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/CHANGELOG.md)
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
      
 6 
     | 
    
         
            +
            ### 1.3.0
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            - Support the `Expression#around` hook, which executes code around both `interpret` and `add_content`
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
       6 
10 
     | 
    
         
             
            ## 1.2.0
         
     | 
| 
       7 
11 
     | 
    
         | 
| 
       8 
12 
     | 
    
         
             
            - Alter `Engine`/`Expression`/`ParentExpression` API to pass `keyword` and `args` to `#add_content` method. This enables consumers to vary behavior based on `keyword` and `args`, not just `parent` and presence of `block`.
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -102,6 +102,9 @@ Every `Expression` sublcass must specify two methods at least: 
     | 
|
| 
       102 
102 
     | 
    
         | 
| 
       103 
103 
     | 
    
         
             
            For example, some parent widgets use their block for other reasons or process their children at very specific times, so they may override that method and disable it, or otherwise call `super` and do additional work.
         
     | 
| 
       104 
104 
     | 
    
         | 
| 
      
 105 
     | 
    
         
            +
            Otherwise, all expressions support the `around` hook method:
         
     | 
| 
      
 106 
     | 
    
         
            +
            - `around(parent, keyword, args, block, &interpret_and_add_content)`: a hook for executing code around both `interpret` and `add_content`. Clients may invoke `interpret_and_add_content.call` or `yield` when ready for interpretation. `parent`, `keyword`, `args`, and `block` are supplied in case they are needed in the `around` logic.
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
       105 
108 
     | 
    
         
             
            Example of a dynamic expression:
         
     | 
| 
       106 
109 
     | 
    
         | 
| 
       107 
110 
     | 
    
         
             
            ```ruby
         
     | 
| 
         @@ -201,7 +204,7 @@ end 
     | 
|
| 
       201 
204 
     | 
    
         
             
            ### Setup
         
     | 
| 
       202 
205 
     | 
    
         | 
| 
       203 
206 
     | 
    
         
             
            Follow these steps to author a [Glimmer](https://rubygems.org/gems/glimmer) DSL:
         
     | 
| 
       204 
     | 
    
         
            -
            - Add `gem 'glimmer', '~> 1. 
     | 
| 
      
 207 
     | 
    
         
            +
            - Add `gem 'glimmer', '~> 1.3.0'` to `Gemfile` and run `bundle` or run `gem install glimmer -v1.3.0` and add `require 'glimmer'`
         
     | 
| 
       205 
208 
     | 
    
         
             
            - Create `glimmer/dsl/[dsl_name]/dsl.rb`, which requires and adds all dynamic expressions for the [dsl_name] Glimmer DSL module as per the code shown in the previous section (or [Official DSLs](#official-dsls) as examples)
         
     | 
| 
       206 
209 
     | 
    
         
             
            - Create `glimmer/dsl/[dsl_name]/[expresion_name]_expresion.rb` for every [expresion_name] expression needed, whether dynamic or static
         
     | 
| 
       207 
210 
     | 
    
         | 
    
        data/VERSION
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            1. 
     | 
| 
      
 1 
     | 
    
         
            +
            1.3.0
         
     | 
    
        data/glimmer.gemspec
    CHANGED
    
    | 
         @@ -2,16 +2,16 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            # DO NOT EDIT THIS FILE DIRECTLY
         
     | 
| 
       3 
3 
     | 
    
         
             
            # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
         
     | 
| 
       4 
4 
     | 
    
         
             
            # -*- encoding: utf-8 -*-
         
     | 
| 
       5 
     | 
    
         
            -
            # stub: glimmer 1. 
     | 
| 
      
 5 
     | 
    
         
            +
            # stub: glimmer 1.3.0 ruby lib
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       8 
8 
     | 
    
         
             
              s.name = "glimmer".freeze
         
     | 
| 
       9 
     | 
    
         
            -
              s.version = "1. 
     | 
| 
      
 9 
     | 
    
         
            +
              s.version = "1.3.0"
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
         
     | 
| 
       12 
12 
     | 
    
         
             
              s.require_paths = ["lib".freeze]
         
     | 
| 
       13 
13 
     | 
    
         
             
              s.authors = ["AndyMaleh".freeze]
         
     | 
| 
       14 
     | 
    
         
            -
              s.date = "2021-03- 
     | 
| 
      
 14 
     | 
    
         
            +
              s.date = "2021-03-08"
         
     | 
| 
       15 
15 
     | 
    
         
             
              s.description = "Glimmer is a Ruby DSL Framework for Ruby GUI and More, consisting of a DSL Engine and an Observable/Observer/Data-Binding Library. Used in the Glimmer DSL for SWT (JRuby Desktop Development GUI Framework), the Glimmer DSL for Tk (Ruby Desktop Development GUI Library), the Glimmer DSL for Opal (Pure Ruby Web GUI and Auto-Webifier of Desktop Apps), the Glimmer DSL for XML (& HTML), and the Glimmer DSL for CSS.".freeze
         
     | 
| 
       16 
16 
     | 
    
         
             
              s.email = "andy.am@gmail.com".freeze
         
     | 
| 
       17 
17 
     | 
    
         
             
              s.extra_rdoc_files = [
         
     | 
    
        data/lib/glimmer/dsl/engine.rb
    CHANGED
    
    | 
         @@ -176,10 +176,14 @@ module Glimmer 
     | 
|
| 
       176 
176 
     | 
    
         
             
                    end
         
     | 
| 
       177 
177 
     | 
    
         | 
| 
       178 
178 
     | 
    
         
             
                    def interpret_expression(expression, keyword, *args, &block)
         
     | 
| 
       179 
     | 
    
         
            -
                       
     | 
| 
       180 
     | 
    
         
            -
             
     | 
| 
       181 
     | 
    
         
            -
                         
     | 
| 
      
 179 
     | 
    
         
            +
                      new_parent = nil
         
     | 
| 
      
 180 
     | 
    
         
            +
                      expression.around(parent, keyword, args, block) do
         
     | 
| 
      
 181 
     | 
    
         
            +
                        new_parent = expression.interpret(parent, keyword, *args, &block).tap do |new_parent|
         
     | 
| 
      
 182 
     | 
    
         
            +
                          add_content(new_parent, expression, keyword, *args, &block)
         
     | 
| 
      
 183 
     | 
    
         
            +
                          dsl_stack.pop
         
     | 
| 
      
 184 
     | 
    
         
            +
                        end
         
     | 
| 
       182 
185 
     | 
    
         
             
                      end
         
     | 
| 
      
 186 
     | 
    
         
            +
                      new_parent
         
     | 
| 
       183 
187 
     | 
    
         
             
                    end
         
     | 
| 
       184 
188 
     | 
    
         | 
| 
       185 
189 
     | 
    
         
             
                    # Adds content block to parent UI object
         
     | 
| 
         @@ -187,12 +191,12 @@ module Glimmer 
     | 
|
| 
       187 
191 
     | 
    
         
             
                    # This allows evaluating parent UI object properties and children
         
     | 
| 
       188 
192 
     | 
    
         
             
                    #
         
     | 
| 
       189 
193 
     | 
    
         
             
                    # For example, a shell widget would get properties set and children added
         
     | 
| 
       190 
     | 
    
         
            -
                    def add_content( 
     | 
| 
      
 194 
     | 
    
         
            +
                    def add_content(new_parent, expression, keyword, *args, &block)
         
     | 
| 
       191 
195 
     | 
    
         
             
                      if block_given? && expression.is_a?(ParentExpression)
         
     | 
| 
       192 
196 
     | 
    
         
             
                        dsl_stack.push(expression.class.dsl)
         
     | 
| 
       193 
     | 
    
         
            -
                        parent_stack.push( 
     | 
| 
      
 197 
     | 
    
         
            +
                        parent_stack.push(new_parent)
         
     | 
| 
       194 
198 
     | 
    
         
             
                        begin
         
     | 
| 
       195 
     | 
    
         
            -
                          expression.add_content( 
     | 
| 
      
 199 
     | 
    
         
            +
                          expression.add_content(new_parent, keyword, *args, &block)
         
     | 
| 
       196 
200 
     | 
    
         
             
                        ensure
         
     | 
| 
       197 
201 
     | 
    
         
             
                          parent_stack.pop
         
     | 
| 
       198 
202 
     | 
    
         
             
                          dsl_stack.pop
         
     | 
| 
         @@ -47,13 +47,23 @@ module Glimmer 
     | 
|
| 
       47 
47 
     | 
    
         
             
                    raise Error, "#interpret must be implemented by an Expression subclass"
         
     | 
| 
       48 
48 
     | 
    
         
             
                  end
         
     | 
| 
       49 
49 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
                  # Adds block content to  
     | 
| 
      
 50 
     | 
    
         
            +
                  # Adds block content to newly interpreted parent object (Optional)
         
     | 
| 
       51 
51 
     | 
    
         
             
                  #
         
     | 
| 
       52 
52 
     | 
    
         
             
                  # Only expressions that receive a content block should implement
         
     | 
| 
       53 
     | 
    
         
            -
                  def add_content( 
     | 
| 
      
 53 
     | 
    
         
            +
                  def add_content(new_parent, keyword, *args, &block)
         
     | 
| 
       54 
54 
     | 
    
         
             
                    # No Op by default
         
     | 
| 
       55 
55 
     | 
    
         
             
                  end
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
      
 56 
     | 
    
         
            +
                  
         
     | 
| 
      
 57 
     | 
    
         
            +
                  # Executes code around the `interpret_and_add_content` block,
         
     | 
| 
      
 58 
     | 
    
         
            +
                  # which invokes `interpret` and `add_content` when called without args
         
     | 
| 
      
 59 
     | 
    
         
            +
                  # (parent, keyword, args, block are supplied automatically).
         
     | 
| 
      
 60 
     | 
    
         
            +
                  # Clients may invoke yield as an alternative to calling `interpret_and_add_content` directly.
         
     | 
| 
      
 61 
     | 
    
         
            +
                  # This method takes parent, keyword, args, block in case they are needed
         
     | 
| 
      
 62 
     | 
    
         
            +
                  # in its around logic.
         
     | 
| 
      
 63 
     | 
    
         
            +
                  def around(parent, keyword, args, block, &interpret_and_add_content)
         
     | 
| 
      
 64 
     | 
    
         
            +
                    interpret_and_add_content.call
         
     | 
| 
      
 65 
     | 
    
         
            +
                  end
         
     | 
| 
      
 66 
     | 
    
         
            +
                  
         
     | 
| 
       57 
67 
     | 
    
         
             
                  # Checks if object is a Symbol or a String
         
     | 
| 
       58 
68 
     | 
    
         
             
                  def textual?(object)
         
     | 
| 
       59 
69 
     | 
    
         
             
                    object.is_a?(Symbol) or object.is_a?(String)
         
     | 
| 
         @@ -25,8 +25,11 @@ module Glimmer 
     | 
|
| 
       25 
25 
     | 
    
         
             
              module DSL
         
     | 
| 
       26 
26 
     | 
    
         
             
                # Mixin that represents expressions that always have a content block
         
     | 
| 
       27 
27 
     | 
    
         
             
                module ParentExpression
         
     | 
| 
       28 
     | 
    
         
            -
                   
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
      
 28 
     | 
    
         
            +
                  # Default implementation that simply invokes block content with newly interpreted parent object as an argument
         
     | 
| 
      
 29 
     | 
    
         
            +
                  #
         
     | 
| 
      
 30 
     | 
    
         
            +
                  # Only expressions that receive a content block should implement
         
     | 
| 
      
 31 
     | 
    
         
            +
                  def add_content(new_parent, keyword, *args, &block)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    block.call(new_parent)
         
     | 
| 
       30 
33 
     | 
    
         
             
                  end
         
     | 
| 
       31 
34 
     | 
    
         
             
                end
         
     | 
| 
       32 
35 
     | 
    
         
             
              end
         
     | 
| 
         @@ -50,7 +50,8 @@ module Glimmer 
     | 
|
| 
       50 
50 
     | 
    
         
             
                    end
         
     | 
| 
       51 
51 
     | 
    
         
             
                  end
         
     | 
| 
       52 
52 
     | 
    
         | 
| 
       53 
     | 
    
         
            -
                  # Subclasses may optionally implement
         
     | 
| 
      
 53 
     | 
    
         
            +
                  # Subclasses may optionally implement, but by default it only ensures that
         
     | 
| 
      
 54 
     | 
    
         
            +
                  # the keyword matches lower case static expression class name minus `Expression`
         
     | 
| 
       54 
55 
     | 
    
         
             
                  def can_interpret?(parent, keyword, *args, &block)
         
     | 
| 
       55 
56 
     | 
    
         
             
                    true
         
     | 
| 
       56 
57 
     | 
    
         
             
                  end
         
     | 
    
        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: 1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.3.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - AndyMaleh
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2021-03- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2021-03-08 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: array_include_methods
         
     |