rubyang 0.1.1 → 0.1.2

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/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