Sha256: 798f8f3e997517d86371bf673175b488fe8d1c9b012953321d3122077a6affa4

Contents?: true

Size: 759 Bytes

Versions: 1

Compression:

Stored size: 759 Bytes

Contents

module FlexStationData
  module Concerns
    module Callable
      class << self
        def [](verb)
          @@__callable_modules[verb] ||= Module.new.tap { |mod| __make_callable(mod, verb) }
        end

        private

        def __make_callable(mod, verb)
          class_methods = Module.new do
            define_method verb do |*args, &block|
              new(*args).send(verb, &block)
            end

            define_method :to_proc do
              Proc.new(&method(verb))
            end
          end

          mod.singleton_class.define_method :included do |base|
            base.extend class_methods
          end
        end
      end

      __make_callable(self, :call)

      @@__callable_modules = { call: self }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
flex-station-data-1.0.1 lib/flex_station_data/concerns/callable.rb