acts_as_select 0.1.4 → 0.1.5
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.
- data/README.md +19 -10
- data/acts_as_select.gemspec +1 -1
- data/lib/active_record/acts/select.rb +1 -1
- data/test/select_test.rb +48 -28
- metadata +2 -2
    
        data/README.md
    CHANGED
    
    | @@ -35,7 +35,7 @@ This makes all columns database accessible. You can return selectable options by | |
| 35 35 | 
             
            obtain a list of the contents of a column by calling <column_name>_list
         | 
| 36 36 |  | 
| 37 37 | 
             
            ### Options
         | 
| 38 | 
            -
            acts_as_select takes two options to allow for finer grained control over which methods are created | 
| 38 | 
            +
            acts_as_select takes two options to allow for finer grained control over which methods are created and allows for scoping to restrict or change order.
         | 
| 39 39 |  | 
| 40 40 | 
             
                :include => [column_list]
         | 
| 41 41 |  | 
| @@ -55,32 +55,41 @@ names in both lists, these columns are excluded, regardless of the order of the | |
| 55 55 |  | 
| 56 56 | 
             
            With this database table
         | 
| 57 57 |  | 
| 58 | 
            -
                | id | name | | 
| 59 | 
            -
                 | 
| 60 | 
            -
                | 1  | Bob  | bob@example.com | 
| 61 | 
            -
                | 2  | Jen  | jen@example.com | 
| 58 | 
            +
                | id | name |       email      |
         | 
| 59 | 
            +
                |----|------|------------------|
         | 
| 60 | 
            +
                | 1  | Bob  | bob@example.com  |
         | 
| 61 | 
            +
                | 2  | Jen  | jen@example.com  |
         | 
| 62 | 
            +
                | 3 | april | sheri@example.com|
         | 
| 62 63 |  | 
| 63 64 | 
             
            And this model
         | 
| 64 65 |  | 
| 65 66 | 
             
                class Person < ActiveRecord::Base
         | 
| 66 | 
            -
                  acts_as_select :include=>['name', 'email'], :exclude=> | 
| 67 | 
            +
                  acts_as_select :include=>['name', 'email'], :exclude=>'id'
         | 
| 67 68 | 
             
                end
         | 
| 68 69 |  | 
| 69 70 | 
             
            This would create two select methods, `name_select` and `email_select`,
         | 
| 70 71 | 
             
            and three list methods `name_list` and `email_list`
         | 
| 71 72 |  | 
| 72 73 | 
             
                Person.name_select
         | 
| 73 | 
            -
                #=> [["Bob", 1], ["Jen", 2]]
         | 
| 74 | 
            +
                #=> [["Bob", 1], ["Jen", 2], ["april", 3]]
         | 
| 74 75 | 
             
                Person.email_select
         | 
| 75 | 
            -
                #=> [["bob@example.com", 1], ["jen@example.com", 2]]
         | 
| 76 | 
            +
                #=> [["bob@example.com", 1], ["jen@example.com", 2], ["april@example.com",3]]
         | 
| 76 77 |  | 
| 77 78 | 
             
            This is the right format for use in a select tag and friends
         | 
| 78 79 |  | 
| 79 80 | 
             
                select :order, :customer, Person.name_select
         | 
| 80 81 |  | 
| 81 | 
            -
             | 
| 82 | 
            +
            If you want to change the sorting of the table, based on a non-chosen field (for example), you can use
         | 
| 83 | 
            +
            arel_scopes to do so. The same `email_select` and `email_list` can have their contents sorted by the 
         | 
| 84 | 
            +
            lowercase corrected name (for example)
         | 
| 82 85 |  | 
| 83 | 
            -
                Person. | 
| 86 | 
            +
                Person.order('lower(name) asc').email_select
         | 
| 87 | 
            +
                #=> [["sheri@example.com", 3], ["bob@example.com", 1], ["jen@example.com", 2]]
         | 
| 88 | 
            +
             | 
| 89 | 
            +
            You can combine it with any other named_scopes, but as it maps to an array for use
         | 
| 90 | 
            +
            in a select dropdown, it will need to be the last method on the chain.
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                Person.where(...).group(...).order(...).name_select
         | 
| 84 93 |  | 
| 85 94 | 
             
            ## Contributing
         | 
| 86 95 |  | 
    
        data/acts_as_select.gemspec
    CHANGED
    
    | @@ -24,7 +24,7 @@ Gem::Specification.new do |spec| | |
