active_sort_order 0.9.3 → 0.9.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.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +10 -1
 - data/lib/active_sort_order/concerns/sort_order_concern.rb +10 -8
 - data/lib/active_sort_order/version.rb +1 -1
 - data/lib/active_sort_order.rb +10 -6
 - metadata +21 -81
 - data/test/dummy_app/Rakefile +0 -7
 - data/test/dummy_app/app/assets/config/manifest.js +0 -3
 - data/test/dummy_app/app/assets/javascripts/application.js +0 -0
 - data/test/dummy_app/app/assets/stylesheets/application.css +0 -3
 - data/test/dummy_app/app/controllers/application_controller.rb +0 -3
 - data/test/dummy_app/app/models/application_record.rb +0 -3
 - data/test/dummy_app/app/models/post.rb +0 -3
 - data/test/dummy_app/app/models/post_with_base_order_a.rb +0 -7
 - data/test/dummy_app/app/models/post_with_base_order_a_and_b.rb +0 -7
 - data/test/dummy_app/app/models/post_with_base_order_b.rb +0 -7
 - data/test/dummy_app/app/models/post_with_base_order_b_and_a.rb +0 -7
 - data/test/dummy_app/app/models/post_with_volatile_base_order.rb +0 -7
 - data/test/dummy_app/app/views/layouts/application.html.erb +0 -14
 - data/test/dummy_app/config/application.rb +0 -61
 - data/test/dummy_app/config/boot.rb +0 -10
 - data/test/dummy_app/config/database.yml +0 -20
 - data/test/dummy_app/config/environment.rb +0 -5
 - data/test/dummy_app/config/environments/development.rb +0 -30
 - data/test/dummy_app/config/environments/production.rb +0 -60
 - data/test/dummy_app/config/environments/test.rb +0 -41
 - data/test/dummy_app/config/initializers/backtrace_silencers.rb +0 -7
 - data/test/dummy_app/config/initializers/inflections.rb +0 -10
 - data/test/dummy_app/config/initializers/mime_types.rb +0 -5
 - data/test/dummy_app/config/initializers/secret_token.rb +0 -11
 - data/test/dummy_app/config/initializers/session_store.rb +0 -8
 - data/test/dummy_app/config/initializers/wrap_parameters.rb +0 -14
 - data/test/dummy_app/config/locales/en.yml +0 -5
 - data/test/dummy_app/config/routes.rb +0 -6
 - data/test/dummy_app/config/secrets.yml +0 -22
 - data/test/dummy_app/config.ru +0 -4
 - data/test/dummy_app/db/migrate/20210128155312_set_up_test_tables.rb +0 -15
 - data/test/dummy_app/db/schema.rb +0 -19
 - data/test/dummy_app/db/test.sqlite3 +0 -0
 - data/test/dummy_app/log/test.log +0 -542
 - data/test/test_helper.rb +0 -63
 - data/test/unit/active_sort_order_test.rb +0 -144
 - data/test/unit/errors_test.rb +0 -204
 
    
        data/test/test_helper.rb
    DELETED
    
    | 
         @@ -1,63 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #$LOAD_PATH.unshift File.expand_path("../lib", __dir__)
         
     | 
| 
       2 
     | 
    
         
            -
            ENV["RAILS_ENV"] = "test"
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            require "active_sort_order"
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            begin
         
     | 
| 
       7 
     | 
    
         
            -
              require 'warning'
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
              Warning.ignore(
         
     | 
| 
       10 
     | 
    
         
            -
                %r{mail/parsers/address_lists_parser}, ### Hide mail gem warnings
         
     | 
| 
       11 
     | 
    
         
            -
              )
         
     | 
| 
       12 
     | 
    
         
            -
            rescue LoadError
         
     | 
| 
       13 
     | 
    
         
            -
              # Do nothing
         
     | 
| 
       14 
     | 
    
         
            -
            end
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
            ### Instantiates Rails
         
     | 
| 
       17 
     | 
    
         
            -
            require File.expand_path("../dummy_app/config/environment.rb",  __FILE__)
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
            require "rails/test_help"
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
            class ActiveSupport::TestCase
         
     | 
| 
       22 
     | 
    
         
            -
              # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
         
     | 
| 
       23 
     | 
    
         
            -
              fixtures :all
         
     | 
