u-attributes 0.12.0 → 0.13.0
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/Gemfile +2 -2
- data/Gemfile.lock +1 -1
- data/README.md +1 -1
- data/lib/micro/attributes/attributes_utils.rb +1 -1
- data/lib/micro/attributes/features/activemodel_validations.rb +8 -4
- data/lib/micro/attributes/features/diff.rb +13 -7
- data/lib/micro/attributes/features/initialize.rb +5 -5
- data/lib/micro/attributes/features.rb +11 -40
- data/lib/micro/attributes/macros.rb +5 -1
- data/lib/micro/attributes/version.rb +1 -1
- data/lib/micro/attributes/with.rb +71 -0
- data/lib/micro/attributes.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 386780594f0b0289f62e38984d59f847901e5257002fa4d1124a570304cf792e
|
4
|
+
data.tar.gz: 1d66e4474bbdd5a027ba91898ff3990ed72d76b2278f7c8e4ab303dacbf5b1a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: abe5248e77a398a3dbb14047c0ecfdd1fec83e5aa59cde4c2a2c99704c2a503f059f484682654e20d04f6e3cf2ae3c3038cf0103ab51922948375d1e58495917
|
7
|
+
data.tar.gz: 91152ebf4dafe6ce4c5a563068bee973b3c334b6600c8c16a81f62e98a120fc07116426c8d163a75b072561da25a50fe71c097fdcdf65c05d120c1ae6ec1bdc5
|
data/Gemfile
CHANGED
@@ -16,8 +16,8 @@ activemodel = case activemodel_version
|
|
16
16
|
end
|
17
17
|
|
18
18
|
if activemodel_version < '6.1'
|
19
|
-
gem 'activemodel', activemodel
|
20
|
-
gem 'activesupport', activemodel
|
19
|
+
gem 'activemodel', activemodel, require: false
|
20
|
+
gem 'activesupport', activemodel, require: false
|
21
21
|
end
|
22
22
|
|
23
23
|
minitest = activemodel_version < '4.1' ? '~> 4.2' : '~> 5.0'
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -400,7 +400,7 @@ p job_changes.changed?(:state, from: 'sleeping', to: 'running') # true
|
|
400
400
|
#----------------#
|
401
401
|
# #differences() #
|
402
402
|
#----------------#
|
403
|
-
p job_changes.differences # {"state"=>"running"}
|
403
|
+
p job_changes.differences # {"state"=> {"from" => "sleeping", "to" => "running"}}
|
404
404
|
```
|
405
405
|
|
406
406
|
## Development
|
@@ -3,8 +3,10 @@
|
|
3
3
|
module Micro::Attributes
|
4
4
|
module Features
|
5
5
|
module ActiveModelValidations
|
6
|
-
@@__active_model_load_error = false
|
7
6
|
@@__active_model_required = false
|
7
|
+
@@__active_model_load_error = false
|
8
|
+
|
9
|
+
V32 = '3.2'
|
8
10
|
|
9
11
|
def self.included(base)
|
10
12
|
if !@@__active_model_load_error && !@@__active_model_required
|
@@ -19,16 +21,18 @@ module Micro::Attributes
|
|
19
21
|
unless @@__active_model_load_error
|
20
22
|
base.send(:include, ::ActiveModel::Validations)
|
21
23
|
|
22
|
-
if ::ActiveModel::VERSION::STRING >=
|
24
|
+
if ::ActiveModel::VERSION::STRING >= V32
|
23
25
|
base.class_eval(<<-RUBY)
|
24
|
-
def initialize(
|
25
|
-
self.attributes=
|
26
|
+
def initialize(arg)
|
27
|
+
self.attributes=arg
|
26
28
|
run_validations!
|
27
29
|
end
|
28
30
|
RUBY
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
34
|
+
|
35
|
+
private_constant :V32
|
32
36
|
end
|
33
37
|
end
|
34
38
|
end
|
@@ -4,6 +4,10 @@ module Micro::Attributes
|
|
4
4
|
module Features
|
5
5
|
module Diff
|
6
6
|
class Changes
|
7
|
+
TO = 'to'.freeze
|
8
|
+
FROM = 'from'.freeze
|
9
|
+
FROM_TO_ERROR = 'pass the attribute name with the :from and :to values'.freeze
|
10
|
+
|
7
11
|
attr_reader :from, :to, :differences
|
8
12
|
|
9
13
|
def initialize(from:, to:)
|
@@ -24,32 +28,34 @@ module Micro::Attributes
|
|
24
28
|
def changed?(name = nil, from: nil, to: nil)
|
25
29
|
if name.nil?
|
26
30
|
return present? if from.nil? && to.nil?
|
27
|
-
raise ArgumentError,
|
31
|
+
raise ArgumentError, FROM_TO_ERROR
|
28
32
|
elsif from.nil? && to.nil?
|
29
33
|
differences.has_key?(name.to_s)
|
30
34
|
else
|
31
|
-
|
32
|
-
|
35
|
+
result = @differences[name.to_s]
|
36
|
+
result ? result[FROM] == from && result[TO] == to : false
|
33
37
|
end
|
34
38
|
end
|
35
39
|
|
36
40
|
private
|
37
41
|
|
38
42
|
def diff(from_attributes, to_attributes)
|
39
|
-
@to_attributes = to_attributes
|
40
|
-
@from_attributes = from_attributes
|
43
|
+
@from_attributes, @to_attributes = from_attributes, to_attributes
|
41
44
|
@from_attributes.each_with_object({}) do |(from_key, from_val), acc|
|
42
45
|
to_value = @to_attributes[from_key]
|
43
|
-
acc[from_key] = to_value if from_val != to_value
|
46
|
+
acc[from_key] = {FROM => from_val, TO => to_value}.freeze if from_val != to_value
|
44
47
|
end
|
45
48
|
end
|
49
|
+
|
50
|
+
private_constant :TO, :FROM, :FROM_TO_ERROR
|
46
51
|
end
|
47
|
-
private_constant :Changes
|
48
52
|
|
49
53
|
def diff_attributes(to)
|
50
54
|
return Changes.new(from: self, to: to) if to.is_a?(::Micro::Attributes)
|
51
55
|
raise ArgumentError, "#{to.inspect} must implement Micro::Attributes"
|
52
56
|
end
|
57
|
+
|
58
|
+
private_constant :Changes
|
53
59
|
end
|
54
60
|
end
|
55
61
|
end
|
@@ -4,11 +4,11 @@ module Micro::Attributes
|
|
4
4
|
module Features
|
5
5
|
module Initialize
|
6
6
|
def self.included(base)
|
7
|
-
base.
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
base.class_eval(<<-RUBY)
|
8
|
+
def initialize(arg)
|
9
|
+
self.attributes = arg
|
10
|
+
end
|
11
|
+
RUBY
|
12
12
|
end
|
13
13
|
|
14
14
|
def with_attribute(key, val)
|
@@ -1,63 +1,34 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "micro/attributes/
|
4
|
-
require "micro/attributes/features/initialize"
|
5
|
-
require "micro/attributes/features/activemodel_validations"
|
3
|
+
require "micro/attributes/with"
|
6
4
|
|
7
5
|
module Micro
|
8
6
|
module Attributes
|
9
7
|
module Features
|
10
|
-
|
11
|
-
def self.included(base)
|
12
|
-
base.send(:include, ::Micro::Attributes::Features::Initialize)
|
13
|
-
base.send(:include, ::Micro::Attributes::Features::Diff)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
module ActiveModelValidationsAndDiff
|
18
|
-
def self.included(base)
|
19
|
-
base.send(:include, ::Micro::Attributes::Features::Diff)
|
20
|
-
base.send(:include, ::Micro::Attributes::Features::ActiveModelValidations)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
module ActiveModelValidationsAndInitialize
|
25
|
-
def self.included(base)
|
26
|
-
base.send(:include, ::Micro::Attributes::Features::Initialize)
|
27
|
-
base.send(:include, ::Micro::Attributes::Features::ActiveModelValidations)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
module ActiveModelValidationsAndDiffAndInitialize
|
32
|
-
def self.included(base)
|
33
|
-
base.send(:include, ::Micro::Attributes::Features::Initialize)
|
34
|
-
base.send(:include, ::Micro::Attributes::Features::Diff)
|
35
|
-
base.send(:include, ::Micro::Attributes::Features::ActiveModelValidations)
|
36
|
-
end
|
37
|
-
end
|
8
|
+
INVALID_FEATURES = 'Invalid feature name! Available options: :initialize, :diff, :activemodel_validations'.freeze
|
38
9
|
|
39
10
|
OPTIONS = {
|
40
11
|
# Features
|
41
|
-
'diff' => Diff,
|
42
|
-
'initialize' => Initialize,
|
43
|
-
'activemodel_validations' => ActiveModelValidations,
|
12
|
+
'diff' => With::Diff,
|
13
|
+
'initialize' => With::Initialize,
|
14
|
+
'activemodel_validations' => With::ActiveModelValidations,
|
44
15
|
# Combinations
|
45
|
-
'diff:initialize' =>
|
46
|
-
'activemodel_validations:diff' => ActiveModelValidationsAndDiff,
|
47
|
-
'activemodel_validations:initialize' => ActiveModelValidationsAndInitialize,
|
48
|
-
'activemodel_validations:diff:initialize' => ActiveModelValidationsAndDiffAndInitialize
|
16
|
+
'diff:initialize' => With::DiffAndInitialize,
|
17
|
+
'activemodel_validations:diff' => With::ActiveModelValidationsAndDiff,
|
18
|
+
'activemodel_validations:initialize' => With::ActiveModelValidationsAndInitialize,
|
19
|
+
'activemodel_validations:diff:initialize' => With::ActiveModelValidationsAndDiffAndInitialize
|
49
20
|
}.freeze
|
50
21
|
|
51
22
|
private_constant :OPTIONS
|
52
23
|
|
53
24
|
def self.all
|
54
|
-
ActiveModelValidationsAndDiffAndInitialize
|
25
|
+
With::ActiveModelValidationsAndDiffAndInitialize
|
55
26
|
end
|
56
27
|
|
57
28
|
def self.fetch(names)
|
58
29
|
option = OPTIONS[names.map { |name| name.to_s.downcase }.sort.join(':')]
|
59
30
|
return option if option
|
60
|
-
raise ArgumentError,
|
31
|
+
raise ArgumentError, INVALID_FEATURES
|
61
32
|
end
|
62
33
|
end
|
63
34
|
end
|
@@ -50,14 +50,18 @@ module Micro
|
|
50
50
|
end
|
51
51
|
|
52
52
|
module ForSubclasses
|
53
|
+
WRONG_NUMBER_OF_ARGS = 'wrong number of arguments (given 0, expected 1 or more)'.freeze
|
54
|
+
|
53
55
|
def attribute!(name, value=nil)
|
54
56
|
__attribute_set(name, value, true)
|
55
57
|
end
|
56
58
|
|
57
59
|
def attributes!(*args)
|
58
60
|
return __attributes_set(args, can_overwrite: true) unless args.empty?
|
59
|
-
raise ArgumentError,
|
61
|
+
raise ArgumentError, WRONG_NUMBER_OF_ARGS
|
60
62
|
end
|
63
|
+
|
64
|
+
private_constant :WRONG_NUMBER_OF_ARGS
|
61
65
|
end
|
62
66
|
private_constant :ForSubclasses
|
63
67
|
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'micro/attributes/features/diff'
|
4
|
+
require 'micro/attributes/features/initialize'
|
5
|
+
require 'micro/attributes/features/activemodel_validations'
|
6
|
+
|
7
|
+
module Micro
|
8
|
+
module Attributes
|
9
|
+
module With
|
10
|
+
#
|
11
|
+
# Features
|
12
|
+
#
|
13
|
+
module Diff
|
14
|
+
def self.included(base)
|
15
|
+
base.send(:include, ::Micro::Attributes)
|
16
|
+
base.send(:include, ::Micro::Attributes::Features::Diff)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
module Initialize
|
21
|
+
def self.included(base)
|
22
|
+
base.send(:include, ::Micro::Attributes)
|
23
|
+
base.send(:include, ::Micro::Attributes::Features::Initialize)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
module ActiveModelValidations
|
28
|
+
def self.included(base)
|
29
|
+
base.send(:include, ::Micro::Attributes)
|
30
|
+
base.send(:include, ::Micro::Attributes::Features::ActiveModelValidations)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
#
|
35
|
+
# Combinations
|
36
|
+
#
|
37
|
+
module DiffAndInitialize
|
38
|
+
def self.included(base)
|
39
|
+
base.send(:include, ::Micro::Attributes)
|
40
|
+
base.send(:include, ::Micro::Attributes::Features::Initialize)
|
41
|
+
base.send(:include, ::Micro::Attributes::Features::Diff)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
module ActiveModelValidationsAndDiff
|
46
|
+
def self.included(base)
|
47
|
+
base.send(:include, ::Micro::Attributes)
|
48
|
+
base.send(:include, ::Micro::Attributes::Features::ActiveModelValidations)
|
49
|
+
base.send(:include, ::Micro::Attributes::Features::Diff)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
module ActiveModelValidationsAndInitialize
|
54
|
+
def self.included(base)
|
55
|
+
base.send(:include, ::Micro::Attributes)
|
56
|
+
base.send(:include, ::Micro::Attributes::Features::Initialize)
|
57
|
+
base.send(:include, ::Micro::Attributes::Features::ActiveModelValidations)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
module ActiveModelValidationsAndDiffAndInitialize
|
62
|
+
def self.included(base)
|
63
|
+
base.send(:include, ::Micro::Attributes)
|
64
|
+
base.send(:include, ::Micro::Attributes::Features::Initialize)
|
65
|
+
base.send(:include, ::Micro::Attributes::Features::ActiveModelValidations)
|
66
|
+
base.send(:include, ::Micro::Attributes::Features::Diff)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/lib/micro/attributes.rb
CHANGED
@@ -18,7 +18,7 @@ module Micro
|
|
18
18
|
|
19
19
|
def base.inherited(subclass)
|
20
20
|
subclass.attributes(self.attributes_data({}))
|
21
|
-
subclass.extend ::Micro::Attributes.const_get('Macros::ForSubclasses')
|
21
|
+
subclass.extend ::Micro::Attributes.const_get('Macros::ForSubclasses'.freeze)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: u-attributes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rodrigo Serradura
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-07-
|
11
|
+
date: 2019-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -51,6 +51,7 @@ files:
|
|
51
51
|
- lib/micro/attributes/features/initialize.rb
|
52
52
|
- lib/micro/attributes/macros.rb
|
53
53
|
- lib/micro/attributes/version.rb
|
54
|
+
- lib/micro/attributes/with.rb
|
54
55
|
- lib/u-attributes.rb
|
55
56
|
- run-tests.sh
|
56
57
|
- u-attributes.gemspec
|