hash_key_transformer 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 71c5a198a3fbd584d7807aed4f1ed398e005c5cf
4
+ data.tar.gz: c30a10468296c780848fdbd95d3ba76f157c81ef
5
+ SHA512:
6
+ metadata.gz: 9511437f433c18fd9ff2f8bb6870550229f76ae2640ed0caa5ab785ba4d7ec6b5b588a3088a0221e625b229ac5722db109338428f77d5a5121abbfd20780442d
7
+ data.tar.gz: 7c371a5af3c9ec2b3d287c37acae52b02795fd49a239bc3f20804c8f66d10759d5305112dcd5b2572d1ee7c25320822e6351ae6b868ac6e78af88e42f1740c40
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.4.2
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in hash_key_transformer.gemspec
6
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,20 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ hash_key_transformer (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ rake (12.3.1)
10
+
11
+ PLATFORMS
12
+ ruby
13
+
14
+ DEPENDENCIES
15
+ bundler (~> 1.16)
16
+ hash_key_transformer!
17
+ rake (~> 12.3)
18
+
19
+ BUNDLED WITH
20
+ 1.16.1
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "hash_key_transformer"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,35 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "hash_key_transformer/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "hash_key_transformer"
8
+ spec.version = HashKeyTransformer::VERSION
9
+ spec.authors = ["Kevin Rood"]
10
+ spec.email = ["kevin.rood@accelecode.com"]
11
+
12
+ spec.summary = %q{hash_key_transformer makes it easy to transform a JSON-like data structure from one style of key to another (for example, from camelCase to snake_case).}
13
+ spec.description = %q{hash_key_transformer makes it easy to transform a JSON-like data structure from one style of key to another (for example, from camelCase to snake_case).}
14
+ spec.homepage = "https://github.com/accelecode/hash_key_transformer"
15
+ spec.license = "Apache-2.0"
16
+
17
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
19
+ if spec.respond_to?(:metadata)
20
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
21
+ else
22
+ raise "RubyGems 2.0 or newer is required to protect against " \
23
+ "public gem pushes."
24
+ end
25
+
26
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
27
+ f.match(%r{^(test|spec|features)/})
28
+ end
29
+ spec.bindir = "exe"
30
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
+ spec.require_paths = ["lib"]
32
+
33
+ spec.add_development_dependency "bundler", "~> 1.16"
34
+ spec.add_development_dependency "rake", "~> 12.3"
35
+ end
@@ -0,0 +1,3 @@
1
+ class HashKeyTransformer
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,63 @@
1
+ require 'hash_key_transformer/version'
2
+
3
+ class HashKeyTransformer
4
+ class << self
5
+
6
+ def transform_camel_to_underscore(subject)
7
+ deep_transform_hash_keys(subject, :camel_to_underscore)
8
+ end
9
+
10
+ def transform_underscore_to_camel(subject)
11
+ deep_transform_hash_keys(subject, :underscore_to_camel)
12
+ end
13
+
14
+ def transform_dash_to_underscore(subject)
15
+ deep_transform_hash_keys(subject, :dash_to_underscore)
16
+ end
17
+
18
+ def transform_underscore_to_dash(subject)
19
+ deep_transform_hash_keys(subject, :underscore_to_dash)
20
+ end
21
+
22
+ # 'keyName' -> 'key_name'
23
+ def camel_to_underscore(key)
24
+ key.to_s.gsub(/([A-Z])/) { "_#{$1}" }.downcase
25
+ end
26
+
27
+ # 'key_name' -> 'keyName'
28
+ def underscore_to_camel(key)
29
+ key.to_s.gsub(/_([a-z0-9])/) { $1.upcase }
30
+ end
31
+
32
+ # 'key-name' -> 'key_name'
33
+ def dash_to_underscore(key)
34
+ key.to_s.downcase.gsub(/-([a-z0-9])/) { "_#{$1}" }
35
+ end
36
+
37
+ # 'key_name' -> 'key-name'
38
+ def underscore_to_dash(key)
39
+ key.to_s.downcase.gsub(/_([a-z0-9])/) { "-#{$1}" }
40
+ end
41
+
42
+ private
43
+
44
+ # 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)
46
+ if subject.is_a?(Hash)
47
+ 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)
50
+ memo
51
+ end
52
+ elsif subject.is_a?(Array)
53
+ subject.inject([]) do |memo, item|
54
+ memo << deep_transform_hash_keys(item, output_key_strategy)
55
+ memo
56
+ end
57
+ else
58
+ # not a hash or array - do nothing
59
+ subject
60
+ end
61
+ end
62
+ end
63
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hash_key_transformer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Kevin Rood
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-04-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '12.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '12.3'
41
+ description: hash_key_transformer makes it easy to transform a JSON-like data structure
42
+ from one style of key to another (for example, from camelCase to snake_case).
43
+ email:
44
+ - kevin.rood@accelecode.com
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - ".gitignore"
50
+ - ".ruby-version"
51
+ - Gemfile
52
+ - Gemfile.lock
53
+ - Rakefile
54
+ - bin/console
55
+ - bin/setup
56
+ - hash_key_transformer.gemspec
57
+ - lib/hash_key_transformer.rb
58
+ - lib/hash_key_transformer/version.rb
59
+ homepage: https://github.com/accelecode/hash_key_transformer
60
+ licenses:
61
+ - Apache-2.0
62
+ metadata:
63
+ allowed_push_host: https://rubygems.org
64
+ post_install_message:
65
+ rdoc_options: []
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ requirements: []
79
+ rubyforge_project:
80
+ rubygems_version: 2.6.13
81
+ signing_key:
82
+ specification_version: 4
83
+ summary: hash_key_transformer makes it easy to transform a JSON-like data structure
84
+ from one style of key to another (for example, from camelCase to snake_case).
85
+ test_files: []