rubyang 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/lib/rubyang/xpath.rb CHANGED
@@ -1,12 +1,220 @@
1
1
  # coding utf-8
2
2
 
3
3
  require_relative 'xpath/parser'
4
+ require_relative 'database/data_tree'
4
5
 
5
6
  module Rubyang
6
7
  module Xpath
7
- class LocationSteps < Array
8
- def initialize *location_steps
9
- self.push *location_steps
8
+ module BasicType
9
+ class NodeSet
10
+ include Enumerable
11
+
12
+ attr_reader :value
13
+ def initialize value=[]
14
+ raise "#{self.class} argument must be Array but #{value.class}" unless Array === value
15
+ value.each{ |v|
16
+ unless Rubyang::Database::DataTree::Node === v
17
+ raise "#{self.class} argument must be Rubyang::Database::DataTree::Node but #{v.class}"
18
+ end
19
+ }
20
+ @value = value
21
+ end
22
+
23
+ def each
24
+ @value.each do |v|
25
+ yield v
26
+ end
27
+ end
28
+
29
+ def to_boolean
30
+ value = if @value == [] then false else true end
31
+ Boolean.new value
32
+ end
33
+
34
+ def == right
35
+ @value.each{ |v|
36
+ unless Rubyang::Database::DataTree::Leaf === v
37
+ raise "#{self.class} argument must be Rubyang::Database::DataTree::Leaf but #{v.class}"
38
+ end
39
+ }
40
+ case right
41
+ when NodeSet
42
+ right.value.each{ |v|
43
+ unless Rubyang::Database::DataTree::Leaf === v
44
+ raise "#{right.class} argument must be Rubyang::Database::DataTree::Leaf but #{v.class}"
45
+ end
46
+ }
47
+ value = if (@value.map{ |v| v.value } & right.value.map{ |v| v.value }).size > 0 then true else false end
48
+ Boolean.new value
49
+ when Boolean
50
+ value = if @value.size > 0
51
+ if right.value then true else false end
52
+ else
53
+ if right.value then false else true end
54
+ end
55
+ Boolean.new value
56
+ when Number
57
+ value = @value.any?{ |v| Float(v.value) == right.value rescue false }
58
+ Boolean.new value
59
+ when String
60
+ value = @value.any?{ |v| v.value == right.value }
61
+ Boolean.new value
62
+ end
63
+ end
64
+
65
+ def != right
66
+ value = ! (self == right).value
67
+ Boolean.new value
68
+ end
69
+ end
70
+
71
+ class Boolean
72
+ attr_reader :value
73
+ def initialize value
74
+ raise "#{self.class} argument must be true or false but #{value.class}" unless [true, false].include?( value )
75
+ @value = value
76
+ end
77
+
78
+ def to_boolean
79
+ self
80
+ end
81
+
82
+ def and right
83
+ value = (@value and right.to_boolean.value)
84
+ Boolean.new value
85
+ end
86
+
87
+ def or right
88
+ value = (@value or right.to_boolean.value)
89
+ Boolean.new value
90
+ end
91
+ end
92
+
93
+ class Number
94
+ attr_reader :value
95
+ def initialize value
96
+ @value = Float(value)
97
+ end
98
+
99
+ def to_boolean
100
+ value = if @value == Float(0) then false else true end
101
+ Boolean.new value
102
+ end
103
+
104
+ def -@
105
+ value = (- @value)
106
+ Number.new value
107
+ end
108
+
109
+ def + right
110
+ case right
111
+ when Number
112
+ value = (@value + right.value)
113
+ Number.new value
114
+ else
115
+ raise
116
+ end
117
+ end
118
+
119
+ def - right
120
+ case right
121
+ when Number
122
+ value = (@value - right.value)
123
+ Number.new value
124
+ else
125
+ raise
126
+ end
127
+ end
128
+
129
+ def * right
130
+ case right
131
+ when Number
132
+ value = (@value * right.value)
133
+ Number.new value
134
+ else
135
+ raise
136
+ end
137
+ end
138
+
139
+ def / right
140
+ case right
141
+ when Number
142
+ value = (@value / right.value)
143
+ Number.new value
144
+ else
145
+ raise
146
+ end
147
+ end
148
+
149
+ def == right
150
+ case right
151
+ when Number
152
+ value = (@value == right.value)
153
+ Boolean.new value
154
+ else
155
+ raise
156
+ end
157
+ end
158
+
159
+ def != right
160
+ case right
161
+ when Number
162
+ value = (@value != right.value)
163
+ Boolean.new value
164
+ else
165
+ raise
166
+ end
167
+ end
168
+ end
169
+
170
+ class String
171
+ attr_reader :value
172
+ def initialize value
173
+ @value = value
174
+ end
175
+
176
+ def to_boolean
177
+ value = if @value == '' then false else true end
178
+ Boolean.new value
179
+ end
180
+
181
+ def == right
182
+ case right
183
+ when String
184
+ value = (@value == right.value)
185
+ Boolean.new value
186
+ else
187
+ raise
188
+ end
189
+ end
190
+
191
+ def != right
192
+ case right
193
+ when String
194
+ value = (@value != right.value)
195
+ Boolean.new value
196
+ else
197
+ raise
198
+ end
199
+ end
200
+ end
201
+ end
202
+
203
+ class Expr
204
+ attr_reader :op
205
+ def initialize op
206
+ @op = op
207
+ end
208
+ end
209
+
210
+ class LocationPath
211
+ attr_reader :location_step_sequence
212
+ def initialize *location_step_sequence
213
+ @location_step_sequence = location_step_sequence
214
+ end
215
+ def add *location_step_sequence
216
+ @location_step_sequence.push *location_step_sequence
217
+ self
10
218
  end
