str2hash 0.0.2 → 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.
data/.gitignore ADDED
@@ -0,0 +1,21 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ lib/bundler/man
8
+ pkg
9
+ rdoc
10
+ spec/reports
11
+ test/tmp
12
+ test/version_tmp
13
+ tmp
14
+
15
+ # YARD artifacts
16
+ .yardoc
17
+ _yardoc
18
+ doc/
19
+
20
+ Gemfile.lock
21
+ .idea
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 karl l
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,69 @@
1
+ str2hash
2
+ ========
3
+
4
+ Tiny parser for converting strings to hashes (without using eval).
5
+
6
+ ## Usage
7
+
8
+ str2hash adds String#to_h
9
+
10
+ require 'str2hash'
11
+
12
+ "{ :foo => 123 }".to_h => {:foo=>123}
13
+ "{ :foo => -123 }".to_h => {:foo=>-123}
14
+ "{ :foo => :bar }".to_h => {:foo=>:bar}
15
+ "{ :foo => 123.456 }".to_h => {:foo=>123.456}
16
+ "{ :foo => -123.456 }".to_h => {:foo=>-123.456}
17
+ "{ :foo => 0x0123 }".to_h => {:foo=>291}
18
+ "{ :foo => -0x0123 }".to_h => {:foo=>-291}
19
+ "{ :foo => 0b010010010100010101}".to_h => {:foo=>75029}
20
+ "{ :foo => -0b010010010100010101}".to_h => {:foo=>-75029}
21
+ "{ 123 => 456 }".to_h => {123=>456}
22
+ "{ foo: 456 }".to_h => {:foo=>456}
23
+ "{ foo: :bar }".to_h => {:foo=>:bar}
24
+ "{ foo: '123' }".to_h => {:foo=>"123"}
25
+ "{ foo: "123" }".to_h => {:foo=>"123"}
26
+ "{ foo: /foo/ }".to_h => {:foo=>/foo/}
27
+ "{ foo: true }".to_h => {:foo=>true}
28
+ "{ :foo => :bar, :foo2 => :bar2}".to_h => {:foo=>:bar, :foo2=>:bar2}
29
+ ":foo => :bar, :foo2 => :bar2".to_h => {:foo=>:bar, :foo2=>:bar2}
30
+
31
+ ## Limitations
32
+
33
+ No nested hashes, no arrays (yet). No bindings, only values.
34
+
35
+
36
+ ## Version information
37
+
38
+ * 0.1.0 - Gem setup, Documentation
39
+ * 0.0.2 - Minor fixes
40
+ * 0.0.1 - Initial version
41
+
42
+
43
+ ## License
44
+
45
+ MIT License:
46
+
47
+ Copyright (c) 2013 karl l, <karl@ninjacontrol.com>
48
+
49
+ Permission is hereby granted, free of charge, to any person obtaining a copy
50
+ of this software and associated documentation files (the "Software"), to
51
+ deal in the Software without restriction, including without limitation the
52
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
53
+ sell copies of the Software, and to permit persons to whom the Software is
54
+ furnished to do so, subject to the following conditions:
55
+
56
+ The above copyright notice and this permission notice shall be included in
57
+ all copies or substantial portions of the Software.
58
+
59
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
60
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
61
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
62
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
63
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
64
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
65
+ IN THE SOFTWARE.
66
+
67
+ ## Author
68
+
69
+ karl l (karl@ninjacontrol.com), 2013
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:test)
5
+
@@ -0,0 +1,4 @@
1
+ module Str2Hash
2
+ # Version string (uses semanic versioning)
3
+ VERSION = "0.1.0"
4
+ end
data/lib/str2hash.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  require 'parslet'
2
2
 
3
- # Tiny parser for converting strings to hashes
4
- # karlll <karl@ninjacontrol.com>, 2013-03-23
5
-
3
+ # @author karl l <karl@ninjacontrol.com>
6
4
  class HashParse < Parslet::Parser
7
5
 
8
6
  rule(:lcbracket) { str('{') >> sp? }
@@ -88,6 +86,7 @@ class HashParse < Parslet::Parser
88
86
 
89
87
  end
90
88
 
89
+ # @author karl l <karl@ninjacontrol.com>
91
90
  class HashTransform < Parslet::Transform
92
91
 
93
92
  rule(:dec_int => simple(:i)) { Integer(i) }
@@ -120,13 +119,26 @@ class HashTransform < Parslet::Transform
120
119
  end
121
120
 
122
121
 
122
+ # Defines String#to_h
123
+ # @author karl l <karl@ninjacontrol.com>
123
124
  module Str2Hash
124
125
 
126
+ # @deprecated
125
127
  def str_to_hash(str)
126
128
 
127
129
  end
128
130
 
129
131
  module String
132
+
133
+ #
134
+ # Converts the string to a hash representation
135
+ # @return [Hash] Hash representation of the string
136
+ # @raise [Parslet::ParseFailed] If parsing of the string fails
137
+ #
138
+ # @example
139
+ # "{ :foo => 'bar'}".to_h
140
+ # => {:foo=>"bar"}
141
+ #
130
142
  def to_h
131
143
 
132
144
  p = HashParse.new