| 
       24 
     | 
    
         
            -
            end
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
            Rails.backtrace_cleaner.remove_silencers!
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
            require 'minitest/reporters'
         
     | 
| 
       29 
     | 
    
         
            -
            Minitest::Reporters.use!(
         
     | 
| 
       30 
     | 
    
         
            -
              Minitest::Reporters::DefaultReporter.new,
         
     | 
| 
       31 
     | 
    
         
            -
              ENV,
         
     | 
| 
       32 
     | 
    
         
            -
              Minitest.backtrace_filter
         
     | 
| 
       33 
     | 
    
         
            -
            )
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
            require "minitest/autorun"
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
            # Run any available migration
         
     | 
| 
       38 
     | 
    
         
            -
            if ActiveRecord.gem_version >= Gem::Version.new("6.0")
         
     | 
| 
       39 
     | 
    
         
            -
              ActiveRecord::MigrationContext.new(File.expand_path("dummy_app/db/migrate/", __dir__), ActiveRecord::SchemaMigration).migrate
         
     | 
| 
       40 
     | 
    
         
            -
            elsif ActiveRecord.gem_version >= Gem::Version.new("5.2")
         
     | 
| 
       41 
     | 
    
         
            -
              ActiveRecord::MigrationContext.new(File.expand_path("dummy_app/db/migrate/", __dir__)).migrate
         
     | 
| 
       42 
     | 
    
         
            -
            else
         
     | 
| 
       43 
     | 
    
         
            -
              ActiveRecord::Migrator.migrate File.expand_path("dummy_app/db/migrate/", __dir__)
         
     | 
| 
       44 
     | 
    
         
            -
            end
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
            [Post].each do |klass|
         
     | 
| 
       47 
     | 
    
         
            -
              if defined?(SQLite3)
         
     | 
| 
       48 
     | 
    
         
            -
                ActiveRecord::Base.connection.execute("DELETE FROM #{klass.table_name};")
         
     | 
| 
       49 
     | 
    
         
            -
                ActiveRecord::Base.connection.execute("UPDATE `sqlite_sequence` SET `seq` = 0 WHERE `name` = '#{klass.table_name}';")
         
     | 
| 
       50 
     | 
    
         
            -
              else
         
     | 
| 
       51 
     | 
    
         
            -
                ActiveRecord::Base.connection.execute("TRUNCATE TABLE #{klass.table_name}")
         
     | 
| 
       52 
     | 
    
         
            -
              end
         
     | 
| 
       53 
     | 
    
         
            -
            end
         
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
            DATA = {}.with_indifferent_access
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
            DATA[:posts] = [
         
     | 
| 
       58 
     | 
    
         
            -
              Post.find_or_create_by!(a: 1, b: 3),
         
     | 
| 
       59 
     | 
    
         
            -
              Post.find_or_create_by!(a: 2, b: 2),
         
     | 
| 
       60 
     | 
    
         
            -
              Post.find_or_create_by!(a: 3, b: 2),
         
     | 
| 
       61 
     | 
    
         
            -
              Post.find_or_create_by!(a: 4, b: 1),
         
     | 
| 
       62 
     | 
    
         
            -
              Post.find_or_create_by!(a: 5, b: 1),
         
     | 
| 
       63 
     | 
    
         
            -
            ].shuffle
         
     | 
| 
         @@ -1,144 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require "test_helper"
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            class ActiveSortOrderTest < ActiveSupport::TestCase
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
              setup do
         
     | 
| 
       6 
     | 
    
         
            -
              end
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
              teardown do
         
     | 
| 
       9 
     | 
    
         
            -
              end
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
              def test_exposes_main_module
         
     | 
| 
       12 
     | 
    
         
            -
                assert ActiveSortOrder.is_a?(Module)
         
     | 
| 
       13 
     | 
    
         
            -
              end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
              def test_exposes_version
         
     | 
| 
       16 
     | 
    
         
            -
                assert ActiveSortOrder::VERSION
         
     | 
| 
       17 
     | 
    
         
            -
              end
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
              def test_base_sort_order_default_value
         
     | 
