plezi 0.14.1 → 0.14.2
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/.gitignore +2 -0
 - data/CHANGELOG.md +8 -0
 - data/README.md +7 -8
 - data/lib/plezi/api.rb +1 -1
 - data/lib/plezi/controller/controller.rb +6 -6
 - data/lib/plezi/router/route.rb +14 -13
 - data/lib/plezi/router/router.rb +11 -3
 - data/lib/plezi/version.rb +1 -1
 - data/plezi.gemspec +1 -1
 - metadata +8 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 46dea93c274cc8c463747a8d91e46c4af6852a86
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 56b9726006f702548770d2ea7beebbec6564ad8c
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 30312ea6a47f7e8d9dc53a5c8c552046da2c064bdab79f15699507e8bd8628a9ce0c9fc47ea31d19073e271ec9394082e5066f301f5115ffeb10dfe08a31e59f
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 0d275aa94313f9fe2bfe87a29eba26f31ad37ec9226c27a982fb86522404576aa65810f5575f211f160ed7d561de5bf12af3ce694e82f153d03b6e1e4e9212ef
         
     | 
    
        data/.gitignore
    CHANGED
    
    
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -2,6 +2,14 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            ***
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
      
 5 
     | 
    
         
            +
            Change log v.0.14.2
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            **Dependencies**: updates to dependency version requirements.
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            **Performance**: minor performance updates, i.e.: in the router, moved a `case` statement from the live (app is running) stage to the prep (app is initializing) stage and saved the `call` method extraction result for faster middleware mode performance.
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            ***
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
       5 
13 
     | 
    
         
             
            Change log v.0.14.1
         
     | 
| 
       6 
14 
     | 
    
         | 
| 
       7 
15 
     | 
    
         
             
            **Update**: update due to Iodine's 0.2.1 version and the deprecation of the `uuid` method (replaced by `conn_id` to minimize collisions).
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -4,11 +4,11 @@ 
     | 
|
| 
       4 
