Sha256: 320a8d98c39e367fbb3128fb7a577d8cc96bb911cf4f7c3bf65e24f9f2daef6c

Contents?: true

Size: 935 Bytes

Versions: 9

Compression:

Stored size: 935 Bytes

Contents

# encoding: UTF-8

module Rivet
  class OpenState
    attr_reader :generated_attributes
    attr_accessor :required_fields

    def initialize
      @generated_attributes = []
    end

    def install_get_or_set(name)
      @generated_attributes << name
      define_singleton_method(name) do |*args|
        if args.size < 1
          instance_variable_get("@#{name}")
        else
          instance_variable_set("@#{name}", args[0])
        end
      end
    end

    def validate
      required_fields.each_pair do |method, default_value|
        unless respond_to?(method)
          if default_value.nil?
            fail "Required field #{method} missing!"
          else
            send(method, default_value)
          end
        end
      end
    end

    def method_missing(m, *args, &block)
      if args.size < 1
        super
      else
        install_get_or_set(m)
        send(m, args[0])
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
rivet-3.2.0 lib/rivet/common/open_state.rb
rivet-3.1.0 lib/rivet/common/open_state.rb
rivet-3.0.5 lib/rivet/common/open_state.rb
rivet-3.0.4 lib/rivet/common/open_state.rb
rivet-3.0.3 lib/rivet/common/open_state.rb
rivet-3.0.2 lib/rivet/common/open_state.rb
rivet-3.0.1 lib/rivet/common/open_state.rb
rivet-3.0.0 lib/rivet/common/open_state.rb
rivet-2.0.0 lib/rivet/open_state.rb