class GrassCookbook::Recipe
A recipe uses some Data
and generates other Data
in a GRASS session.
Attributes
description[R]
generated_files[R]
generated_parameters[R]
generated_raster_maps[R]
generated_vector_maps[R]
id[R]
required_files[R]
required_parameters[R]
required_raster_maps[R]
required_vector_maps[R]
Public Class Methods
new(options = {}, &blk)
click to toggle source
# File lib/grassgis/cookbook.rb, line 179 def initialize(options = {}, &blk) @id = options[:id].to_sym @description = options[:description] || "Proceso #{@id}" @process = blk @required_parameters = blk.parameters.map(&:last) @required_raster_maps = Array(options[:required_raster_maps]) @required_vector_maps = Array(options[:required_vector_maps]) @required_files = Array(options[:required_files]) @generated_vector_maps = Array(options[:generated_vector_maps]) @generated_raster_maps = Array(options[:generated_raster_maps]) @generated_files = Array(options[:generated_files]) @generated_parameters = Array(options[:generated_parameters]) end
Public Instance Methods
==(other)
click to toggle source
# File lib/grassgis/cookbook.rb, line 265 def ==(other) eql? other end
cook(grass, parameters = {})
click to toggle source
Execute the recipe with given parameters # TODO: mapset PATH
# File lib/grassgis/cookbook.rb, line 231 def cook(grass, parameters = {}) # grass.g.mapsets '-p' # current_mapset = output.lines.last.split.first # Leave planning/checking if doable to the caller; not done here: # unless doable? GrassCookbook.available_data(grass, parameters) # raise "Requirements for #{@id} not fulfilled" # end # Also not done here: # if done? GrassCookbook.available_data(grass, parameters) # return # end args = parameters.values_at(*@required_parameters) # @process.call grass, *args # grass.session &@process, arguments: args # TODO: support in GrassGis for injecting/replacing locals grass.define_singleton_method(:parameters) { @parameters } grass.instance_exec *args, &@process end
doable?(input)
click to toggle source
Can the recipe be done given provided input?
# File lib/grassgis/cookbook.rb, line 220 def doable?(input) # input.missing(requirements).empty? (requirements - input).empty? end
done?(existing)
click to toggle source
Is the recipe unnecessary given existing data?
# File lib/grassgis/cookbook.rb, line 226 def done?(existing) (products - existing).empty? end
eql?(other)
click to toggle source
# File lib/grassgis/cookbook.rb, line 261 def eql?(other) @id == other.id end
generated_maps()
click to toggle source
# File lib/grassgis/cookbook.rb, line 214 def generated_maps generated_raster_maps.map { |map| [map, :raster] } + generated_vector_maps.map { |map| [map, :vector] } end
hash()
click to toggle source
# File lib/grassgis/cookbook.rb, line 269 def hash @id.hash end
inspect()
click to toggle source
# File lib/grassgis/cookbook.rb, line 257 def inspect "<GrassCookbook::Recipe #{@id.inspect}>" end
products()
click to toggle source
outputs
# File lib/grassgis/cookbook.rb, line 205 def products Data[parameters: generated_parameters, files: generated_files, maps: generated_maps] end
required_maps()
click to toggle source
# File lib/grassgis/cookbook.rb, line 209 def required_maps required_raster_maps.map { |map| [map, :raster] } + required_vector_maps.map { |map| [map, :vector] } end
requirements()
click to toggle source
inputs
# File lib/grassgis/cookbook.rb, line 200 def requirements Data[parameters: required_parameters, files: required_files, maps: required_maps] end
to_s()
click to toggle source
# File lib/grassgis/cookbook.rb, line 253 def to_s @description end