u-attributes 2.2.0 → 2.7.0

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