hanami-utils 1.0.0 → 1.0.1
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/CHANGELOG.md +10 -0
- data/README.md +1 -1
- data/hanami-utils.gemspec +3 -2
- data/lib/hanami/interactor.rb +3 -6
- data/lib/hanami/utils/hash.rb +97 -1
- data/lib/hanami/utils/string.rb +1 -1
- data/lib/hanami/utils/version.rb +1 -1
- metadata +31 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7fde1682b3dd9e18b73474151562576b62ed40c8
|
4
|
+
data.tar.gz: af101e3c84ee66f7f981869502e63cbaa66fcc65
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ce2f82b2afea0388175f650a7eb13750529afcc499dd7279ebc711c269dd4f673be963abec741d4d28b35766a44061ef14d239312328fb9fbb13470f6055381
|
7
|
+
data.tar.gz: 1273ac6688f44ec40e5ee28aa3f0e4c707ac7bc81b89ef98dc8499bfa8de2d3dea9bcd36e429bc905323eef0d673ee40b7f4975c71c77a0586a3895e04a208d8
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
# Hanami::Utils
|
2
2
|
Ruby core extentions and class utilities for Hanami
|
3
3
|
|
4
|
+
## v1.0.1 - 2017-06-23
|
5
|
+
|
6
|
+
### Added
|
7
|
+
- [Luca Guidi] Introduced `Utils::Hash.symbolize` and `.deep_symbolize`
|
8
|
+
- [Luca Guidi] Introduced `Utils::Hash.deep_dup`
|
9
|
+
|
10
|
+
### Fixed
|
11
|
+
- [choallin] Ensure `Utils::String#classify` to return output identical to the input for already classified strings.
|
12
|
+
- [Marion Duprey & Jonas Amundsen] Ensure `Utils::Hash#initialize` to accept frozen `Hash` as argument.
|
13
|
+
|
4
14
|
## v1.0.0 - 2017-04-06
|
5
15
|
|
6
16
|
## v1.0.0.rc1 - 2017-03-31
|
data/README.md
CHANGED
@@ -81,7 +81,7 @@ Deprecate Hanami features. [[API doc](http://www.rubydoc.info/gems/hanami-utils/
|
|
81
81
|
|
82
82
|
### Hanami::Utils::Duplicable
|
83
83
|
|
84
|
-
Safe `#dup` logic for Ruby objects. [[API doc](http://www.rubydoc.info/gems/hanami-utils/Hanami/Utils/
|
84
|
+
Safe `#dup` logic for Ruby objects. [[API doc](http://www.rubydoc.info/gems/hanami-utils/Hanami/Utils/Duplicable)]
|
85
85
|
|
86
86
|
|
87
87
|
### Hanami::Utils::Escape
|
data/hanami-utils.gemspec
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
1
|
lib = File.expand_path('../lib', __FILE__)
|
4
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
3
|
require 'hanami/utils/version'
|
@@ -20,6 +18,9 @@ Gem::Specification.new do |spec|
|
|
20
18
|
spec.require_paths = ['lib']
|
21
19
|
spec.required_ruby_version = '>= 2.3.0'
|
22
20
|
|
21
|
+
spec.add_dependency 'transproc', '~> 1.0'
|
22
|
+
|
23
23
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
24
24
|
spec.add_development_dependency 'rake', '~> 11'
|
25
|
+
spec.add_development_dependency 'rspec', '~> 3.5'
|
25
26
|
end
|
data/lib/hanami/interactor.rb
CHANGED
@@ -205,12 +205,11 @@ module Hanami
|
|
205
205
|
#
|
206
206
|
# def initialize(params)
|
207
207
|
# @params = params
|
208
|
-
# @user = User.new(@params)
|
209
208
|
# @foo = 'bar'
|
210
209
|
# end
|
211
210
|
#
|
212
211
|
# def call
|
213
|
-
# @user = UserRepository.new.
|
212
|
+
# @user = UserRepository.new.create(@params)
|
214
213
|
# end
|
215
214
|
# end
|
216
215
|
#
|
@@ -231,12 +230,11 @@ module Hanami
|
|
231
230
|
#
|
232
231
|
# def initialize(params)
|
233
232
|
# @params = params
|
234
|
-
# @user = User.new(@params)
|
235
233
|
# end
|
236
234
|
#
|
237
235
|
# # THIS WON'T BE INVOKED BECAUSE #valid? WILL RETURN false
|
238
236
|
# def call
|
239
|
-
# @user = UserRepository.new.
|
237
|
+
# @user = UserRepository.new.create(@params)
|
240
238
|
# end
|
241
239
|
#
|
242
240
|
# private
|
@@ -292,7 +290,6 @@ module Hanami
|
|
292
290
|
#
|
293
291
|
# def initialize(params)
|
294
292
|
# @params = params
|
295
|
-
# @email_test = EmailTest.new(@params)
|
296
293
|
# end
|
297
294
|
#
|
298
295
|
# def call
|
@@ -302,7 +299,7 @@ module Hanami
|
|
302
299
|
#
|
303
300
|
# private
|
304
301
|
# def persist_email_test!
|
305
|
-
# @email_test = EmailTestRepository.new.
|
302
|
+
# @email_test = EmailTestRepository.new.create(@params)
|
306
303
|
# end
|
307
304
|
#
|
308
305
|
# # IF THIS RAISES AN EXCEPTION WE FORCE A FAILURE
|
data/lib/hanami/utils/hash.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'hanami/utils/duplicable'
|
2
|
+
require 'transproc'
|
2
3
|
|
3
4
|
module Hanami
|
4
5
|
module Utils
|
@@ -19,6 +20,101 @@ module Hanami
|
|
19
20
|
end
|
20
21
|
end.freeze
|
21
22
|
|
23
|
+
extend Transproc::Registry
|
24
|
+
import Transproc::HashTransformations
|
25
|
+
|
26
|
+
# Symbolize the given hash
|
27
|
+
#
|
28
|
+
# @param input [::Hash] the input
|
29
|
+
#
|
30
|
+
# @return [::Hash] the symbolized hash
|
31
|
+
#
|
32
|
+
# @since 1.0.1
|
33
|
+
#
|
34
|
+
# @see .deep_symbolize
|
35
|
+
#
|
36
|
+
# @example Basic Usage
|
37
|
+
# require 'hanami/utils/hash'
|
38
|
+
#
|
39
|
+
# hash = Hanami::Utils::Hash.symbolize("foo" => "bar", "baz" => {"a" => 1})
|
40
|
+
# # => {:foo=>"bar", :baz=>{"a"=>1}}
|
41
|
+
#
|
42
|
+
# hash.class
|
43
|
+
# # => Hash
|
44
|
+
def self.symbolize(input)
|
45
|
+
self[:symbolize_keys].call(input)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Deep symbolize the given hash
|
49
|
+
#
|
50
|
+
# @param input [::Hash] the input
|
51
|
+
#
|
52
|
+
# @return [::Hash] the deep symbolized hash
|
53
|
+
#
|
54
|
+
# @since 1.0.1
|
55
|
+
#
|
56
|
+
# @see .symbolize
|
57
|
+
#
|
58
|
+
# @example Basic Usage
|
59
|
+
# require 'hanami/utils/hash'
|
60
|
+
#
|
61
|
+
# hash = Hanami::Utils::Hash.deep_symbolize("foo" => "bar", "baz" => {"a" => 1})
|
62
|
+
# # => {:foo=>"bar", :baz=>{a:=>1}}
|
63
|
+
#
|
64
|
+
# hash.class
|
65
|
+
# # => Hash
|
66
|
+
def self.deep_symbolize(input)
|
67
|
+
self[:deep_symbolize_keys].call(input)
|
68
|
+
end
|
69
|
+
|
70
|
+
# Deep duplicate hash values
|
71
|
+
#
|
72
|
+
# The output of this function is a shallow duplicate of the input.
|
73
|
+
# Any further modification on the input, won't be reflected on the output
|
74
|
+
# and viceversa.
|
75
|
+
#
|
76
|
+
# @param input [::Hash] the input
|
77
|
+
#
|
78
|
+
# @return [::Hash] the shallow duplicate of input
|
79
|
+
#
|
80
|
+
# @since 1.0.1
|
81
|
+
#
|
82
|
+
# @example Basic Usage
|
83
|
+
# require 'hanami/utils/hash'
|
84
|
+
#
|
85
|
+
# input = { "a" => { "b" => { "c" => [1, 2, 3] } } }
|
86
|
+
# output = Hanami::Utils::Hash.deep_dup(input)
|
87
|
+
# # => {"a"=>{"b"=>{"c"=>[1,2,3]}}}
|
88
|
+
#
|
89
|
+
# output.class
|
90
|
+
# # => Hash
|
91
|
+
#
|
92
|
+
#
|
93
|
+
#
|
94
|
+
# # mutations on input aren't reflected on output
|
95
|
+
#
|
96
|
+
# input["a"]["b"]["c"] << 4
|
97
|
+
# output.dig("a", "b", "c")
|
98
|
+
# # => [1, 2, 3]
|
99
|
+
#
|
100
|
+
#
|
101
|
+
#
|
102
|
+
# # mutations on output aren't reflected on input
|
103
|
+
#
|
104
|
+
# output["a"].delete("b")
|
105
|
+
# input
|
106
|
+
# # => {"a"=>{"b"=>{"c"=>[1,2,3,4]}}}
|
107
|
+
def self.deep_dup(input)
|
108
|
+
input.each_with_object({}) do |(k, v), result|
|
109
|
+
result[k] = case v
|
110
|
+
when ::Hash
|
111
|
+
deep_dup(v)
|
112
|
+
else
|
113
|
+
Duplicable.dup(v)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
22
118
|
# Initialize the hash
|
23
119
|
#
|
24
120
|
# @param hash [#to_h] the value we want to use to initialize this instance
|
@@ -45,7 +141,7 @@ module Hanami
|
|
45
141
|
# hash.to_h # => { 'foo' => ['bar'] }
|
46
142
|
def initialize(hash = {}, &blk)
|
47
143
|
@hash = hash.to_hash
|
48
|
-
@hash.default_proc = blk
|
144
|
+
@hash.default_proc = blk if blk
|
49
145
|
end
|
50
146
|
|
51
147
|
# Convert in-place all the keys to Symbol instances.
|
data/lib/hanami/utils/string.rb
CHANGED
@@ -142,7 +142,7 @@ module Hanami
|
|
142
142
|
# string.classify # => 'HanamiUtils'
|
143
143
|
def classify
|
144
144
|
words = underscore.split(CLASSIFY_WORD_SEPARATOR).map!(&:capitalize)
|
145
|
-
delimiters = scan(CLASSIFY_WORD_SEPARATOR)
|
145
|
+
delimiters = underscore.scan(CLASSIFY_WORD_SEPARATOR)
|
146
146
|
|
147
147
|
delimiters.map! do |delimiter|
|
148
148
|
delimiter == CLASSIFY_SEPARATOR ? EMPTY_STRING : NAMESPACE_SEPARATOR
|
data/lib/hanami/utils/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hanami-utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luca Guidi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: transproc
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,6 +52,20 @@ dependencies:
|
|
38
52
|
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '11'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.5'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.5'
|
41
69
|
description: Hanami utilities
|
42
70
|
email:
|
43
71
|
- me@lucaguidi.com
|
@@ -91,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
119
|
version: '0'
|
92
120
|
requirements: []
|
93
121
|
rubyforge_project:
|
94
|
-
rubygems_version: 2.6.
|
122
|
+
rubygems_version: 2.6.12
|
95
123
|
signing_key:
|
96
124
|
specification_version: 4
|
97
125
|
summary: Ruby core extentions and Hanami utilities
|