| 24 24 | 
             
              spec.add_development_dependency 'sqlite3'
         | 
| 25 25 | 
             
              if RUBY_VERSION >= '1.9'
         | 
| 26 26 | 
             
                spec.add_development_dependency 'minitest'
         | 
| 27 | 
            -
                spec.add_development_dependency ' | 
| 27 | 
            +
                spec.add_development_dependency 'activerecord'
         | 
| 28 28 | 
             
              else
         | 
| 29 29 | 
             
                spec.add_development_dependency 'test-unit'
         | 
| 30 30 | 
             
                spec.add_development_dependency 'activerecord'
         | 
    
        data/test/select_test.rb
    CHANGED
    
    | @@ -1,14 +1,16 @@ | |
| 1 | 
            +
            $:.unshift File.dirname(__FILE__) + '/../lib'
         | 
| 1 2 | 
             
            require 'rubygems'
         | 
| 2 3 | 
             
            if RUBY_VERSION >= '1.9'
         | 
| 4 | 
            +
              gem 'minitest'
         | 
| 3 5 | 
             
              require 'minitest/autorun'
         | 
| 4 6 | 
             
              require 'active_record'
         | 
| 7 | 
            +
              require_relative(File.dirname(__FILE__) + '/../lib/acts_as_select')
         | 
| 5 8 | 
             
            else
         | 
| 6 9 | 
             
              require 'test/unit'
         | 
| 7 10 | 
             
              require 'activerecord'
         | 
| 8 11 | 
             
              require 'sqlite3'
         | 
| 12 | 
            +
              require File.dirname(__FILE__) + '/../acts_as_select'
         | 
| 9 13 | 
             
            end
         | 
| 10 | 
            -
            $:.unshift File.dirname(__FILE__) + '/../lib'
         | 
| 11 | 
            -
            require File.dirname(__FILE__) + '/../acts_as_select'
         | 
| 12 14 |  | 
| 13 15 | 
             
            ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
         | 
| 14 16 |  | 
| @@ -84,6 +86,18 @@ class SelectTest < (begin MiniTest::Test rescue Test::Unit::TestCase end) | |
| 84 86 | 
             
                ]
         | 
| 85 87 | 
             
              end
         | 
| 86 88 |  | 
| 89 | 
            +
              def selection_names_sorted
         | 
| 90 | 
            +
                [
         | 
| 91 | 
            +
                    ['fifth', 5],
         | 
| 92 | 
            +
                    ['first', 1],
         | 
| 93 | 
            +
                    ['forth', 4],
         | 
| 94 | 
            +
                    ['second', 2],
         | 
| 95 | 
            +
                    ['sixth', 6],
         | 
| 96 | 
            +
                    ['third', 3]
         | 
| 97 | 
            +
                ]
         | 
| 98 | 
            +
              end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
             | 
| 87 101 | 
             
              def selection_descriptions
         | 
