might 0.5.1 → 0.5.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/.rubocop.yml +2 -0
- data/.travis.yml +1 -0
- data/lib/might/fetcher.rb +33 -23
- data/lib/might/filter_parameter_definition.rb +1 -1
- data/lib/might/filter_predicates.rb +28 -28
- data/lib/might/filter_value_validator.rb +2 -2
- data/lib/might/ransackable_filter_parameters_adapter.rb +1 -1
- data/lib/might/sort_parameter_definition.rb +2 -2
- data/lib/might/sort_value_validator.rb +1 -1
- data/lib/might/version.rb +1 -1
- data/might.gemspec +1 -1
- metadata +6 -6
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 16724ee40371d468bd5a932a35a100ae39bff05b
         | 
| 4 | 
            +
              data.tar.gz: 1211d23fcfb3043dc2da35000d0c500da5b5c2bf
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 1f218d738eab33a02c2b62072fe1cb23cce557ccca6752386892877d41c33f96cabcd35b50161d6d6894b12ae8cd950ea7277a4e362b35ddf8a90f1b8e38684a
         | 
| 7 | 
            +
              data.tar.gz: eae9d9eb274fc4a539db1457e2f990adcedc73c1d4b2c8aa649c5345bb2e266653a17bb7e2cb91baae3b0406f52356e0ded177d44baa069dc793aec3ad0d529e
         | 
    
        data/.rubocop.yml
    CHANGED
    
    
    
        data/.travis.yml
    CHANGED
    
    
    
        data/lib/might/fetcher.rb
    CHANGED
    
    | @@ -51,7 +51,7 @@ module Might | |
| 51 51 | 
             
              #
         | 
| 52 52 | 
             
              #     sort :position, as: :relevance, reverse_direction: true
         | 
| 53 53 | 
             
              #
         | 
| 54 | 
            -
              class Fetcher
         | 
| 54 | 
            +
              class Fetcher # rubocop:disable Metrics/ClassLength
         | 
| 55 55 | 
             
                extend Uber::InheritableAttr
         | 
| 56 56 |  | 
| 57 57 | 
             
                inheritable_attr :resource_class
         | 
| @@ -71,7 +71,7 @@ module Might | |
| 71 71 | 
             
                  @params = params
         | 
| 72 72 | 
             
                end
         | 
| 73 73 |  | 
| 74 | 
            -
                # @return [ | 
| 74 | 
            +
                # @return [Might::Result] filtered and sorted collection
         | 
| 75 75 | 
             
                # @yieldparam collection [Result] if a block given
         | 
| 76 76 | 
             
                #
         | 
| 77 77 | 
             
                # @example
         | 
| @@ -91,8 +91,7 @@ module Might | |
| 91 91 | 
             
                  result = if errors.any?
         | 
| 92 92 | 
             
                             Failure.new(errors)
         | 
| 93 93 | 
             
                           else
         | 
| 94 | 
            -
                              | 
| 95 | 
            -
                             Success.new(processed_collection)
         | 
| 94 | 
            +
                             Success.new(fetch(processed_params))
         | 
| 96 95 | 
             
                           end
         | 
| 97 96 |  | 
| 98 97 | 
             
                  if block_given?
         | 
| @@ -104,14 +103,38 @@ module Might | |
| 104 103 |  | 
| 105 104 | 
             
                private
         | 
| 106 105 |  | 
| 106 | 
            +
                # @param parsed_params [Hash]
         | 
| 107 107 | 
             
                # @return [ActiveRecord::Relation]
         | 
| 108 | 
            -
                 | 
| 109 | 
            -
             | 
| 108 | 
            +
                # @api public
         | 
| 109 | 
            +
                # This method may be overridden to implement integration with library other than Ransack
         | 
| 110 | 
            +
                #
         | 
| 111 | 
            +
                def fetch(parsed_params)
         | 
| 112 | 
            +
                  collection, = middleware.call([self.class.resource_class, parsed_params])
         | 
| 113 | 
            +
                  collection
         | 
| 114 | 
            +
                end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                # @return [Hash, Array] tuple of parameters and processing errors
         | 
| 117 | 
            +
                #   this errors may be shown to front-end developer
         | 
| 118 | 
            +
                # @api public
         | 
| 119 | 
            +
                def process_params(params)
         | 
| 120 | 
            +
                  process_params_middleware.call([params, []])
         | 
| 121 | 
            +
                end
         | 
| 122 | 
            +
             | 
| 123 | 
            +
                # Library params processing middleware stack
         | 
| 124 | 
            +
                # @return [Middleware::Builder]
         | 
| 125 | 
            +
                def process_params_middleware
         | 
| 126 | 
            +
                  Middleware::Builder.new do |b|
         | 
