Sha256: 3af3aa3fdb3428cb55817fef74cbbad7d1d6650a901b9351925d359cd532f20a
Contents?: true
Size: 1.03 KB
Versions: 3
Compression:
Stored size: 1.03 KB
Contents
# -*- encoding : utf-8 -*- module Dao class Api class DSL < BlankSlate attr_accessor :api def initialize(api) @api = api #@evaluate = Object.instance_method(:instance_eval).bind(self) end def evaluate(&block) #@evaluate.call(&block) @api.module_eval(&block) ensure #no_docs_left_on_stack! end def no_docs_left_on_stack! raise "no interface for #{ docs.inspect }" unless docs.empty? end %w( interface call doc docs description desc ).each do |method| module_eval <<-__, __FILE__, __LINE__ - 1 def #{ method }(*args, &block) api.#{ method }(*args, &block) end __ end end class << Api def evaluate(&block) @dsl ||= DSL.new(self) @dsl.evaluate(&block) end alias_method('configure', 'evaluate') end end def Dao.api(&block) if block Class.new(Api).tap{|api| api.evaluate(&block)} else Class.new(Api) end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
dao-8.0.1 | lib/dao/api/dsl.rb |
dao-8.0.0 | lib/dao/api/dsl.rb |
dao-7.0.0 | lib/dao/api/dsl.rb |