easy_filters 0.0.2 → 0.0.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/README.md +61 -35
- data/lib/easy_filters/version.rb +2 -2
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 19155d4317913a170eeae20a792f6cea6cdc2e61
         | 
| 4 | 
            +
              data.tar.gz: 6a557001e6dc7581ae2e32755571e0970cf26940
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 194967011a03333cad0deed886d26a999fc8390fad6beb0505e7359738bba1963c1999a3719ea99ee8473fa2ebe3907f9f8dba312b42c5de20501a34949e5c55
         | 
| 7 | 
            +
              data.tar.gz: d0c05ce2cbbe406f2b0d441718006666d075adbd27af2ee48ce2679d7f29f884f7572a93c2317c93c726d1bfdea8261e62e63680fc4f94af9fcafd607538fbf2
         | 
    
        data/README.md
    CHANGED
    
    | @@ -20,20 +20,23 @@ And then execute: | |
| 20 20 | 
             
            ```
         | 
| 21 21 |  | 
| 22 22 | 
             
            ## Usage
         | 
| 23 | 
            -
             | 
| 23 | 
            +
            Create a `articles_filter.rb` file in `app/models/easy_filters` folder
         | 
| 24 24 | 
             
            EasyFilters expects you to define the following methods:
         | 
| 25 25 |  | 
| 26 26 | 
             
            ```ruby
         | 
| 27 | 
            -
             | 
| 27 | 
            +
            module EasyFilters
         | 
| 28 28 |  | 
| 29 | 
            -
               | 
| 30 | 
            -
             | 
| 31 | 
            -
                 | 
| 32 | 
            -
             | 
| 29 | 
            +
              class ArticlesFilter < ModelFilter
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                # Default values for this filter.
         | 
| 32 | 
            +
                def self.defaults
         | 
| 33 | 
            +
                  { body: nil, date_from: nil, date_to: nil }
         | 
| 34 | 
            +
                end
         | 
| 33 35 |  | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 36 | 
            +
                # Model class to be filtered.
         | 
| 37 | 
            +
                def model
         | 
| 38 | 
            +
                  Article
         | 
| 39 | 
            +
                end
         | 
| 37 40 | 
             
              end
         | 
| 38 41 | 
             
            end
         | 
| 39 42 |  | 
| @@ -55,37 +58,55 @@ Each `filter_by_*` method receives 2 params: | |
| 55 58 | 
             
            For example:  
         | 
| 56 59 |  | 
| 57 60 | 
             
            ```ruby
         | 
| 58 | 
            -
             | 
| 61 | 
            +
             | 
| 62 | 
            +
            module EasyFilters
         | 
| 63 | 
            +
             | 
| 64 | 
            +
              class ArticlesFilter < ModelFilter
         | 
| 59 65 |  | 
| 60 | 
            -
             | 
| 66 | 
            +
                #(...) previously defined methods
         | 
| 61 67 |  | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 68 | 
            +
                # Custom filter method for :body field.
         | 
| 69 | 
            +
                def filter_by_body(scope, value)
         | 
| 70 | 
            +
                  matcher = "%#{value}%"
         | 
| 71 | 
            +
                  scope.where('body like ? OR body like ?', matcher, matcher)
         | 
| 72 | 
            +
                end
         | 
| 67 73 |  | 
| 68 | 
            -
             | 
| 74 | 
            +
                # The following 2 filter_by builds an from/to/between date filter:
         | 
| 69 75 |  | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 76 | 
            +
                # Custom filter method for :date_from field.
         | 
| 77 | 
            +
                def filter_by_date_from(scope, value)
         | 
| 78 | 
            +
                  scope.joins(:editions).where('editions.date >= ?', Date.parse(value))
         | 
| 79 | 
            +
                end
         | 
| 74 80 |  | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 81 | 
            +
                # Custom filter method for :date_to field.
         | 
| 82 | 
            +
                def filter_by_date_to(scope, value)
         | 
| 83 | 
            +
                  scope.joins(:editions).where('editions.date <= ?', Date.parse(value))
         | 
| 84 | 
            +
                end
         | 
| 78 85 | 
             
              end
         | 
| 79 86 | 
             
            end
         | 
| 80 87 |  | 
| 81 88 | 
             
            ```
         | 
