Sha256: 537d56e41cbe9acc7443de1c52c6a9f1fa80e40b12061b3b8bde6e7258e2139b

Contents?: true

Size: 1.07 KB

Versions: 1

Compression:

Stored size: 1.07 KB

Contents

module Zertico
  class Accessor
    def initialize(object)
      instance_variable_set("@#{interface_name}", object)
    end

    def self.find(id)
      new(interface_class.find(id))
    end

    def interface
      instance_variable_get("@#{interface_name}")
    end

    def method_missing(method_name, *args)
      if instance_variable_get("@#{interface_name}").respond_to?(method_name)
        return instance_variable_get("@#{interface_name}").send(method_name, *args)
      end
      super
    end

    def respond_to_missing?(method_name, include_private = false)
      return true if interface_class.respond_to?(method_name)
      super
    end

    protected

    def self.interface_name
      self.interface_class.name.singularize.underscore
    end

    def self.interface_class
      begin
        self.name.chomp('Accessor').constantize
      rescue NameError
        self.name.chomp('Accessor').split('::').last.constantize
      end
    end

    def interface_name
      self.class.interface_name
    end

    def interface_class
      self.class.interface_class
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
zertico-0.5.4 lib/zertico/accessor.rb