u-attributes 2.2.0 → 2.7.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.
@@ -1,36 +1,56 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Micro::Attributes
4
- module Utils
5
- module Hashes
6
- def self.stringify_keys(arg)
7
- hash = Kind::Of.(::Hash, arg)
3
+ module Micro::Attributes::Utils
8
4
 
9
- return hash if hash.empty?
10
- return hash.transform_keys(&:to_s) if hash.respond_to?(:transform_keys)
5
+ module Hashes
6
+ extend self
11
7
 
12
- hash.each_with_object({}) { |(key, val), memo| memo[key.to_s] = val }
13
- end
8
+ def stringify_keys(arg)
9
+ hash = Kind::Hash[arg]
14
10
 
15
- def self.get(hash, key)
16
- value = hash[key.to_s]
11
+ return hash if hash.empty?
12
+ return hash.transform_keys(&:to_s) if hash.respond_to?(:transform_keys)
17
13
 
18
- value.nil? ? hash[key.to_sym] : value
19
- end
14
+ hash.each_with_object({}) { |(key, val), memo| memo[key.to_s] = val }
20
15
  end
21
16
 
22
- module ExtractAttribute
23
- def self.call(object, key:)
24
- return object.public_send(key) if object.respond_to?(key)
17
+ def symbolize_keys(arg)
18
+ hash = Kind::Hash[arg]
25
19
 
26
- Hashes.get(object, key) if object.respond_to?(:[])
27
- end
20
+ return hash if hash.empty?
21
+ return hash.transform_keys(&:to_sym) if hash.respond_to?(:transform_keys)
22
+
23
+ hash.each_with_object({}) { |(key, val), memo| memo[key.to_sym] = val }
24
+ end
25
+
26
+ def keys_as(type, hash)
27
+ return Kind::Hash[hash] unless type
28
+
29
+ return symbolize_keys(hash) if type == Symbol || type == :symbol
30
+ return stringify_keys(hash) if type == String || type == :string
31
+
32
+ raise ArgumentError, 'argument must be one of these values: :symbol, :string, Symbol, String'.freeze
33
+ end
28
34
 
29
- def self.from(object, keys:)
30
- Kind::Of.(::Array, keys).each_with_object({}) do |key, memo|
31
- memo[key] = call(object, key: key)
32
- end
35
+ def assoc(hash, key)
36
+ value = hash[key.to_s]
37
+
38
+ value.nil? ? hash[key.to_sym] : value
39
+ end
40
+ end
41
+
42
+ module ExtractAttribute
43
+ def self.call(object, key:)
44
+ return object.public_send(key) if object.respond_to?(key)
45
+
46
+ Hashes.assoc(object, key) if object.respond_to?(:[])
47
+ end
48
+
49
+ def self.from(object, keys:)
50
+ Kind::Array[keys].each_with_object({}) do |key, memo|
51
+ memo[key] = call(object, key: key)
33
52
  end
34
53
  end
35
54
  end
55
+
36
56
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Micro
4
4
  module Attributes
5
- VERSION = '2.2.0'.freeze
5
+ VERSION = '2.7.0'.freeze
6
6
  end
7
7
  end
data/test.sh CHANGED
@@ -1,7 +1,11 @@
1
1
  #!/bin/bash
2
2
 
3
- git checkout -- Gemfile.lock
4
-
5
3
  source $(dirname $0)/.travis.sh
6
4
 
7
- git checkout -- Gemfile.lock
5
+ echo ''
6
+ echo 'Resetting Gemfile'
7
+ echo ''
8
+
9
+ rm Gemfile.lock
10
+
11
+ bundle
data/u-attributes.gemspec CHANGED
@@ -9,18 +9,17 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ['Rodrigo Serradura']
10
10
  spec.email = ['rodrigo.serradura@gmail.com']
11
11
 
12
- spec.summary = %q{Create "immutable" objects. No setters, just getters!}
12
+ spec.summary = %q{Create "immutable" objects with no setters, just getters.}
13
13
  spec.description =
14
- "This gem allows you to define \"immutable\" objects, and your objects will have only getters and no setters. "\
15
- "So, if you change some object attribute, you will have a new object instance. " \
16
- "That is, you transform the object instead of modifying it."
14
+ 'This gem allows you to define "immutable" objects, when using it your objects will only have getters and no setters.' \
15
+ 'So, if you change an attribute of the object, you’ll have a new object instance.'
17
16
  spec.homepage = 'https://github.com/serradura/u-attributes'
18
17
  spec.license = 'MIT'
19
18
 
20
19
  # Specify which files should be added to the gem when it is released.
21
20
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
22
21
  spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
23
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
22
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|assets)/}) }
24
23
  end
25
24
  spec.bindir = 'exe'
26
25
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
@@ -28,7 +27,7 @@ Gem::Specification.new do |spec|
28
27
 
29
28
  spec.required_ruby_version = '>= 2.2.0'
30
29
 
31
- spec.add_runtime_dependency 'kind', '>= 3.0', '< 5.0'
30
+ spec.add_runtime_dependency 'kind', '>= 4.0', '< 6.0'
32
31
 
33
32
  spec.add_development_dependency 'bundler'
34
33
  spec.add_development_dependency 'rake', '~> 13.0'
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: 2.2.0
4
+ version: 2.7.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: 2020-09-02 00:00:00.000000000 Z
11
+ date: 2021-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kind
@@ -16,20 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3.0'
19
+ version: '4.0'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '5.0'
22
+ version: '6.0'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: '3.0'
29
+ version: '4.0'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '5.0'
32
+ version: '6.0'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: bundler
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -58,10 +58,9 @@ dependencies:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
60
  version: '13.0'
