Module: Rewrite::With

Included in:
Rewrite
Defined in:
lib/rewrite/with.rb

Defined Under Namespace

Modules: ClassMethods, InstanceMethods

Class Method Summary collapse

Class Method Details

.expand(*sexp_processors, &body) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/rewrite/with.rb', line 15

def self.expand(*sexp_processors, &body)
  rewritten = sexp_processors.flatten.inject(body.to_sexp.last) { |sexp, sexp_processor_parameter|  
    if sexp_processor_parameter.respond_to?(:new) && sexp_processor_parameter.kind_of?(Class)
      sexp_processor = sexp_processor_parameter.new
    else
      sexp_processor = sexp_processor_parameter
    end
    sexp_processor.process(sexp)
  }
  rewritten = eval(rewritten.to_s) # i don't know why i need this!!
  Ruby2Ruby.new.process(rewritten)
end

.included(receiver) ⇒ Object



48
49
50
51
# File 'lib/rewrite/with.rb', line 48

def self.included(receiver)
  receiver.extend         ClassMethods
  receiver.send :include, InstanceMethods
end

.with(*sexp_processors, &body) ⇒ Object



10
11
12
13
# File 'lib/rewrite/with.rb', line 10

def self.with(*sexp_processors, &body)
  ruby = expand(*sexp_processors, &body)
  eval(ruby, body.binding())
end