module Myco::MemeBindable
Public Instance Methods
declare_meme(name, decorations=[], body=nil, cscope=nil, &blk)
click to toggle source
# File lib/myco/bootstrap/meme.rb, line 8 def declare_meme name, decorations=[], body=nil, cscope=nil, &blk meme = Meme.new self, name if cscope && blk body = blk.block.dup blk = nil body.instance_variable_set(:@constant_scope, cscope) end meme.body = body || blk decorations = decorations.map do |decoration, arguments| decorators = main.category(:decorators) decorators = decorators && decorators.instance unless Rubinius::Type.object_respond_to?(decorators, decoration) reason = if !decorators "#{self} has no [decorators] category." else "Known decorators in #{decorators}: " \ "#{decorators.component.memes.keys.inspect}." end raise KeyError, "Unknown decorator for #{self}##{name}: '#{decoration}'. #{reason}" end [decorators.__send__(decoration), arguments] end decorations.each { |deco, args| deco.transforms.apply meme, *args } decorations.each { |deco, args| deco.apply meme, *args } meme.bind meme end
memes()
click to toggle source
# File lib/myco/bootstrap/meme.rb, line 4 def memes @memes ||= Rubinius::LookupTable.new end