iab-Oil 0.1.4 → 0.1.5
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/CoverageInterpreter.rb +51 -5
- data/lib/DataModelInterpreter.rb +17 -5
- metadata +1 -1
data/lib/CoverageInterpreter.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'set'
|
|
2
2
|
require File.join(File.dirname(__FILE__),'DSLContext')
|
|
3
|
+
require 'Marshaller'
|
|
3
4
|
|
|
4
5
|
#create class that fills in for the RAILS class when rails is not around, e.g. when testing
|
|
5
6
|
#when RAILS is around this will have no effect
|
|
@@ -7,12 +8,14 @@ class HashWithIndifferentAccess < Hash
|
|
|
7
8
|
end
|
|
8
9
|
|
|
9
10
|
class CoverageInterpreter < DslContext
|
|
10
|
-
|
|
11
|
-
bubble :than, :is, :list, :the, :to, :at, :it, :end
|
|
11
|
+
include Marshaller
|
|
12
12
|
|
|
13
|
+
bubble :than, :is, :list, :the, :to, :at, :it, :end
|
|
14
|
+
PRODUCTMODELS = Hash.new
|
|
13
15
|
def initialize(*args)
|
|
14
16
|
@columns = 1
|
|
15
17
|
@hidden_fields = Set.new
|
|
18
|
+
@modelsLoaded = false
|
|
16
19
|
end
|
|
17
20
|
|
|
18
21
|
def getResult
|
|
@@ -47,6 +50,7 @@ class CoverageInterpreter < DslContext
|
|
|
47
50
|
end
|
|
48
51
|
|
|
49
52
|
def use(*args)
|
|
53
|
+
#puts "INTO USE WITH:#{args}"
|
|
50
54
|
#the test on hidden_fields property is a bit too brutal in that it cuts out a whole part of the tree
|
|
51
55
|
#it serves to provide the same hiding capability as we had in the iteration earlier this day
|
|
52
56
|
#but more consideration especially around individual field level restriction needs to be considered
|
|
@@ -57,7 +61,11 @@ class CoverageInterpreter < DslContext
|
|
|
57
61
|
# If the last argument is a hash we assume it's a hash of overrides which we remove
|
|
58
62
|
# and merge in later.
|
|
59
63
|
args_hash = nil
|
|
60
|
-
|
|
64
|
+
reached_leaf_nodes = false
|
|
65
|
+
if args.last.class.name == 'Hash'
|
|
66
|
+
args_hash = args.pop
|
|
67
|
+
reached_leaf_nodes = true
|
|
68
|
+
end
|
|
61
69
|
|
|
62
70
|
#now figure out whether the last arg above leads to an empty hash
|
|
63
71
|
#not strictly empty since every hash has an xpath property of the position in the class hierarchy
|
|
@@ -73,6 +81,7 @@ class CoverageInterpreter < DslContext
|
|
|
73
81
|
|
|
74
82
|
if (myHash.length == 1)
|
|
75
83
|
specificProperty = true
|
|
84
|
+
reached_leaf_nodes = true
|
|
76
85
|
lastArg = args.pop
|
|
77
86
|
myHash = @prdhash["#{@argName}#{args}"]
|
|
78
87
|
# Since we are delegating to our parent definition we look at that for a type
|
|
@@ -129,9 +138,46 @@ class CoverageInterpreter < DslContext
|
|
|
129
138
|
end
|
|
130
139
|
end
|
|
131
140
|
end
|
|
132
|
-
@erb << '<% end %>' unless specific_widget == nil
|
|
141
|
+
@erb << '<% end %>' unless specific_widget == nil
|
|
142
|
+
|
|
143
|
+
if (!@modelsLoaded)
|
|
144
|
+
req_stmt = deriveActiveRecordDefinitionOfProduct('Telenexus')
|
|
145
|
+
eval(req_stmt)
|
|
146
|
+
@modelsLoaded = true
|
|
147
|
+
end
|
|
148
|
+
if (args.length > 0 and !reached_leaf_nodes)
|
|
149
|
+
children = walk_class_hierarchy("#{@argName}#{args}")
|
|
150
|
+
if (children.length > 0)
|
|
151
|
+
#puts "walking hierarchy for #{@argName}#{args}"
|
|
152
|
+
children.each do |c|
|
|
153
|
+
myHash = @prdhash["#{c}"]
|
|
154
|
+
node_xpath = myHash[:xpath]
|
|
155
|
+
arr = node_xpath.split('/')
|
|
156
|
+
arr.shift
|
|
157
|
+
#puts "use is:#{arr}"
|
|
158
|
+
use("#{arr}")
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
end
|
|
133
162
|
end
|
|
134
|
-
|
|
163
|
+
|
|
164
|
+
def deriveActiveRecordDefinitionOfProduct(product)
|
|
165
|
+
if (PRODUCTMODELS.has_key?(product))
|
|
166
|
+
productModel = PRODUCTMODELS[product.to_sym]
|
|
167
|
+
else
|
|
168
|
+
require 'ProductInterpreter'
|
|
169
|
+
oilfile = File.join("#{DY_MODELS}/#{product}/DSL/product.oil")
|
|
170
|
+
open(oilfile) {|f| @contents = f.read }
|
|
171
|
+
dsl = @contents.to_s
|
|
172
|
+
if (!dsl.include?("product :#{product}"))
|
|
173
|
+
raise "#{DY_MODELS}/#{product}/DSL/product.oil does NOT contain a product defintion for #{product}"
|
|
174
|
+
end
|
|
175
|
+
productModel = ProductInterpreter.execute(dsl)
|
|
176
|
+
PRODUCTMODELS[product.to_sym] = productModel
|
|
177
|
+
end
|
|
178
|
+
productModel
|
|
179
|
+
end
|
|
180
|
+
|
|
135
181
|
private
|
|
136
182
|
def begin_erb(dsl_root, *args)
|
|
137
183
|
@widgets = Set.new
|
data/lib/DataModelInterpreter.rb
CHANGED
|
@@ -21,9 +21,19 @@ class DataModelInterpreter < DslContext
|
|
|
21
21
|
def enddatamodel(*args)
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
def createNewElement(name,coverage,parent,type)
|
|
24
|
+
def createNewElement(name,ctype,coverage,parent,type) #the type tells us if it is an entity, or coverage, or nil if a simple element
|
|
25
25
|
e = ElementFactory(name,coverage,parent,type)
|
|
26
26
|
@elementTree.last.children.push e if @elementTree.last and @elementTree.length > 0
|
|
27
|
+
if ctype and ctype != name
|
|
28
|
+
#copy fields from complex type definition to be used in this clone
|
|
29
|
+
@elements.each do |node|
|
|
30
|
+
if node.name == ctype
|
|
31
|
+
e.fields = node.fields
|
|
32
|
+
e.children = node.children
|
|
33
|
+
e.parent = @elementTree.last
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
27
37
|
@elementTree.push e
|
|
28
38
|
end
|
|
29
39
|
|
|
@@ -40,7 +50,7 @@ class DataModelInterpreter < DslContext
|
|
|
40
50
|
end
|
|
41
51
|
|
|
42
52
|
def element(*args)
|
|
43
|
-
createNewElement(args[0],false,@elementTree.last,nil)
|
|
53
|
+
createNewElement(args[0],nil,false,@elementTree.last,nil)
|
|
44
54
|
end
|
|
45
55
|
|
|
46
56
|
def endelement(*args)
|
|
@@ -48,7 +58,7 @@ class DataModelInterpreter < DslContext
|
|
|
48
58
|
end
|
|
49
59
|
|
|
50
60
|
def coverage(*args)
|
|
51
|
-
createNewElement(args[0]+ "Coverage",true,@elementTree.last,"coverages")
|
|
61
|
+
createNewElement(args[0]+ "Coverage",nil,true,@elementTree.last,"coverages")
|
|
52
62
|
end
|
|
53
63
|
|
|
54
64
|
def endcoverage(*args)
|
|
@@ -56,7 +66,7 @@ class DataModelInterpreter < DslContext
|
|
|
56
66
|
end
|
|
57
67
|
|
|
58
68
|
def entity(*args)
|
|
59
|
-
createNewElement(args[0],true,@elementTree.last,"entities")
|
|
69
|
+
createNewElement(args[0],nil,true,@elementTree.last,"entities")
|
|
60
70
|
end
|
|
61
71
|
|
|
62
72
|
def endentity(*args)
|
|
@@ -70,7 +80,9 @@ class DataModelInterpreter < DslContext
|
|
|
70
80
|
else
|
|
71
81
|
parent = @elementTree.last
|
|
72
82
|
end
|
|
73
|
-
createNewElement(args[0][:ctype],false,parent,nil)
|
|
83
|
+
createNewElement(args[0][:name],args[0][:ctype],false,parent,nil)
|
|
84
|
+
#pop the tree since createNewElement pushes new element to the tree
|
|
85
|
+
#since has to work for enties and coverages
|
|
74
86
|
@elementTree.pop
|
|
75
87
|
else
|
|
76
88
|
@elementTree.last.fields.push args[0]
|