sortability 0.0.3 → 0.1.0
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 +18 -2
- data/lib/sortability/active_record/base.rb +25 -10
- data/lib/sortability/version.rb +1 -1
- metadata +3 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 8de084b141765cc5613a436a6573b6a370d535c3
         | 
| 4 | 
            +
              data.tar.gz: 20c7a9f1951fa31c5840cb12c8046d2c734536ce
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 5d1313f9b10346d6f2dd1d5506ab6b9a24cba540ff0fdef6b388ed32631e4aaa7cb2c9b5a0949971a6dd7e19e26020d2023a18a78036d7f0e8f4d066398d3ced
         | 
| 7 | 
            +
              data.tar.gz: a9fb6ac2194be7a270f51d5bdf6a48a781389f3365d4c14b239d3ab028cbaed4952e8ae449766349a8674037bb0be6c548e0ed001e96055b470bd41c1308b1c0
         | 
    
        data/README.md
    CHANGED
    
    | @@ -87,10 +87,16 @@ sortable_belongs_to :container, inverse_of: :records, | |
| 87 87 | 
             
                                            scope: :container_id # , on: :sort_position
         | 
| 88 88 | 
             
            ```
         | 
| 89 89 |  | 
| 90 | 
            +
            You can also specify a custom association scope:
         | 
| 91 | 
            +
             | 
| 92 | 
            +
            ```rb
         | 
| 93 | 
            +
            sortable_belongs_to :container, -> { with_deleted },
         | 
| 94 | 
            +
                                            inverse_of: :records, scope: :container_id # , on: :sort_position
         | 
| 95 | 
            +
            ```
         | 
| 96 | 
            +
             | 
| 90 97 | 
             
            It is highly recommended that you specify the `inverse_of` and `scope` options.
         | 
| 91 98 |  | 
| 92 | 
            -
            If `records` are sorted globally, without a `container`,
         | 
| 93 | 
            -
            use the `sortable_class` method instead:
         | 
| 99 | 
            +
            If `records` are sorted globally, without a `container`, use the `sortable_class` method instead:
         | 
| 94 100 |  | 
| 95 101 | 
             
            ```rb
         | 
| 96 102 | 
             
            sortable_class # on: :sort_position, scope: :sort_group_number
         | 
| @@ -104,6 +110,16 @@ Simply replace the `has_many :records` relation in your `Container` model with: | |
| 104 110 | 
             
            sortable_has_many :records, inverse_of: :container # , on: :sort_position
         | 
| 105 111 | 
             
            ```
         | 
| 106 112 |  | 
| 113 | 
            +
            You can also specify a custom association scope,
         | 
| 114 | 
            +
            but in that case you have to order the records yourself:
         | 
| 115 | 
            +
             | 
| 116 | 
            +
            ```rb
         | 
| 117 | 
            +
            sortable_has_many :records, ->{ with_deleted.order(:sort_position) },
         | 
| 118 | 
            +
                                        inverse_of: :container # , on: :sort_position
         | 
| 119 | 
            +
            ```
         | 
| 120 | 
            +
             | 
| 121 | 
            +
            Once again, it is highly recommended that you specify the `inverse_of` option.
         | 
| 122 | 
            +
             | 
| 107 123 | 
             
            ## Usage
         | 
| 108 124 |  | 
| 109 125 | 
             
            Once you have run the migrations and modified your models according to the installation instructions, you are ready to start sorting the `records`.
         | 
| @@ -26,9 +26,10 @@ module Sortability | |
| 26 26 |  | 
| 27 27 | 
             
                        # Returns all the sort peers for this record, including self
         | 
| 28 28 | 
             
                        define_method peers_mname do |force_scope_load = false|
         | 
| 29 | 
            -
                           | 
| 30 | 
            -
             | 
| 31 | 
            -
                             | 
| 29 | 
            +
                          unless force_scope_load || container.nil? || inverse_of.nil?
         | 
| 30 | 
            +
                            cont = send(container)
         | 
| 31 | 
            +
                            return cont.send(inverse_of) unless cont.nil?
         | 
| 32 | 
            +
                          end
         | 
| 32 33 |  | 
| 33 34 | 
             
                          relation = self.class.unscoped
         | 
| 34 35 | 
             
                          scope_array.each do |s|
         | 
| @@ -122,20 +123,24 @@ module Sortability | |
| 122 123 | 
             
                    end
         | 
| 123 124 |  | 
| 124 125 | 
             
                    # Defines a sortable has_many relation on the container
         | 
| 125 | 
            -
                    def sortable_has_many(records,  | 
| 126 | 
            -
                       | 
| 127 | 
            -
             | 
| 128 | 
            -
             | 
| 129 | 
            -
                         | 
| 126 | 
            +
                    def sortable_has_many(records, scope_or_options = nil, options_with_scope = {}, &extension)
         | 
| 127 | 
            +
                      scope, options = extract_association_params(scope_or_options, options_with_scope)
         | 
| 128 | 
            +
                      if scope.nil?
         | 
| 129 | 
            +
                        on = options[:on] || :sort_position
         | 
| 130 | 
            +
                        scope = -> { order(on) }
         | 
| 130 131 | 
             
                      end
         | 
| 132 | 
            +
             | 
| 133 | 
            +
                      class_exec { has_many records, scope, options.except(:on), &extension }
         | 
| 131 134 | 
             
                    end
         | 
| 132 135 |  | 
| 133 136 | 
             
                    # Defines a sortable belongs_to relation on the child records
         | 
| 134 | 
            -
                    def sortable_belongs_to(container,  | 
| 137 | 
            +
                    def sortable_belongs_to(container, scope_or_options = nil,
         | 
| 138 | 
            +
                                            options_with_scope = {}, &extension)
         | 
| 139 | 
            +
                      scope, options = extract_association_params(scope_or_options, options_with_scope)
         | 
| 135 140 | 
             
                      on = options[:on] || :sort_position
         | 
| 136 141 |  | 
| 137 142 | 
             
                      class_exec do
         | 
| 138 | 
            -
                        belongs_to container, options.except(:on, :scope)
         | 
| 143 | 
            +
                        belongs_to container, scope, options.except(:on, :scope), &extension
         | 
| 139 144 |  | 
| 140 145 | 
             
                        reflection = reflect_on_association(container)
         | 
| 141 146 | 
             
                        options[:scope] ||= reflection.polymorphic? ? \
         | 
| @@ -170,6 +175,16 @@ module Sortability | |
| 170 175 |  | 
| 171 176 | 
             
                      sortable_methods(options)
         | 
| 172 177 | 
             
                    end
         | 
| 178 | 
            +
             | 
| 179 | 
            +
                    protected
         | 
| 180 | 
            +
             | 
| 181 | 
            +
                    def extract_association_params(scope_or_options, options_with_scope)
         | 
| 182 | 
            +
                      if scope_or_options.is_a?(Hash)
         | 
| 183 | 
            +
                        [nil, scope_or_options]
         | 
| 184 | 
            +
                      else
         | 
| 185 | 
            +
                        [scope_or_options, options_with_scope]
         | 
| 186 | 
            +
                      end
         | 
| 187 | 
            +
                    end
         | 
| 173 188 | 
             
                  end
         | 
| 174 189 | 
             
                end
         | 
| 175 190 | 
             
              end
         | 
    
        data/lib/sortability/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: sortability
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0 | 
| 4 | 
            +
              version: 0.1.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Dante Soares
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date:  | 
| 12 | 
            +
            date: 2016-05-24 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: rails
         | 
| @@ -144,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 144 144 | 
             
                  version: '0'
         | 
| 145 145 | 
             
            requirements: []
         | 
| 146 146 | 
             
            rubyforge_project: 
         | 
| 147 | 
            -
            rubygems_version: 2.4.5
         | 
| 147 | 
            +
            rubygems_version: 2.4.5.1
         | 
| 148 148 | 
             
            signing_key: 
         | 
| 149 149 | 
             
            specification_version: 4
         | 
| 150 150 | 
             
            summary: Rails gem that provides easy to use ordered records
         |