11
219
  end
12
220
 
@@ -86,139 +294,168 @@ module Rubyang
86
294
  end
87
295
 
88
296
  class Predicate
89
- class Expr
297
+ attr_reader :expr
298
+ def initialize expr
299
+ @expr = expr
90
300
  end
301
+ end
91
302
 
92
- class OrExpr < Expr
93
- attr_reader :op1, :op2
94
- def initialize op1, op2=nil
95
- @op1 = op1
96
- @op2 = op2
97
- end
303
+ class OrExpr
304
+ attr_reader :op1, :op2
305
+ def initialize op1, op2=nil
306
+ @op1 = op1
307
+ @op2 = op2
98
308
  end
309
+ end
99
310
 
100
- class AndExpr < Expr
101
- attr_reader :op1, :op2
102
- def initialize op1, op2=nil
103
- @op1 = op1
104
- @op2 = op2
105
- end
311
+ class AndExpr
312
+ attr_reader :op1, :op2
313
+ def initialize op1, op2=nil
314
+ @op1 = op1
315
+ @op2 = op2
106
316
  end
317
+ end
107
318
 
108
- class EqualityExpr < Expr
109
- attr_reader :op1, :operator, :op2
110
- def initialize op1, operator=nil, op2=nil
111
- @op1 = op1
112
- @operator = operator
113
- @op2 = op2
114
- end
319
+ class EqualityExpr
320
+ attr_reader :op1, :operator, :op2
321
+ def initialize op1, operator=nil, op2=nil
322
+ @op1 = op1
323
+ @operator = operator
324
+ @op2 = op2
115
325
  end
326
+ end
116
327
 
117
- class RelationalExpr < Expr
118
- attr_reader :op1, :operator, :op2
119
- def initialize op1, operator=nil, op2=nil
120
- @op1 = op1
121
- @operator = operator
122
- @op2 = op2
123
- end
328
+ class RelationalExpr
329
+ attr_reader :op1, :operator, :op2
330
+ def initialize op1, operator=nil, op2=nil
331
+ @op1 = op1
332
+ @operator = operator
333
+ @op2 = op2
124
334
  end
335
+ end
125
336
 
126
- class AdditiveExpr < Expr
127
- attr_reader :op1, :operator, :op2
128
- def initialize op1, operator=nil, op2=nil
129
- @op1 = op1
130
- @operator = operator
131
- @op2 = op2
132
- end
337
+ class AdditiveExpr
338
+ attr_reader :op1, :operator, :op2
339
+ def initialize op1, operator=nil, op2=nil
340
+ @op1 = op1
341
+ @operator = operator
342
+ @op2 = op2
133
343
  end
