whereable 0.1.1 → 0.1.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/CHANGELOG.md +4 -0
- data/README.md +11 -5
- data/lib/whereable.rb +1 -2
- data/lib/whereable/version.rb +1 -1
- metadata +6 -6
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: ea1b122fb55b9fca4d22efd7d32057bbc198ef97f4090bdf8bdaa42da6b15a7f
         | 
| 4 | 
            +
              data.tar.gz: 8a0d13ea659a80ca2f34df1e7e970ee6716bed272a36e288472a1827c6b61855
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 1e66e7d892444322c226af98aedd2639b31d3ebb1444bd6337582c6e40248dd2276b183ad70e6794430f0ed0cfa6618fccc37a9308ddf2a50c53453db74e05ac
         | 
| 7 | 
            +
              data.tar.gz: 2552253cb5f31f90d5830a95db7f0f328b05f477e8f31709cb76234ebcfb3782709e322e1fa8c45b48b8645e413ac5d40f0f81045b7521979875d7432fece3bd
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            [](https://badge.fury.io/rb/whereable)
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            # Whereable
         | 
| 2 4 |  | 
| 3 5 | 
             
            Translates where-like filter syntax into an Arel-based ActiveRecord scope, so you can safely use SQL syntax in Rails controller parameters.
         | 
| @@ -47,11 +49,15 @@ User.standard.where("born_on < '1970-11-11'") | |
| 47 49 | 
             
            ```
         | 
| 48 50 | 
             
            returns Neo as expected, so we're all good.
         | 
| 49 51 |  | 
| 50 | 
            -
            *Meanwhile…* Your black hat API consumer passes in `filter=true) or ( | 
| 52 | 
            +
            *Meanwhile…* Your black hat API consumer passes in `filter=true) or (true`, and …
         | 
| 51 53 | 
             
            ``` ruby
         | 
| 52 | 
            -
            User.standard.where("true) or ( | 
| 54 | 
            +
            User.standard.where("true) or (true")
         | 
| 55 | 
            +
            ```
         | 
| 56 | 
            +
            returns **EVERYONE**, because the database query is …
         | 
| 57 | 
            +
            ``` SQL
         | 
| 58 | 
            +
            SELECT "users".* FROM "users" WHERE "users"."role" = 0 AND (true) or (true)
         | 
| 53 59 | 
             
            ```
         | 
| 54 | 
            -
             | 
| 60 | 
            +
            *This is how the Matrix gets hacked.*
         | 
| 55 61 |  | 
| 56 62 | 
             
            Instead add `include Whereable` to your model, and change your controller to:
         | 
| 57 63 | 
             
            ``` ruby
         | 
| @@ -63,11 +69,11 @@ User.standard.whereable("born_on < '1970-11-11'") | |
| 63 69 | 
             
            ```
         | 
| 64 70 | 
             
            returns Neo as before, but …
         | 
| 65 71 | 
             
            ``` ruby
         | 
| 66 | 
            -
            User.standard.whereable("true) or ( | 
| 72 | 
            +
            User.standard.whereable("true) or (true")
         | 
| 67 73 | 
             
            ```
         | 
| 68 74 | 
             
            raises exception …
         | 
| 69 75 | 
             
            ``` ruby
         | 
| 70 | 
            -
            Whereable::FilterInvalid ('Invalid filter at ) or ( | 
| 76 | 
            +
            Whereable::FilterInvalid ('Invalid filter at ) or (true')
         | 
| 71 77 | 
             
            ```
         | 
| 72 78 |  | 
| 73 79 | 
             
            ### Syntax
         | 
    
        data/lib/whereable.rb
    CHANGED
    
    | @@ -4,7 +4,6 @@ | |
| 4 4 |  | 
| 5 5 | 
             
            require 'whereable/version'
         | 
| 6 6 | 
             
            require 'active_record'
         | 
| 7 | 
            -
            require 'active_support'
         | 
| 8 7 | 
             
            require 'treetop'
         | 
| 9 8 | 
             
            require 'whereable.treetop'
         | 
| 10 9 |  | 
| @@ -106,7 +105,7 @@ module Whereable | |
| 106 105 | 
             
                )
         | 
| 107 106 | 
             
              end
         | 
| 108 107 |  | 
| 109 | 
            -
               | 
| 108 | 
            +
              module ClassMethods
         | 
| 110 109 | 
             
                # Parse filter to hash tree using Treetop PEG
         | 
| 111 110 | 
             
                def whereable_hash_tree(filter)
         | 
| 112 111 | 
             
                  parser = WhereableParser.new
         | 
    
        data/lib/whereable/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: whereable
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Mack Earnhardt
         | 
| @@ -16,28 +16,28 @@ dependencies: | |
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - ">="
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version:  | 
| 19 | 
            +
                    version: 4.1.0
         | 
| 20 20 | 
             
              type: :runtime
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 24 | 
             
                - - ">="
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version:  | 
| 26 | 
            +
                    version: 4.1.0
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 28 | 
             
              name: treetop
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 31 | 
             
                - - ">="
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version:  | 
| 33 | 
            +
                    version: 1.5.1
         | 
| 34 34 | 
             
              type: :runtime
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 38 | 
             
                - - ">="
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version:  | 
| 40 | 
            +
                    version: 1.5.1
         | 
| 41 41 | 
             
            description: |
         | 
| 42 42 | 
             
              Translates where-like filter syntax into an Arel-based ActiveRecord scope,
         | 
| 43 43 | 
             
              so you can safely use SQL syntax in Rails controller parameters.
         | 
| @@ -69,7 +69,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 69 69 | 
             
              requirements:
         | 
| 70 70 | 
             
              - - ">="
         | 
| 71 71 | 
             
                - !ruby/object:Gem::Version
         | 
| 72 | 
            -
                  version: 2. | 
| 72 | 
            +
                  version: 2.3.0
         | 
| 73 73 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 74 74 | 
             
              requirements:
         | 
| 75 75 | 
             
              - - ">="
         |