4 
     | 
    
         
             
            [](http://www.rubydoc.info/github/boazsegev/plezi/master/frames)
         
     | 
| 
       5 
5 
     | 
    
         
             
            [](https://github.com/boazsegev/plezi)
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
            Are microservices on your mind? Do you dream of a an SPA that's easy to scale? Did you wonder if you could write a whole Websockets, RESTful AJAX back-end with just a few lines of code ( 
     | 
| 
      
 7 
     | 
    
         
            +
            Are microservices on your mind? Do you dream of a an SPA that's easy to scale? Did you wonder if you could write a whole Websockets, RESTful AJAX back-end with just a few lines of code (business logic not included)?
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
            Welcome to your new home with [plezi.io](http://www.plezi.io), the Ruby real-time framework that assumes the  
     | 
| 
      
 9 
     | 
    
         
            +
            Welcome to your new home with [plezi.io](http://www.plezi.io), the Ruby real-time framework that assumes the business logic is *seperate* from the web service logic.
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
            **NOTICE**: Plezi 0.14. 
     | 
| 
      
 11 
     | 
    
         
            +
            **NOTICE**: Plezi 0.14.x (this branch) is NOT an update, it's a total rewrite. Features were _removed_ as well as altered. For example, Plezi is now a Rack framework, with the limitations of CGI design and the advantages of using existing middleware. API changes abound.
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
            ## What does Plezi have to offer?
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
         @@ -76,7 +76,7 @@ Or install it yourself as: 
     | 
|
| 
       76 
76 
     | 
    
         | 
| 
       77 
77 
     | 
    
         
             
            ## Usage
         
     | 
| 
       78 
78 
     | 
    
         | 
| 
       79 
     | 
    
         
            -
            A new application:
         
     | 
| 
      
 79 
     | 
    
         
            +
            A new application (default applications include a simple chatroom demo):
         
     | 
| 
       80 
80 
     | 
    
         | 
| 
       81 
81 
     | 
    
         
             
                 $  plezi new app_name
         
     | 
| 
       82 
82 
     | 
    
         | 
| 
         @@ -96,17 +96,16 @@ Plezi.route '*', HelloWorld 
     | 
|
| 
       96 
96 
     | 
    
         
             
            exit # <= if running from terminal, this will start the server
         
     | 
| 
       97 
97 
     | 
    
         
             
            ```
         
     | 
| 
       98 
98 
     | 
    
         | 
| 
       99 
     | 
    
         
            -
            ##  
     | 
| 
      
 99 
     | 
    
         
            +
            ## Documentation
         
     | 
| 
       100 
100 
     | 
    
         | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
      
 101 
     | 
    
         
            +
            Plezi is fairly well documented.
         
     | 
| 
       102 
102 
     | 
    
         | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
      
 103 
     | 
    
         
            +
            Documentation is available both in the forms of tutorials and explanations available on the [plezi.io website](http://www.plezi.io) as well as through [the YARD documentation](http://www.rubydoc.info/gems/plezi).
         
     | 
| 
       104 
104 
     | 
    
         | 
| 
       105 
105 
     | 
    
         
             
            ## Contributing
         
     | 
| 
       106 
106 
     | 
    
         | 
| 
       107 
107 
     | 
    
         
             
            Bug reports and pull requests are welcome on GitHub at https://github.com/boazsegev/plezi.
         
     | 
| 
       108 
108 
     | 
    
         | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
       110 
109 
     | 
    
         
             
            ## License
         
     | 
| 
       111 
110 
     | 
    
         | 
| 
       112 
111 
     | 
    
         
             
            The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
         
     | 
    
        data/lib/plezi/api.rb
    CHANGED
    
    
| 
         @@ -166,25 +166,25 @@ module Plezi 
     | 
|
| 
       166 
166 
     | 
    
         
             
                #         puts "#{from} is available"
         
     | 
| 
       167 
167 
     | 
    
         
             
                #       end
         
     | 
| 
       168 
168 
     | 
    
         
             
                #
         
     | 
| 
       169 
     | 
    
         
            -
                # Methods invoked using {unicast}, {broadcast} or {multicast} will  
     | 
| 
      
 169 
     | 
    
         
            +
                # Methods invoked using {unicast}, {broadcast} or {multicast} will quietly fail if the connection was lost, the requested method is undefined or the 'target' was invalid.
         
     | 
| 
       170 
170 
     | 
    
         
             
                def unicast(target, event_method, *args)
         
     | 
| 
       171 
171 
     | 
    
         
             
                  ::Plezi::Base::MessageDispatch.unicast(id ? self : self.class, target, event_method, args)
         
     | 
| 
       172 
172 
     | 
    
         
             
                end
         
     | 
| 
       173 
173 
     | 
    
         | 
| 
       174 
     | 
    
         
            -
                # Invokes a method on every websocket connection that belongs to this Controller / Type. When using Iodine, the method is invoked asynchronously.
         
     | 
| 
      
 174 
     | 
    
         
            +
                # Invokes a method on every websocket connection (except `self`) that belongs to this Controller / Type. When using Iodine, the method is invoked asynchronously.
         
     | 
| 
       175 
175 
     | 
    
         
             
                #
         
     | 
| 
       176 
176 
     | 
    
         
             
                #        self.broadcast :my_method, "argument 1", "argument 2", 3
         
     | 
| 
       177 
177 
     | 
    
         
             
                #
         
     | 
| 
       178 
     | 
    
         
            -
                # Methods invoked using {unicast}, {broadcast} or {multicast} will  
     | 
| 
      
 178 
     | 
    
         
            +
                # Methods invoked using {unicast}, {broadcast} or {multicast} will quietly fail if the connection was lost, the requested method is undefined or the 'target' was invalid.
         
     | 
| 
       179 
179 
     | 
    
         
             
                def broadcast(event_method, *args)
         
     | 
| 
       180 
180 
     | 
    
         
             
                  ::Plezi::Base::MessageDispatch.broadcast(id ? self : self.class, event_method, args)
         
     | 
| 
       181 
181 
     | 
    
         
             
                end
         
     | 
| 
       182 
182 
     | 
    
         | 
| 
       183 
     | 
    
         
            -
                # Invokes a method on every websocket connection in the application.
         
     | 
| 
      
 183 
     | 
    
         
            +
                # Invokes a method on every websocket connection in the application (except `self`).
         
     | 
| 
       184 
184 
     | 
    
         
             
                #
         
     | 
| 
       185 
185 
     | 
    
         
             
                #        self.multicast :my_method, "argument 1", "argument 2", 3
         
     | 
| 
       186 
186 
     | 
    
         
             
                #
         
     | 
| 
       187 
     | 
    
         
            -
                # Methods invoked using {unicast}, {broadcast} or {multicast} will  
     | 
| 
      
 187 
     | 
    
         
            +
                # Methods invoked using {unicast}, {broadcast} or {multicast} will quietly fail if the connection was lost, the requested method is undefined or the 'target' was invalid.
         
     | 
| 
       188 
188 
     | 
    
         
             
                def multicast(event_method, *args)
         
     | 
| 
       189 
189 
     | 
    
         
             
                  ::Plezi::Base::MessageDispatch.multicast(id ? self : self.class, event_method, args)
         
     | 
| 
       190 
190 
     | 
    
         
             
                end
         
     | 
| 
         @@ -239,7 +239,7 @@ module Plezi 
     | 
|
| 
       239 
239 
     | 
    
         
             
                # @private
         
     | 
| 
       240 
240 
     | 
    
         
             
                # This function is used internally by Plezi, do not call.
         
     | 
| 
       241 
241 
     | 
    
         
             
                def _pl_ad_httpreview(data)
         
     | 
| 
       242 
     | 
    
         
            -
                   
     | 
| 
      
 242 
     | 
    
         
            +
                  return data.to_json if self.class._pl_is_ad? && data.is_a?(Hash)
         
     | 
| 
       243 
243 
     | 
    
         
             
                  data
         
     | 
| 
       244 
244 
     | 
    
         
             
                end
         
     | 
| 
       245 
245 
     | 
    
         | 
    
        data/lib/plezi/router/route.rb
    CHANGED
    
    | 
         @@ -22,7 +22,7 @@ module Plezi 
     | 
|
| 
       22 
22 
     | 
    
         
             
                    @controller = controller
         
     | 
| 
       23 
23 
     | 
    
         
             
                    @param_names = []
         
     | 
| 
       24 
24 
     | 
    
         
             
                    @origial = path.dup.freeze
         
     | 
| 
       25 
     | 
    
         
            -
                     
     | 
| 
      
 25 
     | 
    
         
            +
                    prep_params(m[2])
         
     | 
| 
       26 
26 
     | 
    
         
             
                    self.class.qp
         
     | 
| 
       27 
27 
     | 
    
         
             
                    case @controller
         
     | 
| 
       28 
28 
     | 
    
         
             
                    when Class
         
     | 
| 
         @@ -36,17 +36,8 @@ module Plezi 
     | 
|
| 
       36 
36 
     | 
    
         | 
| 
       37 
37 
     | 
    
         
             
                  def call(request, response)
         
     | 
| 
       38 
38 
     | 
    
         
             
                    return nil unless match(request.path_info, request)
         
     | 
| 
       39 
     | 
    
         
            -
                     
     | 
| 
       40 
     | 
    
         
            -
                     
     | 
| 
       41 
     | 
    
         
            -
                      c = @controller.new
         
     | 
| 
       42 
     | 
    
         
            -
                      return c._pl_respond(request, response, Thread.current[@route_id])
         
     | 
| 
       43 
     | 
    
         
            -
                    when Regexp
         
     | 
| 
       44 
     | 
    
         
            -
                      params = Thread.current[@route_id]
         
     | 
| 
       45 
     | 
    
         
            -
                      return nil unless controller =~ params[@param_names[0]]
         
     | 
| 
       46 
     | 
    
         
            -
                      request.path_info = "/#{params.delete('*'.freeze).to_a.join '/'}"
         
     | 
| 
       47 
     | 
    
         
            -
                      request.params.update params
         
     | 
| 
       48 
     | 
    
         
            -
                    end
         
     | 
| 
       49 
     | 
    
         
            -
                    nil
         
     | 
| 
      
 39 
     | 
    
         
            +
                    c = @controller.new
         
     | 
| 
      
 40 
     | 
    
         
            +
                    c._pl_respond(request, response, Thread.current[@route_id])
         
     | 
| 
       50 
41 
     | 
    
         
             
                  end
         
     | 
| 
       51 
42 
     | 
    
         | 
| 
       52 
43 
     | 
    
         
             
                  def fits_params(path, request)
         
     | 
| 
         @@ -70,7 +61,7 @@ module Plezi 
     | 
|
| 
       70 
61 
     | 
    
         
             
                    req_path.start_with?(@prefix) && fits_params(req_path, request)
         
     | 
| 
       71 
62 
     | 
    
         
             
                  end
         
     | 
| 
       72 
63 
     | 
    
         | 
| 
       73 
     | 
    
         
            -
                  def  
     | 
| 
      
 64 
     | 
    
         
            +
                  def prep_params(postfix)
         
     | 
| 
       74 
65 
     | 
    
         
             
                    pfa = postfix.split '/'.freeze
         
     | 
| 
       75 
66 
     | 
    
         
             
                    start = 0; stop = 0
         
     | 
| 
       76 
67 
     | 
    
         
             
                    optional = false
         
     | 
| 
         @@ -108,5 +99,15 @@ module Plezi 
     | 
|
| 
       108 
99 
     | 
    
         
             
                    @qp ||= ::Rack::QueryParser.new(Hash, 65_536, 100)
         
     | 
| 
       109 
100 
     | 
    
         
             
                  end
         
     | 
| 
       110 
101 
     | 
    
         
             
                end
         
     | 
| 
      
 102 
     | 
    
         
            +
                class RouteRewrite < Route
         
     | 
| 
      
 103 
     | 
    
         
            +
                  def call(request, _response)
         
     | 
| 
      
 104 
     | 
    
         
            +
                    return nil unless match(request.path_info, request)
         
     | 
| 
      
 105 
     | 
    
         
            +
                    params = Thread.current[@route_id]
         
     | 
| 
      
 106 
     | 
    
         
            +
                    return nil unless controller =~ params[@param_names[0]]
         
     | 
| 
      
 107 
     | 
    
         
            +
                    request.path_info = "/#{params.delete('*'.freeze).to_a.join '/'}"
         
     | 
| 
      
 108 
     | 
    
         
            +
                    request.params.update params
         
     | 
| 
      
 109 
     | 
    
         
            +
                    nil
         
     | 
| 
      
 110 
     | 
    
         
            +
                  end
         
     | 
| 
      
 111 
     | 
    
         
            +
                end
         
     | 
| 
       111 
112 
     | 
    
         
             
              end
         
     | 
| 
       112 
113 
     | 
    
         
             
            end
         
     | 
    
        data/lib/plezi/router/router.rb
    CHANGED
    
    | 
         @@ -13,8 +13,10 @@ module Plezi 
     | 
|
| 
       13 
13 
     | 
    
         
             
                  module_function
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
                  def new(app)
         
     | 
| 
       16 
     | 
    
         
            -
                     
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
      
 16 
     | 
    
         
            +
                    if app && app != call_method
         
     | 
| 
      
 17 
     | 
    
         
            +
                      puts 'Plezi as Middleware'
         
     | 
| 
      
 18 
     | 
    
         
            +
                      @app = app
         
     | 
| 
      
 19 
     | 
    
         
            +
                    end
         
     | 
| 
       18 
20 
     | 
    
         
             
                    Plezi.app
         
     | 
| 
       19 
21 
     | 
    
         
             
                  end
         
     | 
| 
       20 
22 
     | 
    
         | 
| 
         @@ -36,6 +38,11 @@ module Plezi 
     | 
|
| 
       36 
38 
     | 
    
         
             
                    return response.finish
         
     | 
| 
       37 
39 
     | 
    
         
             
                  end
         
     | 
| 
       38 
40 
     | 
    
         | 
| 
      
 41 
     | 
    
         
            +
                  # returns the `call` method. Used repeatedly in middleware mode and only once in application mode.
         
     | 
| 
      
 42 
     | 
    
         
            +
                  def call_method
         
     | 
| 
      
 43 
     | 
    
         
            +
                    @call_method ||= Plezi::Base::Router.method(:call)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
       39 
46 
     | 
    
         
             
                  def route(path, controller)
         
     | 
| 
       40 
47 
     | 
    
         
             
                    path = path.chomp('/'.freeze) unless path == '/'.freeze
         
     | 
| 
       41 
48 
     | 
    
         
             
                    case controller
         
     | 
| 
         @@ -46,6 +53,7 @@ module Plezi 
     | 
|
| 
       46 
53 
     | 
    
         
             
                      path << '/*'.freeze unless path[-1] == '*'.freeze
         
     | 
| 
       47 
54 
     | 
    
         
             
                    when Regexp
         
     | 
| 
       48 
55 
     | 
    
         
             
                      path << '/*'.freeze unless path[-1] == '*'.freeze
         
     | 
| 
      
 56 
     | 
    
         
            +
                      return @routes << RouteRewrite.new(path, controller)
         
     | 
| 
       49 
57 
     | 
    
         
             
                    end
         
     | 
| 
       50 
58 
     | 
    
         
             
                    @routes << Route.new(path, controller)
         
     | 
| 
       51 
59 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -111,7 +119,7 @@ module Plezi 
     | 
|
| 
       111 
119 
     | 
    
         
             
                    while names.any? && params[name[0]]
         
     | 
| 
       112 
120 
     | 
    
         
             
                      url << "/#{Rack::Utils.escape params[names.shift]}"
         
     | 
| 
       113 
121 
     | 
    
         
             
                    end
         
     | 
| 
       114 
     | 
    
         
            -
                    url  
     | 
| 
      
 122 
     | 
    
         
            +
                    url << '/'.freeze if url.empty?
         
     | 
| 
       115 
123 
     | 
    
         
             
                    (url << '?') << Rack::Utils.build_nested_query(params) if params.any?
         
     | 
| 
       116 
124 
     | 
    
         
             
                    url
         
     | 
| 
       117 
125 
     | 
    
         
             
                  end
         
     | 
    
        data/lib/plezi/version.rb
    CHANGED
    
    
    
        data/plezi.gemspec
    CHANGED
    
    | 
         @@ -27,7 +27,7 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       27 
27 
     | 
    
         
             
              spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
         
     | 
| 
       28 
28 
     | 
    
         
             
              spec.require_paths = ['lib']
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
              spec.add_dependency 'iodine', '~> 0.2.1'
         
     | 
| 
      
 30 
     | 
    
         
            +
              spec.add_dependency 'iodine', '~> 0.2', '>= 0.2.1'
         
     | 
| 
       31 
31 
     | 
    
         
             
              # spec.add_dependency 'redcarpet', '> 3.3.0'
         
     | 
| 
       32 
32 
     | 
    
         
             
              # spec.add_dependency 'slim', '> 3.0.0'
         
     | 
| 
       33 
33 
     | 
    
         | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,20 +1,23 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: plezi
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.14. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.14.2
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Boaz Segev
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2016- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2016-09-24 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: iodine
         
     | 
| 
       15 
15 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       16 
16 
     | 
    
         
             
                requirements:
         
     | 
| 
       17 
17 
     | 
    
         
             
                - - "~>"
         
     | 
| 
      
 18 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 19 
     | 
    
         
            +
                    version: '0.2'
         
     | 
| 
      
 20 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       18 
21 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       19 
22 
     | 
    
         
             
                    version: 0.2.1
         
     | 
| 
       20 
23 
     | 
    
         
             
              type: :runtime
         
     | 
| 
         @@ -22,6 +25,9 @@ dependencies: 
     | 
|
| 
       22 
25 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       23 
26 
     | 
    
         
             
                requirements:
         
     | 
| 
       24 
27 
     | 
    
         
             
                - - "~>"
         
     | 
| 
      
 28 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 29 
     | 
    
         
            +
                    version: '0.2'
         
     | 
| 
      
 30 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       25 
31 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
32 
     | 
    
         
             
                    version: 0.2.1
         
     | 
| 
       27 
33 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     |