u-attributes 0.10.0 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
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: