active_remote 3.3.3 → 5.0.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +28 -0
- data/CHANGES.md +13 -0
- data/Gemfile +1 -1
- data/Rakefile +7 -3
- data/active_remote.gemspec +8 -6
- data/lib/active_remote.rb +9 -8
- data/lib/active_remote/association.rb +12 -14
- data/lib/active_remote/attribute_definition.rb +14 -12
- data/lib/active_remote/attributes.rb +6 -6
- data/lib/active_remote/base.rb +20 -27
- data/lib/active_remote/config.rb +1 -1
- data/lib/active_remote/dirty.rb +3 -3
- data/lib/active_remote/dsl.rb +3 -4
- data/lib/active_remote/errors.rb +1 -11
- data/lib/active_remote/persistence.rb +11 -12
- data/lib/active_remote/primary_key.rb +0 -1
- data/lib/active_remote/query_attributes.rb +13 -13
- data/lib/active_remote/rpc.rb +8 -14
- data/lib/active_remote/rpc_adapters/protobuf_adapter.rb +18 -17
- data/lib/active_remote/scope_keys.rb +1 -2
- data/lib/active_remote/search.rb +8 -6
- data/lib/active_remote/serializers/protobuf.rb +15 -25
- data/lib/active_remote/validations.rb +1 -1
- data/lib/active_remote/version.rb +1 -1
- data/spec/lib/active_remote/association_spec.rb +23 -23
- data/spec/lib/active_remote/attributes_spec.rb +49 -3
- data/spec/lib/active_remote/base_spec.rb +1 -1
- data/spec/lib/active_remote/dirty_spec.rb +12 -12
- data/spec/lib/active_remote/dsl_spec.rb +4 -4
- data/spec/lib/active_remote/integration_spec.rb +2 -2
- data/spec/lib/active_remote/persistence_spec.rb +26 -33
- data/spec/lib/active_remote/primary_key_spec.rb +3 -3
- data/spec/lib/active_remote/query_attribute_spec.rb +0 -120
- data/spec/lib/active_remote/rpc_adapters/protobuf_adapter_spec.rb +1 -1
- data/spec/lib/active_remote/rpc_spec.rb +1 -1
- data/spec/lib/active_remote/scope_keys_spec.rb +7 -7
- data/spec/lib/active_remote/search_spec.rb +8 -8
- data/spec/lib/active_remote/serialization_spec.rb +4 -4
- data/spec/lib/active_remote/serializers/protobuf_spec.rb +23 -23
- data/spec/lib/active_remote/validations_spec.rb +17 -17
- data/spec/spec_helper.rb +9 -9
- data/spec/support/helpers.rb +6 -6
- data/spec/support/models.rb +8 -8
- data/spec/support/models/author.rb +1 -1
- data/spec/support/models/category.rb +1 -2
- data/spec/support/models/default_author.rb +1 -1
- data/spec/support/models/post.rb +4 -4
- data/spec/support/models/tag.rb +1 -1
- data/spec/support/models/typecasted_author.rb +4 -5
- data/spec/support/protobuf.rb +5 -5
- metadata +24 -26
- data/lib/active_remote/attribute_assignment.rb +0 -53
- data/lib/active_remote/type.rb +0 -36
- data/lib/active_remote/type/registry.rb +0 -45
- data/lib/active_remote/typecasting.rb +0 -51
- data/lib/active_remote/typecasting/big_decimal_typecaster.rb +0 -21
- data/lib/active_remote/typecasting/boolean.rb +0 -7
- data/lib/active_remote/typecasting/boolean_typecaster.rb +0 -18
- data/lib/active_remote/typecasting/date_time_typecaster.rb +0 -10
- data/lib/active_remote/typecasting/date_typecaster.rb +0 -10
- data/lib/active_remote/typecasting/float_typecaster.rb +0 -9
- data/lib/active_remote/typecasting/integer_typecaster.rb +0 -10
- data/lib/active_remote/typecasting/object_typecaster.rb +0 -9
- data/lib/active_remote/typecasting/string_typecaster.rb +0 -9
- data/spec/lib/active_remote/errors_spec.rb +0 -31
- data/spec/lib/active_remote/typecasting_spec.rb +0 -53
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20c9373eff2820fdfaeb4eefd815a1d4cfb752e9fd388e8fd0e2d4ef2c0c5f7f
|
4
|
+
data.tar.gz: 5f66d51af2723950bad69d3870fc83685e253f5fcfd894d6ae19dd6a78c27516
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07d671953169e1eefc9db8b26d2de3af40a39302e1423fdd7beeb212df913c46db1017aeb2dbc2d02c21cf72f0ae35639732d6af86694f0ecd7be894ae03db04
|
7
|
+
data.tar.gz: 98ee4213dcd636baab1def67ba1848469ff8592aff9334b720348830e4fd797f65e2935450fe399fafdc84261a64f2a07197323d38b743c616d4b70475f7890f
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# Styles are inherited from Mad Rubocop
|
2
|
+
|
3
|
+
inherit_gem:
|
4
|
+
mad_rubocop: .rubocop.yml
|
5
|
+
|
6
|
+
# Styles that are modified from the defaults
|
7
|
+
AllCops:
|
8
|
+
TargetRubyVersion: 2.5
|
9
|
+
Exclude:
|
10
|
+
- "**/*.pb.rb"
|
11
|
+
|
12
|
+
Style/BlockDelimiters:
|
13
|
+
Description: >-
|
14
|
+
Avoid using {...} for multi-line blocks (multiline chaining is always ugly).
|
15
|
+
Prefer {...} over do...end for single-line blocks.
|
16
|
+
Exclude:
|
17
|
+
- "spec/**/*"
|
18
|
+
|
19
|
+
Style/HashSyntax:
|
20
|
+
Description: >-
|
21
|
+
Prefer Ruby 1.8 hash syntax { :a => 1, :b => 2 } over 1.9 syntax { a: 1, b: 2 }.
|
22
|
+
EnforcedStyle: hash_rockets
|
23
|
+
Exclude:
|
24
|
+
- "Gemfile"
|
25
|
+
|
26
|
+
Layout/SpaceAroundOperators:
|
27
|
+
Exclude:
|
28
|
+
- "*.gemspec"
|
data/CHANGES.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# ActiveRemote Changes
|
2
2
|
|
3
|
+
5.0.0
|
4
|
+
----------
|
5
|
+
|
6
|
+
- Use Active Model attributes [#72]
|
7
|
+
- Use type casting from Active Model (custom types must be registered) [#71]
|
8
|
+
- Use query attributes from Active Record (string values such as 'FALSE', and '0' are now considered present) [#71]
|
9
|
+
- Drop support for Rails 4.2 (versions will match Rails version moving forward) [#71]
|
10
|
+
|
11
|
+
3.3.1
|
12
|
+
----------
|
13
|
+
|
14
|
+
- Fix unknown type error in Protobuf serializer [#70]
|
15
|
+
|
3
16
|
3.3.0
|
4
17
|
----------
|
5
18
|
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -2,12 +2,16 @@
|
|
2
2
|
require "bundler/gem_tasks"
|
3
3
|
require "protobuf/tasks"
|
4
4
|
require "rspec/core/rake_task"
|
5
|
+
require "rubocop/rake_task"
|
6
|
+
|
7
|
+
desc "Run cops"
|
8
|
+
::RuboCop::RakeTask.new(:rubocop)
|
5
9
|
|
6
10
|
desc "Run specs"
|
7
|
-
RSpec::Core::RakeTask.new(:spec)
|
11
|
+
::RSpec::Core::RakeTask.new(:spec)
|
8
12
|
|
9
|
-
desc "Run specs (default)"
|
10
|
-
task :default
|
13
|
+
desc "Run cops and specs (default)"
|
14
|
+
task :default => [:rubocop, :spec]
|
11
15
|
|
12
16
|
desc "Remove protobuf definitions that have been compiled"
|
13
17
|
task :clean do
|
data/active_remote.gemspec
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
2
|
+
|
3
|
+
$LOAD_PATH.push File.expand_path("../lib", __FILE__)
|
3
4
|
require "active_remote/version"
|
4
5
|
|
5
6
|
Gem::Specification.new do |s|
|
@@ -8,19 +9,19 @@ Gem::Specification.new do |s|
|
|
8
9
|
s.authors = ["Adam Hutchison"]
|
9
10
|
s.email = ["liveh2o@gmail.com"]
|
10
11
|
s.homepage = "https://github.com/liveh2o/active_remote"
|
11
|
-
s.summary =
|
12
|
-
s.description =
|
12
|
+
s.summary = "Active Record for your platform"
|
13
|
+
s.description = "Active Remote provides Active Record-like object-relational mapping over RPC. It was written for use with Google Protocol Buffers, but could be extended to use any RPC data format."
|
13
14
|
|
14
15
|
s.files = `git ls-files`.split("\n")
|
15
16
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
17
18
|
s.require_paths = ["lib"]
|
18
19
|
|
19
20
|
##
|
20
21
|
# Dependencies
|
21
22
|
#
|
22
|
-
s.add_dependency "activemodel", ">=
|
23
|
-
s.add_dependency "activesupport", ">=
|
23
|
+
s.add_dependency "activemodel", ">= 5.0", "< 5.2"
|
24
|
+
s.add_dependency "activesupport", ">= 5.0"
|
24
25
|
s.add_dependency "protobuf", ">= 3.0"
|
25
26
|
|
26
27
|
##
|
@@ -30,6 +31,7 @@ Gem::Specification.new do |s|
|
|
30
31
|
s.add_development_dependency "rspec", ">= 3.3.0"
|
31
32
|
s.add_development_dependency "rspec-its"
|
32
33
|
s.add_development_dependency "rspec-pride", ">= 3.1.0"
|
34
|
+
s.add_development_dependency "mad_rubocop"
|
33
35
|
s.add_development_dependency "pry"
|
34
36
|
s.add_development_dependency "protobuf-rspec", ">= 1.1.2"
|
35
37
|
s.add_development_dependency "simplecov"
|
data/lib/active_remote.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require "active_model"
|
2
|
+
require "active_support"
|
3
|
+
require "active_support/core_ext"
|
4
|
+
require "protobuf"
|
4
5
|
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
6
|
+
require "active_remote/base"
|
7
|
+
require "active_remote/config"
|
8
|
+
require "active_remote/errors"
|
9
|
+
require "active_remote/version"
|
9
10
|
|
10
11
|
module ActiveRemote
|
11
12
|
def self.config
|
@@ -16,4 +17,4 @@ module ActiveRemote
|
|
16
17
|
config
|
17
18
|
end
|
18
19
|
|
19
|
-
require
|
20
|
+
require "active_remote/railtie" if defined?(Rails)
|
@@ -33,12 +33,12 @@ module ActiveRemote
|
|
33
33
|
# end
|
34
34
|
# end
|
35
35
|
#
|
36
|
-
def belongs_to(belongs_to_klass, options={})
|
36
|
+
def belongs_to(belongs_to_klass, options = {})
|
37
37
|
perform_association(belongs_to_klass, options) do |klass, object|
|
38
38
|
foreign_key = options.fetch(:foreign_key) { :"#{klass.name.demodulize.underscore}_guid" }
|
39
39
|
search_hash = {}
|
40
40
|
search_hash[:guid] = object.read_attribute(foreign_key)
|
41
|
-
search_hash[options[:scope]] = object.read_attribute(options[:scope]) if options.
|
41
|
+
search_hash[options[:scope]] = object.read_attribute(options[:scope]) if options.key?(:scope)
|
42
42
|
|
43
43
|
search_hash.values.any?(&:nil?) ? nil : klass.search(search_hash).first
|
44
44
|
end
|
@@ -74,17 +74,17 @@ module ActiveRemote
|
|
74
74
|
# end
|
75
75
|
# end
|
76
76
|
#
|
77
|
-
def has_many(has_many_class, options={})
|
77
|
+
def has_many(has_many_class, options = {})
|
78
78
|
perform_association(has_many_class, options) do |klass, object|
|
79
79
|
foreign_key = options.fetch(:foreign_key) { :"#{object.class.name.demodulize.underscore}_guid" }
|
80
80
|
search_hash = {}
|
81
81
|
search_hash[foreign_key] = object.guid
|
82
|
-
search_hash[options[:scope]] = object.read_attribute(options[:scope]) if options.
|
82
|
+
search_hash[options[:scope]] = object.read_attribute(options[:scope]) if options.key?(:scope)
|
83
83
|
|
84
84
|
search_hash.values.any?(&:nil?) ? [] : klass.search(search_hash)
|
85
85
|
end
|
86
86
|
|
87
|
-
options
|
87
|
+
options[:has_many] = true
|
88
88
|
create_setter_method(has_many_class, options)
|
89
89
|
end
|
90
90
|
|
@@ -115,12 +115,12 @@ module ActiveRemote
|
|
115
115
|
# end
|
116
116
|
# end
|
117
117
|
#
|
118
|
-
def has_one(has_one_klass, options={})
|
118
|
+
def has_one(has_one_klass, options = {})
|
119
119
|
perform_association(has_one_klass, options) do |klass, object|
|
120
120
|
foreign_key = options.fetch(:foreign_key) { :"#{object.class.name.demodulize.underscore}_guid" }
|
121
121
|
search_hash = {}
|
122
122
|
search_hash[foreign_key] = object.guid
|
123
|
-
search_hash[options[:scope]] = object.read_attribute(options[:scope]) if options.
|
123
|
+
search_hash[options[:scope]] = object.read_attribute(options[:scope]) if options.key?(:scope)
|
124
124
|
|
125
125
|
search_hash.values.any?(&:nil?) ? nil : klass.search(search_hash).first
|
126
126
|
end
|
@@ -135,29 +135,27 @@ module ActiveRemote
|
|
135
135
|
|
136
136
|
private
|
137
137
|
|
138
|
-
def create_setter_method(associated_klass, options={})
|
138
|
+
def create_setter_method(associated_klass, options = {})
|
139
139
|
writer_method = "#{associated_klass}=".to_sym
|
140
140
|
define_method(writer_method) do |new_value|
|
141
141
|
raise "New value must be an array" if options[:has_many] == true && new_value.class != Array
|
142
|
-
klass_name = options.fetch(:class_name){ associated_klass }
|
143
|
-
klass = klass_name.to_s.classify.constantize
|
144
142
|
|
145
143
|
instance_variable_set(:"@#{new_value.class.name.demodulize.underscore}", new_value)
|
146
144
|
new_value
|
147
145
|
end
|
148
146
|
end
|
149
147
|
|
150
|
-
def perform_association(associated_klass, options={})
|
148
|
+
def perform_association(associated_klass, options = {})
|
151
149
|
define_method(associated_klass) do
|
152
|
-
klass_name = options.fetch(:class_name){ associated_klass }
|
150
|
+
klass_name = options.fetch(:class_name) { associated_klass }
|
153
151
|
klass = klass_name.to_s.classify.constantize
|
154
152
|
|
155
|
-
self.class.validate_scoped_attributes(klass, self.class, options) if options.
|
153
|
+
self.class.validate_scoped_attributes(klass, self.class, options) if options.key?(:scope)
|
156
154
|
|
157
155
|
value = instance_variable_get(:"@#{associated_klass}")
|
158
156
|
|
159
157
|
unless value
|
160
|
-
value = yield(
|
158
|
+
value = yield(klass, self)
|
161
159
|
instance_variable_set(:"@#{associated_klass}", value)
|
162
160
|
end
|
163
161
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require "
|
1
|
+
require "active_model/type"
|
2
2
|
|
3
3
|
module ActiveRemote
|
4
4
|
# Represents an attribute for reflection
|
@@ -55,17 +55,19 @@ module ActiveRemote
|
|
55
55
|
# @return [ActiveAttr::AttributeDefinition]
|
56
56
|
#
|
57
57
|
# @since 0.2.0
|
58
|
-
def initialize(name, type = :
|
58
|
+
def initialize(name, type = :value, **options)
|
59
59
|
raise TypeError, "can't convert #{name.class} into Symbol" unless name.respond_to? :to_sym
|
60
60
|
@name = name.to_sym
|
61
|
+
@type = ::ActiveModel::Type.lookup(type)
|
61
62
|
@options = options
|
62
|
-
|
63
|
+
end
|
64
|
+
|
65
|
+
def from_rpc(value)
|
66
|
+
type.deserialize(value)
|
67
|
+
end
|
63
68
|
|
64
|
-
|
65
|
-
|
66
|
-
fail ::ActiveRemote::UnknownType unless typecaster
|
67
|
-
@options[:typecaster] = typecaster
|
68
|
-
end
|
69
|
+
def from_user(value)
|
70
|
+
type.cast(value)
|
69
71
|
end
|
70
72
|
|
71
73
|
# Returns the code that would generate the attribute definition
|
@@ -88,9 +90,7 @@ module ActiveRemote
|
|
88
90
|
# @return [String] the attribute name
|
89
91
|
#
|
90
92
|
# @since 0.2.0
|
91
|
-
|
92
|
-
name.to_s
|
93
|
-
end
|
93
|
+
delegate :to_s, :to => :name
|
94
94
|
|
95
95
|
# The attribute name
|
96
96
|
#
|
@@ -101,10 +101,12 @@ module ActiveRemote
|
|
101
101
|
name
|
102
102
|
end
|
103
103
|
|
104
|
-
|
104
|
+
protected
|
105
105
|
|
106
106
|
# The attribute options
|
107
107
|
# @since 0.5.0
|
108
108
|
attr_reader :options, :type
|
109
109
|
end
|
110
|
+
|
111
|
+
::ActiveModel::Type.register(:value, ::ActiveModel::Type::Value)
|
110
112
|
end
|
@@ -68,7 +68,7 @@ module ActiveRemote
|
|
68
68
|
# Write an attribute to the attributes hash
|
69
69
|
#
|
70
70
|
def attribute=(name, value)
|
71
|
-
@attributes[name] = value
|
71
|
+
@attributes[name] = self.class.attributes[name].from_user(value)
|
72
72
|
end
|
73
73
|
|
74
74
|
def attribute_method?(attr_name)
|
@@ -88,9 +88,9 @@ module ActiveRemote
|
|
88
88
|
# @example Define an attribute.
|
89
89
|
# attribute :name
|
90
90
|
#
|
91
|
-
def attribute(name, options={})
|
92
|
-
if dangerous_attribute_method_name = dangerous_attribute?(name)
|
93
|
-
raise ::ActiveRemote::DangerousAttributeError, %
|
91
|
+
def attribute(name, options = {})
|
92
|
+
if (dangerous_attribute_method_name = dangerous_attribute?(name))
|
93
|
+
raise ::ActiveRemote::DangerousAttributeError, %(an attribute method named "#{dangerous_attribute_method_name}" would conflict with an existing method)
|
94
94
|
else
|
95
95
|
attribute!(name, options)
|
96
96
|
end
|
@@ -107,7 +107,7 @@ module ActiveRemote
|
|
107
107
|
# @example Define a dangerous attribute.
|
108
108
|
# attribute! :timeout
|
109
109
|
#
|
110
|
-
def attribute!(name, options={})
|
110
|
+
def attribute!(name, options = {})
|
111
111
|
::ActiveRemote::AttributeDefinition.new(name, options).tap do |attribute_definition|
|
112
112
|
attribute_name = attribute_definition.name.to_s
|
113
113
|
# Force active model to generate attribute methods
|
@@ -164,7 +164,7 @@ module ActiveRemote
|
|
164
164
|
#
|
165
165
|
def inspect
|
166
166
|
inspected_attributes = attribute_names.sort
|
167
|
-
attributes_list = "(#{inspected_attributes.join(
|
167
|
+
attributes_list = "(#{inspected_attributes.join(', ')})" unless inspected_attributes.empty?
|
168
168
|
"#{name}#{attributes_list}"
|
169
169
|
end
|
170
170
|
|
data/lib/active_remote/base.rb
CHANGED
@@ -1,33 +1,28 @@
|
|
1
|
-
require
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require 'active_remote/typecasting'
|
19
|
-
require 'active_remote/validations'
|
1
|
+
require "active_model/callbacks"
|
2
|
+
|
3
|
+
require "active_remote/association"
|
4
|
+
require "active_remote/attribute_definition"
|
5
|
+
require "active_remote/attributes"
|
6
|
+
require "active_remote/config"
|
7
|
+
require "active_remote/dirty"
|
8
|
+
require "active_remote/dsl"
|
9
|
+
require "active_remote/integration"
|
10
|
+
require "active_remote/persistence"
|
11
|
+
require "active_remote/primary_key"
|
12
|
+
require "active_remote/query_attributes"
|
13
|
+
require "active_remote/rpc"
|
14
|
+
require "active_remote/scope_keys"
|
15
|
+
require "active_remote/search"
|
16
|
+
require "active_remote/serialization"
|
17
|
+
require "active_remote/validations"
|
20
18
|
|
21
19
|
module ActiveRemote
|
22
20
|
class Base
|
23
21
|
extend ::ActiveModel::Callbacks
|
24
|
-
extend ::ActiveModel::Naming
|
25
22
|
|
26
|
-
include ::ActiveModel::
|
27
|
-
include ::ActiveModel::Validations
|
23
|
+
include ::ActiveModel::Model
|
28
24
|
|
29
25
|
include ::ActiveRemote::Association
|
30
|
-
include ::ActiveRemote::AttributeAssignment
|
31
26
|
include ::ActiveRemote::Attributes
|
32
27
|
include ::ActiveRemote::DSL
|
33
28
|
include ::ActiveRemote::Integration
|
@@ -38,7 +33,6 @@ module ActiveRemote
|
|
38
33
|
include ::ActiveRemote::ScopeKeys
|
39
34
|
include ::ActiveRemote::Search
|
40
35
|
include ::ActiveRemote::Serialization
|
41
|
-
include ::ActiveRemote::Typecasting
|
42
36
|
|
43
37
|
# Overrides some methods, providing support for dirty tracking,
|
44
38
|
# so it needs to be included last.
|
@@ -48,8 +42,6 @@ module ActiveRemote
|
|
48
42
|
include ::ActiveRemote::Validations
|
49
43
|
include ::ActiveModel::Validations::Callbacks
|
50
44
|
|
51
|
-
attr_reader :last_request, :last_response
|
52
|
-
|
53
45
|
define_model_callbacks :initialize, :only => :after
|
54
46
|
|
55
47
|
def initialize(attributes = {})
|
@@ -78,7 +70,8 @@ module ActiveRemote
|
|
78
70
|
end
|
79
71
|
|
80
72
|
def freeze
|
81
|
-
@attributes.freeze
|
73
|
+
@attributes.freeze
|
74
|
+
self
|
82
75
|
end
|
83
76
|
|
84
77
|
def frozen?
|
data/lib/active_remote/config.rb
CHANGED
data/lib/active_remote/dirty.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "active_model/dirty"
|
2
2
|
|
3
3
|
# Overrides persistence methods, providing support for dirty tracking.
|
4
4
|
#
|
@@ -32,7 +32,7 @@ module ActiveRemote
|
|
32
32
|
# Override #save to store changes as previous changes then clear them.
|
33
33
|
#
|
34
34
|
def save(*)
|
35
|
-
if status = super
|
35
|
+
if (status = super)
|
36
36
|
@previously_changed = changes
|
37
37
|
changed_attributes.clear
|
38
38
|
end
|
@@ -49,7 +49,7 @@ module ActiveRemote
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
def skip_dirty_tracking
|
52
|
+
def skip_dirty_tracking
|
53
53
|
disable_dirty_tracking
|
54
54
|
|
55
55
|
yield
|