| 89 | 
            +
             | 
| 82 90 | 
             
            ### Usage in controllers
         | 
| 83 91 |  | 
| 84 92 | 
             
            You can instance a filter in your controller, and define some
         | 
| 85 93 | 
             
            usefull methods
         | 
| 86 94 |  | 
| 87 95 | 
             
            For example:
         | 
| 96 | 
            +
             | 
| 88 97 | 
             
            ```ruby
         | 
| 98 | 
            +
             | 
| 99 | 
            +
              #(...) previously defined controller
         | 
| 100 | 
            +
              
         | 
| 101 | 
            +
              before_action :filter,       only: [:filter_page]
         | 
| 102 | 
            +
              before_action :clear_filter, only: [:filter_page]
         | 
| 103 | 
            +
              
         | 
| 104 | 
            +
              def filter_page
         | 
| 105 | 
            +
                @objects = @filter.all
         | 
| 106 | 
            +
              end
         | 
| 107 | 
            +
              
         | 
| 108 | 
            +
              private
         | 
| 109 | 
            +
              
         | 
| 89 110 | 
             
              def create_filter(filter_class, opts = {})
         | 
| 90 111 | 
             
                  options = { store: session, persist: true }.merge opts
         | 
| 91 112 | 
             
                  filter_class.new options
         | 
| @@ -93,13 +114,13 @@ For example: | |
| 93 114 |  | 
| 94 115 | 
             
              def filter_params
         | 
| 95 116 | 
             
                if params.has_key?(:filter)
         | 
| 96 | 
            -
                  params.require(:filter).permit(: | 
| 117 | 
            +
                  params.require(:filter).permit(:body, :date_from, :date_to).to_options
         | 
| 97 118 | 
             
                end
         | 
| 98 119 | 
             
              end
         | 
| 99 120 |  | 
| 100 121 | 
             
              # Create the @filter object with the currently-set values for the filters
         | 
| 101 122 | 
             
              def filter
         | 
| 102 | 
            -
                @filter = create_filter  | 
| 123 | 
            +
                @filter = create_filter EasyFilters::ArticlesFilter, values: filter_params
         | 
| 103 124 | 
             
              end
         | 
| 104 125 |  | 
| 105 126 | 
             
              # Clear the currently-set filters, restoring them to the defaults
         | 
| @@ -109,14 +130,19 @@ For example: | |
| 109 130 | 
             
                  redirect_to request.path
         | 
| 110 131 | 
             
                end
         | 
| 111 132 | 
             
              end
         | 
| 133 | 
            +
              
         | 
| 112 134 | 
             
            ```
         | 
| 113 | 
            -
             | 
| 114 | 
            -
             | 
| 115 | 
            -
             | 
| 116 | 
            -
             | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
                <%=  | 
| 135 | 
            +
             | 
| 136 | 
            +
            ### Usage in views
         | 
| 137 | 
            +
            Define a input with the filter
         | 
| 138 | 
            +
             | 
| 139 | 
            +
            ```ruby
         | 
| 140 | 
            +
             | 
| 141 | 
            +
            <% form_tag '', :method => :get do %>
         | 
| 142 | 
            +
                <%= label :filter, :body %>
         | 
| 143 | 
            +
                <%= text_field :filter, :body %>
         | 
| 144 | 
            +
                <%= submit_tag t('common.filters.search') %>
         | 
| 145 | 
            +
                <%= submit_tag t('common.filters.clear') %>
         | 
| 121 146 | 
             
            <% end %>
         | 
| 122 | 
            -
             | 
| 147 | 
            +
             | 
| 148 | 
            +
             ```
         | 
    
        data/lib/easy_filters/version.rb
    CHANGED
    
    | @@ -1,3 +1,3 @@ | |
| 1 1 | 
             
            module EasyFilters
         | 
| 2 | 
            -
              VERSION = "0.0. | 
| 3 | 
            -
            end
         | 
| 2 | 
            +
              VERSION = "0.0.3"
         | 
| 3 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: easy_filters
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - German Olle
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2014-04- | 
| 11 | 
            +
            date: 2014-04-04 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         |