Sha256: a3ac36da32dfc8316f16143d3b9e1b3c33ab4c63ea35f5fad419be4feddd7e0e

Contents?: true

Size: 730 Bytes

Versions: 1

Compression:

Stored size: 730 Bytes

Contents

# frozen_string_literal: true

module FlexStationData
  module Concerns
    module Callable
      class << self
        def included(base)
          base.include with(:call)
        end

        def with(verb)
          callable_modules[verb.to_sym] ||= Module.new do
            define_singleton_method(:included) do |base|
              base.define_singleton_method(verb) do |*args|
                new(*args).public_send(verb)
              end

              base.define_singleton_method(:to_proc) do
                method(verb).to_proc
              end
            end
          end
        end

        alias [] with

        def callable_modules
          @callable_modules ||= {}
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

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