rubanok 0.1.1 → 0.1.3
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/.travis.yml +3 -0
 - data/CHANGELOG.md +4 -0
 - data/README.md +55 -7
 - data/gemfiles/rails6.gemfile +6 -0
 - data/lib/rubanok/dsl/matching.rb +1 -1
 - data/lib/rubanok/railtie.rb +6 -0
 - data/lib/rubanok/version.rb +1 -1
 - data/rubanok.gemspec +1 -1
 - metadata +8 -8
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 76b1edc5c67f7a783dc3db022fee6aba015af2745a877d0b05089ce2c2ca2df7
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: d3e055c5453c793e17d0c6efea3b0bd6bcb3c8b16ada1461544b28431058a3a1
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: ab19e7909a899d1831f246164888e76c29c1dfd6f9d3864a801b69fd3caba8cc754402a3e3e11ae6a0185bb87cec76711dadcfd8762e32eb4923cf24d3e16bae
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 91c17c4695b0ccc7ff6ab0b75cace311c61b9ca3edf29a43bbd2c747dbb5995bc6f2af45ca6966117dc45304c8cf1ca2f58401bd7329d966a180d8c2942b24dc
         
     | 
    
        data/.travis.yml
    CHANGED
    
    | 
         @@ -1,5 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            sudo: false
         
     | 
| 
       2 
2 
     | 
    
         
             
            language: ruby
         
     | 
| 
      
 3 
     | 
    
         
            +
            cache: bundler
         
     | 
| 
       3 
4 
     | 
    
         
             
            rvm:
         
     | 
| 
       4 
5 
     | 
    
         
             
              - 2.6.0
         
     | 
| 
       5 
6 
     | 
    
         | 
| 
         @@ -15,6 +16,8 @@ matrix: 
     | 
|
| 
       15 
16 
     | 
    
         
             
              include:
         
     | 
| 
       16 
17 
     | 
    
         
             
                - rvm: ruby-head
         
     | 
| 
       17 
18 
     | 
    
         
             
                  gemfile: gemfiles/railsmaster.gemfile
         
     | 
| 
      
 19 
     | 
    
         
            +
                - rvm: 2.6.1
         
     | 
| 
      
 20 
     | 
    
         
            +
                  gemfile: gemfiles/rails6.gemfile
         
     | 
| 
       18 
21 
     | 
    
         
             
                - rvm: 2.6.0
         
     | 
| 
       19 
22 
     | 
    
         
             
                  gemfile: gemfiles/rails52.gemfile
         
     | 
| 
       20 
23 
     | 
    
         
             
                - rvm: 2.5.1
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -4,6 +4,8 @@ 
     | 