| 
       20 
     | 
    
         
            -
                klass = PostWithBaseOrderA
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                assert PostWithBaseOrderA.unscoped.sort_order.to_sql.include?("ORDER BY #{klass.base_sort_order}")
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                assert PostWithBaseOrderA.unscoped.sort_order(base_sort_order: true).to_sql.include?("ORDER BY #{klass.base_sort_order}")
         
     | 
| 
       25 
     | 
    
         
            -
              end
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
              def test_class_base_sort_order_only
         
     | 
| 
       28 
     | 
    
         
            -
                assert_equal Post.all.count, DATA[:posts].count
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                sorted = PostWithBaseOrderA.all.sort_order
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                expected = DATA[:posts].sort_by{|item| item.a }
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
                sorted.each_with_index do |item, i|
         
     | 
| 
       35 
     | 
    
         
            -
                  assert_equal expected[i].id, item.id
         
     | 
| 
       36 
     | 
    
         
            -
                end
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                sorted = PostWithBaseOrderB.all.sort_order
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                expected = DATA[:posts].sort_by{|item| item.b }
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
                sorted.each_with_index do |item, i|
         
     | 
| 
       43 
     | 
    
         
            -
                  assert_equal expected[i].b, item.b ### use b instead of id as its not unique
         
     | 
| 
       44 
     | 
    
         
            -
                end
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
                sorted = PostWithBaseOrderAAndB.all.sort_order
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
                expected = DATA[:posts].sort_by{|item| [item.a, item.b] }
         
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
                sorted.each_with_index do |item, i|
         
     | 
| 
       51 
     | 
    
         
            -
                  assert_equal expected[i].id, item.id
         
     | 
| 
       52 
     | 
    
         
            -
                end
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
                sorted = PostWithBaseOrderBAndA.all.sort_order
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                expected = DATA[:posts].sort_by{|item| [item.b, item.a] }
         
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
                sorted.each_with_index do |item, i|
         
     | 
| 
       59 
     | 
    
         
            -
                  assert_equal expected[i].id, item.id
         
     | 
| 
       60 
     | 
    
         
            -
                end
         
     | 
| 
       61 
     | 
    
         
            -
              end
         
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
              def test_override_base_sort_order_only
         
     | 
| 
       64 
     | 
    
         
            -
                assert_equal Post.all.count, DATA[:posts].count
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
                sorted = PostWithBaseOrderA.order(b: :desc).sort_order(base_sort_order: "posts.b ASC")
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
                expected = DATA[:posts].sort_by{|item| item.b }
         
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
       70 
     | 
    
         
            -
                sorted.each_with_index do |item, i|
         
     | 
| 
       71 
     | 
    
         
            -
                  assert_equal expected[i].b, item.b ### use b instead of id as its not unique
         
     | 
| 
       72 
     | 
    
         
            -
                end
         
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
                expected = DATA[:posts].sort_by{|item| item.id }
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
                ### NIL & FALSE
         
     | 
| 
       77 
     | 
    
         
            -
                [nil, false].each do |v|
         
     | 
| 
       78 
     | 
    
         
            -
                  sorted = PostWithBaseOrderA.order(id: :asc).sort_order(base_sort_order: v)
         
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
                  sorted.each_with_index do |item, i|
         
     | 
| 
       81 
     | 
    
         
            -
                    assert_equal expected[i].id, item.id
         
     | 
| 
       82 
     | 
    
         
            -
                  end
         
     | 
| 
       83 
     | 
    
         
            -
                end
         
     | 
| 
       84 
     | 
    
         
            -
              end
         
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
     | 
    
         
            -
              def test_sort_only
         
     | 
| 
       87 
     | 
    
         
            -
                assert_equal Post.all.count, DATA[:posts].count
         
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
                expected = DATA[:posts].sort_by{|item| item.a }.reverse
         
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
                sorted = PostWithBaseOrderA.all.sort_order(:a, :desc)
         
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
                sorted.each_with_index do |item, i|
         
     | 
| 
       94 
     | 
    
         
            -
                  assert_equal expected[i].id, item.id
         
     | 
| 
       95 
     | 
    
         
            -
                end
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
                sorted = PostWithBaseOrderA.all.sort_order("posts.a", "DESC")
         
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
                sorted.each_with_index do |item, i|
         
     | 
| 
       100 
     | 
    
         
            -
                  assert_equal expected[i].id, item.id
         
     | 
| 
       101 
     | 
    
         
            -
                end
         
     | 
| 
       102 
     | 
    
         
            -
              end
         
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
              def test_base_sort_order_and_sort
         
     | 
| 
       105 
     | 
    
         
            -
                assert_equal Post.all.count, DATA[:posts].count
         
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
                sorted = PostWithBaseOrderA.all.sort_order("posts.a", "DESC")
         
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
                expected = DATA[:posts].sort_by{|item| item.a }.reverse
         
     | 
| 
       110 
     | 
    
         
            -
             
     | 
| 
       111 
     | 
    
         
            -
                sorted.each_with_index do |item, i|
         
     | 
| 
       112 
     | 
    
         
            -
                  assert_equal expected[i].id, item.id
         
     | 
| 
       113 
     | 
    
         
            -
                end
         
     | 
| 
       114 
     | 
    
         
            -
             
     | 
| 
       115 
     | 
    
         
            -
                sorted = PostWithBaseOrderB.all.sort_order("posts.b", "DESC")
         
     | 
| 
       116 
     | 
    
         
            -
             
     | 
| 
       117 
     | 
    
         
            -
                expected = DATA[:posts].sort_by{|item| item.b }.reverse
         
     | 
| 
       118 
     | 
    
         
            -
             
     | 
| 
       119 
     | 
    
         
            -
                sorted.each_with_index do |item, i|
         
     | 
| 
       120 
     | 
    
         
            -
                  assert_equal expected[i].b, item.b ### use b instead of id as its not unique
         
     | 
| 
       121 
     | 
    
         
            -
                end
         
     | 
| 
       122 
     | 
    
         
            -
              end
         
     | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
       124 
     | 
    
         
            -
              def test_sort_on_multiple_fields
         
     | 
| 
       125 
     | 
    
         
            -
                assert_equal Post.all.count, DATA[:posts].count
         
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
                expected = DATA[:posts].sort_by{|item| [item.b, item.a] }
         
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
       129 
     | 
    
         
            -
                sorted = PostWithBaseOrderA.all.sort_order([:b, :a], :asc)
         
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
       131 
     | 
    
         
            -
                sorted.each_with_index do |item, i|
         
     | 
| 
       132 
     | 
    
         
            -
                  assert_equal expected[i].id, item.id
         
     | 
| 
       133 
     | 
    
         
            -
                end
         
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
       135 
     | 
    
         
            -
                expected = DATA[:posts].sort_by{|item| [item.b, item.a] }.reverse
         
     | 
| 
       136 
     | 
    
         
            -
             
     | 
| 
       137 
     | 
    
         
            -
                sorted = PostWithBaseOrderA.all.sort_order([:b, :a], :desc)
         
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
       139 
     | 
    
         
            -
                sorted.each_with_index do |item, i|
         
     | 
| 
       140 
     | 
    
         
            -
                  assert_equal expected[i].id, item.id
         
     | 
| 
       141 
     | 
    
         
            -
                end
         
     | 
| 
       142 
     | 
    
         
            -
              end
         
     | 
| 
       143 
     | 
    
         
            -
             
     | 
| 
       144 
     | 
    
         
            -
            end
         
     | 
    
        data/test/unit/errors_test.rb
    DELETED
    
    | 
         @@ -1,204 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require "test_helper"
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            class ActiveSortOrderTest < ActiveSupport::TestCase
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
              setup do
         
     | 
| 
       6 
     | 
    
         
            -
              end
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
              teardown do
         
     | 
| 
       9 
     | 
    
         
            -
              end
         
     | 
| 
       10 
     | 
    
         
            -
              
         
     | 
| 
       11 
     | 
    
         
            -
              def test_sort_str_errors
         
     | 
| 
       12 
     | 
    
         
            -
                ### TEST VALID
         
     | 
| 
       13 
     | 
    
         
            -
                valid = [
         
     | 
| 
       14 
     | 
    
         
            -
                  "foo",
         
     | 
| 
       15 
     | 
    
         
            -
                  :foo,
         
     | 
| 
       16 
     | 
    
         
            -
                  nil,
         
     | 
| 
       17 
     | 
    
         
            -
                  "",
         
     | 
| 
       18 
     | 
    
         
            -
                ]
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                valid.each do |v|
         
     | 