344
+ end
134
345
 
135
- class MultiplicativeExpr < Expr
136
- attr_reader :op1, :operator, :op2
137
- def initialize op1, operator=nil, op2=nil
138
- @op1 = op1
139
- @operator = operator
140
- @op2 = op2
141
- end
346
+ class MultiplicativeExpr
347
+ attr_reader :op1, :operator, :op2
348
+ def initialize op1, operator=nil, op2=nil
349
+ @op1 = op1
350
+ @operator = operator
351
+ @op2 = op2
142
352
  end
353
+ end
143
354
 
144
- class UnaryExpr < Expr
145
- attr_reader :op1, :operator
146
- def initialize op1, operator=nil
147
- @op1 = op1
148
- @operator = operator
149
- end
355
+ class UnaryExpr
356
+ attr_reader :op1, :operator
357
+ def initialize op1, operator=nil
358
+ @op1 = op1
359
+ @operator = operator
150
360
  end
361
+ end
151
362
 
152
- class UnionExpr < Expr
153
- attr_reader :op1, :operator, :op2
154
- def initialize op1, operator=nil, op2=nil
155
- @op1 = op1
156
- @operator = operator
157
- @op2 = op2
158
- end
363
+ class UnionExpr
364
+ attr_reader :op1, :operator, :op2
365
+ def initialize op1, operator=nil, op2=nil
366
+ @op1 = op1
367
+ @operator = operator
368
+ @op2 = op2
159
369
  end
370
+ end
160
371
 
161
- class PathExpr < Expr
162
- attr_reader :op1, :operator, :op2
163
- def initialize op1, operator=nil, op2=nil
164
- @op1 = op1
165
- @operator = operator
166
- @op2 = op2
167
- end
372
+ class PathExpr
373
+ attr_reader :op1, :operator, :op2
374
+ def initialize op1, operator=nil, op2=nil
375
+ @op1 = op1
376
+ @operator = operator
377
+ @op2 = op2
168
378
  end
379
+ end
169
380
 
170
- class FilterExpr < Expr
171
- attr_reader :op1, :op2
172
- def initialize op1, op2=nil
173
- @op1 = op1
174
- @op2 = op2
175
- end
381
+ class FilterExpr
382
+ attr_reader :op1, :op2
383
+ def initialize op1, op2=nil
384
+ @op1 = op1
385
+ @op2 = op2
176
386
  end
387
+ end
177
388
 
178
- class PrimaryExpr < Expr
179
- attr_reader :op1
180
- def initialize op1
181
- @op1 = op1
182
- end
389
+ class PrimaryExpr
390
+ attr_reader :op1
391
+ def initialize op1
392
+ @op1 = op1
183
393
  end
394
+ end
184
395
 
185
- class Literal
186
- attr_reader :value
187
- def initialize value
188
- @value = case value
189
- when /^"(?:[^"])*"/
190
- value.gsub(/^"/,'').gsub(/"$/,'').gsub(/\\n/,"\n").gsub(/\\t/,"\t").gsub(/\\"/,"\"").gsub(/\\\\/,"\\")
191
- when /^'(?:[^'])*'/
192
- value.gsub(/^'/,'').gsub(/'$/,'')
193
- else
194
- value
195
- end
196
- end
396
+ class VariableReference
397
+ attr_reader :name
398
+ def initialize name
399
+ @name = name
197
400
  end
401
+ end
198
402
 
199
- class Number
200
- attr_reader :value
201
- def initialize value
202
- @value = value.to_f.to_s
203
- end
403
+ class Literal
404
+ attr_reader :value
405
+ def initialize value
406
+ @value = case value
407
+ when /^"(?:[^"])*"/
408
+ value.gsub(/^"/,'').gsub(/"$/,'').gsub(/\\n/,"\n").gsub(/\\t/,"\t").gsub(/\\"/,"\"").gsub(/\\\\/,"\\")
409
+ when /^'(?:[^'])*'/
410
+ value.gsub(/^'/,'').gsub(/'$/,'')
411
+ else
412
+ value
413
+ end
204
414
  end
415
+ end
205
416
 
