params_tree 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 73636644f7d19662eaf5727ab9e3db500991dcc6
4
+ data.tar.gz: 5d08821692a38915848c2e6c0944d10ce2c91c91
5
+ SHA512:
6
+ metadata.gz: 08b7a69b78af23cff3c8c0d3b0ff9ea38083c7ccf8b5b32438df9fb95331885f4581490f055b92ed8749b55f8d2943aab1ea9db8b8ec39e07cb8830c3f999972
7
+ data.tar.gz: e8e2f4b5c235c61d1d00fa20b11d0b6e7d1232404f1f454c7bfe2200ec1f3d039e57d9afa251cf6fd9a07de354aaac99c59c08b8368ad39ec76f101a4dfbbc03
checksums.yaml.gz.sig ADDED
Binary file
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - 2.1.1
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in params_tree.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Vlad Bokov
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,61 @@
1
+ # ParamsTree
2
+
3
+ This is a little helper to turn strings like:
4
+
5
+ "default(id,user(group(division(name)),name)),post(id,title),comment(id,author,text(title,body))"
6
+
7
+ to:
8
+
9
+ {
10
+ "default" => {
11
+ "id" => {},
12
+ "user" => {
13
+ "group" => {
14
+ "division" => {
15
+ "name" => {}
16
+ },
17
+ "name" => {}
18
+ },
19
+ "post" => {
20
+ "id" => {},
21
+ "title" => {}
22
+ },
23
+ "comment" => {
24
+ "id" => {},
25
+ "author" => {},
26
+ "text" => {
27
+ "title" => {},
28
+ "body" => {}
29
+ }
30
+ }
31
+ }
32
+ }
33
+ }
34
+
35
+ Used for `rabl-filters`
36
+
37
+ ## Installation
38
+
39
+ Add this line to your application's Gemfile:
40
+
41
+ gem 'params_tree'
42
+
43
+ And then execute:
44
+
45
+ $ bundle
46
+
47
+ Or install it yourself as:
48
+
49
+ $ gem install params_tree
50
+
51
+ ## Usage
52
+
53
+ ParamsTree::Parser.parse(string) # => nested Hash or nil if non-parseable
54
+
55
+ ## Contributing
56
+
57
+ 1. Fork it ( https://github.com/razum2um/params_tree/fork )
58
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
59
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
60
+ 4. Push to the branch (`git push origin my-new-feature`)
61
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,28 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |test|
5
+ test.libs << "lib" << "test"
6
+ test.pattern = "test/*_test.rb"
7
+ end
8
+
9
+ desc "generates parser"
10
+ task :generate do
11
+ system("ragel -R #{File.expand_path('../lib/params_tree/parser.rl', __FILE__)} > #{File.expand_path('../lib/params_tree/parser.rb', __FILE__)}")
12
+ end
13
+
14
+ desc 'releases gem & updates docs'
15
+ task :publish do
16
+ require 'params_tree'
17
+ version = ParamsTree::VERSION
18
+
19
+ Bundler.with_clean_env do
20
+ system "git tag v#{version}"
21
+ system "gem build params_tree.gemspec"
22
+ system "git push --tags"
23
+ system "gem push params_tree-#{version}.gem"
24
+ end
25
+ end
26
+
27
+ task :default => :test
28
+
@@ -0,0 +1,21 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBBMRMwEQYDVQQDDApib2tv
3
+ di52bGFkMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZFgNj
4
+ b20wHhcNMTQwNTIwMjAyOTAyWhcNMTUwNTIwMjAyOTAyWjBBMRMwEQYDVQQDDApi
5
+ b2tvdi52bGFkMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZ
6
+ FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCibrb/aiZX3kWo
7
+ Fmzo3gvGBFS9N18Q5rp9UTJRc4KxZQOay2WcgLjy1oU61r2Urjz3VDT4sg/yw3N3
8
+ YXIPqSTRl+OPIaafe45TVpF4mtMSsc1Gm/O3Sfoz6URiMd9iDtc2sTpaMgatL4pV
9
+ EExER9emjrmElRFknJD65E3gVDX7KXvrZYYAScJR33DADIGUgpuyHm29S7G/4WAy
10
+ ol6XfmPx+x5rM49QytGSNCQDYQ3SMMCo9wKkEm3Zcx0O4qhO8INevl/mvkAWLhOA
11
+ +0qldtuUx9wbBQ0D0wVR8LTafqWrIUHQjWXqrhWBqXhYeR3jj5aehBhpPFclHuKU
12
+ 5GeILZrFAgMBAAGjezB5MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
13
+ BBSiidH2CEJmkza+NBBJNLcnzQX57TAfBgNVHREEGDAWgRRib2tvdi52bGFkQGdt
14
+ YWlsLmNvbTAfBgNVHRIEGDAWgRRib2tvdi52bGFkQGdtYWlsLmNvbTANBgkqhkiG
15
+ 9w0BAQUFAAOCAQEAVEyF63kQT9HKm3YIw1WzLvuOMvEUThzBomMMsTp9CGXWvem6
16
+ wZdMhxykwk1lga0OwsCn+wr1tWZ/cNeWqGSY00vTfLWdriK60xuRW7zT1Z5tmxbD
17
+ dq2ULdhII/qCFQlzDB/+IptO1rJLzfxTckoArmeYtkBV6LaVd7wpaRZnw0Apm93e
18
+ ph03YddPDbB34xTivvu4d6BBbKGxj/YN+1NLD9rMi6FspgcA4P1UlmKqyCluTbZj
19
+ vzKbYclpJ7gENr/xiTjGqA/Md3zJMzmsFrzUXt4RVmo5SaCyZjC6gFfhSr+PODc7
20
+ ZaSbckvH/+m4boAsg0JkGGFcS3j5fgNmdwgA1A==
21
+ -----END CERTIFICATE-----
@@ -0,0 +1,340 @@
1
+
2
+ # line 1 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rl"
3
+
4
+ # line 22 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rl"
5
+
6
+
7
+ module ParamsTree
8
+ class Parser
9
+ attr_accessor :data
10
+
11
+ def initialize
12
+
13
+ # line 14 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rb"
14
+ class << self
15
+ attr_accessor :_params_tree_actions
16
+ private :_params_tree_actions, :_params_tree_actions=
17
+ end
18
+ self._params_tree_actions = [
19
+ 0, 2, 1, 7, 2, 1, 8, 3,
20
+ 0, 1, 7, 3, 0, 1, 8, 5,
21
+ 0, 1, 5, 2, 9, 6, 0, 1,
22
+ 5, 2, 4, 10, 6, 0, 1, 6,
23
+ 2, 3, 11
24
+ ]
25
+
26
+ class << self
27
+ attr_accessor :_params_tree_key_offsets
28
+ private :_params_tree_key_offsets, :_params_tree_key_offsets=
29
+ end
30
+ self._params_tree_key_offsets = [
31
+ 0, 0, 3, 6
32
+ ]
33
+
34
+ class << self
35
+ attr_accessor :_params_tree_trans_keys
36
+ private :_params_tree_trans_keys, :_params_tree_trans_keys=
37
+ end
38
+ self._params_tree_trans_keys = [
39
+ 40, 41, 44, 44, 40, 41, 40, 41,
40
+ 44, 0
41
+ ]
42
+
43
+ class << self
44
+ attr_accessor :_params_tree_single_lengths
45
+ private :_params_tree_single_lengths, :_params_tree_single_lengths=
46
+ end
47
+ self._params_tree_single_lengths = [
48
+ 0, 3, 1, 3
49
+ ]
50
+
51
+ class << self
52
+ attr_accessor :_params_tree_range_lengths
53
+ private :_params_tree_range_lengths, :_params_tree_range_lengths=
54
+ end
55
+ self._params_tree_range_lengths = [
56
+ 0, 0, 1, 0
57
+ ]
58
+
59
+ class << self
60
+ attr_accessor :_params_tree_index_offsets
61
+ private :_params_tree_index_offsets, :_params_tree_index_offsets=
62
+ end
63
+ self._params_tree_index_offsets = [
64
+ 0, 0, 4, 7
65
+ ]
66
+
67
+ class << self
68
+ attr_accessor :_params_tree_trans_targs
69
+ private :_params_tree_trans_targs, :_params_tree_trans_targs=
70
+ end
71
+ self._params_tree_trans_targs = [
72
+ 2, 3, 2, 1, 0, 0, 1, 0,
73
+ 3, 2, 1, 0
74
+ ]
75
+
76
+ class << self
77
+ attr_accessor :_params_tree_trans_actions
78
+ private :_params_tree_trans_actions, :_params_tree_trans_actions=
79
+ end
80
+ self._params_tree_trans_actions = [
81
+ 28, 7, 15, 4, 0, 0, 11, 0,
82
+ 1, 21, 11, 0
83
+ ]
84
+
85
+ class << self
86
+ attr_accessor :params_tree_start
87
+ end
88
+ self.params_tree_start = 2;
89
+ class << self
90
+ attr_accessor :params_tree_first_final
91
+ end
92
+ self.params_tree_first_final = 2;
93
+ class << self
94
+ attr_accessor :params_tree_error
95
+ end
96
+ self.params_tree_error = 0;
97
+
98
+ class << self
99
+ attr_accessor :params_tree_en_main
100
+ end
101
+ self.params_tree_en_main = 2;
102
+
103
+
104
+ # line 30 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rl"
105
+ end
106
+
107
+ def parse(input)
108
+ @data = input.gsub(/[^a-zA-Z,\(\)]/, '').unpack('c*')
109
+ stack = []
110
+
111
+ @log = []
112
+ @hash = {}
113
+ @hash_stack = []
114
+ @key = nil
115
+
116
+
117
+ # line 118 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rb"
118
+ begin
119
+ p ||= 0
120
+ pe ||= data.length
121
+ cs = params_tree_start
122
+ top = 0
123
+ end
124
+
125
+ # line 42 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rl"
126
+
127
+ # line 128 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rb"
128
+ begin
129
+ _klen, _trans, _keys, _acts, _nacts = nil
130
+ _goto_level = 0
131
+ _resume = 10
132
+ _eof_trans = 15
133
+ _again = 20
134
+ _test_eof = 30
135
+ _out = 40
136
+ while true
137
+ _trigger_goto = false
138
+ if _goto_level <= 0
139
+ if p == pe
140
+ _goto_level = _test_eof
141
+ next
142
+ end
143
+ if cs == 0
144
+ _goto_level = _out
145
+ next
146
+ end
147
+ end
148
+ if _goto_level <= _resume
149
+ _keys = _params_tree_key_offsets[cs]
150
+ _trans = _params_tree_index_offsets[cs]
151
+ _klen = _params_tree_single_lengths[cs]
152
+ _break_match = false
153
+
154
+ begin
155
+ if _klen > 0
156
+ _lower = _keys
157
+ _upper = _keys + _klen - 1
158
+
159
+ loop do
160
+ break if _upper < _lower
161
+ _mid = _lower + ( (_upper - _lower) >> 1 )
162
+
163
+ if data[p].ord < _params_tree_trans_keys[_mid]
164
+ _upper = _mid - 1
165
+ elsif data[p].ord > _params_tree_trans_keys[_mid]
166
+ _lower = _mid + 1
167
+ else
168
+ _trans += (_mid - _keys)
169
+ _break_match = true
170
+ break
171
+ end
172
+ end # loop
173
+ break if _break_match
174
+ _keys += _klen
175
+ _trans += _klen
176
+ end
177
+ _klen = _params_tree_range_lengths[cs]
178
+ if _klen > 0
179
+ _lower = _keys
180
+ _upper = _keys + (_klen << 1) - 2
181
+ loop do
182
+ break if _upper < _lower
183
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1)
184
+ if data[p].ord < _params_tree_trans_keys[_mid]
185
+ _upper = _mid - 2
186
+ elsif data[p].ord > _params_tree_trans_keys[_mid+1]
187
+ _lower = _mid + 2
188
+ else
189
+ _trans += ((_mid - _keys) >> 1)
190
+ _break_match = true
191
+ break
192
+ end
193
+ end # loop
194
+ break if _break_match
195
+ _trans += _klen
196
+ end
197
+ end while false
198
+ cs = _params_tree_trans_targs[_trans]
199
+ if _params_tree_trans_actions[_trans] != 0
200
+ _acts = _params_tree_trans_actions[_trans]
201
+ _nacts = _params_tree_actions[_acts]
202
+ _acts += 1
203
+ while _nacts > 0
204
+ _nacts -= 1
205
+ _acts += 1
206
+ case _params_tree_actions[_acts - 1]
207
+ when 0 then
208
+ # line 3 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rl"
209
+ begin
210
+ @head = p end
211
+ when 1 then
212
+ # line 4 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rl"
213
+ begin
214
+ @tail = p end
215
+ when 2 then
216
+ # line 5 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rl"
217
+ begin
218
+ inject_key end
219
+ when 3 then
220
+ # line 6 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rl"
221
+ begin
222
+ push end
223
+ when 4 then
224
+ # line 7 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rl"
225
+ begin
226
+ pop end
227
+ when 5 then
228
+ # line 9 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rl"
229
+ begin
230
+ log(:delimiter) end
231
+ when 6 then
232
+ # line 10 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rl"
233
+ begin
234
+ log(:level) end
235
+ when 7 then
236
+ # line 11 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rl"
237
+ begin
238
+ log(:end_level); end
239
+ when 8 then
240
+ # line 12 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rl"
241
+ begin
242
+ log(:input); memo_key; end
243
+ when 9 then
244
+ # line 17 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rl"
245
+ begin
246
+ cs = 2; end
247
+ when 10 then
248
+ # line 18 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rl"
249
+ begin
250
+ begin
251
+ top -= 1
252
+ cs = stack[top]
253
+ _trigger_goto = true
254
+ _goto_level = _again
255
+ break
256
+ end
257
+ end
258
+ when 11 then
259
+ # line 19 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rl"
260
+ begin
261
+ begin
262
+ stack[top] = cs
263
+ top+= 1
264
+ cs = 2
265
+ _trigger_goto = true
266
+ _goto_level = _again
267
+ break
268
+ end
269
+ end
270
+ # line 271 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rb"
271
+ end # action switch
272
+ end
273
+ end
274
+ if _trigger_goto
275
+ next
276
+ end
277
+ end
278
+ if _goto_level <= _again
279
+ if cs == 0
280
+ _goto_level = _out
281
+ next
282
+ end
283
+ p += 1
284
+ if p != pe
285
+ _goto_level = _resume
286
+ next
287
+ end
288
+ end
289
+ if _goto_level <= _test_eof
290
+ end
291
+ if _goto_level <= _out
292
+ break
293
+ end
294
+ end
295
+ end
296
+
297
+ # line 43 "/Users/razum2um/Code/params_tree/lib/params_tree/parser.rl"
298
+
299
+ inject_key # FIXME
300
+
301
+ @hash_stack.first || @hash
302
+ end
303
+
304
+ def chars
305
+ @data[@head..@tail]
306
+ end
307
+
308
+ def strokes
309
+ chars.pack('c*')
310
+ end
311
+
312
+ def log(token)
313
+ @log << { token => strokes }
314
+ end
315
+
316
+ def memo_key
317
+ @key = chars
318
+ end
319
+
320
+ def key
321
+ @key.pack('c*')
322
+ end
323
+
324
+ def inject_key
325
+ @hash[key] = {}
326
+ end
327
+
328
+ def push
329
+ @hash_stack.push @hash; @hash = @hash[key]
330
+ end
331
+
332
+ def pop
333
+ @hash = @hash_stack.pop
334
+ end
335
+
336
+ def self.parse(string)
337
+ self.new.parse(string)
338
+ end
339
+ end
340
+ end
@@ -0,0 +1,85 @@
1
+ %%{
2
+ machine params_tree;
3
+ action H { @head = p }
4
+ action T { @tail = p }
5
+ action inject_key { inject_key }
6
+ action push { push }
7
+ action pop { pop }
8
+
9
+ DELIMITER = ',' >H@T @{ log(:delimiter) };
10
+ LEVEL = '(' >H@T @{ log(:level) };
11
+ END_LEVEL = ')'+ >H@T @{ log(:end_level); };
12
+ INPUT = (any - LEVEL - END_LEVEL - DELIMITER)+ >H@T @{ log(:input); memo_key; };
13
+
14
+ main := (
15
+ INPUT
16
+ (
17
+ DELIMITER @inject_key @{ fnext main; } |
18
+ END_LEVEL DELIMITER? @inject_key @pop @{ fret; } |
19
+ LEVEL @inject_key @push @{ fcall main; }
20
+ )
21
+ )*;
22
+ }%%
23
+
24
+ module ParamsTree
25
+ class Parser
26
+ attr_accessor :data
27
+
28
+ def initialize
29
+ %% write data;
30
+ end
31
+
32
+ def parse(input)
33
+ @data = input.gsub(/[^a-zA-Z,\(\)]/, '').unpack('c*')
34
+ stack = []
35
+
36
+ @log = []
37
+ @hash = {}
38
+ @hash_stack = []
39
+ @key = nil
40
+
41
+ %% write init;
42
+ %% write exec;
43
+
44
+ inject_key # FIXME
45
+
46
+ @hash_stack.first || @hash
47
+ end
48
+
49
+ def chars
50
+ @data[@head..@tail]
51
+ end
52
+
53
+ def strokes
54
+ chars.pack('c*')
55
+ end
56
+
57
+ def log(token)
58
+ @log << { token => strokes }
59
+ end
60
+
61
+ def memo_key
62
+ @key = chars
63
+ end
64
+
65
+ def key
66
+ @key.pack('c*')
67
+ end
68
+
69
+ def inject_key
70
+ @hash[key] = {}
71
+ end
72
+
73
+ def push
74
+ @hash_stack.push @hash; @hash = @hash[key]
75
+ end
76
+
77
+ def pop
78
+ @hash = @hash_stack.pop
79
+ end
80
+
81
+ def self.parse(string)
82
+ self.new.parse(string)
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,3 @@
1
+ module ParamsTree
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,6 @@
1
+ require "params_tree/version"
2
+ require "params_tree/parser"
3
+
4
+ module ParamsTree
5
+ # Your code goes here...
6
+ end
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'params_tree/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "params_tree"
8
+ spec.version = ParamsTree::VERSION
9
+ spec.authors = ["Vlad Bokov"]
10
+ spec.email = ["bokov.vlad@gmail.com"]
11
+ spec.cert_chain = ['certs/razum2um.pem']
12
+ spec.signing_key = File.expand_path("~/.ssh/gem-private_key.pem") if $0 =~ /gem\z/
13
+ spec.summary = %q{Cute helper for rabl-filters}
14
+ spec.description = %q{Turns listed tree to nested hash}
15
+ spec.homepage = "https://github.com/razum2um/params_tree"
16
+ spec.license = "MIT"
17
+
18
+ spec.files = `git ls-files -z`.split("\x0")
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 "minitest", "~> 0"
25
+ spec.add_development_dependency "rake", "~> 0"
26
+ end
@@ -0,0 +1,53 @@
1
+ $LOAD_PATH.unshift(File.expand_path("../../lib", __FILE__))
2
+ require "params_tree"
3
+ require "minitest/autorun"
4
+
5
+ class ParserTest < Minitest::Test
6
+ def _(string)
7
+ ParamsTree::Parser.parse string
8
+ end
9
+
10
+ def test_simple
11
+ assert_equal _("default"), { "default" => {} }
12
+ end
13
+
14
+ def test_multiple_simple
15
+ assert_equal _("default, some"), { "default" => {}, "some" => {} }
16
+ end
17
+
18
+ def test_nested_simple
19
+ assert_equal _("default(user), some"), { "default" => { 'user' => {} }, "some" => {} }
20
+ end
21
+
22
+ def test_double_nested_simple
23
+ assert_equal _("default(user(id)), some"), { "default" => { 'user' => { 'id' => {} }, "some" => {} } }
24
+ end
25
+
26
+ def test_complicated
27
+ assert_equal _("default(id,user(group(division(name)),name)),post(id,title),comment(id,author,text(title,body))"), {
28
+ "default" => {
29
+ "id" => {},
30
+ "user" => {
31
+ "group" => {
32
+ "division" => {
33
+ "name" => {}
34
+ },
35
+ "name" => {}
36
+ },
37
+ "post" => {
38
+ "id" => {},
39
+ "title" => {}
40
+ },
41
+ "comment" => {
42
+ "id" => {},
43
+ "author" => {},
44
+ "text" => {
45
+ "title" => {},
46
+ "body" => {}
47
+ }
48
+ }
49
+ }
50
+ }
51
+ }
52
+ end
53
+ end
data.tar.gz.sig ADDED
Binary file
metadata ADDED
@@ -0,0 +1,123 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: params_tree
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Vlad Bokov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBBMRMwEQYDVQQDDApib2tv
14
+ di52bGFkMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZFgNj
15
+ b20wHhcNMTQwNTIwMjAyOTAyWhcNMTUwNTIwMjAyOTAyWjBBMRMwEQYDVQQDDApi
16
+ b2tvdi52bGFkMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZ
17
+ FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCibrb/aiZX3kWo
18
+ Fmzo3gvGBFS9N18Q5rp9UTJRc4KxZQOay2WcgLjy1oU61r2Urjz3VDT4sg/yw3N3
19
+ YXIPqSTRl+OPIaafe45TVpF4mtMSsc1Gm/O3Sfoz6URiMd9iDtc2sTpaMgatL4pV
20
+ EExER9emjrmElRFknJD65E3gVDX7KXvrZYYAScJR33DADIGUgpuyHm29S7G/4WAy
21
+ ol6XfmPx+x5rM49QytGSNCQDYQ3SMMCo9wKkEm3Zcx0O4qhO8INevl/mvkAWLhOA
22
+ +0qldtuUx9wbBQ0D0wVR8LTafqWrIUHQjWXqrhWBqXhYeR3jj5aehBhpPFclHuKU
23
+ 5GeILZrFAgMBAAGjezB5MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
24
+ BBSiidH2CEJmkza+NBBJNLcnzQX57TAfBgNVHREEGDAWgRRib2tvdi52bGFkQGdt
25
+ YWlsLmNvbTAfBgNVHRIEGDAWgRRib2tvdi52bGFkQGdtYWlsLmNvbTANBgkqhkiG
26
+ 9w0BAQUFAAOCAQEAVEyF63kQT9HKm3YIw1WzLvuOMvEUThzBomMMsTp9CGXWvem6
27
+ wZdMhxykwk1lga0OwsCn+wr1tWZ/cNeWqGSY00vTfLWdriK60xuRW7zT1Z5tmxbD
28
+ dq2ULdhII/qCFQlzDB/+IptO1rJLzfxTckoArmeYtkBV6LaVd7wpaRZnw0Apm93e
29
+ ph03YddPDbB34xTivvu4d6BBbKGxj/YN+1NLD9rMi6FspgcA4P1UlmKqyCluTbZj
30
+ vzKbYclpJ7gENr/xiTjGqA/Md3zJMzmsFrzUXt4RVmo5SaCyZjC6gFfhSr+PODc7
31
+ ZaSbckvH/+m4boAsg0JkGGFcS3j5fgNmdwgA1A==
32
+ -----END CERTIFICATE-----
33
+ date: 2014-05-20 00:00:00.000000000 Z
34
+ dependencies:
35
+ - !ruby/object:Gem::Dependency
36
+ name: bundler
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1.3'
42
+ type: :development
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '1.3'
49
+ - !ruby/object:Gem::Dependency
50
+ name: minitest
51
+ requirement: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: rake
65
+ requirement: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ description: Turns listed tree to nested hash
78
+ email:
79
+ - bokov.vlad@gmail.com
80
+ executables: []
81
+ extensions: []
82
+ extra_rdoc_files: []
83
+ files:
84
+ - ".gitignore"
85
+ - ".travis.yml"
86
+ - Gemfile
87
+ - LICENSE.txt
88
+ - README.md
89
+ - Rakefile
90
+ - certs/razum2um.pem
91
+ - lib/params_tree.rb
92
+ - lib/params_tree/parser.rb
93
+ - lib/params_tree/parser.rl
94
+ - lib/params_tree/version.rb
95
+ - params_tree.gemspec
96
+ - test/parser_test.rb
97
+ homepage: https://github.com/razum2um/params_tree
98
+ licenses:
99
+ - MIT
100
+ metadata: {}
101
+ post_install_message:
102
+ rdoc_options: []
103
+ require_paths:
104
+ - lib
105
+ required_ruby_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ requirements: []
116
+ rubyforge_project:
117
+ rubygems_version: 2.2.2
118
+ signing_key:
119
+ specification_version: 4
120
+ summary: Cute helper for rabl-filters
121
+ test_files:
122
+ - test/parser_test.rb
123
+ has_rdoc:
metadata.gz.sig ADDED
Binary file