@@ -0,0 +1,79 @@
1
+ require 'rspec'
2
+ require 'str2hash'
3
+ require 'parslet/convenience'
4
+
5
+
6
+ PRODS = [
7
+ {s: "{ :foo => 123 }", h: {:foo => 123}},
8
+ {s: "{ :foo => -123 }", h: {:foo => -123}},
9
+ {s: "{ :foo => :bar }", h: {:foo => :bar}},
10
+ {s: "{ :foo => 123.456 }", h: {:foo => 123.456}},
11
+ {s: "{ :foo => -123.456 }", h: {:foo => -123.456}},
12
+ {s: "{ :foo => 0x0123 }", h: {:foo => 291}},
13
+ {s: "{ :foo => 0X0123 }", h: {:foo => 291}},
14
+ {s: "{ :foo => -0x0123 }", h: {:foo => -291}},
15
+ {s: "{ :foo => -0X0123 }", h: {:foo => -291}},
16
+ {s: "{ :foo => 0b010010010100010101}", h: {:foo => 75029}},
17
+ {s: "{ :foo => 0B010010010100010101}", h: {:foo => 75029}},
18
+ {s: "{ :foo => -0b010010010100010101}", h: {:foo => -75029}},
19
+ {s: "{ :foo => -0B010010010100010101}", h: {:foo => -75029}},
20
+ {s: "{ 123 => 456 }", h: {123 => 456}},
21
+ {s: "{ foo: 456 }", h: {:foo => 456}},
22
+ {s: "{ foo: :bar }", h: {:foo => :bar}},
23
+ {s: "{ foo: '123' }", h: {:foo => '123'}},
24
+ {s: "{ foo: \"123\" }", h: {:foo => "123"}},
25
+ {s: "{ foo: /foo/ }", h: {:foo => /foo/}},
26
+ {s: "{ foo: true }", h: {:foo => true}},
27
+ {s: "{ :foo => :bar, :foo2 => :bar2}", h: {:foo => :bar, :foo2 => :bar2}},
28
+ {s: ":foo => :bar, :foo2 => :bar2", h: {:foo => :bar, :foo2 => :bar2}}
29
+ ]
30
+
31
+ describe HashParse do
32
+
33
+
34
+ it 'should parse a basic value hash' do
35
+ p = HashParse.new
36
+
37
+ PRODS.each do |item|
38
+ p.parse(item[:s])
39
+ end
40
+
41
+ end
42
+
43
+ end
44
+
45
+ describe HashTransform do
46
+
47
+ it 'should parse and transform a basic value hash' do
48
+ p = HashParse.new
49
+ t = HashTransform.new
50
+
51
+ PRODS.each do |item|
52
+
53
+ s = item[:s]
54
+ h = t.apply(p.parse(s))
55
+ h.should eq(item[:h])
56
+
57
+ end
58
+
59
+ end
60
+ end
61
+
62
+
63
+ describe "String to Hash" do
64
+
65
+ it 'should Convert a string to corresponding hash' do
66
+
67
+ PRODS.each do |item|
68
+ s = item[:s]
69
+ h = s.to_h
70
+ h.should eq(item[:h])
71
+
72
+ puts "\"#{s}\".to_h => #{h}"
73
+
74
+ end
75
+
76
+ end
77
+ end
78
+
79
+
data/str2hash.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'str2hash/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+
8
+ spec.name = "str2hash"
9
+ spec.version = Str2Hash::VERSION
10
+ spec.authors = ["karl l"]
11
+ spec.email = ["karl@ninjacontrol.com"]
12
+ spec.date = '2013-03-29'
13
+ spec.summary = "Convert string to hash"
14
+ spec.description = "Tiny parser for converting strings to hashes (without using eval)."
15
+ spec.homepage = "https://github.com/karlll/str2hash/"
16
+ spec.license = "MIT"
17
+
18
+ spec.files = `git ls-files`.split($/)
19
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.3"
24
+ spec.add_development_dependency "rake"
25
+ spec.add_development_dependency "rspec"
26
+ spec.add_runtime_dependency "parslet"
27
+
28
+ end
29
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: str2hash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,16 +10,90 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
  date: 2013-03-29 00:00:00.000000000 Z
13
- dependencies: []
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: parslet
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
14
78
  description: Tiny parser for converting strings to hashes (without using eval).
15
- email: karl@ninjacontrol.com
79
+ email:
80
+ - karl@ninjacontrol.com
16
81
  executables: []
17
82
  extensions: []
18
83
  extra_rdoc_files: []
19
84
  files:
85
+ - .gitignore
86
+ - Gemfile
87
+ - LICENSE.txt
88
+ - README.md
89
+ - Rakefile
20
90
  - lib/str2hash.rb
91
+ - lib/str2hash/version.rb
92
+ - spec/str2hash_spec.rb
93
+ - str2hash.gemspec
21
94
  homepage: https://github.com/karlll/str2hash/
22
- licenses: []
95
+ licenses:
96
+ - MIT
23
97
  post_install_message:
24
98
  rdoc_options: []
25
99
  require_paths:
@@ -30,16 +104,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
30
104
  - - ! '>='
31
105
  - !ruby/object:Gem::Version
32
106
  version: '0'
107
+ segments:
108
+ - 0
109
+ hash: -2288426739317148869
33
110
  required_rubygems_version: !ruby/object:Gem::Requirement
34
111
  none: false
35
112
  requirements:
36
113
  - - ! '>='
37
114
  - !ruby/object:Gem::Version
38
115
  version: '0'
116
+ segments:
117
+ - 0
118
+ hash: -2288426739317148869
39
119
  requirements: []
40
120
  rubyforge_project:
41
121
  rubygems_version: 1.8.24
42
122
  signing_key:
43
123
  specification_version: 3
44
124
  summary: Convert string to hash
45
- test_files: []
125
+ test_files:
126
+ - spec/str2hash_spec.rb