Sha256: b8680bec3685d3153c388868b664ab1da75da2f046ca09d57360d993f297bc7f

Contents?: true

Size: 1.05 KB

Versions: 1

Compression:

Stored size: 1.05 KB

Contents

module MongoDoc
  module Document
    class ParentProxy
      attr_reader :assoc_name, :_parent

      def initialize(parent, assoc_name)
        raise ArgumentError.new('ParentProxy requires a parent') if parent.nil?
        raise ArgumentError.new('ParentProxy require an association name') if assoc_name.blank?
        @_parent = parent
        @assoc_name = assoc_name
      end

      def path_to_root(attrs)
        assoc_attrs = attrs.inject({}) do |assoc_attrs, (key, value)|
          assoc_attrs["#{assoc_name}.#{key}"] = value
          assoc_attrs
        end
        _parent.path_to_root(assoc_attrs)
      end

      private

      def method_missing(method, *args)
        unless @_parent.respond_to?(method)
          message = "undefined method `#{method.to_s}' for proxied \"#{@_parent}\":#{@_parent.class.to_s}"
          raise NoMethodError, message
        end

        if block_given?
          @_parent.send(method, *args)  { |*block_args| yield(*block_args) }
        else
          @_parent.send(method, *args)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mongodoc-0.0.0 lib/mongodoc/parent_proxy.rb