cfhighlander 0.2.1.alpha.43 → 0.2.1
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 +4 -4
- data/README.md +79 -153
- data/bin/cfhighlander +1 -1
- data/bin/{cfhighlander.rb → highlander.rb} +22 -27
- data/cfndsl_ext/sg.rb +2 -29
- data/hl_ext/mapping_helper.rb +4 -6
- data/lib/{cfhighlander.compiler.rb → highlander.compiler.rb} +18 -26
- data/lib/{cfhighlander.dsl.base.rb → highlander.dsl.base.rb} +2 -2
- data/lib/{cfhighlander.dsl.subcomponent.rb → highlander.dsl.component.rb} +71 -83
- data/lib/highlander.dsl.params.rb +113 -0
- data/lib/{cfhighlander.dsl.template.rb → highlander.dsl.rb} +62 -91
- data/lib/highlander.factory.rb +359 -0
- data/lib/{cfhighlander.helper.rb → highlander.helper.rb} +2 -2
- data/lib/{cfhighlander.mapproviders.rb → highlander.mapproviders.rb} +1 -1
- data/lib/{cfhighlander.publisher.rb → highlander.publisher.rb} +3 -3
- data/lib/{cfhighlander.validator.rb → highlander.validator.rb} +1 -1
- data/lib/util/zip.util.rb +1 -1
- data/templates/cfndsl.component.template.erb +1 -4
- metadata +15 -38
- data/lib/cfhighlander.dsl.params.rb +0 -108
- data/lib/cfhighlander.factory.rb +0 -45
- data/lib/cfhighlander.factory.templatefinder.rb +0 -248
- data/lib/cfhighlander.model.component.rb +0 -177
- data/lib/cfhighlander.model.templatemeta.rb +0 -25
data/cfndsl_ext/sg.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'netaddr'
|
2
1
|
|
3
2
|
def sg_create_rules (x, ip_blocks={})
|
4
3
|
rules = []
|
@@ -16,38 +15,12 @@ end
|
|
16
15
|
|
17
16
|
|
18
17
|
def lookup_ips_for_sg (ips, ip_block_name={})
|
19
|
-
cidr = []
|
20
18
|
if ip_block_name == 'stack'
|
21
19
|
cidr = [FnJoin( "", [ "10.", Ref('StackOctet'), ".", "0.0/16" ] )]
|
22
20
|
elsif ips.has_key? ip_block_name
|
23
|
-
ips[ip_block_name]
|
24
|
-
if (ips.include?(ip) || ip_block_name == 'stack')
|
25
|
-
cidr += lookup_ips_for_sg(ips, ip) unless ip == ip_block_name
|
26
|
-
else
|
27
|
-
if ip == 'stack'
|
28
|
-
cidr << [FnJoin( "", [ "10.", Ref('StackOctet'), ".", "0.0/16" ] )]
|
29
|
-
elsif(isCidr(ip))
|
30
|
-
cidr << ip
|
31
|
-
else
|
32
|
-
STDERR.puts("WARN: ip #{ip} is not a valid CIDR. Ignoring IP")
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
21
|
+
cidr = ips[ip_block_name]
|
36
22
|
else
|
37
|
-
|
38
|
-
cidr = [ip_block_name]
|
39
|
-
else
|
40
|
-
STDERR.puts("WARN: ip #{ip_block_name} is not a valid CIDR. Ignoring IP")
|
41
|
-
end
|
23
|
+
cidr = [ip_block_name]
|
42
24
|
end
|
43
25
|
cidr
|
44
26
|
end
|
45
|
-
|
46
|
-
def isCidr(block)
|
47
|
-
begin
|
48
|
-
NetAddr::CIDR.create(block)
|
49
|
-
return block.include?('/')
|
50
|
-
rescue NetAddr::ValidationError
|
51
|
-
return false
|
52
|
-
end
|
53
|
-
end
|
data/hl_ext/mapping_helper.rb
CHANGED
@@ -1,16 +1,14 @@
|
|
1
|
-
require_relative '../lib/
|
1
|
+
require_relative '../lib/highlander.mapproviders'
|
2
2
|
|
3
3
|
# Return mapping provider as class
|
4
|
-
def mappings_provider(provider_name
|
4
|
+
def mappings_provider(provider_name)
|
5
5
|
return nil if provider_name.nil?
|
6
6
|
provider = nil
|
7
|
-
|
8
|
-
providers = Object.const_get(module_name).const_get('MapProviders')
|
7
|
+
providers = Object.const_get('Highlander').const_get('MapProviders')
|
9
8
|
begin
|
10
9
|
providers.const_get(provider_name)
|
11
10
|
rescue NameError => e
|
12
|
-
if e.to_s.include?
|
13
|
-
return mappings_provider(provider_name, true) unless is_legacy
|
11
|
+
if e.to_s.include? 'uninitialized constant Highlander::MapProviders::'
|
14
12
|
return nil
|
15
13
|
end
|
16
14
|
STDERR.puts(e.to_s)
|
@@ -12,7 +12,7 @@ require 'highline/import'
|
|
12
12
|
require 'zip'
|
13
13
|
require_relative './util/zip.util'
|
14
14
|
|
15
|
-
module
|
15
|
+
module Highlander
|
16
16
|
|
17
17
|
module Compiler
|
18
18
|
|
@@ -33,7 +33,7 @@ module Cfhighlander
|
|
33
33
|
|
34
34
|
def initialize(component)
|
35
35
|
|
36
|
-
@workdir = ENV['
|
36
|
+
@workdir = ENV['HIGHLANDER_WORKDIR']
|
37
37
|
@component = component
|
38
38
|
@sub_components = []
|
39
39
|
@component_name = component.highlander_dsl.name.downcase
|
@@ -43,16 +43,14 @@ module Cfhighlander
|
|
43
43
|
@lambdas_processed = false
|
44
44
|
@silent_mode = false
|
45
45
|
@lambda_src_paths = []
|
46
|
-
@config_yaml_path = nil
|
47
|
-
@cfn_model = nil
|
48
46
|
|
49
47
|
if @@global_extensions_paths.empty?
|
50
48
|
global_extensions_folder = "#{File.dirname(__FILE__)}/../cfndsl_ext"
|
51
49
|
Dir["#{global_extensions_folder}/*.rb"].each { |f| @@global_extensions_paths << f }
|
52
50
|
end
|
53
51
|
|
54
|
-
@component.highlander_dsl.
|
55
|
-
sub_component_compiler =
|
52
|
+
@component.highlander_dsl.components.each do |sub_component|
|
53
|
+
sub_component_compiler = Highlander::Compiler::ComponentCompiler.new(sub_component.component_loaded)
|
56
54
|
sub_component_compiler.component_name = sub_component.name
|
57
55
|
@sub_components << sub_component_compiler
|
58
56
|
end
|
@@ -69,7 +67,7 @@ module Cfhighlander
|
|
69
67
|
dsl = @component.highlander_dsl
|
70
68
|
component_cfndsl = @component.cfndsl_content
|
71
69
|
|
72
|
-
@component.highlander_dsl.
|
70
|
+
@component.highlander_dsl.components.each { |sc|
|
73
71
|
sc.distribution_format = out_format
|
74
72
|
}
|
75
73
|
|
@@ -102,38 +100,33 @@ module Cfhighlander
|
|
102
100
|
|
103
101
|
end
|
104
102
|
|
105
|
-
def
|
106
|
-
#compile cfndsl templates first
|
107
|
-
compileCfnDsl format unless @cfndsl_compiled
|
108
|
-
|
109
|
-
# write config
|
110
|
-
cfndsl_opts = []
|
111
|
-
cfndsl_opts.push([:yaml, @config_yaml_path])
|
103
|
+
def compileCloudFormation(format = 'yaml')
|
112
104
|
|
113
|
-
# grab cfndsl model
|
114
|
-
model = CfnDsl.eval_file_with_extras(@cfndsl_compiled_path, cfndsl_opts, false)
|
115
|
-
@cfn_model = model
|
116
|
-
return model
|
117
|
-
end
|
118
105
|
|
119
|
-
|
106
|
+
#compile cfndsl templates first
|
107
|
+
compileCfnDsl format unless @cfndsl_compiled
|
120
108
|
|
121
109
|
dsl = @component.highlander_dsl
|
110
|
+
component_cfndsl = @component.cfndsl_content
|
122
111
|
|
123
112
|
# create out dir if not there
|
124
113
|
@cfn_output_location = "#{@workdir}/out/#{format}"
|
125
114
|
output_dir = @cfn_output_location
|
126
115
|
FileUtils.mkdir_p(output_dir) unless Dir.exist?(output_dir)
|
127
116
|
|
117
|
+
# write config
|
118
|
+
config_yaml_path = writeConfig
|
119
|
+
|
128
120
|
|
129
121
|
# compile templates
|
130
|
-
output_path = "#{output_dir}/#{
|
122
|
+
output_path = "#{output_dir}/#{component_name}.compiled.#{format}"
|
131
123
|
@cfn_template_paths << output_path
|
132
124
|
# configure cfndsl
|
133
|
-
|
125
|
+
cfndsl_opts = []
|
126
|
+
cfndsl_opts.push([:yaml, config_yaml_path])
|
134
127
|
|
135
128
|
# grab cfndsl model
|
136
|
-
model =
|
129
|
+
model = CfnDsl.eval_file_with_extras(@cfndsl_compiled_path, cfndsl_opts, false)
|
137
130
|
|
138
131
|
# write resulting cloud formation template
|
139
132
|
if format == 'json'
|
@@ -172,8 +165,7 @@ module Cfhighlander
|
|
172
165
|
end
|
173
166
|
end
|
174
167
|
@config_written = true
|
175
|
-
|
176
|
-
return @config_yaml_path
|
168
|
+
config_yaml_path
|
177
169
|
end
|
178
170
|
|
179
171
|
def processLambdas()
|
@@ -289,7 +281,7 @@ module Cfhighlander
|
|
289
281
|
end
|
290
282
|
end
|
291
283
|
File.delete full_destination_path if File.exist? full_destination_path
|
292
|
-
zip_generator =
|
284
|
+
zip_generator = Highlander::Util::ZipFileGenerator.new(lambda_source_dir, full_destination_path)
|
293
285
|
zip_generator.write
|
294
286
|
|
295
287
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
module
|
2
|
+
module Highlander
|
3
3
|
|
4
4
|
module Dsl
|
5
5
|
class DslBase
|
@@ -15,7 +15,7 @@ module Cfhighlander
|
|
15
15
|
raise StandardError, "#{self} no config!"
|
16
16
|
end
|
17
17
|
return @config["#{method}"] unless @config["#{method}"].nil?
|
18
|
-
raise StandardError, "#{self}
|
18
|
+
raise StandardError, "#{self}Unknown method or variable #{method} in Highlander template"
|
19
19
|
end
|
20
20
|
|
21
21
|
end
|
@@ -1,9 +1,8 @@
|
|
1
|
-
require_relative './
|
2
|
-
require_relative './
|
3
|
-
require_relative './
|
4
|
-
require 'cfndsl'
|
1
|
+
require_relative './highlander.helper'
|
2
|
+
require_relative './highlander.dsl.base'
|
3
|
+
require_relative './highlander.factory'
|
5
4
|
|
6
|
-
module
|
5
|
+
module Highlander
|
7
6
|
|
8
7
|
module Dsl
|
9
8
|
|
@@ -16,7 +15,8 @@ module Cfhighlander
|
|
16
15
|
|
17
16
|
end
|
18
17
|
|
19
|
-
|
18
|
+
|
19
|
+
class Component < DslBase
|
20
20
|
|
21
21
|
attr_accessor :name,
|
22
22
|
:template,
|
@@ -65,11 +65,10 @@ module Cfhighlander
|
|
65
65
|
build_distribution_url
|
66
66
|
|
67
67
|
# load component
|
68
|
-
factory =
|
69
|
-
@component_loaded = factory.
|
68
|
+
factory = Highlander::Factory::ComponentFactory.new(@component_sources)
|
69
|
+
@component_loaded = factory.findComponent(
|
70
70
|
@template,
|
71
|
-
@template_version
|
72
|
-
@name
|
71
|
+
@template_version
|
73
72
|
)
|
74
73
|
@component_loaded.config.extend @config
|
75
74
|
|
@@ -100,6 +99,9 @@ module Cfhighlander
|
|
100
99
|
end
|
101
100
|
|
102
101
|
def load(component_config_override = {})
|
102
|
+
# check for component config on parent
|
103
|
+
parent = @parent
|
104
|
+
|
103
105
|
# Highest priority is DSL defined configuration
|
104
106
|
component_config_override.extend @config
|
105
107
|
|
@@ -108,22 +110,17 @@ module Cfhighlander
|
|
108
110
|
@component_loaded.load @component_config_override
|
109
111
|
end
|
110
112
|
|
111
|
-
def parameter(name:, value:)
|
112
|
-
@param_values[name] = value
|
113
|
-
end
|
114
|
-
|
115
113
|
# Parameters should be lazy loaded, that is late-binding should happen once
|
116
114
|
# all parameters and mappings are known
|
117
|
-
def
|
115
|
+
def load_parameters
|
118
116
|
component_dsl = @component_loaded.highlander_dsl
|
119
117
|
component_dsl.parameters.param_list.each do |component_param|
|
120
|
-
param =
|
118
|
+
param = Highlander::Dsl::SubcomponentParameter.new
|
121
119
|
param.name = component_param.name
|
122
120
|
param.cfndsl_value = SubcomponentParamValueResolver.resolveValue(
|
123
121
|
@parent,
|
124
122
|
self,
|
125
|
-
component_param
|
126
|
-
available_outputs)
|
123
|
+
component_param)
|
127
124
|
@parameters << param
|
128
125
|
end
|
129
126
|
end
|
@@ -131,77 +128,40 @@ module Cfhighlander
|
|
131
128
|
end
|
132
129
|
|
133
130
|
class SubcomponentParamValueResolver
|
134
|
-
def self.resolveValue(component, sub_component, param
|
135
|
-
|
136
|
-
print("INFO Resolving parameter #{component.name} -> #{sub_component.name}.#{param.name}: ")
|
137
|
-
|
138
|
-
# rule 0: this rule is here for legacy reasons and OutputParam. It should be deprecated
|
139
|
-
# once all hl-components- repos remove any references to OutputParam
|
140
|
-
if not param.provided_value.nil?
|
141
|
-
component_name = param.provided_value.split('.')[0]
|
142
|
-
output_name = param.provided_value.split('.')[1]
|
143
|
-
source_component = component.subcomponents.find {|c| c.name == component_name}
|
144
|
-
if source_component.nil?
|
145
|
-
source_component = component.subcomponents.find {|c| c.component_loaded.template.template_name == component_name}
|
146
|
-
end
|
147
|
-
return CfnDsl::Fn.new('GetAtt', [
|
148
|
-
source_component.name,
|
149
|
-
"Outputs.#{output_name}"
|
150
|
-
]).to_json
|
151
|
-
end
|
131
|
+
def self.resolveValue(component, sub_component, param)
|
152
132
|
|
153
|
-
|
133
|
+
puts("Resolving parameter #{component.name} -> #{sub_component.name}.#{param.name}")
|
134
|
+
|
135
|
+
# check if there are values defined on component itself
|
154
136
|
if sub_component.param_values.key?(param.name)
|
155
|
-
|
156
|
-
|
157
|
-
param_value = sub_component.param_values[param.name]
|
158
|
-
if param_value.is_a? String and param_value.include? '.'
|
159
|
-
source_component_name = param_value.split('.')[0]
|
160
|
-
source_output = param_value.split('.')[1]
|
161
|
-
source_component = component.subcomponents.find {|sc| sc.name == source_component_name}
|
162
|
-
# if source component exists
|
163
|
-
if not source_component.nil?
|
164
|
-
if source_component_name == sub_component.name
|
165
|
-
STDERR.puts "WARNING: Parameter value on component #{source_component_name} references component itself: #{param_value}"
|
166
|
-
else
|
167
|
-
return CfnDsl::Fn.new('GetAtt', [
|
168
|
-
source_component_name,
|
169
|
-
"Outputs.#{source_output}"
|
170
|
-
]).to_json
|
171
|
-
end
|
172
|
-
else
|
173
|
-
return Cfhighlander::Helper.parameter_cfndsl_value(param_value)
|
174
|
-
end
|
175
|
-
else
|
176
|
-
return Cfhighlander::Helper.parameter_cfndsl_value(sub_component.param_values[param.name])
|
177
|
-
end
|
137
|
+
return Highlander::Helper.parameter_cfndsl_value(sub_component.param_values[param.name])
|
178
138
|
end
|
179
139
|
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
140
|
+
if param.class == Highlander::Dsl::StackParam
|
141
|
+
return self.resolveStackParamValue(component, sub_component, param)
|
142
|
+
elsif param.class == Highlander::Dsl::ComponentParam
|
143
|
+
return self.resolveComponentParamValue(component, sub_component, param)
|
144
|
+
elsif param.class == Highlander::Dsl::MappingParam
|
184
145
|
return self.resolveMappingParamValue(component, sub_component, param)
|
146
|
+
elsif param.class == Highlander::Dsl::OutputParam
|
147
|
+
return self.resolveOutputParamValue(component, sub_component, param)
|
148
|
+
else
|
149
|
+
raise "#{param.class} not resolvable to parameter value"
|
185
150
|
end
|
151
|
+
end
|
186
152
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
puts " resolved as output of #{component_name}"
|
192
|
-
return CfnDsl::Fn.new('GetAtt', [
|
193
|
-
component_name,
|
194
|
-
"Outputs.#{param.name}"
|
195
|
-
]).to_json
|
196
|
-
end
|
197
|
-
|
198
|
-
# by default bubble parameter and resolve as reference on upper level
|
199
|
-
propagated_param = param.clone
|
200
|
-
propagated_param.name = "#{sub_component.name}#{param.name}" unless param.is_global
|
201
|
-
component.parameters.addParam propagated_param
|
202
|
-
puts " no autowiring candidates, propagate parameter to parent"
|
203
|
-
return CfnDsl::RefDefinition.new(propagated_param.name).to_json
|
153
|
+
def self.resolveStackParamValue(component, sub_component, param)
|
154
|
+
param_name = param.is_global ? param.name : "#{sub_component.name}#{param.name}"
|
155
|
+
return "Ref('#{param_name}')"
|
156
|
+
end
|
204
157
|
|
158
|
+
def self.resolveComponentParamValue(component, sub_component, param)
|
159
|
+
# check component config for param value
|
160
|
+
# TODO
|
161
|
+
# check stack config for param value
|
162
|
+
# TODO
|
163
|
+
# return default value
|
164
|
+
return "'#{param.default_value}'"
|
205
165
|
end
|
206
166
|
|
207
167
|
def self.resolveMappingParamValue(component, sub_component, param)
|
@@ -216,7 +176,7 @@ module Cfhighlander
|
|
216
176
|
key_name = nil
|
217
177
|
|
218
178
|
# priority 0: stack-level parameter of map name
|
219
|
-
stack_param_mapname = component.parameters.param_list.find {|p| p.name == mappings_name}
|
179
|
+
stack_param_mapname = component.parameters.param_list.find { |p| p.name == mappings_name }
|
220
180
|
unless stack_param_mapname.nil?
|
221
181
|
key_name = "Ref('#{mappings_name}')"
|
222
182
|
end
|
@@ -235,7 +195,7 @@ module Cfhighlander
|
|
235
195
|
# could still be nil after this line
|
236
196
|
end
|
237
197
|
|
238
|
-
value =
|
198
|
+
value = mapping_value(component: component,
|
239
199
|
provider_name: mappings_name,
|
240
200
|
value_name: param.mapAttribute,
|
241
201
|
key_name: key_name
|
@@ -246,9 +206,37 @@ module Cfhighlander
|
|
246
206
|
return "''"
|
247
207
|
end
|
248
208
|
|
209
|
+
return value
|
210
|
+
|
211
|
+
|
249
212
|
return value
|
250
213
|
end
|
251
214
|
|
215
|
+
def self.resolveOutputParamValue(component, sub_component, param)
|
216
|
+
component_name = param.component
|
217
|
+
resource_name = nil
|
218
|
+
if not sub_component.export_config.nil?
|
219
|
+
if sub_component.export_config.key? component_name
|
220
|
+
resource_name = sub_component.export_config[component_name]
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
if resource_name.nil?
|
225
|
+
# find by component
|
226
|
+
resource = component.components.find { |c| c.name == component_name }
|
227
|
+
resource_name = resource.name unless resource.nil?
|
228
|
+
if resource_name.nil?
|
229
|
+
resource = component.components.find { |c| c.template == component_name }
|
230
|
+
resource_name = resource.name unless resource.nil?
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
if resource_name.nil?
|
235
|
+
raise "#{sub_component.name}.Params.#{param.name}: Failed to resolve OutputParam '#{param.name}' with source '#{component_name}'. Component not found!"
|
236
|
+
end
|
237
|
+
|
238
|
+
return "FnGetAtt('#{resource_name}','Outputs.#{param.name}')"
|
239
|
+
end
|
252
240
|
end
|
253
241
|
|
254
242
|
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require_relative './highlander.dsl.base'
|
2
|
+
|
3
|
+
module Highlander
|
4
|
+
|
5
|
+
module Dsl
|
6
|
+
class Parameters < DslBase
|
7
|
+
|
8
|
+
attr_accessor :param_list
|
9
|
+
|
10
|
+
def initialize()
|
11
|
+
@param_list = []
|
12
|
+
end
|
13
|
+
|
14
|
+
def addParam(param)
|
15
|
+
existing_param = @param_list.find { |p| p.name == param.name }
|
16
|
+
if not existing_param.nil?
|
17
|
+
puts "Parameter being overwritten. Updating parameter #{param.name} with new definition..."
|
18
|
+
@param_list[@param_list.index(existing_param)] = param
|
19
|
+
else
|
20
|
+
@param_list << param
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def StackParam(name, defaultValue='', isGlobal: false, noEcho: false)
|
25
|
+
param = StackParam.new(name, 'String', defaultValue)
|
26
|
+
param.is_global = isGlobal
|
27
|
+
param.config = @config
|
28
|
+
param.no_echo = noEcho
|
29
|
+
addParam param
|
30
|
+
end
|
31
|
+
|
32
|
+
def ComponentParam(name, defaultValue='')
|
33
|
+
param = ComponentParam.new(name, 'String', defaultValue)
|
34
|
+
param.config = @config
|
35
|
+
addParam param
|
36
|
+
end
|
37
|
+
|
38
|
+
def MappingParam(name, defaultValue='', &block)
|
39
|
+
param = MappingParam.new(name, 'String', defaultValue)
|
40
|
+
param.config = @config
|
41
|
+
param.instance_eval(&block)
|
42
|
+
addParam param
|
43
|
+
end
|
44
|
+
|
45
|
+
def OutputParam(component:, name:, default: '')
|
46
|
+
param = OutputParam.new(component, name, default)
|
47
|
+
param.config = @config
|
48
|
+
addParam param
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class Parameter < DslBase
|
53
|
+
attr_accessor :name, :type, :default_value, :no_echo
|
54
|
+
|
55
|
+
def initialize(name, type, defaultValue, noEcho = false)
|
56
|
+
@no_echo = noEcho
|
57
|
+
@name = name
|
58
|
+
@type = type
|
59
|
+
@default_value = defaultValue
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
class StackParam < Parameter
|
64
|
+
attr_accessor :is_global
|
65
|
+
end
|
66
|
+
|
67
|
+
class ComponentParam < Parameter
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
class OutputParam < Parameter
|
72
|
+
attr_accessor :component
|
73
|
+
|
74
|
+
def initialize(component, name, default)
|
75
|
+
@component = component
|
76
|
+
@name = name
|
77
|
+
@default_value = default
|
78
|
+
@type = 'String'
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
class MappingParam < Parameter
|
83
|
+
|
84
|
+
attr_accessor :mapName, :mapKey, :mapAttribute
|
85
|
+
|
86
|
+
def method_missing(method, *args)
|
87
|
+
smethod = "#{method}"
|
88
|
+
if smethod.start_with?('Map')
|
89
|
+
puts smethod
|
90
|
+
end
|
91
|
+
|
92
|
+
super.method_missing(method)
|
93
|
+
end
|
94
|
+
|
95
|
+
def key(map_key)
|
96
|
+
@mapKey = map_key
|
97
|
+
end
|
98
|
+
|
99
|
+
def attribute(key)
|
100
|
+
@mapAttribute = key
|
101
|
+
end
|
102
|
+
|
103
|
+
def map(mapName)
|
104
|
+
@mapName = mapName
|
105
|
+
end
|
106
|
+
|
107
|
+
def mapProvider
|
108
|
+
mappings_provider(@mapName)
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|