atomically 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +119 -0
- data/.gitignore +50 -50
- data/.rubocop.yml +1227 -1227
- data/CHANGELOG.md +37 -37
- data/CODE_OF_CONDUCT.md +48 -48
- data/LICENSE +21 -21
- data/LICENSE.txt +21 -21
- data/README.md +342 -342
- data/Rakefile +10 -10
- data/bin/console +14 -14
- data/bin/setup +8 -8
- data/gemfiles/3.2.gemfile +16 -16
- data/gemfiles/4.2.gemfile +16 -16
- data/gemfiles/5.0.gemfile +16 -16
- data/gemfiles/5.1.gemfile +16 -16
- data/gemfiles/5.2.gemfile +16 -16
- data/gemfiles/6.0.gemfile +15 -15
- data/lib/atomically/active_record/extension.rb +20 -20
- data/lib/atomically/adapter_check_service.rb +30 -30
- data/lib/atomically/on_duplicate_sql_service.rb +28 -28
- data/lib/atomically/patches/clear_attribute_changes.rb +17 -17
- data/lib/atomically/patches/from.rb +10 -10
- data/lib/atomically/patches/none.rb +9 -9
- data/lib/atomically/query_service.rb +154 -153
- data/lib/atomically/version.rb +5 -5
- data/lib/atomically.rb +7 -7
- metadata +4 -4
- data/.travis.yml +0 -65
data/Rakefile
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
require 'bundler/gem_tasks'
|
2
|
-
require 'rake/testtask'
|
3
|
-
|
4
|
-
Rake::TestTask.new(:test) do |t|
|
5
|
-
t.libs << 'test'
|
6
|
-
t.libs << 'lib'
|
7
|
-
t.test_files = FileList['test/**/*_test.rb']
|
8
|
-
end
|
9
|
-
|
10
|
-
task default: :test
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rake/testtask'
|
3
|
+
|
4
|
+
Rake::TestTask.new(:test) do |t|
|
5
|
+
t.libs << 'test'
|
6
|
+
t.libs << 'lib'
|
7
|
+
t.test_files = FileList['test/**/*_test.rb']
|
8
|
+
end
|
9
|
+
|
10
|
+
task default: :test
|
data/bin/console
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'bundler/setup'
|
4
|
-
require 'atomically'
|
5
|
-
|
6
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
-
# with your gem easier. You can also use a different console, if you like.
|
8
|
-
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
# require "pry"
|
11
|
-
# Pry.start
|
12
|
-
|
13
|
-
require 'irb'
|
14
|
-
IRB.start
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'atomically'
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require 'irb'
|
14
|
+
IRB.start
|
data/bin/setup
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
#!/usr/bin/env bash
|
2
|
-
set -euo pipefail
|
3
|
-
IFS=$'\n\t'
|
4
|
-
set -vx
|
5
|
-
|
6
|
-
bundle install --gemfile=gemfiles/4.2.gemfile
|
7
|
-
|
8
|
-
# Do any other automated setup that you need to do here
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
set -euo pipefail
|
3
|
+
IFS=$'\n\t'
|
4
|
+
set -vx
|
5
|
+
|
6
|
+
bundle install --gemfile=gemfiles/4.2.gemfile
|
7
|
+
|
8
|
+
# Do any other automated setup that you need to do here
|
data/gemfiles/3.2.gemfile
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
gem 'activerecord', '~> 3.2.0'
|
4
|
-
|
5
|
-
group :test do
|
6
|
-
gem 'mysql2', '0.3.21' if %w[mysql makara_mysql].include?(ENV['DB'])
|
7
|
-
gem 'pg', '~> 0.18' if %w[pg makara_pg].include?(ENV['DB'])
|
8
|
-
gem 'makara', '~> 0.4.1' if %w[makara_mysql makara_pg].include?(ENV['DB'])
|
9
|
-
gem 'simplecov'
|
10
|
-
gem 'i18n', '< 1.6'
|
11
|
-
gem 'pluck_all', '>= 2.0.3'
|
12
|
-
gem 'timecop', '~> 0.9.1'
|
13
|
-
gem 'update_all_scope', '~> 0.1.0'
|
14
|
-
end
|
15
|
-
|
16
|
-
gemspec path: '../'
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gem 'activerecord', '~> 3.2.0'
|
4
|
+
|
5
|
+
group :test do
|
6
|
+
gem 'mysql2', '0.3.21' if %w[mysql makara_mysql].include?(ENV['DB'])
|
7
|
+
gem 'pg', '~> 0.18' if %w[pg makara_pg].include?(ENV['DB'])
|
8
|
+
gem 'makara', '~> 0.4.1' if %w[makara_mysql makara_pg].include?(ENV['DB'])
|
9
|
+
gem 'simplecov', '< 0.18'
|
10
|
+
gem 'i18n', '< 1.6'
|
11
|
+
gem 'pluck_all', '>= 2.0.3'
|
12
|
+
gem 'timecop', '~> 0.9.1'
|
13
|
+
gem 'update_all_scope', '~> 0.1.0'
|
14
|
+
end
|
15
|
+
|
16
|
+
gemspec path: '../'
|
data/gemfiles/4.2.gemfile
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
gem 'activerecord', '~> 4.2.0'
|
4
|
-
|
5
|
-
group :test do
|
6
|
-
gem 'mysql2', '0.
|
7
|
-
gem 'pg', '~> 0.18' if %w[pg makara_pg].include?(ENV['DB'])
|
8
|
-
gem 'makara', '~> 0.4.1' if %w[makara_mysql makara_pg].include?(ENV['DB'])
|
9
|
-
gem 'simplecov'
|
10
|
-
gem 'i18n', '< 1.6'
|
11
|
-
gem 'pluck_all', '>= 2.0.3'
|
12
|
-
gem 'timecop', '~> 0.9.1'
|
13
|
-
gem 'update_all_scope', '~> 0.1.0'
|
14
|
-
end
|
15
|
-
|
16
|
-
gemspec path: '../'
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gem 'activerecord', '~> 4.2.0'
|
4
|
+
|
5
|
+
group :test do
|
6
|
+
gem 'mysql2', '0.4.10' if %w[mysql makara_mysql].include?(ENV['DB'])
|
7
|
+
gem 'pg', '~> 0.18' if %w[pg makara_pg].include?(ENV['DB'])
|
8
|
+
gem 'makara', '~> 0.4.1' if %w[makara_mysql makara_pg].include?(ENV['DB'])
|
9
|
+
gem 'simplecov', '< 0.18'
|
10
|
+
gem 'i18n', '< 1.6'
|
11
|
+
gem 'pluck_all', '>= 2.0.3'
|
12
|
+
gem 'timecop', '~> 0.9.1'
|
13
|
+
gem 'update_all_scope', '~> 0.1.0'
|
14
|
+
end
|
15
|
+
|
16
|
+
gemspec path: '../'
|
data/gemfiles/5.0.gemfile
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
gem 'activerecord', '~> 5.0.0'
|
4
|
-
|
5
|
-
group :test do
|
6
|
-
gem 'mysql2', '0.
|
7
|
-
gem 'pg', '~> 0.18' if %w[pg makara_pg].include?(ENV['DB'])
|
8
|
-
gem 'makara', '~> 0.4.1' if %w[makara_mysql makara_pg].include?(ENV['DB'])
|
9
|
-
gem 'simplecov'
|
10
|
-
gem 'i18n', '< 1.6'
|
11
|
-
gem 'pluck_all', '>= 2.0.3'
|
12
|
-
gem 'timecop', '~> 0.9.1'
|
13
|
-
gem 'update_all_scope', '~> 0.1.0'
|
14
|
-
end
|
15
|
-
|
16
|
-
gemspec path: '../'
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gem 'activerecord', '~> 5.0.0'
|
4
|
+
|
5
|
+
group :test do
|
6
|
+
gem 'mysql2', '0.4.10' if %w[mysql makara_mysql].include?(ENV['DB'])
|
7
|
+
gem 'pg', '~> 0.18' if %w[pg makara_pg].include?(ENV['DB'])
|
8
|
+
gem 'makara', '~> 0.4.1' if %w[makara_mysql makara_pg].include?(ENV['DB'])
|
9
|
+
gem 'simplecov', '< 0.18'
|
10
|
+
gem 'i18n', '< 1.6'
|
11
|
+
gem 'pluck_all', '>= 2.0.3'
|
12
|
+
gem 'timecop', '~> 0.9.1'
|
13
|
+
gem 'update_all_scope', '~> 0.1.0'
|
14
|
+
end
|
15
|
+
|
16
|
+
gemspec path: '../'
|
data/gemfiles/5.1.gemfile
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
gem 'activerecord', '~> 5.1.0'
|
4
|
-
|
5
|
-
group :test do
|
6
|
-
gem 'mysql2', '0.
|
7
|
-
gem 'pg', '~> 0.18' if %w[pg makara_pg].include?(ENV['DB'])
|
8
|
-
gem 'makara', '~> 0.4.1' if %w[makara_mysql makara_pg].include?(ENV['DB'])
|
9
|
-
gem 'simplecov'
|
10
|
-
gem 'i18n', '< 1.6'
|
11
|
-
gem 'pluck_all', '>= 2.0.3'
|
12
|
-
gem 'timecop', '~> 0.9.1'
|
13
|
-
gem 'update_all_scope', '~> 0.1.0'
|
14
|
-
end
|
15
|
-
|
16
|
-
gemspec path: '../'
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gem 'activerecord', '~> 5.1.0'
|
4
|
+
|
5
|
+
group :test do
|
6
|
+
gem 'mysql2', '0.4.10' if %w[mysql makara_mysql].include?(ENV['DB'])
|
7
|
+
gem 'pg', '~> 0.18' if %w[pg makara_pg].include?(ENV['DB'])
|
8
|
+
gem 'makara', '~> 0.4.1' if %w[makara_mysql makara_pg].include?(ENV['DB'])
|
9
|
+
gem 'simplecov', '< 0.18'
|
10
|
+
gem 'i18n', '< 1.6'
|
11
|
+
gem 'pluck_all', '>= 2.0.3'
|
12
|
+
gem 'timecop', '~> 0.9.1'
|
13
|
+
gem 'update_all_scope', '~> 0.1.0'
|
14
|
+
end
|
15
|
+
|
16
|
+
gemspec path: '../'
|
data/gemfiles/5.2.gemfile
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
gem 'activerecord', '~> 5.2.0'
|
4
|
-
|
5
|
-
group :test do
|
6
|
-
gem 'mysql2', '0.5.1' if %w[mysql makara_mysql].include?(ENV['DB'])
|
7
|
-
gem 'pg', '~> 0.18' if %w[pg makara_pg].include?(ENV['DB'])
|
8
|
-
gem 'makara', '~> 0.4.1' if %w[makara_mysql makara_pg].include?(ENV['DB'])
|
9
|
-
gem 'simplecov'
|
10
|
-
gem 'i18n', '< 1.6'
|
11
|
-
gem 'pluck_all', '>= 2.0.3'
|
12
|
-
gem 'timecop', '~> 0.9.1'
|
13
|
-
gem 'update_all_scope', '~> 0.1.0'
|
14
|
-
end
|
15
|
-
|
16
|
-
gemspec path: '../'
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gem 'activerecord', '~> 5.2.0'
|
4
|
+
|
5
|
+
group :test do
|
6
|
+
gem 'mysql2', '0.5.1' if %w[mysql makara_mysql].include?(ENV['DB'])
|
7
|
+
gem 'pg', '~> 0.18' if %w[pg makara_pg].include?(ENV['DB'])
|
8
|
+
gem 'makara', '~> 0.4.1' if %w[makara_mysql makara_pg].include?(ENV['DB'])
|
9
|
+
gem 'simplecov', '< 0.18'
|
10
|
+
gem 'i18n', '< 1.6'
|
11
|
+
gem 'pluck_all', '>= 2.0.3'
|
12
|
+
gem 'timecop', '~> 0.9.1'
|
13
|
+
gem 'update_all_scope', '~> 0.1.0'
|
14
|
+
end
|
15
|
+
|
16
|
+
gemspec path: '../'
|
data/gemfiles/6.0.gemfile
CHANGED
@@ -1,15 +1,15 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
gem 'activerecord', '~> 6.0.0'
|
4
|
-
|
5
|
-
group :test do
|
6
|
-
gem 'mysql2', '0.5.1' if %w[mysql makara_mysql].include?(ENV['DB'])
|
7
|
-
gem 'pg', '~>
|
8
|
-
gem 'makara', '~> 0.4.1' if %w[makara_mysql makara_pg].include?(ENV['DB'])
|
9
|
-
gem 'simplecov'
|
10
|
-
gem 'pluck_all', '>= 2.0.4'
|
11
|
-
gem 'timecop', '~> 0.9.1'
|
12
|
-
gem 'update_all_scope', '~> 0.1.0'
|
13
|
-
end
|
14
|
-
|
15
|
-
gemspec path: '../'
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gem 'activerecord', '~> 6.0.0'
|
4
|
+
|
5
|
+
group :test do
|
6
|
+
gem 'mysql2', '0.5.1' if %w[mysql makara_mysql].include?(ENV['DB'])
|
7
|
+
gem 'pg', '~> 1.4.6' if %w[pg makara_pg].include?(ENV['DB'])
|
8
|
+
gem 'makara', '~> 0.4.1' if %w[makara_mysql makara_pg].include?(ENV['DB'])
|
9
|
+
gem 'simplecov', '< 0.18'
|
10
|
+
gem 'pluck_all', '>= 2.0.4'
|
11
|
+
gem 'timecop', '~> 0.9.1'
|
12
|
+
gem 'update_all_scope', '~> 0.1.0'
|
13
|
+
end
|
14
|
+
|
15
|
+
gemspec path: '../'
|
@@ -1,20 +1,20 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'active_record'
|
4
|
-
require 'atomically/query_service'
|
5
|
-
|
6
|
-
class ActiveRecord::Relation
|
7
|
-
def atomically
|
8
|
-
Atomically::QueryService.new(klass, relation: self)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
class ActiveRecord::Base
|
13
|
-
def self.atomically
|
14
|
-
Atomically::QueryService.new(self)
|
15
|
-
end
|
16
|
-
|
17
|
-
def atomically
|
18
|
-
Atomically::QueryService.new(self.class, model: self)
|
19
|
-
end
|
20
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_record'
|
4
|
+
require 'atomically/query_service'
|
5
|
+
|
6
|
+
class ActiveRecord::Relation
|
7
|
+
def atomically
|
8
|
+
Atomically::QueryService.new(klass, relation: self)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class ActiveRecord::Base
|
13
|
+
def self.atomically
|
14
|
+
Atomically::QueryService.new(self)
|
15
|
+
end
|
16
|
+
|
17
|
+
def atomically
|
18
|
+
Atomically::QueryService.new(self.class, model: self)
|
19
|
+
end
|
20
|
+
end
|
@@ -1,30 +1,30 @@
|
|
1
|
-
|
2
|
-
class Atomically::AdapterCheckService
|
3
|
-
def initialize(klass)
|
4
|
-
@klass = klass
|
5
|
-
end
|
6
|
-
|
7
|
-
def pg?
|
8
|
-
possible_pg_klasses.any?{|s| @klass.connection.is_a?(s) }
|
9
|
-
end
|
10
|
-
|
11
|
-
def mysql?
|
12
|
-
possible_mysql_klasses.any?{|s| @klass.connection.is_a?(s) }
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def possible_pg_klasses
|
18
|
-
@possible_pg_klasses ||= [].tap do |result|
|
19
|
-
result << ActiveRecord::ConnectionAdapters::PostgreSQLAdapter if defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
|
20
|
-
result << ActiveRecord::ConnectionAdapters::MakaraPostgreSQLAdapter if defined?(ActiveRecord::ConnectionAdapters::MakaraPostgreSQLAdapter)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def possible_mysql_klasses
|
25
|
-
@possible_mysql_klasses ||= [].tap do |result|
|
26
|
-
result << ActiveRecord::ConnectionAdapters::Mysql2Adapter if defined?(ActiveRecord::ConnectionAdapters::Mysql2Adapter)
|
27
|
-
result << ActiveRecord::ConnectionAdapters::MakaraMysql2Adapter if defined?(ActiveRecord::ConnectionAdapters::MakaraMysql2Adapter)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
1
|
+
|
2
|
+
class Atomically::AdapterCheckService
|
3
|
+
def initialize(klass)
|
4
|
+
@klass = klass
|
5
|
+
end
|
6
|
+
|
7
|
+
def pg?
|
8
|
+
possible_pg_klasses.any?{|s| @klass.connection.is_a?(s) }
|
9
|
+
end
|
10
|
+
|
11
|
+
def mysql?
|
12
|
+
possible_mysql_klasses.any?{|s| @klass.connection.is_a?(s) }
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def possible_pg_klasses
|
18
|
+
@possible_pg_klasses ||= [].tap do |result|
|
19
|
+
result << ActiveRecord::ConnectionAdapters::PostgreSQLAdapter if defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
|
20
|
+
result << ActiveRecord::ConnectionAdapters::MakaraPostgreSQLAdapter if defined?(ActiveRecord::ConnectionAdapters::MakaraPostgreSQLAdapter)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def possible_mysql_klasses
|
25
|
+
@possible_mysql_klasses ||= [].tap do |result|
|
26
|
+
result << ActiveRecord::ConnectionAdapters::Mysql2Adapter if defined?(ActiveRecord::ConnectionAdapters::Mysql2Adapter)
|
27
|
+
result << ActiveRecord::ConnectionAdapters::MakaraMysql2Adapter if defined?(ActiveRecord::ConnectionAdapters::MakaraMysql2Adapter)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1,28 +1,28 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class Atomically::OnDuplicateSqlService
|
4
|
-
def initialize(klass, columns)
|
5
|
-
@klass = klass
|
6
|
-
@columns = columns
|
7
|
-
end
|
8
|
-
|
9
|
-
def mysql_quote_columns_for_plus
|
10
|
-
return @columns.map do |column|
|
11
|
-
quoted_column = quote_column(column)
|
12
|
-
next "#{quoted_column} = #{quoted_column} + VALUES(#{quoted_column})"
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def pg_quote_columns_for_plus
|
17
|
-
return @columns.map do |column|
|
18
|
-
quoted_column = quote_column(column)
|
19
|
-
next "#{quoted_column} = #{@klass.quoted_table_name}.#{quoted_column} + excluded.#{quoted_column}"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def quote_column(column)
|
26
|
-
@klass.connection.quote_column_name(column)
|
27
|
-
end
|
28
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Atomically::OnDuplicateSqlService
|
4
|
+
def initialize(klass, columns)
|
5
|
+
@klass = klass
|
6
|
+
@columns = columns
|
7
|
+
end
|
8
|
+
|
9
|
+
def mysql_quote_columns_for_plus
|
10
|
+
return @columns.map do |column|
|
11
|
+
quoted_column = quote_column(column)
|
12
|
+
next "#{quoted_column} = #{quoted_column} + VALUES(#{quoted_column})"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def pg_quote_columns_for_plus
|
17
|
+
return @columns.map do |column|
|
18
|
+
quoted_column = quote_column(column)
|
19
|
+
next "#{quoted_column} = #{@klass.quoted_table_name}.#{quoted_column} + excluded.#{quoted_column}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def quote_column(column)
|
26
|
+
@klass.connection.quote_column_name(column)
|
27
|
+
end
|
28
|
+
end
|
@@ -1,17 +1,17 @@
|
|
1
|
-
module ActiveModel
|
2
|
-
module Dirty
|
3
|
-
private
|
4
|
-
|
5
|
-
alias attributes_changed_by_setter changed_attributes # :nodoc:
|
6
|
-
|
7
|
-
# Force an attribute to have a particular "before" value
|
8
|
-
def set_attribute_was(attr, old_value)
|
9
|
-
attributes_changed_by_setter[attr] = old_value
|
10
|
-
end
|
11
|
-
|
12
|
-
# Remove changes information for the provided attributes.
|
13
|
-
def clear_attribute_changes(attributes) # :doc:
|
14
|
-
attributes_changed_by_setter.except!(*attributes)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
1
|
+
module ActiveModel
|
2
|
+
module Dirty
|
3
|
+
private
|
4
|
+
|
5
|
+
alias attributes_changed_by_setter changed_attributes # :nodoc:
|
6
|
+
|
7
|
+
# Force an attribute to have a particular "before" value
|
8
|
+
def set_attribute_was(attr, old_value)
|
9
|
+
attributes_changed_by_setter[attr] = old_value
|
10
|
+
end
|
11
|
+
|
12
|
+
# Remove changes information for the provided attributes.
|
13
|
+
def clear_attribute_changes(attributes) # :doc:
|
14
|
+
attributes_changed_by_setter.except!(*attributes)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,10 +1,10 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'active_record'
|
4
|
-
|
5
|
-
class << ActiveRecord::Base
|
6
|
-
def from(value) # For Rails 3
|
7
|
-
value = "(#{value.to_sql}) subquery" if value.is_a?(ActiveRecord::Relation)
|
8
|
-
return super
|
9
|
-
end
|
10
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_record'
|
4
|
+
|
5
|
+
class << ActiveRecord::Base
|
6
|
+
def from(value) # For Rails 3
|
7
|
+
value = "(#{value.to_sql}) subquery" if value.is_a?(ActiveRecord::Relation)
|
8
|
+
return super
|
9
|
+
end
|
10
|
+
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'active_record'
|
4
|
-
|
5
|
-
class << ActiveRecord::Base
|
6
|
-
def none # For Rails 3
|
7
|
-
where('1=0')
|
8
|
-
end
|
9
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_record'
|
4
|
+
|
5
|
+
class << ActiveRecord::Base
|
6
|
+
def none # For Rails 3
|
7
|
+
where('1=0')
|
8
|
+
end
|
9
|
+
end
|