| 127 | 
            +
                    b.use FilterParametersExtractor, self.class.filter_parameters_definition
         | 
| 128 | 
            +
                    b.use FilterParametersValidator
         | 
| 129 | 
            +
                    b.use SortParametersExtractor, self.class.sort_parameters_definition
         | 
| 130 | 
            +
                    b.use SortParametersValidator
         | 
| 131 | 
            +
                    b.use PaginationParametersValidator
         | 
| 132 | 
            +
                  end
         | 
| 110 133 | 
             
                end
         | 
| 111 134 |  | 
| 112 135 | 
             
                # Library middleware stack
         | 
| 113 136 | 
             
                # @return [Middleware::Builder]
         | 
| 114 | 
            -
                def  | 
| 137 | 
            +
                def fetch_middleware
         | 
| 115 138 | 
             
                  Middleware::Builder.new do |b|
         | 
| 116 139 | 
             
                    b.use FilterMiddleware
         | 
| 117 140 | 
             
                    b.use SortMiddleware
         | 
| @@ -122,25 +145,13 @@ module Might | |
| 122 145 | 
             
                # User modified middleware stack
         | 
| 123 146 | 
             
                # @return [Middleware::Builder]
         | 
| 124 147 | 
             
                def middleware
         | 
| 125 | 
            -
                   | 
| 148 | 
            +
                  fetch_middleware.tap do |builder|
         | 
| 126 149 | 
             
                    self.class.middleware_changes.each do |change|
         | 
| 127 150 | 
             
                      builder.instance_eval(&change)
         | 
| 128 151 | 
             
                    end
         | 
| 129 152 | 
             
                  end
         | 
| 130 153 | 
             
                end
         | 
| 131 154 |  | 
| 132 | 
            -
                # @return [Hash, Array] tuple of parameters and processing errors
         | 
| 133 | 
            -
                #   this errors may be shown to front-end developer
         | 
| 134 | 
            -
                def process_params(params)
         | 
| 135 | 
            -
                  Middleware::Builder.new do |b|
         | 
| 136 | 
            -
                    b.use FilterParametersExtractor, self.class.filter_parameters_definition
         | 
| 137 | 
            -
                    b.use FilterParametersValidator
         | 
| 138 | 
            -
                    b.use SortParametersExtractor, self.class.sort_parameters_definition
         | 
| 139 | 
            -
                    b.use SortParametersValidator
         | 
| 140 | 
            -
                    b.use PaginationParametersValidator
         | 
| 141 | 
            -
                  end.call([params, []])
         | 
| 142 | 
            -
                end
         | 
| 143 | 
            -
             | 
| 144 155 | 
             
                class << self
         | 
| 145 156 | 
             
                  # Alter middleware chain with the given block
         | 
| 146 157 | 
             
                  # @param [Proc] change
         | 
| @@ -235,12 +246,11 @@ module Might | |
| 235 246 |  | 
| 236 247 | 
             
                  private
         | 
