Sha256: 33f2ba0df11be402b8cf53abc98237c51e6eab1888b97c4ba5e3eb131e8fcbfb

Contents?: true

Size: 1.93 KB

Versions: 348

Compression:

Stored size: 1.93 KB

Contents

module AnnotatedModule

  def self.add_consummable_annotation(target, *annotations)
    if annotations.length == 1 and Hash === annotations.first
      annotations.first.each do |annotation, default|
        target.send(:attr_accessor, annotation)
        target.send(:define_method, "consume_#{annotation}") do
          value = instance_variable_get("@#{annotation}") || (default.nil? ? nil : default.dup)
          instance_variable_set("@#{annotation}", (default.nil? ? nil : default.dup))
          value
        end
      end
    else
      annotations.each do |annotation|
        target.send(:attr_accessor, annotation)
        target.send(:define_method, "consume_#{annotation}") do
          value = instance_variable_get("@#{annotation}")
          instance_variable_set("@#{annotation}", nil)
        end
      end
    end
  end

end


module InputModule
  AnnotatedModule.add_consummable_annotation(self,
    :inputs             => [],
    :required_inputs    => [],
    :input_types        => {},
    :input_descriptions => {},
    :input_defaults     => {},
    :input_options      => {})

  def input(name, type = nil, desc = nil, default = nil, options = nil)
    name = name.to_sym
    type = type.to_sym

    @inputs             = [] if @inputs.nil?
    @input_types        = {} if @input_types.nil?
    @input_descriptions = {} if @input_descriptions.nil?
    @input_defaults     = {} if @input_defaults.nil?
    @input_options      = {} if @input_options.nil?
    @required_inputs    = [] if @required_inputs.nil?

    required = Misc.process_options options, :required if options
    required, default = true, nil if default == :required
    @required_inputs << name  if required

    @inputs                   << name
    @input_types[name]        = type unless type.nil?
    @input_descriptions[name] = desc unless desc.nil?
    @input_defaults[name]     = default unless default.nil?
    @input_options[name]      = options unless options.nil?

  end
end

Version data entries

348 entries across 348 versions & 1 rubygems

Version Path
rbbt-util-6.0.3 lib/rbbt/util/misc/annotated_module.rb
rbbt-util-5.44.1 lib/rbbt/util/misc/annotated_module.rb
rbbt-util-5.43.0 lib/rbbt/util/misc/annotated_module.rb
rbbt-util-5.42.0 lib/rbbt/util/misc/annotated_module.rb
rbbt-util-5.41.1 lib/rbbt/util/misc/annotated_module.rb
rbbt-util-5.41.0 lib/rbbt/util/misc/annotated_module.rb
rbbt-util-5.40.5 lib/rbbt/util/misc/annotated_module.rb
rbbt-util-5.40.4 lib/rbbt/util/misc/annotated_module.rb
rbbt-util-5.40.3 lib/rbbt/util/misc/annotated_module.rb
rbbt-util-5.40.0 lib/rbbt/util/misc/annotated_module.rb
rbbt-util-5.39.0 lib/rbbt/util/misc/annotated_module.rb
rbbt-util-5.38.1 lib/rbbt/util/misc/annotated_module.rb
rbbt-util-5.38.0 lib/rbbt/util/misc/annotated_module.rb
rbbt-util-5.37.16 lib/rbbt/util/misc/annotated_module.rb
rbbt-util-5.37.15 lib/rbbt/util/misc/annotated_module.rb
rbbt-util-5.37.14 lib/rbbt/util/misc/annotated_module.rb
rbbt-util-5.37.13 lib/rbbt/util/misc/annotated_module.rb
rbbt-util-5.37.12 lib/rbbt/util/misc/annotated_module.rb
rbbt-util-5.37.11 lib/rbbt/util/misc/annotated_module.rb
rbbt-util-5.37.10 lib/rbbt/util/misc/annotated_module.rb