params_tree 1.0.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: 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