chingor13/service_contract

View on GitHub
lib/service_contract/abstract_type.rb

Summary

Maintainability
A
0 mins
Test Coverage
module ServiceContract
  AbstractType = Struct.new(:definition) do
    def name
      raise NotImplementedError, "need to implement `name`"
    end

    def subtype
      nil
    end

    def fields
      []
    end

    def valid_type?(value)
      valid_ruby_types.any?{|type| value.is_a?(type) }
    end

    def valid_value?(value)
      if valid_values.empty?
        true
      else
        valid_values.include?(value)
      end
    end

    def valid_values
      []
    end

    def valid_ruby_types
      [Object]
    end
  end
end