Class: GrassCookbook::Recipe
- Inherits:
-
Object
- Object
- GrassCookbook::Recipe
- Defined in:
- lib/grassgis/cookbook.rb
Overview
A recipe uses some Data and generates other Data in a GRASS session.
Instance Attribute Summary collapse
-
#description ⇒ Object
readonly
Returns the value of attribute description.
-
#generated_files ⇒ Object
readonly
Returns the value of attribute generated_files.
-
#generated_parameters ⇒ Object
readonly
Returns the value of attribute generated_parameters.
-
#generated_raster_maps ⇒ Object
readonly
Returns the value of attribute generated_raster_maps.
-
#generated_vector_maps ⇒ Object
readonly
Returns the value of attribute generated_vector_maps.
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#required_files ⇒ Object
readonly
Returns the value of attribute required_files.
-
#required_parameters ⇒ Object
readonly
Returns the value of attribute required_parameters.
-
#required_raster_maps ⇒ Object
readonly
Returns the value of attribute required_raster_maps.
-
#required_vector_maps ⇒ Object
readonly
Returns the value of attribute required_vector_maps.
Instance Method Summary collapse
- #==(other) ⇒ Object
-
#cook(grass, parameters = {}) ⇒ Object
Execute the recipe with given parameters # TODO: mapset PATH.
-
#doable?(input) ⇒ Boolean
Can the recipe be done given provided input?.
-
#done?(existing) ⇒ Boolean
Is the recipe unnecessary given existing data?.
- #eql?(other) ⇒ Boolean
- #generated_maps ⇒ Object
- #hash ⇒ Object
-
#initialize(options = {}, &blk) ⇒ Recipe
constructor
A new instance of Recipe.
- #inspect ⇒ Object
-
#products ⇒ Object
outputs.
- #required_maps ⇒ Object
-
#requirements ⇒ Object
inputs.
- #to_s ⇒ Object
Constructor Details
#initialize(options = {}, &blk) ⇒ Recipe
Returns a new instance of Recipe.
179 180 181 182 183 184 185 186 187 188 189 190 191 |
# File 'lib/grassgis/cookbook.rb', line 179 def initialize( = {}, &blk) @id = [:id].to_sym @description = [:description] || "Proceso #{@id}" @process = blk @required_parameters = blk.parameters.map(&:last) @required_raster_maps = Array([:required_raster_maps]) @required_vector_maps = Array([:required_vector_maps]) @required_files = Array([:required_files]) @generated_vector_maps = Array([:generated_vector_maps]) @generated_raster_maps = Array([:generated_raster_maps]) @generated_files = Array([:generated_files]) @generated_parameters = Array([:generated_parameters]) end |
Instance Attribute Details
#description ⇒ Object (readonly)
Returns the value of attribute description.
193 194 195 |
# File 'lib/grassgis/cookbook.rb', line 193 def description @description end |
#generated_files ⇒ Object (readonly)
Returns the value of attribute generated_files.
196 197 198 |
# File 'lib/grassgis/cookbook.rb', line 196 def generated_files @generated_files end |
#generated_parameters ⇒ Object (readonly)
Returns the value of attribute generated_parameters.
197 198 199 |
# File 'lib/grassgis/cookbook.rb', line 197 def generated_parameters @generated_parameters end |
#generated_raster_maps ⇒ Object (readonly)
Returns the value of attribute generated_raster_maps.
196 197 198 |
# File 'lib/grassgis/cookbook.rb', line 196 def generated_raster_maps @generated_raster_maps end |
#generated_vector_maps ⇒ Object (readonly)
Returns the value of attribute generated_vector_maps.
196 197 198 |
# File 'lib/grassgis/cookbook.rb', line 196 def generated_vector_maps @generated_vector_maps end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
193 194 195 |
# File 'lib/grassgis/cookbook.rb', line 193 def id @id end |
#required_files ⇒ Object (readonly)
Returns the value of attribute required_files.
194 195 196 |
# File 'lib/grassgis/cookbook.rb', line 194 def required_files @required_files end |
#required_parameters ⇒ Object (readonly)
Returns the value of attribute required_parameters.
195 196 197 |
# File 'lib/grassgis/cookbook.rb', line 195 def required_parameters @required_parameters end |
#required_raster_maps ⇒ Object (readonly)
Returns the value of attribute required_raster_maps.
194 195 196 |
# File 'lib/grassgis/cookbook.rb', line 194 def required_raster_maps @required_raster_maps end |
#required_vector_maps ⇒ Object (readonly)
Returns the value of attribute required_vector_maps.
194 195 196 |
# File 'lib/grassgis/cookbook.rb', line 194 def required_vector_maps @required_vector_maps end |
Instance Method Details
#==(other) ⇒ Object
265 266 267 |
# File 'lib/grassgis/cookbook.rb', line 265 def ==(other) eql? other end |
#cook(grass, parameters = {}) ⇒ Object
Execute the recipe with given parameters # TODO: mapset PATH
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 |
# 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) ⇒ Boolean
Can the recipe be done given provided input?
220 221 222 223 |
# File 'lib/grassgis/cookbook.rb', line 220 def doable?(input) # input.missing(requirements).empty? (requirements - input).empty? end |
#done?(existing) ⇒ Boolean
Is the recipe unnecessary given existing data?
226 227 228 |
# File 'lib/grassgis/cookbook.rb', line 226 def done?(existing) (products - existing).empty? end |
#eql?(other) ⇒ Boolean
261 262 263 |
# File 'lib/grassgis/cookbook.rb', line 261 def eql?(other) @id == other.id end |
#generated_maps ⇒ Object
214 215 216 217 |
# 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 ⇒ Object
269 270 271 |
# File 'lib/grassgis/cookbook.rb', line 269 def hash @id.hash end |
#inspect ⇒ Object
257 258 259 |
# File 'lib/grassgis/cookbook.rb', line 257 def inspect "<GrassCookbook::Recipe #{@id.inspect}>" end |
#products ⇒ Object
outputs
205 206 207 |
# File 'lib/grassgis/cookbook.rb', line 205 def products Data[parameters: generated_parameters, files: generated_files, maps: generated_maps] end |
#required_maps ⇒ Object
209 210 211 212 |
# 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 ⇒ Object
inputs
200 201 202 |
# File 'lib/grassgis/cookbook.rb', line 200 def requirements Data[parameters: required_parameters, files: required_files, maps: required_maps] end |
#to_s ⇒ Object
253 254 255 |
# File 'lib/grassgis/cookbook.rb', line 253 def to_s @description end |