Sha256: d68529f0de81626f1311e8d119df3690585f03acfb129b98db581adf90ee2a55

Contents?: true

Size: 926 Bytes

Versions: 8

Compression:

Stored size: 926 Bytes

Contents

module WialonApi
  # A mixin for classes that will resolve other classes' objects via `#method_missing`.
  module Resolver
    # A `Hashie::Mash` structure holding the name and sid of current instance.
    # @return [Hashie::Mash]
    def resolver
      @resolver ||= Hashie::Mash.new(name: @name, sid: sid)
    end

    private

    def create_namespace(name)
      WialonApi::Namespace.new(name, resolver: resolver)
    end

    def create_method(name)
      WialonApi::Method.new(name, resolver: resolver)
    end

    def call_method(args, &block)
      create_method(args.shift).call(args.first || {}, &block)
    end

    class << self
      # When this module is included, it undefines the `:send` instance method in the `base_class`
      # so it can be resolved via `method_missing`.
      def included(base_class)
        base_class.class_eval do
          undef_method :send
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
wialon_api-0.0.8 lib/wialon_api/resolver.rb
wialon_api-0.0.7 lib/wialon_api/resolver.rb
wialon_api-0.0.6 lib/wialon_api/resolver.rb
wialon_api-0.0.5 lib/wialon_api/resolver.rb
wialon_api-0.0.4 lib/wialon_api/resolver.rb
wialon_api-0.0.3 lib/wialon_api/resolver.rb
wialon_api-0.0.2 lib/wialon_api/resolver.rb
wialon_api-0.0.1 lib/wialon_api/resolver.rb