Module: Implementation::ImplMethods

Defined in:
lib/definition.rb

Constant Summary collapse

NEW =
Class.instance_method(:new)

Instance Method Summary collapse

Instance Method Details

#assert_args(name, args) ⇒ Object



166
167
168
169
# File 'lib/definition.rb', line 166

def assert_args(name, args)
  defns = @define_table[name]
  defns.each {|defn| defn.assert_args(args)}
end

#assert_implemented(once = false) ⇒ Object



159
160
161
162
163
164
165
# File 'lib/definition.rb', line 159

def assert_implemented(once = false)
  nodefs = @define_table.keys - instance_methods(true).map{|m|m.to_sym}
  unless nodefs.empty?
    raise NotImplementedError, "not implemented #{nodefs.join(', ')}"
  end
  @skip_assertion ||= once
end

#assert_ret(name, ret) ⇒ Object



170
171
172
173
174
# File 'lib/definition.rb', line 170

def assert_ret(name, ret)
  defns = @define_table[name]
  defns.each {|defn| defn.assert_ret(ret)}
  return ret
end

#define(ret = Definition::Const::Any) ⇒ Object



149
150
151
152
# File 'lib/definition.rb', line 149

def define(ret=Definition::Const::Any)
  defn = Definition.new(ret, self)
  return defn.to_enroll(@define_table)
end

#impl_initialize(table = {}) ⇒ Object



175
176
177
# File 'lib/definition.rb', line 175

def impl_initialize(table = {})
  @define_table = table
end

#implement(interface) ⇒ Object



153
154
155
156
157
158
# File 'lib/definition.rb', line 153

def implement(interface)
  interface.each do |name, defs|
    @define_table[name] ||= []
    @define_table[name] += defs
  end
end

#newObject



145
146
147
148
# File 'lib/definition.rb', line 145

def new
  assert_implemented unless @skip_assertion
  NEW.bind(self).call
end