string-cases 0.0.3 → 0.0.4

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: 234fd7fe816c06ba2ce0b288e94767cff3ec7707
4
- data.tar.gz: 9012818a9554c353acacfb82e4e6946a0e173e4d
3
+ metadata.gz: 000023f3208493ee8e5b7946040ffa6ecc4282cf
4
+ data.tar.gz: b58642e71de68780ac514567e48f3c5f8d376a69
5
5
  SHA512:
6
- metadata.gz: a52cdf579e540c2cc76ab93c749c125f24b84f228dc0a634a440ba6fcbf561723927b920de628911ece6bfbff04904846adb140fec590b1163cbc46515f624a2
7
- data.tar.gz: 4adca1c912320e2d2725365c4e7efea9b39a0279b5304ae5e4d6f6c2bed5ecb841cc92684aab3c99fb4260508f0624bd5873820075f0d1c6b924eb1ecb6a5c68
6
+ metadata.gz: 4bef5509e708606265e5c91ca369fc7a7329b3291e96480899ac6c082a5aad62d46a9e09113204c946ab05be2131a9edc66e7116d30056c90882c7e5d879ae37
7
+ data.tar.gz: 80cab67dcf2e73aae4a4af81f1e74afe1f7ddcda8eb8de95bd35c924fa6b056db9265a54f8bb3049c9f34601c3a1929bae2777b739fb52154a2b226d1a3c83ed
@@ -20,6 +20,9 @@ Metrics/AbcSize:
20
20
  Metrics/ClassLength:
21
21
  Max: 250
22
22
 
23
+ Metrics/CyclomaticComplexity:
24
+ Max: 25
25
+
23
26
  Style/AccessModifierIndentation:
24
27
  EnforcedStyle: outdent
25
28
 
data/README.md CHANGED
@@ -42,6 +42,22 @@ StringCases.singularize("users") #=> "user"
42
42
  StringCases.singularize("categories") #=> "category"
43
43
  ```
44
44
 
45
+ ### Constantize
46
+
47
+ ```ruby
48
+ StringCases.constantize("SomeNamespace::SomeClass") => SomeNamespace::SomeClass
49
+ ```
50
+
51
+ ### Symbolize keys
52
+
53
+ ```ruby
54
+ StringCases.symbolize_keys({"test1" => "test1val", "test2" => {"test2key" => "test2val"}}, recursive: true) #=> {:test1 => "test1val, :test2 => {:test2key => "test2val"}}
55
+ ```
56
+
57
+ ```ruby
58
+ StringCases.stringify_keys({test1: "test1val", test2: {test2key: "test2val"}}, recursive: true) #=> {"test1" => "test1val, "test2" => {"test2key" => "test2val"}}
59
+ ```
60
+
45
61
  ## Contributing to string-cases
46
62
 
47
63
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
@@ -36,4 +36,31 @@ class StringCases
36
36
  mod_path.const_get(mod_to_find)
37
37
  end
38
38
  end
39
+
40
+ def self.hash_keys(hash, mode, args = {})
41
+ new_hash = {}
42
+ hash.each do |key, value|
43
+ case mode
44
+ when :stringify
45
+ key = key.to_s if key.is_a?(Symbol)
46
+ when :symbolize
47
+ key = key.to_sym if key.is_a?(String)
48
+ else
49
+ raise "Unknown mode: #{mode}"
50
+ end
51
+
52
+ value = StringCases.hash_keys(value, mode, args) if args[:recursive] && value.is_a?(Hash)
53
+ new_hash[key] = value
54
+ end
55
+
56
+ new_hash
57
+ end
58
+
59
+ def self.symbolize_keys(hash, args = {})
60
+ StringCases.hash_keys(hash, :symbolize, args)
61
+ end
62
+
63
+ def self.stringify_keys(hash, args = {})
64
+ StringCases.hash_keys(hash, :stringify, args)
65
+ end
39
66
  end
@@ -41,4 +41,26 @@ describe "StringCases" do
41
41
  expect(StringCases.constantize("WeakRef::RefError")).to eq WeakRef::RefError
42
42
  end
43
43
  end
44
+
45
+ describe "#hash_keys" do
46
+ it "symbolizes keys" do
47
+ result = StringCases.symbolize_keys("test1" => "test1val", "test2" => {"test3" => "test3val"})
48
+ expect(result).to eq(test1: "test1val", test2: {"test3" => "test3val"})
49
+ end
50
+
51
+ it "stringify keys" do
52
+ result = StringCases.stringify_keys(test1: "test1val", test2: {test3: "test3val"})
53
+ expect(result).to eq("test1" => "test1val", "test2" => {test3: "test3val"})
54
+ end
55
+
56
+ it "symbolizes keys recursively" do
57
+ result = StringCases.symbolize_keys({"test1" => "test1val", "test2" => {"test3" => "test3val"}}, recursive: true)
58
+ expect(result).to eq(test1: "test1val", test2: {test3: "test3val"})
59
+ end
60
+
61
+ it "stringify keys recursively" do
62
+ result = StringCases.stringify_keys({test1: "test1val", test2: {test3: "test3val"}}, recursive: true)
63
+ expect(result).to eq("test1" => "test1val", "test2" => {"test3" => "test3val"})
64
+ end
65
+ end
44
66
  end
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: string-cases 0.0.3 ruby lib
5
+ # stub: string-cases 0.0.4 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "string-cases"
9
- s.version = "0.0.3"
9
+ s.version = "0.0.4"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["kaspernj"]
14
- s.date = "2016-01-07"
14
+ s.date = "2016-01-10"
15
15
  s.description = "Small gem for converting various string-cases to other cases."
16
16
  s.email = "k@spernj.org"
17
17
  s.extra_rdoc_files = [
@@ -36,7 +36,7 @@ Gem::Specification.new do |s|
36
36
  ]
37
37
  s.homepage = "http://github.com/kaspernj/string-cases"
38
38
  s.licenses = ["MIT"]
39
- s.rubygems_version = "2.4.0"
39
+ s.rubygems_version = "2.2.2"
40
40
  s.summary = "Small gem for converting various string-cases to other cases."
41
41
 
42
42
  if s.respond_to? :specification_version then
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: string-cases
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - kaspernj
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-07 00:00:00.000000000 Z
11
+ date: 2016-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -122,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
122
  version: '0'
123
123
  requirements: []
124
124
  rubyforge_project:
125
- rubygems_version: 2.4.0
125
+ rubygems_version: 2.2.2
126
126
  signing_key:
127
127
  specification_version: 4
128
128
  summary: Small gem for converting various string-cases to other cases.