61
- description: This gem allows you to define "immutable" objects, and your objects will
62
- have only getters and no setters. So, if you change some object attribute, you will
63
- have a new object instance. That is, you transform the object instead of modifying
64
- it.
61
+ description: This gem allows you to define "immutable" objects, when using it your
62
+ objects will only have getters and no setters.So, if you change an attribute of
63
+ the object, you’ll have a new object instance.
65
64
  email:
66
65
  - rodrigo.serradura@gmail.com
67
66
  executables: []
@@ -76,20 +75,21 @@ files:
76
75
  - LICENSE.txt
77
76
  - README.md
78
77
  - Rakefile
79
- - assets/u-attributes_logo_v1.png
80
78
  - bin/console
81
79
  - bin/setup
82
80
  - lib/micro/attributes.rb
83
81
  - lib/micro/attributes/diff.rb
84
82
  - lib/micro/attributes/features.rb
83
+ - lib/micro/attributes/features/accept.rb
84
+ - lib/micro/attributes/features/accept/strict.rb
85
85
  - lib/micro/attributes/features/activemodel_validations.rb
86
86
  - lib/micro/attributes/features/diff.rb
87
87
  - lib/micro/attributes/features/initialize.rb
88
88
  - lib/micro/attributes/features/initialize/strict.rb
89
+ - lib/micro/attributes/features/keys_as_symbol.rb
89
90
  - lib/micro/attributes/macros.rb
90
91
  - lib/micro/attributes/utils.rb
91
92
  - lib/micro/attributes/version.rb
92
- - lib/micro/attributes/with.rb
93
93
  - lib/u-attributes.rb
94
94
  - test.sh
95
95
  - u-attributes.gemspec
@@ -112,8 +112,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
112
  - !ruby/object:Gem::Version
113
113
  version: '0'
114
114
  requirements: []
115
- rubygems_version: 3.0.6
115
+ rubygems_version: 3.1.4
116
116
  signing_key:
117
117
  specification_version: 4
118
- summary: Create "immutable" objects. No setters, just getters!
118
+ summary: Create "immutable" objects with no setters, just getters.
119
119
  test_files: []
Binary file
@@ -1,100 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'micro/attributes/features/diff'
4
- require 'micro/attributes/features/initialize'
5
- require 'micro/attributes/features/initialize/strict'
6
- require 'micro/attributes/features/activemodel_validations'
7
-
8
- module Micro
9
- module Attributes
10
- module With
11
- #
12
- # Features
13
- #
14
- module Diff
15
- def self.included(base)
16
- base.send(:include, ::Micro::Attributes)
17
- base.send(:include, ::Micro::Attributes::Features::Diff)
18
- end
19
- end
20
-
21
- module Initialize
22
- def self.included(base)
23
- base.send(:include, ::Micro::Attributes)
24
- base.send(:include, ::Micro::Attributes::Features::Initialize)
25
- end
26
- end
27
-
28
- module ActiveModelValidations
29
- def self.included(base)
30
- base.send(:include, Initialize)
31
- base.send(:include, ::Micro::Attributes::Features::ActiveModelValidations)
32
- end
33
- end
34
-
35
- module StrictInitialize
36
- def self.included(base)
37
- base.send(:include, Initialize)
38
- base.send(:include, ::Micro::Attributes::Features::Initialize::Strict)
39
- end
40
- end
41
-
42
- #
43
- # Combinations
44
- #
45
- module DiffAndInitialize
46
- def self.included(base)
47
- base.send(:include, ::Micro::Attributes)
48
- base.send(:include, ::Micro::Attributes::Features::Initialize)
49
- base.send(:include, ::Micro::Attributes::Features::Diff)
50
- end
51
- end
52
-
53
- module DiffAndStrictInitialize
54
- def self.included(base)
55
- base.send(:include, DiffAndInitialize)
56
- base.send(:include, ::Micro::Attributes::Features::Initialize::Strict)
57
- end
58
- end
59
-
60
- module ActiveModelValidationsAndDiff
61
- def self.included(base)
62
- base.send(:include, ::Micro::Attributes)
63
- base.send(:include, ::Micro::Attributes::Features::ActiveModelValidations)
64
- base.send(:include, ::Micro::Attributes::Features::Diff)
65
- end
66
- end
67
-
68
- module ActiveModelValidationsAndInitialize
69
- def self.included(base)
70
- base.send(:include, ::Micro::Attributes)
71
- base.send(:include, ::Micro::Attributes::Features::Initialize)
72
- base.send(:include, ::Micro::Attributes::Features::ActiveModelValidations)
73
- end
74
- end
75
-
76
- module ActiveModelValidationsAndStrictInitialize
77
- def self.included(base)
78
- base.send(:include, ActiveModelValidationsAndInitialize)
79
- base.send(:include, ::Micro::Attributes::Features::Initialize::Strict)
80
- end
81
- end
82
-
83
- module ActiveModelValidationsAndDiffAndInitialize
84
- def self.included(base)
85
- base.send(:include, ::Micro::Attributes)
86
- base.send(:include, ::Micro::Attributes::Features::Initialize)
87
- base.send(:include, ::Micro::Attributes::Features::ActiveModelValidations)
88
- base.send(:include, ::Micro::Attributes::Features::Diff)
89
- end
90
- end
91
-
92
- module ActiveModelValidationsAndDiffAndStrictInitialize
93
- def self.included(base)
94
- base.send(:include, ActiveModelValidationsAndDiffAndInitialize)
95
- base.send(:include, ::Micro::Attributes::Features::Initialize::Strict)
96
- end
97
- end
98
- end
99
- end
100
- end