| 
       21 
     | 
    
         
            -
                  Post.sort_order(v, :asc).limit(1)
         
     | 
| 
       22 
     | 
    
         
            -
                end
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                ### TEST INVALID
         
     | 
| 
       25 
     | 
    
         
            -
                invalid = [
         
     | 
| 
       26 
     | 
    
         
            -
                  true,
         
     | 
| 
       27 
     | 
    
         
            -
                  false,
         
     | 
| 
       28 
     | 
    
         
            -
                  [],
         
     | 
| 
       29 
     | 
    
         
            -
                  Object.new,
         
     | 
| 
       30 
     | 
    
         
            -
                ]
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                if RUBY_VERSION.to_f >= 3.0
         
     | 
| 
       33 
     | 
    
         
            -
                  invalid << {}
         
     | 
| 
       34 
     | 
    
         
            -
                end
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                invalid.each do |v|
         
     | 
| 
       37 
     | 
    
         
            -
                  assert_raise ArgumentError do
         
     | 
| 
       38 
     | 
    
         
            -
                    Post.sort_order(v, :asc).limit(1)
         
     | 
| 
       39 
     | 
    
         
            -
                  end
         
     | 
| 
       40 
     | 
    
         
            -
                end
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
                assert_raise ArgumentError do
         
     | 
| 
       43 
     | 
    
         
            -
                  Post.sort_order(Object.new, :asc).limit(1)
         
     | 
| 
       44 
     | 
    
         
            -
                end
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
                ### TEST UNIQUE CASES
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
                if RUBY_VERSION.to_f < 3.0
         
     | 
| 
       49 
     | 
    
         
            -
                  ### HASH - this is allowed because its treated as keyword arguments
         
     | 
| 
       50 
     | 
    
         
            -
                  Post.sort_order({}).limit(1)
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
                  assert_raise do
         
     | 
| 
       53 
     | 
    
         
            -
                    Post.sort_order({}, :desc).limit(1)
         
     | 
| 
       54 
     | 
    
         
            -
                  end
         
     | 
| 
       55 
     | 
    
         
            -
                end
         
     | 
| 
       56 
     | 
    
         
            -
              end
         
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
              def test_sort_direction_errors
         
     | 
| 
       59 
     | 
    
         
            -
                valid = [
         
     | 
| 
       60 
     | 
    
         
            -
                  "ASC",
         
     | 
| 
       61 
     | 
    
         
            -
                  "DESC",
         
     | 
| 
       62 
     | 
    
         
            -
                  "ASC NULLS FIRST",
         
     | 
| 
       63 
     | 
    
         
            -
                  "ASC NULLS LAST",
         
     | 
| 
       64 
     | 
    
         
            -
                  "DESC NULLS FIRST",
         
     | 
| 
       65 
     | 
    
         
            -
                  "DESC NULLS LAST",
         
     | 
| 
       66 
     | 
    
         
            -
                  nil,
         
     | 
| 
       67 
     | 
    
         
            -
                  "",
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
                  ### NASTY BUT TECHNICALLY ALLOWED BECAUSE OF SANITIZATION TECHNIQUE
         
     | 
| 
       70 
     | 
    
         
            -
                  "ASC   NULLS   FIRST",
         
     | 
| 
       71 
     | 
    
         
            -
                  "   ASC   ",
         
     | 
| 
       72 
     | 
    
         
            -
                  "ASC\n",
         
     | 
| 
       73 
     | 
    
         
            -
                  "ASC\tNULLS\tFirst",
         
     | 
| 
       74 
     | 
    
         
            -
                ].freeze
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
                valid.each do |direction|
         
     | 
| 
       77 
     | 
    
         
            -
                  PostWithBaseOrderA.sort_order("x", direction).limit(1)
         
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
                  if direction
         
     | 
| 
       80 
     | 
    
         
            -
                    direction = direction.try!(:downcase)
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                    PostWithBaseOrderA.sort_order("x", direction).limit(1)
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
     | 
    
         
            -
                    direction = direction.try!(:to_sym)
         
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
     | 
    
         
            -
                    PostWithBaseOrderA.sort_order("foobar", direction).limit(1)
         
     | 
| 
       87 
     | 
    
         
            -
                  end
         
     | 
| 
       88 
     | 
    
         
            -
                end
         
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
     | 
    
         
            -
                invalid = [
         
     | 
| 
       91 
     | 
    
         
            -
                  false,
         
     | 
| 
       92 
     | 
    
         
            -
                  true,
         
     | 
| 
       93 
     | 
    
         
            -
                  Object.new,
         
     | 
| 
       94 
     | 
    
         
            -
                  [],
         
     | 
| 
       95 
     | 
    
         
            -
                  'ASCC',
         
     | 
| 
       96 
     | 
    
         
            -
                ]
         
     | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
     | 
    
         
            -
                if RUBY_VERSION.to_f >= 3.0
         
     | 
| 
       99 
     | 
    
         
            -
                  invalid << {}
         
     | 
| 
       100 
     | 
    
         
            -
                end
         
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
                invalid.each do |direction|
         
     | 
| 
       103 
     | 
    
         
            -
                  assert_raise ArgumentError do
         
     | 
| 
       104 
     | 
    
         
            -
                    PostWithBaseOrderA.sort_order("foobar", direction).limit(1)
         
     | 
| 
       105 
     | 
    
         
            -
                  end
         
     | 
| 
       106 
     | 
    
         
            -
                end
         
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
     | 
    
         
            -
                ### TEST UNIQUE CASES
         
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
       110 
     | 
    
         
            -
                if RUBY_VERSION.to_f < 3.0
         
     | 
| 
       111 
     | 
    
         
            -
                  ### HASH - this is allowed because its treated as keyword arguments
         
     | 
| 
       112 
     | 
    
         
            -
                  Post.sort_order("foobar", {}).limit(1).to_sql.include?("foobar ASC")
         
     | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
       114 
     | 
    
         
            -
                  assert_raise do
         
     | 
| 
       115 
     | 
    
         
            -
                    Post.sort_order("foobar", {}, {}).limit(1)
         
     | 
| 
       116 
     | 
    
         
            -
                  end
         
     | 
| 
       117 
     | 
    
         
            -
                end
         
     | 
| 
       118 
     | 
    
         
            -
              end
         
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
              def test_argument_base_sort_order_errors
         
     | 
| 
       121 
     | 
    
         
            -
                assert_not Post.respond_to?(:base_sort_order)
         
     | 
| 
       122 
     | 
    
         
            -
             
     | 
| 
       123 
     | 
    
         
            -
                valid = [
         
     | 
| 
       124 
     | 
    
         
            -
                  nil,
         
     | 
| 
       125 
     | 
    
         
            -
                  true,
         
     | 
| 
       126 
     | 
    
         
            -
                  false,
         
     | 
| 
       127 
     | 
    
         
            -
                  "",
         
     | 
| 
       128 
     | 
    
         
            -
                  "foobar",
         
     | 
| 
       129 
     | 
    
         
            -
                ]
         
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
       131 
     | 
    
         
            -
                valid.each do |v|
         
     | 
| 
       132 
     | 
    
         
            -
                  Post.sort_order(base_sort_order: v).limit(1)
         
     | 
| 
       133 
     | 
    
         
            -
                end
         
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
       135 
     | 
    
         
            -
                invalid = [
         
     | 
| 
       136 
     | 
    
         
            -
                  :foobar,
         
     | 
| 
       137 
     | 
    
         
            -
                  [],
         
     | 
| 
       138 
     | 
    
         
            -
                  {},
         
     | 
| 
       139 
     | 
    
         
            -
                  Object.new,
         
     | 
| 
       140 
     | 
    
         
            -
                ]
         
     | 
| 
       141 
     | 
    
         
            -
             
     | 
| 
       142 
     | 
    
         
            -
                invalid.each do |v|
         
     | 
| 
       143 
     | 
    
         
            -
                  assert_raise ArgumentError do
         
     | 
| 
       144 
     | 
    
         
            -
                    Post.sort_order(base_sort_order: v).limit(1)
         
     | 
| 
       145 
     | 
    
         
            -
                  end
         
     | 
| 
       146 
     | 
    
         
            -
                end
         
     | 
| 
       147 
     | 
    
         
            -
              end
         
     | 
| 
       148 
     | 
    
         
            -
             
     | 
| 
       149 
     | 
    
         
            -
              def test_class_method_base_sort_order_errors
         
     | 
