macmillan-utils 1.0.18 → 1.0.19
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/macmillan/utils.rb +1 -0
- data/lib/macmillan/utils/helper.rb +11 -0
- data/lib/macmillan/utils/helper/hash_key_helper.rb +46 -0
- data/lib/macmillan/utils/helper/string_conversion_helper.rb +35 -0
- data/spec/lib/macmillan/utils/helper/hash_key_helper_spec.rb +124 -0
- data/spec/lib/macmillan/utils/helper/string_conversion_helper_spec.rb +40 -0
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00268cd5e517f8817ee7515c2bd5c1d94df9e242
|
4
|
+
data.tar.gz: f5252d519821c65a1eea390284b5f092ac7c232d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf346d7f3a5035e0f51bdfe2e06f18a2f9fc4b8329c36f3d30609db4ebb3ece48c2247e9977e5b843d49a33560955d104d7d56a60f9c3dc19ad0d950d96367b0
|
7
|
+
data.tar.gz: 09352c5f41b7ccb073e3f51e6f05e137d296531d78317973550fd39c2b1cfa6cd0516eeba73e2df733acd3dff29d5c77b92881082ecf4dca190866bcfd6b51cb
|
data/lib/macmillan/utils.rb
CHANGED
@@ -12,5 +12,6 @@ module Macmillan
|
|
12
12
|
autoload :StatsdDecorator, 'macmillan/utils/statsd_decorator'
|
13
13
|
autoload :StatsdMiddleware, 'macmillan/utils/statsd_middleware'
|
14
14
|
autoload :StatsdControllerHelper, 'macmillan/utils/statsd_controller_helper'
|
15
|
+
autoload :Helper, 'macmillan/utils/helper'
|
15
16
|
end
|
16
17
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Macmillan
|
2
|
+
module Utils
|
3
|
+
##
|
4
|
+
# Namespace for helpers classes
|
5
|
+
#
|
6
|
+
module Helper
|
7
|
+
autoload :HashKeyHelper, 'macmillan/utils/helper/hash_key_helper'
|
8
|
+
autoload :StringConversionHelper, 'macmillan/utils/helper/string_conversion_helper'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Macmillan
|
2
|
+
module Utils
|
3
|
+
module Helper
|
4
|
+
module HashKeyHelper
|
5
|
+
include StringConversionHelper
|
6
|
+
|
7
|
+
def convert_keys_to_snakecase_and_symbols(obj)
|
8
|
+
case obj
|
9
|
+
when Array
|
10
|
+
obj.reduce([]) do |res, val|
|
11
|
+
res << case val
|
12
|
+
when Hash, Array
|
13
|
+
convert_keys_to_snakecase_and_symbols(val)
|
14
|
+
else
|
15
|
+
val
|
16
|
+
end
|
17
|
+
res
|
18
|
+
end
|
19
|
+
when Hash
|
20
|
+
obj.reduce({}) do |res, (key, val)|
|
21
|
+
nkey = snakecase_string(key.to_s).to_sym
|
22
|
+
nval = case val
|
23
|
+
when Hash, Array
|
24
|
+
convert_keys_to_snakecase_and_symbols(val)
|
25
|
+
else
|
26
|
+
val
|
27
|
+
end
|
28
|
+
res[nkey] = nval
|
29
|
+
res
|
30
|
+
end
|
31
|
+
else
|
32
|
+
obj
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def convert_key_to_singular(key)
|
37
|
+
if key.to_s == 'summaries'
|
38
|
+
:summary
|
39
|
+
else
|
40
|
+
key.to_s.chomp('s').to_sym
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Macmillan
|
2
|
+
module Utils
|
3
|
+
module Helper
|
4
|
+
module StringConversionHelper
|
5
|
+
module_function
|
6
|
+
|
7
|
+
# shamelessly ripped out of the 'facets' gem
|
8
|
+
def snakecase_string(string)
|
9
|
+
string
|
10
|
+
.gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
|
11
|
+
.gsub(/([a-z\d])([A-Z])/,'\1_\2')
|
12
|
+
.tr('-', '_')
|
13
|
+
.gsub(/\s/, '_')
|
14
|
+
.gsub(/__+/, '_')
|
15
|
+
.downcase
|
16
|
+
end
|
17
|
+
|
18
|
+
# also shamelessly ripped out of the 'facets' gem
|
19
|
+
def upper_camelcase_string(string)
|
20
|
+
separators = ['_', '\s']
|
21
|
+
|
22
|
+
separators.each do |s|
|
23
|
+
string = string.gsub(/(?:#{s}+)([a-z])/){ $1.upcase }
|
24
|
+
end
|
25
|
+
|
26
|
+
string.gsub(/(\A|\s)([a-z])/){ $1 + $2.upcase }
|
27
|
+
end
|
28
|
+
|
29
|
+
def camelcase_to_snakecase_symbol(string)
|
30
|
+
snakecase_string(string).to_sym
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Macmillan::Utils::Helper::HashKeyHelper do
|
4
|
+
include Macmillan::Utils::Helper::HashKeyHelper
|
5
|
+
|
6
|
+
describe '#convert_keys_to_snakecase_and_symbols' do
|
7
|
+
context 'when it is a flat hash' do
|
8
|
+
let(:example) do
|
9
|
+
{ 'aKey' => 'woo', '_debug' => {} }
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:expected) do
|
13
|
+
{ a_key: 'woo', _debug: {} }
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'converts all the keys to snake_case and symbols' do
|
17
|
+
result = convert_keys_to_snakecase_and_symbols(example)
|
18
|
+
expect(result).to eq(expected)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'a hash containing child hashes' do
|
23
|
+
let(:example) do
|
24
|
+
{ 'aKey' => { 'someKey' => 'woo', 'someKey2' => 'woo' } }
|
25
|
+
end
|
26
|
+
|
27
|
+
let(:expected) do
|
28
|
+
{ a_key: { some_key: 'woo', some_key2: 'woo' } }
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'converts all the keys to snake_case and symbols' do
|
32
|
+
result = convert_keys_to_snakecase_and_symbols(example)
|
33
|
+
expect(result).to eq(expected)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'a hash containing arrays of hashes as values' do
|
38
|
+
let(:example) do
|
39
|
+
{
|
40
|
+
'aKey' => [
|
41
|
+
{ 'someKey' => 'woo' },
|
42
|
+
{ 'someKey2' => 'waa' }
|
43
|
+
]
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
let(:expected) do
|
48
|
+
{
|
49
|
+
a_key: [
|
50
|
+
{ some_key: 'woo' },
|
51
|
+
{ some_key2: 'waa' }
|
52
|
+
]
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'converts all the keys to snake_case and symbols' do
|
57
|
+
result = convert_keys_to_snakecase_and_symbols(example)
|
58
|
+
expect(result).to eq(expected)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context 'with a monster' do
|
63
|
+
let(:example) do
|
64
|
+
{
|
65
|
+
'aKey' => [
|
66
|
+
{ 'someKey' => 'woo' },
|
67
|
+
{ 'someKey2' => 'waa' },
|
68
|
+
[
|
69
|
+
{ 'someKey' => 'woo' },
|
70
|
+
{
|
71
|
+
'argh' => [
|
72
|
+
{ 'someKey' => 'woo' }
|
73
|
+
]
|
74
|
+
}
|
75
|
+
]
|
76
|
+
]
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
let(:expected) do
|
81
|
+
{
|
82
|
+
a_key: [
|
83
|
+
{ some_key: 'woo' },
|
84
|
+
{ some_key2: 'waa' },
|
85
|
+
[
|
86
|
+
{ some_key: 'woo' },
|
87
|
+
{
|
88
|
+
argh: [
|
89
|
+
{ some_key: 'woo' }
|
90
|
+
]
|
91
|
+
}
|
92
|
+
]
|
93
|
+
|
94
|
+
]
|
95
|
+
}
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'converts all the keys to snake_case and symbols' do
|
99
|
+
result = convert_keys_to_snakecase_and_symbols(example)
|
100
|
+
expect(result).to eq(expected)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe '#convert_key_to_singular' do
|
106
|
+
context 'when the key is :summaries' do
|
107
|
+
let(:key) { :summaries }
|
108
|
+
|
109
|
+
it 'converts the key to :summary' do
|
110
|
+
expect(convert_key_to_singular(key)).to eq(:summary)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
context 'when the key is NOT :summaries' do
|
115
|
+
let(:articles_key) { :articles }
|
116
|
+
let(:primary_article_types_key) { :primary_article_types }
|
117
|
+
|
118
|
+
it 'converts the key to singular' do
|
119
|
+
expect(convert_key_to_singular(articles_key)).to eq(:article)
|
120
|
+
expect(convert_key_to_singular(primary_article_types_key)).to eq(:primary_article_type)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Macmillan::Utils::Helper::StringConversionHelper do
|
4
|
+
include Macmillan::Utils::Helper::StringConversionHelper
|
5
|
+
|
6
|
+
describe '#snakecase_string' do
|
7
|
+
it 'downcases' do
|
8
|
+
expect(snakecase_string('URI')).to eq('uri')
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'converts spaces' do
|
12
|
+
expect(snakecase_string('MyStuff HisStuff')).to eq('my_stuff_his_stuff')
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'does not alter path dividers' do
|
16
|
+
expect(snakecase_string('/my_module/my_class/')).to eq('/my_module/my_class/')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#upper_camelcase_string' do
|
21
|
+
let(:spacey_string) {'I feel spaced out'}
|
22
|
+
let(:underscorey_string) {'i_feel_under_scored'}
|
23
|
+
|
24
|
+
it 'converts a string containing spaces to upper camelcase' do
|
25
|
+
expect(upper_camelcase_string(spacey_string)).to eq('IFeelSpacedOut')
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'converts a string containing underscores to upper camelcase' do
|
29
|
+
expect(upper_camelcase_string(underscorey_string)).to eq('IFeelUnderScored')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#camelcase_to_snakecase_symbol' do
|
34
|
+
let(:camel) {'LookAtThisHumpyOldCamel'}
|
35
|
+
|
36
|
+
it 'converts a camelcase string to a snakecase symbol equivalent' do
|
37
|
+
expect(camelcase_to_snakecase_symbol(camel)).to eq(:look_at_this_humpy_old_camel)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: macmillan-utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Macmillan Science and Education (New Publsihing Platforms)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -226,6 +226,9 @@ files:
|
|
226
226
|
- lib/macmillan/utils/bundler/gem_helper.rb
|
227
227
|
- lib/macmillan/utils/cucumber/cucumber_defaults.rb
|
228
228
|
- lib/macmillan/utils/cucumber/webmock_helper.rb
|
229
|
+
- lib/macmillan/utils/helper.rb
|
230
|
+
- lib/macmillan/utils/helper/hash_key_helper.rb
|
231
|
+
- lib/macmillan/utils/helper/string_conversion_helper.rb
|
229
232
|
- lib/macmillan/utils/logger.rb
|
230
233
|
- lib/macmillan/utils/logger/factory.rb
|
231
234
|
- lib/macmillan/utils/logger/formatter.rb
|
@@ -251,6 +254,8 @@ files:
|
|
251
254
|
- lib/macmillan/utils/test_helpers/simplecov_helper.rb
|
252
255
|
- macmillan-utils.gemspec
|
253
256
|
- spec/fixtures/config/application.yml
|
257
|
+
- spec/lib/macmillan/utils/helper/hash_key_helper_spec.rb
|
258
|
+
- spec/lib/macmillan/utils/helper/string_conversion_helper_spec.rb
|
254
259
|
- spec/lib/macmillan/utils/logger/factory_spec.rb
|
255
260
|
- spec/lib/macmillan/utils/logger/formatter_spec.rb
|
256
261
|
- spec/lib/macmillan/utils/middleware/uuid_spec.rb
|
@@ -287,6 +292,8 @@ summary: A collection of useful patterns we (Macmillan Science and Education) us
|
|
287
292
|
in our Ruby applications.
|
288
293
|
test_files:
|
289
294
|
- spec/fixtures/config/application.yml
|
295
|
+
- spec/lib/macmillan/utils/helper/hash_key_helper_spec.rb
|
296
|
+
- spec/lib/macmillan/utils/helper/string_conversion_helper_spec.rb
|
290
297
|
- spec/lib/macmillan/utils/logger/factory_spec.rb
|
291
298
|
- spec/lib/macmillan/utils/logger/formatter_spec.rb
|
292
299
|
- spec/lib/macmillan/utils/middleware/uuid_spec.rb
|