class Contracts::Keys
Public Class Methods
[](spec)
click to toggle source
# File lib/contracts/gen.rb, line 8 def self.[](spec) if !spec.key?(:required) and !spec.key?(:optional) raise ':required or :optional keys must be specified' end new(spec[:required], spec[:optional]) end
new(required, optional)
click to toggle source
# File lib/contracts/gen.rb, line 15 def initialize(required, optional) @required = required @optional = optional end
Public Instance Methods
generate()
click to toggle source
# File lib/contracts/gen.rb, line 28 def generate h = {} unless @required.nil? or @required.empty? @required.each do |(k, contract)| h[k] = ::Gen.generate(contract) end end unless @optional.nil? or @optional.empty? n = Faker::Number.between(0, @optional.keys.length) keys = @optional.keys.sample(n) keys.each do |k| contract = @optional[k] h[k] = ::Gen.generate(contract) end end h end
valid?(value)
click to toggle source
# File lib/contracts/gen.rb, line 20 def valid?(value) if not value.respond_to?(:[]) false else @required.all? { |(k, v)| Contract.valid?(value[k], v) } end end