| 
       150 
     | 
    
         
            -
                klass = PostWithVolatileBaseOrder
         
     | 
| 
       151 
     | 
    
         
            -
             
     | 
| 
       152 
     | 
    
         
            -
                assert klass.respond_to?(:base_sort_order)
         
     | 
| 
       153 
     | 
    
         
            -
             
     | 
| 
       154 
     | 
    
         
            -
                valid = [
         
     | 
| 
       155 
     | 
    
         
            -
                  nil,
         
     | 
| 
       156 
     | 
    
         
            -
                  false,
         
     | 
| 
       157 
     | 
    
         
            -
                  "",
         
     | 
| 
       158 
     | 
    
         
            -
                  "foobar",
         
     | 
| 
       159 
     | 
    
         
            -
                ]
         
     | 
| 
       160 
     | 
    
         
            -
             
     | 
| 
       161 
     | 
    
         
            -
                valid.each do |v|
         
     | 
| 
       162 
     | 
    
         
            -
                  silence_warnings do
         
     | 
| 
       163 
     | 
    
         
            -
                    klass.define_singleton_method :base_sort_order do
         
     | 
| 
       164 
     | 
    
         
            -
                      v
         
     | 
| 
       165 
     | 
    
         
            -
                    end
         
     | 
| 
       166 
     | 
    
         
            -
                  end
         
     | 
| 
       167 
     | 
    
         
            -
             
     | 
| 
       168 
     | 
    
         
            -
                  if v.nil?
         
     | 
| 
       169 
     | 
    
         
            -
                    assert_nil klass.base_sort_order
         
     | 
| 
       170 
     | 
    
         
            -
                  else
         
     | 
| 
       171 
     | 
    
         
            -
                    assert_equal v, klass.base_sort_order
         
     | 
| 
       172 
     | 
    
         
            -
                  end
         
     | 
| 
       173 
     | 
    
         
            -
             
     | 
| 
       174 
     | 
    
         
            -
                  klass.sort_order.limit(1)
         
     | 
| 
       175 
     | 
    
         
            -
                end
         
     | 
| 
       176 
     | 
    
         
            -
             
     | 
| 
       177 
     | 
    
         
            -
                invalid = [
         
     | 
| 
       178 
     | 
    
         
            -
                  true,
         
     | 
| 
       179 
     | 
    
         
            -
                  :foobar,
         
     | 
| 
       180 
     | 
    
         
            -
                  [],
         
     | 
| 
       181 
     | 
    
         
            -
                  {},
         
     | 
| 
       182 
     | 
    
         
            -
                  Object.new,
         
     | 
| 
       183 
     | 
    
         
            -
                ]
         
     | 
| 
       184 
     | 
    
         
            -
             
     | 
| 
       185 
     | 
    
         
            -
                invalid.each do |v|
         
     | 
| 
       186 
     | 
    
         
            -
                  silence_warnings do
         
     | 
| 
       187 
     | 
    
         
            -
                    klass.define_singleton_method :base_sort_order do
         
     | 
| 
       188 
     | 
    
         
            -
                      v
         
     | 
| 
       189 
     | 
    
         
            -
                    end
         
     | 
| 
       190 
     | 
    
         
            -
                  end
         
     | 
| 
       191 
     | 
    
         
            -
             
     | 
| 
       192 
     | 
    
         
            -
                  if v.nil?
         
     | 
| 
       193 
     | 
    
         
            -
                    assert_nil klass.base_sort_order
         
     | 
| 
       194 
     | 
    
         
            -
                  else
         
     | 
| 
       195 
     | 
    
         
            -
                    assert_equal v, klass.base_sort_order
         
     | 
| 
       196 
     | 
    
         
            -
                  end
         
     | 
| 
       197 
     | 
    
         
            -
             
     | 
| 
       198 
     | 
    
         
            -
                  assert_raise ArgumentError do
         
     | 
| 
       199 
     | 
    
         
            -
                    klass.sort_order.limit(1)
         
     | 
| 
       200 
     | 
    
         
            -
                  end
         
     | 
| 
       201 
     | 
    
         
            -
                end
         
     | 
| 
       202 
     | 
    
         
            -
              end
         
     | 
| 
       203 
     | 
    
         
            -
             
     | 
| 
       204 
     | 
    
         
            -
            end
         
     |