| 88 102 | 
             
                [
         | 
| 89 103 | 
             
                  ['First field', 1],
         | 
| @@ -108,14 +122,14 @@ class SelectTest < (begin MiniTest::Test rescue Test::Unit::TestCase end) | |
| 108 122 |  | 
| 109 123 | 
             
              def test_all_names_selection
         | 
| 110 124 | 
             
                SelectAll.acts_as_select
         | 
| 111 | 
            -
                assert_equal(SelectAll.id_select | 
| 112 | 
            -
                assert_equal( | 
| 113 | 
            -
                assert_equal(SelectAll.name_select | 
| 114 | 
            -
                assert_equal( | 
| 115 | 
            -
                assert_equal(SelectAll.description_select | 
| 116 | 
            -
                assert_equal( | 
| 117 | 
            -
                assert_equal(SelectAll.excluded_string_select | 
| 118 | 
            -
                assert_equal( | 
| 125 | 
            +
                assert_equal(selection_ids,SelectAll.id_select)
         | 
| 126 | 
            +
                assert_equal(selection_ids.map(&:first),SelectAll.id_list)
         | 
| 127 | 
            +
                assert_equal(selection_names,SelectAll.name_select)
         | 
| 128 | 
            +
                assert_equal(selection_names.map(&:first),SelectAll.name_list)
         | 
| 129 | 
            +
                assert_equal(selection_descriptions,SelectAll.description_select)
         | 
| 130 | 
            +
                assert_equal(selection_descriptions.map(&:first),SelectAll.description_list)
         | 
| 131 | 
            +
                assert_equal(selection_excluded_strings,SelectAll.excluded_string_select)
         | 
| 132 | 
            +
                assert_equal(selection_excluded_strings.map(&:first),SelectAll.excluded_string_list)
         | 
| 119 133 | 
             
              end
         | 
| 120 134 |  | 
| 121 135 | 
             
              def test_incorrect_inclusion
         | 
| @@ -127,8 +141,8 @@ class SelectTest < (begin MiniTest::Test rescue Test::Unit::TestCase end) | |
| 127 141 | 
             
                SelectIncludeSingle.acts_as_select :include => 'name'
         | 
| 128 142 | 
             
                assert_raises(NoMethodError) { SelectIncludeSingle.id_select }
         | 
| 129 143 | 
             
                assert_raises(NoMethodError) { SelectIncludeSingle.id_list }
         | 
| 130 | 
            -
                assert_equal( | 
| 131 | 
            -
                assert_equal( | 
| 144 | 
            +
                assert_equal(selection_names.map { |x| [x[0], x[1]+6] },SelectIncludeSingle.name_select)
         | 
| 145 | 
            +
                assert_equal(selection_names.map(&:first),SelectIncludeSingle.name_list)
         | 
| 132 146 | 
             
                assert_raises(NoMethodError) { SelectIncludeSingle.description_select }
         | 
| 133 147 | 
             
                assert_raises(NoMethodError) { SelectIncludeSingle.description_list }
         | 
| 134 148 | 
             
                assert_raises(NoMethodError) { SelectIncludeSingle.excluded_string_select }
         | 
| @@ -139,32 +153,32 @@ class SelectTest < (begin MiniTest::Test rescue Test::Unit::TestCase end) | |
| 139 153 | 
             
                SelectIncludeMulti.acts_as_select :include => %w(name description)
         | 
| 140 154 | 
             
                assert_raises(NoMethodError) { SelectIncludeMulti.id_select }
         | 
| 141 155 | 
             
                assert_raises(NoMethodError) { SelectIncludeMulti.id_list }
         | 
| 142 | 
            -
                assert_equal( | 
| 143 | 
            -
                assert_equal( | 
| 144 | 
            -
                assert_equal( | 
| 145 | 
            -
                assert_equal( | 
| 156 | 
            +
                assert_equal(selection_names.map { |x| [x[0], x[1]+12] },SelectIncludeMulti.name_select)
         | 
| 157 | 
            +
                assert_equal(selection_names.map(&:first), SelectIncludeMulti.name_list)
         | 
| 158 | 
            +
                assert_equal(selection_descriptions.map { |x| [x[0], x[1]+12] },SelectIncludeMulti.description_select)
         | 
| 159 | 
            +
                assert_equal(selection_descriptions.map(&:first),SelectIncludeMulti.description_list)
         | 
| 146 160 | 
             
                assert_raises(NoMethodError) { SelectIncludeMulti.excluded_string_select }
         | 
| 147 161 | 
             
                assert_raises(NoMethodError) { SelectIncludeMulti.excluded_string_list }
         | 
| 148 162 | 
             
              end
         | 
| 149 163 |  | 
| 150 164 | 
             
              def test_single_field_exclusion
         | 
| 151 165 | 
             
                SelectExcludeSingle.acts_as_select :exclude => 'excluded_string'
         | 
| 152 | 
            -
                assert_equal( | 
| 153 | 
            -
                assert_equal( | 
| 154 | 
            -
                assert_equal( | 
| 155 | 
            -
                assert_equal( | 
| 156 | 
            -
                assert_equal( | 
| 157 | 
            -
                assert_equal( | 
| 166 | 
            +
                assert_equal(selection_ids.map { |x| [x[0]+18, x[1]+18] },SelectExcludeSingle.id_select)
         | 
| 167 | 
            +
                assert_equal(selection_ids.map { |x| x[0]+18 },SelectExcludeSingle.id_list)
         | 
| 168 | 
            +
                assert_equal(selection_names.map { |x| [x[0], x[1]+18] },SelectExcludeSingle.name_select)
         | 
| 169 | 
            +
                assert_equal(selection_names.map(&:first),SelectExcludeSingle.name_list)
         | 
| 170 | 
            +
                assert_equal(selection_descriptions.map { |x| [x[0], x[1]+18] },SelectExcludeSingle.description_select)
         | 
| 171 | 
            +
                assert_equal(selection_descriptions.map(&:first),SelectExcludeSingle.description_list)
         | 
| 158 172 | 
             
                assert_raises(NoMethodError) { SelectExcludeSingle.excluded_string_select }
         | 
| 159 173 | 
             
                assert_raises(NoMethodError) { SelectExcludeSingle.excluded_string_list }
         | 
| 160 174 | 
             
              end
         | 
| 161 175 |  | 
| 162 176 | 
             
              def test_multi_field_exclusion
         | 
| 163 177 | 
             
                SelectExcludeMulti.acts_as_select :exclude => %w(description excluded_string)
         | 
| 164 | 
            -
                assert_equal( | 
| 165 | 
            -
                assert_equal( | 
| 166 | 
            -
                assert_equal( | 
| 167 | 
            -
                assert_equal( | 
| 178 | 
            +
                assert_equal(selection_ids.map { |x| [x[0]+24, x[1]+24] },SelectExcludeMulti.id_select)
         | 
| 179 | 
            +
                assert_equal(selection_ids.map { |x| x[0]+24 },SelectExcludeMulti.id_list)
         | 
| 180 | 
            +
                assert_equal(selection_names.map { |x| [x[0], x[1]+24] },SelectExcludeMulti.name_select)
         | 
| 181 | 
            +
                assert_equal(selection_names.map(&:first),SelectExcludeMulti.name_list)
         | 
| 168 182 | 
             
                assert_raises(NoMethodError) { SelectExcludeMulti.description_select }
         | 
| 169 183 | 
             
                assert_raises(NoMethodError) { SelectExcludeMulti.description_list }
         | 
| 170 184 | 
             
                assert_raises(NoMethodError) { SelectExcludeMulti.excluded_string_select }
         | 
| @@ -175,12 +189,18 @@ class SelectTest < (begin MiniTest::Test rescue Test::Unit::TestCase end) | |
| 175 189 | 
             
                SelectedIncludeExclude.acts_as_select :include => %w(name description), :exclude => %w(description excluded_string)
         | 
| 176 190 | 
             
                assert_raises(NoMethodError) { SelectedIncludeExclude.id_select }
         | 
| 177 191 | 
             
                assert_raises(NoMethodError) { SelectedIncludeExclude.id_list }
         | 
| 178 | 
            -
                assert_equal( | 
| 179 | 
            -
                assert_equal( | 
| 192 | 
            +
                assert_equal(selection_names.map { |x| [x[0], x[1]+30] },SelectedIncludeExclude.name_select)
         | 
| 193 | 
            +
                assert_equal(selection_names.map(&:first),SelectedIncludeExclude.name_list)
         | 
| 180 194 | 
             
                assert_raises(NoMethodError) { SelectedIncludeExclude.description_select }
         | 
| 181 195 | 
             
                assert_raises(NoMethodError) { SelectedIncludeExclude.description_list }
         | 
| 182 196 | 
             
                assert_raises(NoMethodError) { SelectedIncludeExclude.excluded_string_select }
         | 
| 183 197 | 
             
                assert_raises(NoMethodError) { SelectedIncludeExclude.excluded_string_list }
         | 
| 184 198 | 
             
              end
         | 
| 199 | 
            +
             | 
| 200 | 
            +
              def test_sorted_fields
         | 
| 201 | 
            +
                SelectIncludeSingle.acts_as_select :include => 'name'
         | 
| 202 | 
            +
                assert_equal(selection_names_sorted.map { |x| [x[0], x[1]+6] },SelectIncludeSingle.order('name asc').name_select)
         | 
| 203 | 
            +
                assert_equal(selection_names_sorted.map(&:first), SelectIncludeSingle.order('name asc').name_list)
         | 
| 204 | 
            +
              end
         | 
| 185 205 | 
             
            end
         | 
| 186 206 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: acts_as_select
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.5
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -76,7 +76,7 @@ dependencies: | |
| 76 76 | 
             
                  - !ruby/object:Gem::Version
         | 
| 77 77 | 
             
                    version: '0'
         | 
| 78 78 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 79 | 
            -
              name:  | 
| 79 | 
            +
              name: activerecord
         | 
| 80 80 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 81 81 | 
             
                none: false
         | 
| 82 82 | 
             
                requirements:
         |