| 237 248 |  | 
| 238 | 
            -
                  def alter_middleware(method_name, *args | 
| 249 | 
            +
                  def alter_middleware(method_name, *args)
         | 
| 239 250 | 
             
                    fail ArgumentError unless block_given?
         | 
| 240 251 | 
             
                    middleware_changes.push lambda { |builder|
         | 
| 241 252 | 
             
                      builder.send method_name, *args, lambda { |env|
         | 
| 242 | 
            -
                         | 
| 243 | 
            -
                        block.call(scope, params).tap do |r|
         | 
| 253 | 
            +
                        yield(*env).tap do |r|
         | 
| 244 254 | 
             
                          if !r.is_a?(Array) || r.size != 2
         | 
| 245 255 | 
             
                            fail 'After block must return tuple of scope and params'
         | 
| 246 256 | 
             
                          end
         | 
| @@ -2,32 +2,32 @@ module Might | |
| 2 2 | 
             
              # Contains contains with all supported predicates
         | 
| 3 3 | 
             
              #
         | 
| 4 4 | 
             
              module FilterPredicates
         | 
| 5 | 
            -
                NOT_EQ = 'not_eq'
         | 
| 6 | 
            -
                EQ = 'eq'
         | 
| 7 | 
            -
                DOES_NOT_MATCH = 'does_not_match'
         | 
| 8 | 
            -
                MATCHES = 'matches'
         | 
| 9 | 
            -
                GT = 'gt'
         | 
| 10 | 
            -
                LT = 'lt'
         | 
| 11 | 
            -
                GTEQ = 'gteq'
         | 
| 12 | 
            -
                LTEQ = 'lteq'
         | 
| 13 | 
            -
                NOT_CONT = 'not_cont'
         | 
| 14 | 
            -
                CONT = 'cont'
         | 
| 15 | 
            -
                NOT_START = 'not_start'
         | 
| 16 | 
            -
                START = 'start'
         | 
| 17 | 
            -
                DOES_NOT_END = 'not_end'
         | 
| 18 | 
            -
                ENDS = 'end'
         | 
| 19 | 
            -
                NOT_TRUE = 'not_true'
         | 
| 20 | 
            -
                TRUE = 'true'
         | 
| 21 | 
            -
                NOT_FALSE = 'not_false'
         | 
| 22 | 
            -
                FALSE = 'false'
         | 
| 23 | 
            -
                BLANK = 'blank'
         | 
| 24 | 
            -
                PRESENT = 'present'
         | 
| 25 | 
            -
                NOT_NULL = 'not_null'
         | 
| 26 | 
            -
                NULL = 'null'
         | 
| 27 | 
            -
                NOT_IN = 'not_in'
         | 
| 28 | 
            -
                IN = 'in'
         | 
| 29 | 
            -
                NOT_CONT_ANY = 'not_cont_any'
         | 
| 30 | 
            -
                CONT_ANY = 'cont_any'
         | 
| 5 | 
            +
                NOT_EQ = 'not_eq'.freeze
         | 
| 6 | 
            +
                EQ = 'eq'.freeze
         | 
| 7 | 
            +
                DOES_NOT_MATCH = 'does_not_match'.freeze
         | 
| 8 | 
            +
                MATCHES = 'matches'.freeze
         | 
| 9 | 
            +
                GT = 'gt'.freeze
         | 
| 10 | 
            +
                LT = 'lt'.freeze
         | 
| 11 | 
            +
                GTEQ = 'gteq'.freeze
         | 
| 12 | 
            +
                LTEQ = 'lteq'.freeze
         | 
| 13 | 
            +
                NOT_CONT = 'not_cont'.freeze
         | 
| 14 | 
            +
                CONT = 'cont'.freeze
         | 
| 15 | 
            +
                NOT_START = 'not_start'.freeze
         | 
| 16 | 
            +
                START = 'start'.freeze
         | 
| 17 | 
            +
                DOES_NOT_END = 'not_end'.freeze
         | 
| 18 | 
            +
                ENDS = 'end'.freeze
         | 
| 19 | 
            +
                NOT_TRUE = 'not_true'.freeze
         | 
| 20 | 
            +
                TRUE = 'true'.freeze
         | 
| 21 | 
            +
                NOT_FALSE = 'not_false'.freeze
         | 
| 22 | 
            +
                FALSE = 'false'.freeze
         | 
| 23 | 
            +
                BLANK = 'blank'.freeze
         | 
| 24 | 
            +
                PRESENT = 'present'.freeze
         | 
| 25 | 
            +
                NOT_NULL = 'not_null'.freeze
         | 
| 26 | 
            +
                NULL = 'null'.freeze
         | 
| 27 | 
            +
                NOT_IN = 'not_in'.freeze
         | 
| 28 | 
            +
                IN = 'in'.freeze
         | 
| 29 | 
            +
                NOT_CONT_ANY = 'not_cont_any'.freeze
         | 
| 30 | 
            +
                CONT_ANY = 'cont_any'.freeze
         | 
| 31 31 |  | 
| 32 32 | 
             
                ON_VALUE = [
         | 
| 33 33 | 
             
                  NOT_EQ, EQ,
         | 
| @@ -41,12 +41,12 @@ module Might | |
| 41 41 | 
             
                  NOT_FALSE, FALSE,
         | 
| 42 42 | 
             
                  BLANK, PRESENT,
         | 
| 43 43 | 
             
                  NOT_NULL, NULL
         | 
| 44 | 
            -
                ]
         | 
| 44 | 
            +
                ].freeze
         | 
| 45 45 |  | 
| 46 46 | 
             
                ON_ARRAY = [
         | 
| 47 47 | 
             
                  NOT_IN, IN,
         | 
| 48 48 | 
             
                  NOT_CONT_ANY, CONT_ANY
         | 
| 49 | 
            -
                ]
         | 
| 49 | 
            +
                ].freeze
         | 
| 50 50 |  | 
| 51 51 | 
             
                ALL = ON_VALUE + ON_ARRAY
         | 
| 52 52 | 
             
              end
         | 
| @@ -30,11 +30,11 @@ module Might | |
| 30 30 | 
             
                    include ActiveModel::Validations
         | 
| 31 31 |  | 
| 32 32 | 
             
                    validates(definition.as, definition.validations) if definition.validations.present?
         | 
| 33 | 
            -
                    validates(definition.as, 'might/filter_value_validator/defined' | 
| 33 | 
            +
                    validates(definition.as, :'might/filter_value_validator/defined' => true)
         | 
| 34 34 |  | 
| 35 35 | 
             
                    define_method(:undefined?) { definition.undefined? }
         | 
| 36 36 |  | 
| 37 | 
            -
                     | 
| 37 | 
            +
                    define_singleton_method :model_name do
         | 
| 38 38 | 
             
                      ActiveModel::Name.new(Might, nil, 'Might')
         | 
| 39 39 | 
             
                    end
         | 
| 40 40 | 
             
                  end
         | 
| @@ -10,7 +10,7 @@ module Might | |
| 10 10 | 
             
                  scope, params = env
         | 
| 11 11 |  | 
| 12 12 | 
             
                  ransackable_parameters = Array(params[:filter]).reject { |f| f.predicate.nil? }
         | 
| 13 | 
            -
             | 
| 13 | 
            +
                                                                 .each_with_object({}) do |filter, ransackable_filters|
         | 
| 14 14 | 
             
                    ransackable_filters[canonical_name_for(filter)] = filter.value
         | 
| 15 15 | 
             
                  end
         | 
| 16 16 |  | 
| @@ -37,7 +37,7 @@ module Might | |
| 37 37 | 
             
                    other.as == as
         | 
| 38 38 | 
             
                end
         | 
| 39 39 |  | 
| 40 | 
            -
                 | 
| 40 | 
            +
                alias reverse_direction? reverse_direction
         | 
| 41 41 |  | 
| 42 42 | 
             
                def validator
         | 
| 43 43 | 
             
                  SortValueValidator.build(self).new
         | 
| @@ -48,7 +48,7 @@ module Might | |
| 48 48 | 
             
                end
         | 
| 49 49 |  | 
| 50 50 | 
             
                def undefined?
         | 
| 51 | 
            -
                  !self.defined?
         | 
| 51 | 
            +
                  !self.defined? # rubocop:disable Style/RedundantSelf
         | 
| 52 52 | 
             
                end
         | 
| 53 53 | 
             
              end
         | 
| 54 54 | 
             
            end
         | 
| @@ -29,7 +29,7 @@ module Might | |
| 29 29 | 
             
                  Class.new do
         | 
| 30 30 | 
             
                    include ActiveModel::Validations
         | 
| 31 31 |  | 
| 32 | 
            -
                    validates(definition.name, 'might/sort_value_validator/defined' | 
| 32 | 
            +
                    validates(definition.name, :'might/sort_value_validator/defined' => true)
         | 
| 33 33 |  | 
| 34 34 | 
             
                    define_method(:undefined?) { definition.undefined? }
         | 
| 35 35 | 
             
                    define_method(definition.name) {}
         | 
    
        data/lib/might/version.rb
    CHANGED
    
    
    
        data/might.gemspec
    CHANGED
    
    | @@ -29,5 +29,5 @@ Gem::Specification.new do |spec| | |
| 29 29 | 
             
              spec.add_development_dependency 'bundler', '~> 1.10'
         | 
| 30 30 | 
             
              spec.add_development_dependency 'rake', '~> 10.0'
         | 
| 31 31 | 
             
              spec.add_development_dependency 'rspec', '~> 3.3'
         | 
| 32 | 
            -
              spec.add_development_dependency 'spbtv_code_style'
         | 
| 32 | 
            +
              spec.add_development_dependency 'spbtv_code_style', '~> 1.2.3'
         | 
| 33 33 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: might
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.5. | 
| 4 | 
            +
              version: 0.5.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Tema Bolshakov
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2016-03-16 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         | 
| @@ -154,16 +154,16 @@ dependencies: | |
| 154 154 | 
             
              name: spbtv_code_style
         | 
| 155 155 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 156 156 | 
             
                requirements:
         | 
| 157 | 
            -
                - - " | 
| 157 | 
            +
                - - "~>"
         | 
| 158 158 | 
             
                  - !ruby/object:Gem::Version
         | 
| 159 | 
            -
                    version:  | 
| 159 | 
            +
                    version: 1.2.3
         | 
| 160 160 | 
             
              type: :development
         | 
| 161 161 | 
             
              prerelease: false
         | 
| 162 162 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 163 163 | 
             
                requirements:
         | 
| 164 | 
            -
                - - " | 
| 164 | 
            +
                - - "~>"
         | 
| 165 165 | 
             
                  - !ruby/object:Gem::Version
         | 
| 166 | 
            -
                    version:  | 
| 166 | 
            +
                    version: 1.2.3
         | 
| 167 167 | 
             
            description: Mighty resource fetchers build on top of Ransack gem
         | 
| 168 168 | 
             
            email:
         | 
| 169 169 | 
             
            - abolshakov@spbtv.com
         |