|
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            Rubanok provides a DSL to build parameters-based data transformers.
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
      
 7 
     | 
    
         
            +
            📖 Read the introduction post: ["Carve your controllers like Papa Carlo"](https://dev.to/evilmartians/carve-your-controllers-like-papa-carlo-32m6)
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       7 
9 
     | 
    
         
             
            The typical usage is to describe all the possible collection manipulation for REST `index` action, e.g. filtering, sorting, searching, pagination, etc..
         
     | 
| 
       8 
10 
     | 
    
         | 
| 
       9 
11 
     | 
    
         
             
            So, instead of:
         
     | 
| 
         @@ -58,11 +60,17 @@ Requirements: 
     | 
|
| 
       58 
60 
     | 
    
         | 
| 
       59 
61 
     | 
    
         
             
            ## Installation
         
     | 
| 
       60 
62 
     | 
    
         | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
      
 63 
     | 
    
         
            +
            Add to your `Gemfile`:
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 66 
     | 
    
         
            +
            gem "rubanok"
         
     | 
| 
      
 67 
     | 
    
         
            +
            ```
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
            And run `bundle install`.
         
     | 
| 
       62 
70 
     | 
    
         | 
| 
       63 
71 
     | 
    
         
             
            ## Usage
         
     | 
| 
       64 
72 
     | 
    
         | 
| 
       65 
     | 
    
         
            -
            The core concept of this library is a _plane_ (or _hand plane_, or "рубанок" in Russian). Plane is responsible for mapping parameters to  
     | 
| 
      
 73 
     | 
    
         
            +
            The core concept of this library is a _plane_ (or _hand plane_, or "рубанок" in Russian). Plane is responsible for mapping parameters to transformations.
         
     | 
| 
       66 
74 
     | 
    
         | 
| 
       67 
75 
     | 
    
         
             
            From the example above:
         
     | 
| 
       68 
76 
     | 
    
         | 
| 
         @@ -127,13 +135,13 @@ class CourseSessionsPlane < Rubanok::Plane 
     | 
|
| 
       127 
135 
     | 
    
         
             
            end
         
     | 
| 
       128 
136 
     | 
    
         
             
            ```
         
     | 
| 
       129 
137 
     | 
    
         | 
| 
       130 
     | 
    
         
            -
            **NOTE:**  
     | 
| 
      
 138 
     | 
    
         
            +
            **NOTE:** Rubanok only matches exact values; more complex matching could be added in the future.
         
     | 
| 
       131 
139 
     | 
    
         | 
| 
       132 
140 
     | 
    
         
             
            ### Rule activation
         
     | 
| 
       133 
141 
     | 
    
         | 
| 
       134 
142 
     | 
    
         
             
            Rubanok _activates_ a rule by checking whether the corresponding keys are present in the params object. All the fields must be present to apply the rule.
         
     | 
| 
       135 
143 
     | 
    
         | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
      
 144 
     | 
    
         
            +
            Some fields may be optional, or perhaps even all of them. You can use `activate_on` and `activate_always` options to mark something as an optional key instead of a required one:
         
     | 
| 
       137 
145 
     | 
    
         | 
| 
       138 
146 
     | 
    
         
             
            ```ruby
         
     | 
| 
       139 
147 
     | 
    
         
             
            # Always apply the rule; use default values for keyword args
         
     | 
| 
         @@ -147,13 +155,13 @@ match :sort_by, :sort, activate_on: :sort_by do 
     | 
|
| 
       147 
155 
     | 
    
         
             
            end
         
     | 
| 
       148 
156 
     | 
    
         
             
            ```
         
     | 
| 
       149 
157 
     | 
    
         | 
| 
       150 
     | 
    
         
            -
            By default, Rubanok ignores empty param values (using `#empty?` under the hood) and  
     | 
| 
      
 158 
     | 
    
         
            +
            By default, Rubanok ignores empty param values (using `#empty?` under the hood) and will not run matching rules on those values. For example: `{ q: "" }` and `{ q: nil }` won't activate the `map :q` rule.
         
     | 
| 
       151 
159 
     | 
    
         | 
| 
       152 
160 
     | 
    
         
             
            You can change this behaviour by setting: `Rubanok.ignore_empty_values = false`.
         
     | 
| 
       153 
161 
     | 
    
         | 
| 
       154 
162 
     | 
    
         
             
            ### Testing
         
     | 
| 
       155 
163 
     | 
    
         | 
| 
       156 
     | 
    
         
            -
            One of the benefits of having  
     | 
| 
      
 164 
     | 
    
         
            +
            One of the benefits of having modification logic contained in its own class is the ability to test modifications in isolation:
         
     | 
| 
       157 
165 
     | 
    
         | 
| 
       158 
166 
     | 
    
         
             
            ```ruby
         
     | 
| 
       159 
167 
     | 
    
         
             
            # For example, with RSpec
         
     | 
| 
         @@ -194,10 +202,50 @@ require "rubanok/rspec" 
     | 
|
| 
       194 
202 
     | 
    
         | 
| 
       195 
203 
     | 
    
         
             
            ### Rails vs. non-Rails
         
     | 
| 
       196 
204 
     | 
    
         | 
| 
       197 
     | 
    
         
            -
            Rubanok  
     | 
| 
      
 205 
     | 
    
         
            +
            Rubanok does not require Rails, but it has some useful Rails extensions such as `planish` helper for controllers (included automatically into `ActionController::Base` and `ActionController::API`).
         
     | 
| 
       198 
206 
     | 
    
         | 
| 
       199 
207 
     | 
    
         
             
            If you use `ActionController::Metal` you must include the `Rubanok::Controller` module yourself.
         
     | 
| 
       200 
208 
     | 
    
         | 
| 
      
 209 
     | 
    
         
            +
            ## Questions & Answers
         
     | 
| 
      
 210 
     | 
    
         
            +
             
     | 
| 
      
 211 
     | 
    
         
            +
            - **🧐"Planish"? Is there a word?**
         
     | 
| 
      
 212 
     | 
    
         
            +
             
     | 
| 
      
 213 
     | 
    
         
            +
            Yes, [it is](https://en.wiktionary.org/wiki/planish).
         
     | 
| 
      
 214 
     | 
    
         
            +
             
     | 
| 
      
 215 
     | 
    
         
            +
            - **Where to put my _plane_ classes?**
         
     | 
| 
      
 216 
     | 
    
         
            +
             
     | 
| 
      
 217 
     | 
    
         
            +
            I put mine under `app/planes` (as `<resources>_plane.rb`) in my Rails app.
         
     | 
| 
      
 218 
     | 
    
         
            +
             
     | 
| 
      
 219 
     | 
    
         
            +
            - **I don't like the naming ("planes" ✈️?), can I still use the library?**
         
     | 
| 
      
 220 
     | 
    
         
            +
             
     | 
| 
      
 221 
     | 
    
         
            +
            First, feel free to [propose your variant](https://github.com/palkan/rubanok/issues). We would be glad to discuss it.
         
     | 
| 
      
 222 
     | 
    
         
            +
             
     | 
| 
      
 223 
     | 
    
         
            +
            Secondly, you can easily avoid it by adding a few lines to your `ApplicationController`:
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 226 
     | 
    
         
            +
            class ApplicationController < ActionController::Smth
         
     | 
| 
      
 227 
     | 
    
         
            +
              # add `planish` alias
         
     | 
| 
      
 228 
     | 
    
         
            +
              alias transform_scope planish
         
     | 
| 
      
 229 
     | 
    
         
            +
             
     | 
| 
      
 230 
     | 
    
         
            +
              # override the `implicit_plane_class` method
         
     | 
| 
      
 231 
     | 
    
         
            +
              def implicit_plane_class
         
     | 
| 
      
 232 
     | 
    
         
            +
                "#{controller_path.classify.pluralize}Scoper".safe_constantize
         
     | 
| 
      
 233 
     | 
    
         
            +
              end
         
     | 
| 
      
 234 
     | 
    
         
            +
            end
         
     | 
| 
      
 235 
     | 
    
         
            +
            ```
         
     | 
| 
      
 236 
     | 
    
         
            +
             
     | 
| 
      
 237 
     | 
    
         
            +
            Now you can use it like this:
         
     | 
| 
      
 238 
     | 
    
         
            +
             
     | 
| 
      
 239 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 240 
     | 
    
         
            +
            class CourseSessionsController < ApplicationController
         
     | 
| 
      
 241 
     | 
    
         
            +
              def index
         
     | 
| 
      
 242 
     | 
    
         
            +
                @sessions = transform_scope(CourseSession.all, params)
         
     | 
| 
      
 243 
     | 
    
         
            +
                # which equals to
         
     | 
| 
      
 244 
     | 
    
         
            +
                @sessions = CourseSessionsScoper.call(CourseSession.all, params.to_unsafe_h)
         
     | 
| 
      
 245 
     | 
    
         
            +
              end
         
     | 
| 
      
 246 
     | 
    
         
            +
            end
         
     | 
| 
      
 247 
     | 
    
         
            +
            ```
         
     | 
| 
      
 248 
     | 
    
         
            +
             
     | 
| 
       201 
249 
     | 
    
         
             
            ## Contributing
         
     | 
| 
       202 
250 
     | 
    
         | 
| 
       203 
251 
     | 
    
         
             
            Bug reports and pull requests are welcome on GitHub at https://github.com/palkan/rubanok.
         
     | 
    
        data/lib/rubanok/dsl/matching.rb
    CHANGED
    
    
    
        data/lib/rubanok/railtie.rb
    CHANGED
    
    | 
         @@ -8,6 +8,12 @@ module Rubanok # :nodoc: 
     | 
|
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
                    ActionController::Base.include Rubanok::Controller
         
     | 
| 
       10 
10 
     | 
    
         
             
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  ActiveSupport.on_load(:action_controller_api) do
         
     | 
| 
      
 13 
     | 
    
         
            +
                    require "rubanok/rails/controller"
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                    ActionController::API.include Rubanok::Controller
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
       11 
17 
     | 
    
         
             
                end
         
     | 
| 
       12 
18 
     | 
    
         
             
              end
         
     | 
| 
       13 
19 
     | 
    
         
             
            end
         
     | 
    
        data/lib/rubanok/version.rb
    CHANGED
    
    
    
        data/rubanok.gemspec
    CHANGED
    
    | 
         @@ -31,5 +31,5 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       31 
31 
     | 
    
         
             
              spec.add_development_dependency "rspec", "~> 3.0"
         
     | 
| 
       32 
32 
     | 
    
         
             
              spec.add_development_dependency "rspec-rails"
         
     | 
| 
       33 
33 
     | 
    
         
             
              spec.add_development_dependency "rubocop-rspec"
         
     | 
| 
       34 
     | 
    
         
            -
              spec.add_development_dependency "standard"
         
     | 
| 
      
 34 
     | 
    
         
            +
              spec.add_development_dependency "standard", "~> 0.0.36"
         
     | 
| 
       35 
35 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: rubanok
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.3
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Vladimir Dementyev
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2019- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2019-03-06 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: actionpack
         
     | 
| 
         @@ -112,16 +112,16 @@ dependencies: 
     | 
|
| 
       112 
112 
     | 
    
         
             
              name: standard
         
     | 
| 
       113 
113 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       114 
114 
     | 
    
         
             
                requirements:
         
     | 
| 
       115 
     | 
    
         
            -
                - - " 
     | 
| 
      
 115 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       116 
116 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       117 
     | 
    
         
            -
                    version:  
     | 
| 
      
 117 
     | 
    
         
            +
                    version: 0.0.36
         
     | 
| 
       118 
118 
     | 
    
         
             
              type: :development
         
     | 
| 
       119 
119 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       120 
120 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       121 
121 
     | 
    
         
             
                requirements:
         
     | 
| 
       122 
     | 
    
         
            -
                - - " 
     | 
| 
      
 122 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       123 
123 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       124 
     | 
    
         
            -
                    version:  
     | 
| 
      
 124 
     | 
    
         
            +
                    version: 0.0.36
         
     | 
| 
       125 
125 
     | 
    
         
             
            description: Parameters-based transformation DSL
         
     | 
| 
       126 
126 
     | 
    
         
             
            email:
         
     | 
| 
       127 
127 
     | 
    
         
             
            - dementiev.vm@gmail.com
         
     | 
| 
         @@ -143,6 +143,7 @@ files: 
     | 
|
| 
       143 
143 
     | 
    
         
             
            - bin/setup
         
     | 
| 
       144 
144 
     | 
    
         
             
            - gemfiles/rails42.gemfile
         
     | 
| 
       145 
145 
     | 
    
         
             
            - gemfiles/rails52.gemfile
         
     | 
| 
      
 146 
     | 
    
         
            +
            - gemfiles/rails6.gemfile
         
     | 
| 
       146 
147 
     | 
    
         
             
            - gemfiles/railsmaster.gemfile
         
     | 
| 
       147 
148 
     | 
    
         
             
            - lib/rubanok.rb
         
     | 
| 
       148 
149 
     | 
    
         
             
            - lib/rubanok/dsl/mapping.rb
         
     | 
| 
         @@ -174,8 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       174 
175 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       175 
176 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       176 
177 
     | 
    
         
             
            requirements: []
         
     | 
| 
       177 
     | 
    
         
            -
             
     | 
| 
       178 
     | 
    
         
            -
            rubygems_version: 2.7.6
         
     | 
| 
      
 178 
     | 
    
         
            +
            rubygems_version: 3.0.2
         
     | 
| 
       179 
179 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       180 
180 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       181 
181 
     | 
    
         
             
            summary: Parameters-based transformation DSL
         
     |