Sha256: 7bcb865fecb52e4b24d7d6de57dfcc14313a35b335d132ecb6a2b3602426f4f0

Contents?: true

Size: 1.08 KB

Versions: 6

Compression:

Stored size: 1.08 KB

Contents

module Danica
  module DSL
    def self.register_operator(method, clazz=nil)
      register(method, clazz, 'Danica::Operator')
    end

    def self.register_wrapper(method, clazz=nil)
      register(method, clazz, 'Danica::Wrapper')
    end

    def self.register(method, clazz=nil, base=nil)
      define_method method do |*args|
        clazz = [base.to_s, method.to_s.camelize].compact.join('::').constantize unless clazz
        clazz = [base, clazz.to_s].compact.join('::').constantize unless clazz.is_a? Class
        clazz.new(*args)
      end
    end

    def function(*variables, &block)
      Function.build(*variables, &block).new
    end
  end

  %i(
    addition multiplication division sin cos power
    squared_root exponential
  ).each do |method|
    DSL.register_operator(method)
  end

  %i(number group negative plus_minus variable constant).each do |method|
    DSL.register_wrapper(method)
  end

  DSL.register_wrapper  :num,     :Number
  DSL.register_operator :sum,     :Addition
  DSL.register_operator :product, :Multiplication
  DSL.register_operator :sqrt,    :SquaredRoot
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
danica-2.6.1 lib/danica/dsl.rb
danica-2.6.0 lib/danica/dsl.rb
danica-2.5.1 lib/danica/dsl.rb
danica-2.5.0 lib/danica/dsl.rb
danica-2.4.4 lib/danica/dsl.rb
danica-2.4.3 lib/danica/dsl.rb