u-attributes 0.10.0 → 0.11.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e37bcd7fa7880973930c3a455850708bf22962266c5d2b09f69885dc0c7b9a8d
4
- data.tar.gz: ed08290e3bca0a590a88a7720deb3c6e94eae93d64a12884eb108806ce2a13ce
3
+ metadata.gz: 72e9cbaceb087cd97c5cf3a46b705f52d3664d96018851fda83d455dc59aaa36
4
+ data.tar.gz: 36238187591d0662c2212ea7fd3e1e5192d5785c2f1f59f57731d2f704e2a78b
5
5
  SHA512:
6
- metadata.gz: 031f5deb4ece3c5be0004290675a4bbd72e90a8b1436068054dc1acf8d949e7b4957e6b20d4f53112136cd35d15ede29d648576e7b3fe52fe0216e73012afad7
7
- data.tar.gz: 6191e30d97bdf5cdeb06a5ece5db65877ca14304af432dc8f69077cb691fc0458a4adb1124ebf1acdbdeae4eae2682944770cb1268708680ebafd0062165a38c
6
+ metadata.gz: f00dd1f663f7364c28743e33c8812f683a8a4837c42636b2289a179ca9a11a3935f4c7a443e688d0ecd57181f970afb4d37c7b06c823100a79c481ecc6cabae4
7
+ data.tar.gz: d86e8e5b6689e524fdfb72133e1f209d946726a109574df20a2aaa92a239fd123e973636c50bb4ca45c0de72533b107ca95b197f95bcde6520afeb37deaa7e42
data/.travis.yml CHANGED
@@ -3,7 +3,7 @@ sudo: false
3
3
  language: ruby
4
4
  cache: bundler
5
5
  rvm:
6
- - 2.2.0
6
+ - 2.2.2
7
7
  - 2.3.0
8
8
  - 2.4.0
9
9
  - 2.5.0
@@ -11,5 +11,8 @@ rvm:
11
11
  before_install:
12
12
  - gem uninstall -v '>= 2' -i $(rvm gemdir)@global -ax bundler || true
13
13
  - gem install bundler -v '< 2'
14
+ install: bundle install --jobs=3 --retry=3
14
15
  env:
15
16
  - DISABLE_SIMPLECOV=true
17
+ script: ./run-tests.sh
18
+
data/Gemfile CHANGED
@@ -1,6 +1,28 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gem 'simplecov', require: false, group: :test
4
4
 
5
+ activemodel_version = ENV.fetch('ACTIVEMODEL_VERSION', '6.1')
6
+
7
+ activemodel = case activemodel_version
8
+ when '3.2' then '3.2.22'
9
+ when '4.0' then '4.0.13'
10
+ when '4.1' then '4.1.16'
11
+ when '4.2' then '4.2.11'
12
+ when '5.0' then '5.0.7'
13
+ when '5.1' then '5.1.7'
14
+ when '5.2' then '5.2.3'
15
+ when '6.0' then '6.0.0.rc1'
16
+ end
17
+
18
+ if activemodel_version < '6.1'
19
+ gem 'activemodel', activemodel
20
+ gem 'activesupport', activemodel
21
+ end
22
+
23
+ minitest = activemodel_version < '4.1' ? '~> 4.2' : '~> 5.0'
24
+
25
+ gem 'minitest', minitest
26
+
5
27
  # Specify your gem's dependencies in u-attributes.gemspec