206
- class FunctionCall
207
- CURRENT ||= 'current'
208
-
209
- attr_reader :name, :args
210
- def initialize name, args=[]
211
- @name = name
212
- @args = args
213
- end
417
+ class Number
418
+ attr_reader :value
419
+ def initialize value
420
+ @value = value.to_f.to_s
214
421
  end
422
+ end
215
423
 
216
- attr_reader :expr
217
-
218
- def initialize expr
219
- @expr = expr
424
+ class FunctionCall
425
+ CURRENT ||= :current
426
+ LAST ||= :last
427
+ POSITION ||= 'position'
428
+ COUNT ||= 'count'
429
+ ID ||= 'id'
430
+ LOCAL_NAME ||= 'local-name'
431
+ NAMESPACE_URI ||= 'namespace-uri'
432
+ NAME ||= 'name'
433
+ STRING ||= 'string'
434
+ CONCAT ||= 'concat'
435
+ STARTS_WITH ||= 'starts-with'
436
+ CONTAINS ||= 'contains'
437
+ SUBSTRING_BEFORE ||= 'substring-before'
438
+ SUBSTRING_AFTER ||= 'substring-after'
439
+ SUBSTRING ||= 'substring'
440
+ STRING_LENGTH ||= 'string-length'
441
+ NORMALIZE_SPACE ||= 'normalize-space'
442
+ TRANSLATE ||= 'translate'
443
+ BOOLEAN ||= 'boolean'
444
+ NOT ||= 'not'
445
+ TRUE ||= 'true'
446
+ FALSE ||= 'false'
447
+ LANG ||= 'lang'
448
+ NUMBER ||= 'number'
449
+ SUM ||= 'sum'
450
+ FLOOR ||= 'floor'
451
+ CEILING ||= 'ceiling'
452
+ ROUND ||= 'round'
453
+
454
+ attr_reader :name, :args
455
+ def initialize name, args=[]
456
+ @name = name
457
+ @args = args
220
458
  end
221
459
  end
222
-
223
460
  end
224
461
  end
data/lib/rubyang.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require_relative 'rubyang/version'
4
4
 
5
+ require_relative 'rubyang/logger'
5
6
  require_relative 'rubyang/model'
6
7
  require_relative 'rubyang/xpath'
7
8
  require_relative 'rubyang/database'
data/rubyang.gemspec CHANGED
@@ -30,9 +30,9 @@ Gem::Specification.new do |spec|
30
30
  spec.add_dependency "sinatra", '~> 1.0'
31
31
  spec.add_dependency "sinatra-contrib", '~> 1.0'
32
32
 
33
- spec.add_development_dependency "bundler", '~> 1.0'
33
+ spec.add_development_dependency "bundler", '~> 1.16'
34
34
  spec.add_development_dependency "rake", '~> 11.0'
35
35
  spec.add_development_dependency "rspec", '~> 3.0'
36
36
  spec.add_development_dependency "racc", '~> 1.0'
37
- spec.add_development_dependency "codeclimate-test-reporter", '~> 0.0'
37
+ spec.add_development_dependency "codeclimate-test-reporter", '~> 1.0.8'
38
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubyang
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - hirura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-07-02 00:00:00.000000000 Z
11
+ date: 2018-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.0'
47
+ version: '1.16'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.0'
54
+ version: '1.16'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0.0'
103
+ version: 1.0.8
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '0.0'
110
+ version: 1.0.8
111
111
  description: YANG parser and tree structure data store
112
112
  email:
113
113
  - hirura@gmail.com
@@ -138,6 +138,7 @@ files:
138
138
  - lib/rubyang/database/data_tree.rb
139
139
  - lib/rubyang/database/helper.rb
140
140
  - lib/rubyang/database/schema_tree.rb
141
+ - lib/rubyang/logger.rb
141
142
  - lib/rubyang/model.rb
142
143
  - lib/rubyang/model/parser.rb
143
144
  - lib/rubyang/model/parser/parser.tab.rb
@@ -180,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
181
  version: '0'
181
182
  requirements: []
182
183
  rubyforge_project:
183
- rubygems_version: 2.5.1
184
+ rubygems_version: 2.7.3
184
185
  signing_key:
185
186
  specification_version: 4
186
187
  summary: YANG parser and tree structure data store