jcrvalidator 0.5.1 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/jcr/jcr.rb +48 -31
  3. data/lib/jcr/parser.rb +8 -8
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9a8868c03c216591e509ab1aee8c4f3d33e7acae
4
- data.tar.gz: 262f39627844782d4f6703c2767994272b88b89a
3
+ metadata.gz: c03cef697d981d7516ddc5548984448214d5f02b
4
+ data.tar.gz: d7d7e596fb44a8e24f88083574269ca13d63fd1b
5
5
  SHA512:
6
- metadata.gz: f4cd4e37bcfc7428a4ae1908ecd7a9532380b36a293c29a738f73adbdc1332c8305be556c89ef223f4471b9a8536a6a97947b8129ce3f8acede8a47ac542dbf8
7
- data.tar.gz: 3c9e90cef2dd39e472477f55d32730b5252215fba202abb0889cb1e99a243168be6c774cb1b62b474ed894b2abed9c6dbee8e0165d491c86dc493c29d463e1d4
6
+ metadata.gz: 88a219991b6d3cedacce229a592c530740d7e294898cea4d23ff021c25f4d0c512e87a2335a24b1f2b51b7a1ec5df979449dedced2469be6ade2140a447bd959
7
+ data.tar.gz: 8bcfc4268548f89d2a3d84cd261c4bf1d1264cb897e4f3096b5a417dfc2067b6182c32d36b1653aaeef16ee7bbdee7f9def6c76cdbb0448a0ba4f6a0cb98b1ff
data/lib/jcr/jcr.rb CHANGED
@@ -94,6 +94,7 @@ module JCR
94
94
  tree = JCR.parse( ruleset )
95
95
  mapping = JCR.map_rule_names( tree, override, ruleset_alias )
96
96
  JCR.check_rule_target_names( tree, mapping )
97
+ JCR.check_groups( tree, mapping )
97
98
  roots = JCR.find_roots( tree )
98
99
  ctx = Context.new
99
100
  ctx.tree = tree
@@ -120,6 +121,7 @@ module JCR
120
121
 
121
122
  retval = nil
122
123
  root_rules.each do |r|
124
+ raise "Root rules cannot be member rules" if r[:member_rule]
123
125
  retval = JCR.evaluate_rule( r, r, data, EvalConditions.new( ctx.mapping, ctx.callbacks ) )
124
126
  break if retval.success
125
127
  end
@@ -127,7 +129,9 @@ module JCR
127
129
  return retval
128
130
  end
129
131
 
130
- def self.main
132
+ def self.main my_argv=nil
133
+
134
+ my_argv = ARGV unless my_argv
131
135
 
132
136
  options = {}
133
137
 
@@ -136,6 +140,7 @@ module JCR
136
140
  opt.separator ""
137
141
  opt.separator "Evaluates JSON against JSON Content Rules (JCR)."
138
142
  opt.separator ""
143
+ opt.separator "If -J is not specified, JSON_FILES is used."
139
144
  opt.separator "If JSON_FILES is not specified, standard input (STDIN) is used."
140
145
  opt.separator ""
141
146
  opt.separator "Use -v to see results, otherwise check the exit code."
@@ -158,7 +163,7 @@ module JCR
158
163
  options[:ruleset] = ruleset
159
164
  end
160
165
 
161
- opt.on("-s STRING","name of root rule. All roots will be tried if none is specified") do |root_name|
166
+ opt.on("-S STRING","name of root rule. All roots will be tried if none is specified") do |root_name|
162
167
  if options[:root_name]
163
168
  puts "A root has already been specified. Use -h for help.", ""
164
169
  return 2
@@ -180,6 +185,14 @@ module JCR
180
185
  options[:overrides] << rule
181
186
  end
182
187
 
188
+ opt.on("-J STRING","string containing JSON to evaluate. Should probably be quoted") do |json|
189
+ if options[:json]
190
+ puts "JSON has already been specified. Use -h for help.", ""
191
+ return 2
192
+ end
193
+ options[:json] = json
194
+ end
195
+
183
196
  opt.on("-v","verbose") do |verbose|
184
197
  options[:verbose] = true
185
198
  end
@@ -189,7 +202,7 @@ module JCR
189
202
  end
190
203
  end
191
204
 
192
- opt_parser.parse!
205
+ opt_parser.parse! my_argv
193
206
 
194
207
  if options[:help]
195
208
  puts "HELP","----",""
@@ -208,43 +221,47 @@ module JCR
208
221
  end
209
222
  end
210
223
 
211
- if $stdin.tty?
212
- ec = 2
213
- ARGV.each do |fn|
214
- data = JSON.parse( File.open( fn ).read )
215
- e = ctx.evaluate( data, options[:root_name] )
216
- if e.success
217
- if options[:verbose]
218
- puts "Success!"
219
- end
220
- ec = 0
221
- else
222
- if options[:verbose]
223
- puts "Failure: #{e.reason}"
224
- end
225
- ec = 1
224
+ if options[:json]
225
+ data = JSON.parse( options[:json] )
226
+ ec = cli_eval( ctx, data, options[:root_name], options[:verbose] )
227
+ return ec
228
+ elsif $stdin.tty?
229
+ ec = 0
230
+ if my_argv.empty?
231
+ ec = 2
232
+ else
233
+ my_argv.each do |fn|
234
+ data = JSON.parse( File.open( fn ).read )
235
+ tec = cli_eval( ctx, data, options[:root_name], options[:verbose] )
236
+ ec = tec if tec != 0 #record error but don't let non-error overwrite error
226
237
  end
227
238
  end
228
239
  return ec
229
240
  else
230
241
  data = JSON.parse( ARGF.read )
231
- e = ctx.evaluate( data, options[:root_name] )
232
- if e.success
233
- if options[:verbose]
234
- puts "Success!"
235
- end
236
- return 0
237
- else
238
- if options[:verbose]
239
- puts "Failure: #{e.reason}"
240
- end
241
- return 1
242
- end
243
-
242
+ ec = cli_eval( ctx, data, options[:root_name], options[:verbose] )
243
+ return ec
244
244
  end
245
245
 
246
246
  end
247
247
 
248
248
  end
249
249
 
250
+ def self.cli_eval ctx, data, root_name, verbose
251
+ ec = 2
252
+ e = ctx.evaluate( data, root_name )
253
+ if e.success
254
+ if verbose
255
+ puts "Success!"
256
+ end
257
+ ec = 0
258
+ else
259
+ if verbose
260
+ puts "Failure: #{e.reason}"
261
+ end
262
+ ec = 1
263
+ end
264
+ return ec
265
+ end
266
+
250
267
  end
data/lib/jcr/parser.rb CHANGED
@@ -43,15 +43,15 @@ module JCR
43
43
  #!
44
44
 
45
45
  rule(:directive) { ( str('#') >> spaces? >> directive_def >> match('[\r\n]') ).as(:directive) }
46
- #! directive = "#" spaces? directive_def eol
46
+ #! directive = "#" spaces? directive_def *WSP eol
47
47
  rule(:directive_def) { jcr_version_d | ruleset_id_d | import_d | tbd_directive_d }
48
48
  #! directive_def = jcr_version_d / ruleset_id_d / import_d /
49
49
  #! tbd_directive_d
50
- rule(:jcr_version_d) { (str('jcr-version') >> spaces >> integer.as(:major_version) >> str('.') >> integer.as(:minor_version)).as(:jcr_version_d) }
50
+ rule(:jcr_version_d) { (str('jcr-version') >> spaces >> p_integer.as(:major_version) >> str('.') >> p_integer.as(:minor_version)).as(:jcr_version_d) }
51
51
  #! jcr_version_d = jcr-version-kw spaces major_version "." minor_version
52
52
  #> jcr-version-kw = "jcr-version"
53
- #! major_version = integer
54
- #! minor_version = integer
53
+ #! major_version = p_integer
54
+ #! minor_version = p_integer
55
55
  rule(:ruleset_id_d) { (str('ruleset-id') >> spaces >> ruleset_id.as(:ruleset_id)).as(:ruleset_id_d) }
56
56
  #! ruleset_id_d = ruleset-id-kw spaces ruleset_id
57
57
  #> ruleset-id-kw = "ruleset-id"
@@ -68,13 +68,13 @@ module JCR
68
68
  rule(:tbd_directive_d) { name.as(:directive_name) >> ( spaces >> match('[^\r\n]').repeat.as(:directive_parameters) ).maybe }
69
69
  #! tbd_directive_d = directive_name [ spaces directive_parameters ]
70
70
  #! directive_name = name
71
- #! directive_parameters = not_eol
71
+ #! directive_parameters = *not_eol
72
72
  #! not_eol = HTAB / %x20-10FFFF
73
73
  #! eol = CR / LF
74
74
  #!
75
75
 
76
- rule(:root_rule) { value_rule | member_rule | group_rule } # N.B. Not target_rule_name
77
- #! root_rule = value_rule / member_rule / group_rule
76
+ rule(:root_rule) { value_rule | group_rule } # N.B. Not target_rule_name
77
+ #! root_rule = value_rule / group_rule
78
78
  #!
79
79
 
80
80
  rule(:rule) { ( rule_name >> spcCmnt? >> rule_def ).as(:rule) }
@@ -355,7 +355,7 @@ module JCR
355
355
  #!
356
356
 
357
357
  rule(:uri_template) { ( match('[a-zA-Z{}]').repeat(1) >> str(':') >> match('[\S]').repeat(1) ).as(:uri_template) }
358
- #! uri_template = 1*ALPHA ":" not-space
358
+ #! uri_template = 1*ALPHA ":" 1*not-space
359
359
 
360
360
  end
361
361
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jcrvalidator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Newton
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-12-31 00:00:00.000000000 Z
12
+ date: 2016-02-04 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A JSON Content Rules (JCR) Validator library and command line utility.
15
15
  email: andy@arin.net