Module: Laurel

Defined in:
lib/laurel.rb,
lib/laurel/proxy.rb,
lib/laurel/version.rb,
lib/laurel/operator.rb,
lib/laurel/core_refine.rb

Defined Under Namespace

Modules: Operator, Refine Classes: Proxy

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.and(a, b) ⇒ Object



8
9
10
11
12
13
# File 'lib/laurel.rb', line 8

def and a, b
  Laurel.proxy([:==, :!=, :!]) { |name, *args, &block|
       a.__send__(name, *args, &block)    \
    && b.__send__(name, *args, &block)
  }
end

.not(a) ⇒ Object



24
25
26
27
28
# File 'lib/laurel.rb', line 24

def not a
  Laurel.proxy([:==, :!=, :!]) { |name, *args, &block|
    !a.__send__(name, *args, &block)
  }
end

.or(a, b) ⇒ Object



16
17
18
19
20
21
# File 'lib/laurel.rb', line 16

def or a, b
  Laurel.proxy([:==, :!=, :!]) { |name, *args, &block|
       a.__send__(name, *args, &block)    \
    || b.__send__(name, *args, &block)
  }
end

.proxy(ignores = [], &block) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/laurel/proxy.rb', line 13

def proxy ignores = [], &block
  Class.new(Laurel::Proxy) {
    def initialize &block
      super &block
    end
    ignores.each { |name|
      define_method(name){ |*args, &block|
        method_missing name, *args, &block
      }
    }
  }.new(&block)
end

.proxy_all(&block) ⇒ Object



27
28
29
# File 'lib/laurel/proxy.rb', line 27

def proxy_all &block
  Laurel.proxy BasicObject.instance_methods, &block
end