ardb 0.29.1 → 0.29.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/.l.yml +8 -0
- data/.rubocop.yml +3 -0
- data/.t.yml +6 -0
- data/Gemfile +4 -2
- data/ardb.gemspec +9 -6
- data/bin/ardb +2 -0
- data/lib/ardb.rb +75 -61
- data/lib/ardb/adapter/base.rb +40 -19
- data/lib/ardb/adapter/mysql.rb +2 -0
- data/lib/ardb/adapter/postgresql.rb +36 -25
- data/lib/ardb/adapter/sqlite.rb +7 -7
- data/lib/ardb/adapter_spy.rb +16 -14
- data/lib/ardb/cli.rb +23 -18
- data/lib/ardb/cli/clirb.rb +5 -0
- data/lib/ardb/cli/commands.rb +184 -95
- data/lib/ardb/db_tests.rb +2 -0
- data/lib/ardb/default_order_by.rb +13 -11
- data/lib/ardb/migration.rb +7 -4
- data/lib/ardb/record_spy.rb +42 -38
- data/lib/ardb/relation_spy.rb +27 -25
- data/lib/ardb/require_autoloaded_active_record_files.rb +3 -1
- data/lib/ardb/test_helpers.rb +11 -9
- data/lib/ardb/use_db_default.rb +9 -7
- data/lib/ardb/version.rb +3 -1
- data/script/determine_autoloaded_active_record_files.rb +22 -20
- data/test/helper.rb +2 -0
- data/test/support/factory.rb +2 -1
- data/test/support/fake_schema.rb +3 -1
- data/test/support/postgresql/schema.rb +3 -1
- data/test/support/postgresql/setup_test_db.rb +3 -1
- data/test/support/relative_require_test_db_file.rb +1 -0
- data/test/support/require_test_db_file.rb +1 -0
- data/test/unit/adapter/base_tests.rb +9 -5
- data/test/unit/adapter/mysql_tests.rb +2 -0
- data/test/unit/adapter/postgresql_tests.rb +14 -14
- data/test/unit/adapter/sqlite_tests.rb +2 -0
- data/test/unit/adapter_spy_tests.rb +4 -1
- data/test/unit/ardb_tests.rb +28 -13
- data/test/unit/cli_tests.rb +47 -34
- data/test/unit/db_tests_tests.rb +4 -1
- data/test/unit/default_order_by_tests.rb +18 -13
- data/test/unit/migration_tests.rb +8 -5
- data/test/unit/record_spy_tests.rb +21 -14
- data/test/unit/relation_spy_tests.rb +28 -22
- data/test/unit/test_helpers_tests.rb +4 -1
- data/test/unit/use_db_default_tests.rb +16 -7
- metadata +27 -11
    
        data/lib/ardb/db_tests.rb
    CHANGED
    
    
| @@ -1,26 +1,28 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "much-mixin"
         | 
| 2 4 |  | 
| 3 5 | 
             
            module Ardb
         | 
| 4 6 | 
             
              module DefaultOrderBy
         | 
| 5 | 
            -
                include  | 
| 7 | 
            +
                include MuchMixin
         | 
| 6 8 |  | 
| 7 9 | 
             
                DEFAULT_ATTRIBUTE  = :order_by
         | 
| 8 10 | 
             
                DEFAULT_SCOPE_PROC = proc{ self.class.scoped }
         | 
| 9 11 |  | 
| 10 | 
            -
                 | 
| 12 | 
            +
                mixin_included do
         | 
| 11 13 | 
             
                  @ardb_default_order_by_config = {}
         | 
| 12 14 | 
             
                end
         | 
| 13 15 |  | 
| 14 | 
            -
                 | 
| 16 | 
            +
                mixin_class_methods do
         | 
| 15 17 | 
             
                  def default_order_by(options = nil)
         | 
| 16 18 | 
             
                    options ||= {}
         | 
