hash_key_transformer 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8eacb3fdad19cfcb513e3289f527503ba77b9025
4
- data.tar.gz: 0fed41f86a2efe74b2fd6bce6bf817d68ee5cc84
3
+ metadata.gz: 242ec9fefddf58d3434723163ce8fe1badc4eaf7
4
+ data.tar.gz: 399605e6c1f28e27180dde264ea13c418b3211f3
5
5
  SHA512:
6
- metadata.gz: c009f91e7ec12dc856cdfd81c6ed88d94a8a7e188704b92e511b90aaa1ea99409bdb6454d15eb2b9354c8dac76655135f6d7e07f798ea13c59d6c9088d08c546
7
- data.tar.gz: 367e8fa6e1b1c948bc1e2428e85d1597524adbd5073f4d0faf7353dc0f2b3b5febd5668f8af432c60d64555974afce30d43ed88fafb1bdd5fb0c2d229ef93bcd
6
+ metadata.gz: '09dbf6693a51215f5b1405cd89d3b9a8aaeb3b83dcaa74cc7df44e2ebd8eceac5ba8ad0f6c8f472350b58539f16ce23c3a69526f3f9c1529e445fe1208df0e6f'
7
+ data.tar.gz: 13b791280d9cb8ec1d0b2ed9525f50460676a391b69d3b1a66d8d6244d431f401a8bb0b8ed9bb71b11190157f8393bfe5f3e8b72c7e05a7db0ff4cbd02640b24
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hash_key_transformer (0.1.2)
4
+ hash_key_transformer (0.1.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -3,55 +3,60 @@ require 'hash_key_transformer/version'
3
3
  class HashKeyTransformer
4
4
  class << self
5
5
 
6
- def transform_camel_to_underscore(subject)
7
- deep_transform_hash_keys(subject, :camel_to_underscore)
6
+ def transform_camel_to_underscore(subject, options={})
7
+ deep_transform_hash_keys(subject, :camel_to_underscore, options)
8
8
  end
9
9
 
10
- def transform_underscore_to_camel(subject)
11
- deep_transform_hash_keys(subject, :underscore_to_camel)
10
+ def transform_underscore_to_camel(subject, options={})
11
+ deep_transform_hash_keys(subject, :underscore_to_camel, options)
12
12
  end
13
13
 
14
- def transform_dash_to_underscore(subject)
15
- deep_transform_hash_keys(subject, :dash_to_underscore)
14
+ def transform_dash_to_underscore(subject, options={})
15
+ deep_transform_hash_keys(subject, :dash_to_underscore, options)
16
16
  end
17
17
 
18
- def transform_underscore_to_dash(subject)
19
- deep_transform_hash_keys(subject, :underscore_to_dash)
18
+ def transform_underscore_to_dash(subject, options={})
19
+ deep_transform_hash_keys(subject, :underscore_to_dash, options)
20
20
  end
21
21
 
22
22
  # 'keyName' -> 'key_name'
23
- def camel_to_underscore(key)
23
+ def camel_to_underscore(key, options = {})
24
24
  key.to_s.gsub(/([A-Z])/) { "_#{$1}" }.downcase
25
25
  end
26
26
 
27
27
  # 'key_name' -> 'keyName'
28
- def underscore_to_camel(key)
29
- key.to_s.gsub(/_([a-z0-9])/) { $1.upcase }
28
+ def underscore_to_camel(key, options = {})
29
+ if !!options[:keep_lead_underscore]
30
+ key.to_s.gsub(/(?!^)_([a-z0-9])/) { $1.upcase }
31
+ else
32
+ first_word, *rest_words = key.to_s.split('_').reject(&:empty?).map(&:downcase)
33
+ ([first_word] + rest_words.map(&:capitalize)).join
34
+ end
30
35
  end
31
36
 
32
37
  # 'key-name' -> 'key_name'
33
- def dash_to_underscore(key)
38
+ def dash_to_underscore(key, options = {})
34
39
  key.to_s.downcase.gsub(/-([a-z0-9])/) { "_#{$1}" }
35
40
  end
36
41
 
37
42
  # 'key_name' -> 'key-name'
38
- def underscore_to_dash(key)
43
+ def underscore_to_dash(key, options = {})
39
44
  key.to_s.downcase.gsub(/_([a-z0-9])/) { "-#{$1}" }
40
45
  end
41
46
 
42
47
  private
43
48
 
44
49
  # Recursively walk the JSON-like data structure (hash, array) and transform the hash keys using the given strategy
45
- def deep_transform_hash_keys(subject, output_key_strategy)
50
+ def deep_transform_hash_keys(subject, output_key_strategy, options = {})
46
51
  if subject.is_a?(Hash)
47
52
  subject.inject({}) do |memo, (key, value)|
48
- new_key = send(output_key_strategy, key).to_sym
49
- memo[new_key] = deep_transform_hash_keys(value, output_key_strategy)
53
+ new_key = send(output_key_strategy, key, options).to_sym
54
+ memo[new_key] = deep_transform_hash_keys(value, output_key_strategy, options)
50
55
  memo
51
56
  end
52
57
  elsif subject.is_a?(Array)
53
58
  subject.inject([]) do |memo, item|
54
- memo << deep_transform_hash_keys(item, output_key_strategy)
59
+ memo << deep_transform_hash_keys(item, output_key_strategy, options)
55
60
  memo
56
61
  end
57
62
  else
@@ -1,3 +1,3 @@
1
1
  class HashKeyTransformer
2
- VERSION = '0.1.2'
2
+ VERSION = '0.1.3'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_key_transformer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Rood
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-06 00:00:00.000000000 Z
11
+ date: 2018-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler