Sha256: 45715da8cef2c967839538d06477041eeb21133df664dcd22afbdd5c5373994e

Contents?: true

Size: 1.4 KB

Versions: 32

Compression:

Stored size: 1.4 KB

Contents

module Intercom
  module Lib
    class DynamicAccessorsOnMethodMissing

      attr_reader :method_sym, :method_string, :arguments, :object, :klass

      def initialize(method_sym, *arguments, object)
        @method_sym = method_sym
        @method_string = method_sym.to_s
        @arguments = arguments
        @klass = object.class
        @object = object
      end

      def define_accessors_or_call(&block)
        return yield if not_an_accessor?
        if setter?
          Lib::DynamicAccessors.define_accessors(attribute_name, *arguments, object)
          object.send(method_sym, *arguments)
        else # getter
          if trying_to_access_private_variable?
            yield
          else
            raise Intercom::AttributeNotSetError, attribute_not_set_error_message
          end
        end
      end

      private

      def not_an_accessor?
        (method_string.end_with? '?') || (method_string.end_with? '!') || arguments.length > 1
      end

      def setter?
        method_string.end_with? '='
      end

      def attribute_name
        method_string.gsub(/=$/, '')
      end

      def trying_to_access_private_variable?
        object.instance_variable_defined?("@#{method_string}")
      end

      def attribute_not_set_error_message
        "'#{method_string}' called on #{klass} but it has not been set an " +
        "attribute or does not exist as a method"
      end
    end
  end
end

Version data entries

32 entries across 32 versions & 2 rubygems

Version Path
cogniteev-intercom-2.5.4 lib/intercom/lib/dynamic_accessors_on_method_missing.rb
intercom-3.1.0 lib/intercom/lib/dynamic_accessors_on_method_missing.rb
intercom-3.0.6 lib/intercom/lib/dynamic_accessors_on_method_missing.rb
intercom-3.0.5 lib/intercom/lib/dynamic_accessors_on_method_missing.rb
intercom-3.0.4 lib/intercom/lib/dynamic_accessors_on_method_missing.rb
intercom-3.0.3 lib/intercom/lib/dynamic_accessors_on_method_missing.rb
intercom-3.0.2 lib/intercom/lib/dynamic_accessors_on_method_missing.rb
intercom-3.0.0 lib/intercom/lib/dynamic_accessors_on_method_missing.rb
intercom-3.0.0b1 lib/intercom/lib/dynamic_accessors_on_method_missing.rb
intercom-2.5.4 lib/intercom/lib/dynamic_accessors_on_method_missing.rb
intercom-2.4.4 lib/intercom/lib/dynamic_accessors_on_method_missing.rb
intercom-2.4.3 lib/intercom/lib/dynamic_accessors_on_method_missing.rb
intercom-2.4.2 lib/intercom/lib/dynamic_accessors_on_method_missing.rb
intercom-2.4.1 lib/intercom/lib/dynamic_accessors_on_method_missing.rb
intercom-2.4.0 lib/intercom/lib/dynamic_accessors_on_method_missing.rb
intercom-2.3.0 lib/intercom/lib/dynamic_accessors_on_method_missing.rb
intercom-2.2.4 lib/intercom/lib/dynamic_accessors_on_method_missing.rb
intercom-2.2.3 lib/intercom/lib/dynamic_accessors_on_method_missing.rb
intercom-2.2.2 lib/intercom/lib/dynamic_accessors_on_method_missing.rb
intercom-2.2.1 lib/intercom/lib/dynamic_accessors_on_method_missing.rb