| 17 19 |  | 
| 18 20 | 
             
                    @ardb_default_order_by_config.merge!({
         | 
| 19 | 
            -
                      : | 
| 20 | 
            -
                      : | 
| 21 | 
            +
                      attribute: options[:attribute] || DEFAULT_ATTRIBUTE,
         | 
| 22 | 
            +
                      scope_proc: options[:scope] || DEFAULT_SCOPE_PROC,
         | 
| 21 23 | 
             
                    })
         | 
| 22 24 |  | 
| 23 | 
            -
                    before_validation :ardb_default_order_by, : | 
| 25 | 
            +
                    before_validation :ardb_default_order_by, on: :create
         | 
| 24 26 | 
             
                  end
         | 
| 25 27 |  | 
| 26 28 | 
             
                  def ardb_default_order_by_config
         | 
| @@ -28,20 +30,20 @@ module Ardb | |
| 28 30 | 
             
                  end
         | 
| 29 31 | 
             
                end
         | 
| 30 32 |  | 
| 31 | 
            -
                 | 
| 33 | 
            +
                mixin_instance_methods do
         | 
| 32 34 | 
             
                  private
         | 
| 33 35 |  | 
| 34 36 | 
             
                  def reset_order_by
         | 
| 35 37 | 
             
                    attr_name  = self.class.ardb_default_order_by_config[:attribute]
         | 
| 36 38 | 
             
                    scope_proc = self.class.ardb_default_order_by_config[:scope_proc]
         | 
| 37 39 |  | 
| 38 | 
            -
                    current_max =  | 
| 39 | 
            -
                     | 
| 40 | 
            +
                    current_max = instance_eval(&scope_proc).maximum(attr_name) || 0
         | 
| 41 | 
            +
                    send("#{attr_name}=", current_max + 1)
         | 
| 40 42 | 
             
                  end
         | 
| 41 43 |  | 
| 42 44 | 
             
                  def ardb_default_order_by
         | 
| 43 45 | 
             
                    attr_name = self.class.ardb_default_order_by_config[:attribute]
         | 
| 44 | 
            -
                    reset_order_by if  | 
| 46 | 
            +
                    reset_order_by if send(attr_name).to_s.empty?
         | 
| 45 47 | 
             
                    true
         | 
| 46 48 | 
             
                  end
         | 
| 47 49 | 
             
                end
         | 
    
        data/lib/ardb/migration.rb
    CHANGED
    
    | @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            require "fileutils"
         | 
| 2 4 |  | 
| 3 5 | 
             
            module Ardb
         | 
| @@ -15,19 +17,20 @@ module Ardb | |
| 15 17 |  | 
| 16 18 | 
             
                  @class_name = @identifier.classify.pluralize
         | 
| 17 19 | 
             
                  @file_name  = get_file_name(@identifier)
         | 
| 18 | 
            -
                  @file_path  = File.join( | 
| 20 | 
            +
                  @file_path  = File.join(migrations_path, "#{@file_name}.rb")
         | 
| 19 21 |  | 
| 20 22 | 
             
                  migration_version = ActiveRecord::Migration.current_version
         | 
| 21 23 | 
             
                  @source =
         | 
| 22 | 
            -
                    "class #{@class_name}  | 
| 24 | 
            +
                    "class #{@class_name} "\
         | 
| 25 | 
            +
                    "< ActiveRecord::Migration[#{migration_version}]\n"\
         | 
| 23 26 | 
             
                    "  def change\n"\
         | 
| 24 27 | 
             
                    "  end\n"\
         | 
| 25 28 | 
             
                    "end\n"
         | 
| 26 29 | 
             
                end
         | 
| 27 30 |  | 
| 28 31 | 
             
                def save!
         | 
| 29 | 
            -
                  FileUtils.mkdir_p  | 
| 30 | 
            -
                  File.open( | 
| 32 | 
            +
                  FileUtils.mkdir_p migrations_path
         | 
| 33 | 
            +
                  File.open(file_path, "w"){ |f| f.write(source) }
         | 
| 31 34 | 
             
                  self
         | 
| 32 35 | 
             
                end
         | 
| 33 36 |  | 
    
        data/lib/ardb/record_spy.rb
    CHANGED
    
    | @@ -1,13 +1,15 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            require "arel"
         | 
| 2 | 
            -
            require "much- | 
| 4 | 
            +
            require "much-mixin"
         | 
| 3 5 | 
             
            require "ardb/relation_spy"
         | 
| 4 6 |  | 
| 5 7 | 
             
            module Ardb
         | 
| 6 8 | 
             
              module RecordSpy
         | 
| 7 | 
            -
                include  | 
| 9 | 
            +
                include MuchMixin
         | 
| 8 10 |  | 
| 9 11 | 
             
                def self.new(&block)
         | 
| 10 | 
            -
                  block ||= proc{ | 
| 12 | 
            +
                  block ||= proc{}
         | 
| 11 13 | 
             
                  record_spy = Class.new{ include Ardb::RecordSpy }
         | 
| 12 14 | 
             
                  record_spy.class_eval(&block)
         | 
| 13 15 | 
             
                  record_spy
         | 
| @@ -15,7 +17,7 @@ module Ardb | |
| 15 17 |  | 
| 16 18 | 
             
                CallbackType = Struct.new(:name, :options)
         | 
| 17 19 |  | 
| 18 | 
            -
                 | 
| 20 | 
            +
                mixin_class_methods do
         | 
| 19 21 | 
             
                  attr_accessor :table_name
         | 
| 20 22 |  | 
| 21 23 | 
             
                  # Associations
         | 
| @@ -27,13 +29,14 @@ module Ardb | |
| 27 29 | 
             
                  [:belongs_to, :has_one, :has_many].each do |method_name|
         | 
| 28 30 | 
             
                    define_method(method_name) do |assoc_name, *args|
         | 
| 29 31 | 
             
                      define_method(assoc_name) do
         | 
| 30 | 
            -
                        instance_variable_get("@#{assoc_name}") || | 
| 32 | 
            +
                        instance_variable_get("@#{assoc_name}") ||
         | 
| 33 | 
            +
                        (method_name == :has_many ? [] : nil)
         | 
| 31 34 | 
             
                      end
         | 
| 32 35 | 
             
                      define_method("#{assoc_name}=") do |value|
         | 
| 33 36 | 
             
                        instance_variable_set("@#{assoc_name}", value)
         | 
| 34 37 | 
             
                      end
         | 
| 35 38 |  | 
| 36 | 
            -
                       | 
| 39 | 
            +
                      associations << Association.new(method_name, assoc_name, *args)
         | 
| 37 40 | 
             
                    end
         | 
| 38 41 | 
             
                  end
         | 
| 39 42 |  | 
| @@ -43,7 +46,8 @@ module Ardb | |
| 43 46 | 
             
                    @validations ||= []
         | 
| 44 47 | 
             
                  end
         | 
| 45 48 |  | 
| 46 | 
            -
                  [ | 
| 49 | 
            +
                  [
         | 
| 50 | 
            +
                    :validates_acceptance_of,
         | 
| 47 51 | 
             
                    :validates_confirmation_of,
         | 
| 48 52 | 
             
                    :validates_exclusion_of,
         | 
| 49 53 | 
             
                    :validates_format_of,
         | 
| @@ -52,29 +56,29 @@ module Ardb | |
| 52 56 | 
             
                    :validates_numericality_of,
         | 
| 53 57 | 
             
                    :validates_presence_of,
         | 
| 54 58 | 
             
                    :validates_size_of,
         | 
| 55 | 
            -
                    :validates_uniqueness_of
         | 
| 59 | 
            +
                    :validates_uniqueness_of,
         | 
| 56 60 | 
             
                  ].each do |method_name|
         | 
| 57 61 | 
             
                    type = method_name.to_s.match(/\Avalidates_(.+)_of\Z/)[1]
         | 
| 58 62 |  | 
| 59 63 | 
             
                    define_method(method_name) do |*args|
         | 
| 60 | 
            -
                       | 
| 64 | 
            +
                      validations << Validation.new(type, *args)
         | 
| 61 65 | 
             
                    end
         | 
| 62 66 | 
             
                  end
         | 
| 63 67 |  | 
| 64 68 | 
             
                  def validates_associated(*args)
         | 
| 65 | 
            -
                     | 
| 69 | 
            +
                    validations << Validation.new(:associated, *args)
         | 
| 66 70 | 
             
                  end
         | 
| 67 71 |  | 
| 68 72 | 
             
                  def validates_with(*args)
         | 
| 69 | 
            -
                     | 
| 73 | 
            +
                    validations << Validation.new(:with, *args)
         | 
| 70 74 | 
             
                  end
         | 
| 71 75 |  | 
| 72 76 | 
             
                  def validates_each(*args, &block)
         | 
| 73 | 
            -
                     | 
| 77 | 
            +
                    validations << Validation.new(:each, *args, &block)
         | 
| 74 78 | 
             
                  end
         | 
| 75 79 |  | 
| 76 80 | 
             
                  def validate(method_name = nil, &block)
         | 
| 77 | 
            -
                     | 
| 81 | 
            +
                    validations << Validation.new(:custom, method_name, &block)
         | 
| 78 82 | 
             
                  end
         | 
| 79 83 |  | 
| 80 84 | 
             
                  def callbacks
         | 
| @@ -83,7 +87,8 @@ module Ardb | |
| 83 87 |  | 
| 84 88 | 
             
                  # Callbacks
         | 
| 85 89 |  | 
| 86 | 
            -
                  [ | 
| 90 | 
            +
                  [
         | 
| 91 | 
            +
                    :before_validation,
         | 
| 87 92 | 
             
                    :after_validation,
         | 
| 88 93 | 
             
                    :before_create,
         | 
| 89 94 | 
             
                    :around_create,
         | 
| @@ -100,10 +105,10 @@ module Ardb | |
| 100 105 | 
             
                    :after_commit,
         | 
| 101 106 | 
             
                    :after_rollback,
         | 
| 102 107 | 
             
                    :after_initialize,
         | 
| 103 | 
            -
                    :after_find
         | 
| 108 | 
            +
                    :after_find,
         | 
| 104 109 | 
             
                  ].each do |method_name|
         | 
| 105 110 | 
             
                    define_method(method_name) do |*args, &block|
         | 
| 106 | 
            -
                       | 
| 111 | 
            +
                      callbacks << Callback.new(method_name, *args, &block)
         | 
| 107 112 | 
             
                    end
         | 
| 108 113 | 
             
                  end
         | 
| 109 114 |  | 
| @@ -112,16 +117,16 @@ module Ardb | |
| 112 117 | 
             
                  end
         | 
| 113 118 |  | 
| 114 119 | 
             
                  def define_model_callbacks(*args)
         | 
| 115 | 
            -
                    options   = args.last. | 
| 120 | 
            +
                    options   = args.last.is_a?(Hash) ? args.pop : {}
         | 
| 116 121 | 
             
                    types     = options[:only] || [:before, :around, :after]
         | 
| 117 122 | 
             
                    metaclass = class << self; self; end
         | 
| 118 123 |  | 
| 119 124 | 
             
                    args.each do |name|
         | 
| 120 | 
            -
                       | 
| 125 | 
            +
                      custom_callback_types << CallbackType.new(name, options)
         | 
| 121 126 | 
             
                      types.each do |type|
         | 
| 122 127 | 
             
                        method_name = "#{type}_#{name}"
         | 
| 123 128 | 
             
                        metaclass.send(:define_method, method_name) do |*args, &block|
         | 
| 124 | 
            -
                           | 
| 129 | 
            +
                          callbacks << Callback.new(method_name, *args, &block)
         | 
| 125 130 | 
             
                        end
         | 
| 126 131 | 
             
                      end
         | 
| 127 132 | 
             
                    end
         | 
| @@ -135,14 +140,15 @@ module Ardb | |
| 135 140 | 
             
                  end
         | 
| 136 141 |  | 
| 137 142 | 
             
                  def arel_table
         | 
| 138 | 
            -
                    @arel_table ||= Arel::Table.new( | 
| 143 | 
            +
                    @arel_table ||= Arel::Table.new(table_name)
         | 
| 139 144 | 
             
                  end
         | 
| 140 145 |  | 
| 141 146 | 
             
                  def scoped
         | 
| 142 | 
            -
                     | 
| 147 | 
            +
                    relation_spy
         | 
| 143 148 | 
             
                  end
         | 
| 144 149 |  | 
| 145 | 
            -
                  [ | 
| 150 | 
            +
                  [
         | 
| 151 | 
            +
                    :select,
         | 
| 146 152 | 
             
                    :from,
         | 
| 147 153 | 
             
                    :includes,
         | 
| 148 154 | 
             
                    :joins,
         | 
| @@ -156,19 +162,19 @@ module Ardb | |
| 156 162 | 
             
                    :offset,
         | 
| 157 163 | 
             
                    :merge,
         | 
| 158 164 | 
             
                    :except,
         | 
| 159 | 
            -
                    :only
         | 
| 165 | 
            +
                    :only,
         | 
| 160 166 | 
             
                  ].each do |method_name|
         | 
| 161 167 | 
             
                    define_method(method_name) do |*args|
         | 
| 162 | 
            -
                       | 
| 168 | 
            +
                      relation_spy.send(method_name, *args)
         | 
| 163 169 | 
             
                    end
         | 
| 164 170 | 
             
                  end
         | 
| 165 171 | 
             
                end
         | 
| 166 172 |  | 
| 167 | 
            -
                 | 
| 173 | 
            +
                mixin_instance_methods do
         | 
| 168 174 | 
             
                  attr_accessor :id
         | 
| 169 175 |  | 
| 170 176 | 
             
                  def update_column(col, value)
         | 
| 171 | 
            -
                     | 
| 177 | 
            +
                    send("#{col}=", value)
         | 
| 172 178 | 
             
                  end
         | 
| 173 179 |  | 
| 174 180 | 
             
                  def manually_run_callbacks
         | 
| @@ -176,8 +182,8 @@ module Ardb | |
| 176 182 | 
             
                  end
         | 
| 177 183 |  | 
| 178 184 | 
             
                  def run_callbacks(name, &block)
         | 
| 179 | 
            -
                     | 
| 180 | 
            -
                    block | 
| 185 | 
            +
                    manually_run_callbacks << name
         | 
| 186 | 
            +
                    block&.call
         | 
| 181 187 | 
             
                  end
         | 
| 182 188 | 
             
                end
         | 
| 183 189 |  | 
| @@ -195,8 +201,8 @@ module Ardb | |
| 195 201 | 
             
                  attr_reader :type, :args, :options, :block
         | 
| 196 202 |  | 
| 197 203 | 
             
                  def initialize(type, *args, &block)
         | 
| 198 | 
            -
                    @type | 
| 199 | 
            -
                    @options = args.last. | 
| 204 | 
            +
                    @type = type.to_sym
         | 
| 205 | 
            +
                    @options = args.last.is_a?(::Hash) ? args.pop : {}
         | 
| 200 206 | 
             
                    @args  = args
         | 
| 201 207 | 
             
                    @block = block
         | 
| 202 208 | 
             
                  end
         | 
| @@ -204,18 +210,16 @@ module Ardb | |
| 204 210 |  | 
| 205 211 | 
             
                class Validation
         | 
| 206 212 | 
             
                  attr_reader :type, :args, :options, :method_name, :block
         | 
| 207 | 
            -
                   | 
| 208 | 
            -
                   | 
| 209 | 
            -
                   | 
| 213 | 
            +
                  alias_method :columns, :args
         | 
| 214 | 
            +
                  alias_method :associations, :args
         | 
| 215 | 
            +
                  alias_method :classes, :args
         | 
| 210 216 |  | 
| 211 217 | 
             
                  def initialize(type, *args, &block)
         | 
| 212 | 
            -
                    @type | 
| 213 | 
            -
                    @options = args.last. | 
| 218 | 
            +
                    @type = type.to_sym
         | 
| 219 | 
            +
                    @options = args.last.is_a?(::Hash) ? args.pop : {}
         | 
| 214 220 | 
             
                    @args = args
         | 
| 215 221 | 
             
                    @block = block
         | 
| 216 | 
            -
                    if @type == :custom
         | 
| 217 | 
            -
                      @method_name = @args.first
         | 
| 218 | 
            -
                    end
         | 
| 222 | 
            +
                    @method_name = @args.first if @type == :custom
         | 
| 219 223 | 
             
                  end
         | 
| 220 224 | 
             
                end
         | 
| 221 225 | 
             
              end
         | 
    
        data/lib/ardb/relation_spy.rb
    CHANGED
    
    | @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            module Ardb
         | 
| 2 4 | 
             
              class RelationSpy
         | 
| 3 5 | 
             
                attr_reader :applied
         | 
| @@ -21,7 +23,7 @@ module Ardb | |
| 21 23 | 
             
                end
         | 
| 22 24 |  | 
| 23 25 | 
             
                def ==(other)
         | 
| 24 | 
            -
                  other. | 
| 26 | 
            +
                  other.is_a?(self.class) ? @applied == other.applied : super
         | 
| 25 27 | 
             
                end
         | 
| 26 28 |  | 
| 27 29 | 
             
                def to_sql
         | 
| @@ -37,17 +39,17 @@ module Ardb | |
| 37 39 |  | 
| 38 40 | 
             
                # ActiveRecord::QueryMethods
         | 
| 39 41 |  | 
| 40 | 
            -
                [ | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 42 | 
            +
                [:select,
         | 
| 43 | 
            +
                 :from,
         | 
| 44 | 
            +
                 :includes,
         | 
| 45 | 
            +
                 :joins,
         | 
| 46 | 
            +
                 :where,
         | 
| 47 | 
            +
                 :group,
         | 
| 48 | 
            +
                 :having,
         | 
| 49 | 
            +
                 :order,
         | 
| 50 | 
            +
                 :reverse_order,
         | 
| 51 | 
            +
                 :readonly,
         | 
| 52 | 
            +
            ].each do |type|
         | 
| 51 53 | 
             
                  define_method(type) do |*args|
         | 
| 52 54 | 
             
                    @applied << AppliedExpression.new(type, args)
         | 
| 53 55 | 
             
                    self
         | 
| @@ -56,31 +58,31 @@ module Ardb | |
| 56 58 |  | 
| 57 59 | 
             
                def limit(value)
         | 
| 58 60 | 
             
                  @limit_value = value ? value.to_i : nil
         | 
| 59 | 
            -
                  @applied << AppliedExpression.new(:limit, [ | 
| 61 | 
            +
                  @applied << AppliedExpression.new(:limit, [value])
         | 
| 60 62 | 
             
                  self
         | 
| 61 63 | 
             
                end
         | 
| 62 64 |  | 
| 63 65 | 
             
                def offset(value)
         | 
| 64 66 | 
             
                  @offset_value = value ? value.to_i : nil
         | 
| 65 | 
            -
                  @applied << AppliedExpression.new(:offset, [ | 
| 67 | 
            +
                  @applied << AppliedExpression.new(:offset, [value])
         | 
| 66 68 | 
             
                  self
         | 
| 67 69 | 
             
                end
         | 
| 68 70 |  | 
| 69 71 | 
             
                # ActiveRecord::SpawnMethods
         | 
| 70 72 |  | 
| 71 73 | 
             
                def merge(other)
         | 
| 72 | 
            -
                  return self if  | 
| 73 | 
            -
                  if other. | 
| 74 | 
            -
                    other.applied.each{ |a|  | 
| 74 | 
            +
                  return self if equal?(other)
         | 
| 75 | 
            +
                  if other.is_a?(self.class)
         | 
| 76 | 
            +
                    other.applied.each{ |a| send(a.type, *a.args) }
         | 
| 75 77 | 
             
                  else
         | 
| 76 | 
            -
                    @applied << AppliedExpression.new(:merge, [ | 
| 78 | 
            +
                    @applied << AppliedExpression.new(:merge, [other])
         | 
| 77 79 | 
             
                  end
         | 
| 78 80 | 
             
                  self
         | 
| 79 81 | 
             
                end
         | 
| 80 82 |  | 
| 81 83 | 
             
                def except(*skips)
         | 
| 82 84 | 
             
                  skips = skips.map(&:to_sym)
         | 
| 83 | 
            -
                   | 
| 85 | 
            +
                  dup.tap do |r|
         | 
| 84 86 | 
             
                    r.applied.reject!{ |a| skips.include?(a.type) }
         | 
| 85 87 | 
             
                    r.limit_value    = nil if skips.include?(:limit)
         | 
| 86 88 | 
             
                    r.offset_value   = nil if skips.include?(:offset)
         | 
| @@ -89,7 +91,7 @@ module Ardb | |
| 89 91 |  | 
| 90 92 | 
             
                def only(*onlies)
         | 
| 91 93 | 
             
                  onlies = onlies.map(&:to_sym)
         | 
| 92 | 
            -
                   | 
| 94 | 
            +
                  dup.tap do |r|
         | 
| 93 95 | 
             
                    r.applied.reject!{ |a| !onlies.include?(a.type) }
         | 
| 94 96 | 
             
                    r.limit_value    = nil unless onlies.include?(:limit)
         | 
| 95 97 | 
             
                    r.offset_value   = nil unless onlies.include?(:offset)
         | 
| @@ -104,19 +106,19 @@ module Ardb | |
| 104 106 | 
             
                end
         | 
| 105 107 |  | 
| 106 108 | 
             
                def first
         | 
| 107 | 
            -
                   | 
| 109 | 
            +
                  all.first
         | 
| 108 110 | 
             
                end
         | 
| 109 111 |  | 
| 110 112 | 
             
                def first!
         | 
| 111 | 
            -
                   | 
| 113 | 
            +
                  first || raise(NotFoundError)
         | 
| 112 114 | 
             
                end
         | 
| 113 115 |  | 
| 114 116 | 
             
                def last
         | 
| 115 | 
            -
                   | 
| 117 | 
            +
                  all.last
         | 
| 116 118 | 
             
                end
         | 
| 117 119 |  | 
| 118 120 | 
             
                def last!
         | 
| 119 | 
            -
                   | 
| 121 | 
            +
                  last || raise(NotFoundError)
         | 
| 120 122 | 
             
                end
         | 
| 121 123 |  | 
| 122 124 | 
             
                def all
         | 
| @@ -143,7 +145,7 @@ module Ardb | |
| 143 145 |  | 
| 144 146 | 
             
                class AppliedExpression < Struct.new(:type, :args)
         | 
| 145 147 | 
             
                  def to_sql
         | 
| 146 | 
            -
                    "#{ | 
| 148 | 
            +
                    "#{type}: #{args.inspect}"
         | 
| 147 149 | 
             
                  end
         | 
| 148 150 | 
             
                end
         | 
| 149 151 |  | 
| @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            # ActiveRecord makes use of autoload to load some of its components as-needed.
         | 
| 2 4 | 
             
            # This doesn"t work well with threaded environments, and causes uninitialized
         | 
| 3 5 | 
             
            # constants. To avoid this, this file manually requires the following files that
         | 
| @@ -173,7 +175,7 @@ elsif ActiveRecord.version.segments[0] == 5 | |
| 173 175 | 
             
            else
         | 
| 174 176 | 
             
              raise(
         | 
| 175 177 | 
             
                "ActiveRecord #{ActiveRecord.version} isn't supported. "\
         | 
| 176 | 
            -
                "Switch to 5.X or 6.X"
         | 
| 178 | 
            +
                "Switch to 5.X or 6.X",
         | 
| 177 179 | 
             
              )
         | 
| 178 180 | 
             
            end
         | 
| 179 181 |  |