hanami-utils 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|