Class: CMORizer::Experiment
- Inherits:
-
Object
- Object
- CMORizer::Experiment
- Defined in:
- lib/cmorizer.rb
Instance Attribute Summary collapse
-
#data_request_version ⇒ Object
readonly
Returns the value of attribute data_request_version.
-
#grid_txt ⇒ Object
readonly
Returns the value of attribute grid_txt.
-
#indir_first_year ⇒ Object
readonly
Returns the value of attribute indir_first_year.
-
#indir_last_year ⇒ Object
readonly
Returns the value of attribute indir_last_year.
-
#nominal_resolution ⇒ Object
readonly
Returns the value of attribute nominal_resolution.
-
#parent_experiment_info ⇒ Object
readonly
Returns the value of attribute parent_experiment_info.
-
#source_id ⇒ Object
readonly
Returns the value of attribute source_id.
-
#variant_label(l) ⇒ Object
readonly
DSL setter.
Class Method Summary collapse
-
.branch_year_in_parent ⇒ Object
redefine to behave as getter.
-
.indir ⇒ Object
redefine to behave as getter.
-
.outdir ⇒ Object
redefine to behave as getter.
-
.parent_first_year ⇒ Object
redefine to behave as getter.
-
.parent_variant_label ⇒ Object
redefine to behave as getter.
-
.variant_label ⇒ Object
redefine to behave as getter.
Instance Method Summary collapse
-
#branch_year_in_parent(y = nil) ⇒ Object
optional DSL setter (required if there is a parent).
- #first_year ⇒ Object
- #indir(d, first_year = nil, last_year = nil) ⇒ Object
-
#initialize(source_id, experiment_id, data_request_version, controlled_vocabularies, &block) ⇒ Experiment
constructor
A new instance of Experiment.
- #last_year ⇒ Object
- #method_missing(method_sym, *args, &block) ⇒ Object
- #outdir(d) ⇒ Object
-
#parent_first_year(y = nil) ⇒ Object
optional DSL setter (required if there is a parent).
-
#parent_variant_label(l = nil) ⇒ Object
optional DSL setter (required if there is a parent).
Constructor Details
#initialize(source_id, experiment_id, data_request_version, controlled_vocabularies, &block) ⇒ Experiment
Returns a new instance of Experiment.
226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 |
# File 'lib/cmorizer.rb', line 226 def initialize(source_id, experiment_id, data_request_version, controlled_vocabularies, &block) @source_id = source_id @experiment_id = experiment_id @data_request_version = data_request_version @experiment_cv = controlled_vocabularies['experiment_id'][@experiment_id] raise "experiment_id #{@experiment_id} does not exist in controlled vocabularies" unless @experiment_cv instance_eval(&block) if block_given? raise "source_id <#{source_id}> not found in controlled vocabularies" if controlled_vocabularies['source_id'][source_id].nil? @nominal_resolution = controlled_vocabularies['source_id'][source_id]['model_component']['ocean']['native_nominal_resolution'] @grid_txt = controlled_vocabularies['source_id'][source_id]['model_component']['ocean']['description'] parent_experiment_id = @experiment_cv['parent_experiment_id'] parent_experiment_id = parent_experiment_id.join if parent_experiment_id.is_a? Array # parent_experiment_id might be set to "no parent", in which case our parent_experiment_cv would be nil parent_experiment_cv = controlled_vocabularies['experiment_id'][parent_experiment_id] parent_first_year_dsl = parent_first_year # make a copy here to not inadvertently mess with the state of the DSL setter if parent_experiment_cv.nil? if parent_variant_label || parent_first_year_dsl raise "we can not have parent_variant_label or parent_first_year set if parent_experiment_id is not present via controlled vocabularies experiment_id '#{@experiment_id}'" end else if parent_variant_label.nil? raise "we must have parent_variant_label set if parent_experiment_id is known ('#{parent_experiment_id}') via controlled vocabularies experiment_id '#{@experiment_id}'" end # see if we have a start year for the parent in the controlled vocabulary cv_parent_first_year = parent_experiment_cv['start_year'] cv_parent_first_year = nil if cv_parent_first_year.empty? if cv_parent_first_year != nil @parent_first_year = cv_parent_first_year.to_i if parent_first_year_dsl != nil raise "we can not have a parent_first_year set if a start_year is known ('#{cv_parent_first_year}') via controlled vocabularies parent_experiment_id '#{parent_experiment_id}'" end elsif parent_first_year_dsl.nil? raise "we must have a parent_first_year set if a start_year is not known via controlled vocabularies parent_experiment_id '#{parent_experiment_id}'" end end @parent_experiment_info = if parent_experiment_cv parent_activity_id = parent_experiment_cv['activity_id'] parent_activity_id = parent_activity_id.join if parent_activity_id.is_a? Array OpenStruct.new(:experiment_id => parent_experiment_id, :source_id => source_id, :activity_id => parent_activity_id, :variant_label => @parent_variant_label, :first_year => @parent_first_year, :branch_year => @branch_year_in_parent) else nil end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_sym, *args, &block) ⇒ Object
347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 |
# File 'lib/cmorizer.rb', line 347 def method_missing(method_sym, *args, &block) return super if (!args.empty? && !block_given?) # we assume we should get a key from our CV hash if @experiment_cv.has_key? method_sym.to_s if %w(parent_experiment_id activity_id sub_experiment_id).any? method_sym.to_s # the controlled vocabularies json files contain arrays here, but only a single item is allowed r = @experiment_cv[method_sym.to_s] r = r.join(' ') if r.is_a? Array return r end return @experiment_cv[method_sym.to_s] else super # not a hash key, so treat as a non-existing method end end |
Instance Attribute Details
#data_request_version ⇒ Object (readonly)
Returns the value of attribute data_request_version.
224 225 226 |
# File 'lib/cmorizer.rb', line 224 def data_request_version @data_request_version end |
#grid_txt ⇒ Object (readonly)
Returns the value of attribute grid_txt.
224 225 226 |
# File 'lib/cmorizer.rb', line 224 def grid_txt @grid_txt end |
#indir_first_year ⇒ Object (readonly)
Returns the value of attribute indir_first_year.
224 225 226 |
# File 'lib/cmorizer.rb', line 224 def indir_first_year @indir_first_year end |
#indir_last_year ⇒ Object (readonly)
Returns the value of attribute indir_last_year.
224 225 226 |
# File 'lib/cmorizer.rb', line 224 def indir_last_year @indir_last_year end |
#nominal_resolution ⇒ Object (readonly)
Returns the value of attribute nominal_resolution.
224 225 226 |
# File 'lib/cmorizer.rb', line 224 def nominal_resolution @nominal_resolution end |
#parent_experiment_info ⇒ Object (readonly)
Returns the value of attribute parent_experiment_info.
224 225 226 |
# File 'lib/cmorizer.rb', line 224 def parent_experiment_info @parent_experiment_info end |
#source_id ⇒ Object (readonly)
Returns the value of attribute source_id.
224 225 226 |
# File 'lib/cmorizer.rb', line 224 def source_id @source_id end |
#variant_label(l) ⇒ Object (readonly)
DSL setter
294 295 296 |
# File 'lib/cmorizer.rb', line 294 def variant_label @variant_label end |
Class Method Details
.branch_year_in_parent ⇒ Object
redefine to behave as getter
304 305 306 |
# File 'lib/cmorizer.rb', line 304 def self.branch_year_in_parent # redefine to behave as getter @branch_year_in_parent end |
.indir ⇒ Object
redefine to behave as getter
280 281 282 |
# File 'lib/cmorizer.rb', line 280 def self.indir # redefine to behave as getter @indir end |
.outdir ⇒ Object
redefine to behave as getter
288 289 290 |
# File 'lib/cmorizer.rb', line 288 def self.outdir # redefine to behave as getter @outdir end |
.parent_first_year ⇒ Object
redefine to behave as getter
322 323 324 |
# File 'lib/cmorizer.rb', line 322 def self.parent_first_year # redefine to behave as getter @parent_first_year end |
.parent_variant_label ⇒ Object
redefine to behave as getter
313 314 315 |
# File 'lib/cmorizer.rb', line 313 def self.parent_variant_label # redefine to behave as getter @parent_variant_label end |
.variant_label ⇒ Object
redefine to behave as getter
296 297 298 |
# File 'lib/cmorizer.rb', line 296 def self.variant_label # redefine to behave as getter @variant_label end |
Instance Method Details
#branch_year_in_parent(y = nil) ⇒ Object
optional DSL setter (required if there is a parent)
302 303 304 305 306 307 308 |
# File 'lib/cmorizer.rb', line 302 def branch_year_in_parent(y=nil) # optional DSL setter (required if there is a parent) @branch_year_in_parent = y def self.branch_year_in_parent # redefine to behave as getter @branch_year_in_parent end @branch_year_in_parent end |
#first_year ⇒ Object
329 330 331 332 333 334 335 |
# File 'lib/cmorizer.rb', line 329 def first_year if start_year.empty? nil # some experiment_id controlled vocabularies do not have a start_year, e.g. control-1950 else start_year end end |
#indir(d, first_year = nil, last_year = nil) ⇒ Object
276 277 278 279 280 281 282 283 |
# File 'lib/cmorizer.rb', line 276 def indir(d, first_year=nil, last_year=nil) @indir = File. d # DSL setter @indir_first_year = first_year @indir_last_year = last_year def self.indir # redefine to behave as getter @indir end end |
#last_year ⇒ Object
338 339 340 341 342 343 344 |
# File 'lib/cmorizer.rb', line 338 def last_year if end_year.empty? nil # some experiment_id controlled vocabularies do not have a end_year, e.g. control-1950 else end_year end end |
#outdir(d) ⇒ Object
286 287 288 289 290 291 |
# File 'lib/cmorizer.rb', line 286 def outdir(d) @outdir = File. d # DSL setter def self.outdir # redefine to behave as getter @outdir end end |
#parent_first_year(y = nil) ⇒ Object
optional DSL setter (required if there is a parent)
320 321 322 323 324 325 326 |
# File 'lib/cmorizer.rb', line 320 def parent_first_year(y=nil) # optional DSL setter (required if there is a parent) @parent_first_year = y def self.parent_first_year # redefine to behave as getter @parent_first_year end @parent_first_year end |
#parent_variant_label(l = nil) ⇒ Object
optional DSL setter (required if there is a parent)
311 312 313 314 315 316 317 |
# File 'lib/cmorizer.rb', line 311 def parent_variant_label(l=nil) # optional DSL setter (required if there is a parent) @parent_variant_label = l def self.parent_variant_label # redefine to behave as getter @parent_variant_label end @parent_variant_label end |