6
28
  gemspec
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- u-attributes (0.10.0)
4
+ u-attributes (0.11.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -10,7 +10,7 @@ GEM
10
10
  json (2.2.0)
11
11
  minitest (5.11.3)
12
12
  rake (10.5.0)
13
- simplecov (0.16.1)
13
+ simplecov (0.17.0)
14
14
  docile (~> 1.1)
15
15
  json (>= 1.8, < 3)
16
16
  simplecov-html (~> 0.10.0)
data/README.md CHANGED
@@ -270,11 +270,7 @@ You can use the method `Micro::Attributes.features()` to combine and require onl
270
270
 
271
271
  Note: The method `Micro::Attributes.with()` is an alias for `Micro::Attributes.features()`.
272
272
 
273
- ### Diff extension
274
-
275
- Provides a way to track changes in your object attributes.
276
-
277
- #### How to enable?
273
+ ### Usage
278
274
 
279
275
  ```ruby
280
276
  #----------------------------------#
@@ -283,17 +279,17 @@ Provides a way to track changes in your object attributes.
283
279
  class Job
284
280
  include Micro::Attributes.features(:diff)
285
281
 
286
- attributes :id, state: 'sleeping'
282
+ attribute :id
283
+ attribute :state, 'sleeping'
287
284
 
288
285
  def initialize(options)
289
- self.options = options
286
+ self.attributes = options
290
287
  end
291
288
  end
292
289
 
293
290
  # --------------------------------------------------------------------#
294
291
  # Using the .with() method alias and adding the initialize extension. #
295
292
  # --------------------------------------------------------------------#
296
-
297
293
  class Job
298
294
  include Micro::Attributes.with(:initialize, :diff)
299
295
 
@@ -304,19 +300,49 @@ end
304
300
  # Via Micro::Attributes.to_initialize() #
305
301
  #---------------------------------------#
306
302
  class Job
307
- include Micro::Attributes.to_initialize(diff: true)
303
+ include Micro::Attributes.to_initialize(diff: false, activemodel_validations: true)
308
304
 
309
- attribute :id
310
- attribute :state, 'sleeping'
305
+ attributes :id, state: 'sleeping'
306
+ validates! :id, :state, presence: true
311
307
  end
312
308
  ```
313
309
 
310
+ ### ActiveModel::Validations extension
311
+
312
+ If your application uses ActiveModel as a dependency (like a regular Rails app). You will be enabled to use the `actimodel_validations` extension.
313
+
314
+ #### Usage
315
+
316
+ ```ruby
317
+ class Job
318
+ # include Micro::Attributes.with(:initialize, :activemodel_validations)
319
+ # include Micro::Attributes.features(:initialize, :activemodel_validations)
320
+ include Micro::Attributes.to_initialize(activemodel_validations: true)
321
+
322
+ attributes :id, state: 'sleeping'
323
+ validates! :id, :state, presence: true
324
+ end
325
+
326
+ Job.new({}) # ActiveModel::StrictValidationFailed (Id can't be blank)
327
+
328
+ job = Job.new(id: 1)
329
+
330
+ p job.id # 1
331
+ p job.state # "sleeping"
332
+ ```
333
+
334
+ ### Diff extension
335
+
336
+ Provides a way to track changes in your object attributes.
337
+
314
338
  #### Usage
315
339
 
316
340
  ```ruby
317
341
  require 'securerandom'
318
342
 
319
343
  class Job
344
+ # include Micro::Attributes.with(:initialize, :diff)
345
+ # include Micro::Attributes.to_initialize(diff: true)
320
346
  include Micro::Attributes.features(:initialize, :diff)
321
347
 
322
348
  attributes :id, state: 'sleeping'
@@ -22,9 +22,10 @@ module Micro
22
22
  end
23
23
  end
24
24
 
25
- def self.to_initialize(diff: false)
25
+ def self.to_initialize(diff: false, activemodel_validations: false)
26
26
  options = [:initialize]
27
27
  options << :diff if diff
28
+ options << :activemodel_validations if activemodel_validations
28
29
  features(*options)
29
30
  end
30
31
 
@@ -2,6 +2,7 @@
2
2
 
3
3
  require "micro/attributes/features/diff"
4
4
  require "micro/attributes/features/initialize"
5
+ require "micro/attributes/features/activemodel_validations"
5
6
 
6
7
  module Micro
7
8
  module Attributes
@@ -13,10 +14,38 @@ module Micro
13
14
  end
14
15
  end
15
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
38
+
16
39
  OPTIONS = {
40
+ # Features
17
41
  'diff' => Diff,
18
42
  'initialize' => Initialize,
19
- 'diff:initialize' => InitializeAndDiff
43
+ 'activemodel_validations' => ActiveModelValidations,
44
+ # Combinations
45
+ 'diff:initialize' => InitializeAndDiff,
46
+ 'activemodel_validations:diff' => ActiveModelValidationsAndDiff,
47
+ 'activemodel_validations:initialize' => ActiveModelValidationsAndInitialize,
48
+ 'activemodel_validations:diff:initialize' => ActiveModelValidationsAndDiffAndInitialize
20
49
  }.freeze
21
50
 
22
51
  private_constant :OPTIONS
@@ -24,7 +53,7 @@ module Micro
24
53
  def self.fetch(names)
25
54
  option = OPTIONS[names.map { |name| name.to_s.downcase }.sort.join(':')]
26
55
  return option if option
27
- raise ArgumentError, 'Invalid feature name! Available options: diff, initialize'
56
+ raise ArgumentError, 'Invalid feature name! Available options: diff, initialize, activemodel_validations'
28
57
  end
29
58
  end
30
59
  end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Micro::Attributes
4
+ module Features
5
+ module ActiveModelValidations
6
+ @@__active_model_load_error = false
7
+ @@__active_model_required = false
8
+
9
+ def self.included(base)
10
+ if !@@__active_model_load_error && !@@__active_model_required
11
+ begin
12
+ require 'active_model'
13
+ rescue LoadError => e
14
+ @@__active_model_load_error = true
15
+ end
16
+ @@__active_model_required = true
17
+ end
18
+
19
+ unless @@__active_model_load_error
20
+ base.send(:include, ::ActiveModel::Validations)
21
+
22
+ if ::ActiveModel::VERSION::STRING >= '3.2'
23
+ base.class_eval(<<-RUBY)
24
+ def initialize(options)
25
+ self.attributes=(options)
26
+ run_validations!
27
+ end
28
+ RUBY
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Micro
4
4
  module Attributes
5
- VERSION = "0.10.0"
5
+ VERSION = "0.11.0"
6
6
  end
7
7
  end
data/run-tests.sh ADDED
@@ -0,0 +1,22 @@
1
+ #!/bin/bash
2
+
3
+ ACTIVEMODEL_VERSION='3.2' bundle update
4
+ ACTIVEMODEL_VERSION='3.2' bundle exec rake test
5
+
6
+ ACTIVEMODEL_VERSION='4.0' bundle update
7
+ ACTIVEMODEL_VERSION='4.0' bundle exec rake test
8
+
9
+ ACTIVEMODEL_VERSION='4.1' bundle update
10
+ ACTIVEMODEL_VERSION='4.1' bundle exec rake test
11
+
12
+ ACTIVEMODEL_VERSION='4.2' bundle update
13
+ ACTIVEMODEL_VERSION='4.2' bundle exec rake test
14
+
15
+ ACTIVEMODEL_VERSION='5.0' bundle update
16
+ ACTIVEMODEL_VERSION='5.0' bundle exec rake test
17
+
18
+ ACTIVEMODEL_VERSION='5.1' bundle update
19
+ ACTIVEMODEL_VERSION='5.1' bundle exec rake test
20
+
21
+ ACTIVEMODEL_VERSION='5.2' bundle update
22
+ ACTIVEMODEL_VERSION='5.2' bundle exec rake test
data/u-attributes.gemspec CHANGED
@@ -25,5 +25,4 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  spec.required_ruby_version = '>= 2.2.0'
27
27
  spec.add_development_dependency "rake", "~> 10.0"
28
- spec.add_development_dependency "minitest", "~> 5.0"
29
28
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: u-attributes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Serradura
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '10.0'
27
- - !ruby/object:Gem::Dependency
28
- name: minitest
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '5.0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '5.0'
41
27
  description: This gem allows defining read-only attributes, that is, your objects
42
28
  will have only getters to access their attributes data.
43
29
  email:
@@ -59,11 +45,13 @@ files:
59
45
  - lib/micro/attributes.rb
60
46
  - lib/micro/attributes/attributes_utils.rb
61
47
  - lib/micro/attributes/features.rb
48
+ - lib/micro/attributes/features/activemodel_validations.rb
62
49
  - lib/micro/attributes/features/diff.rb
63
50
  - lib/micro/attributes/features/initialize.rb
64
51
  - lib/micro/attributes/macros.rb
65
52
  - lib/micro/attributes/version.rb
66
53
  - lib/u-attributes.rb
54
+ - run-tests.sh
67
55
  - u-attributes.gemspec
68
56
  homepage: https://github.com/serradura/u-attributes
69
57
  licenses: