Sha256: a24cd11cc16f54e9cbaee431eaa978ff14608ba9bca8b1bae7717e068ba2a372

Contents?: true

Size: 1.21 KB

Versions: 1

Compression:

Stored size: 1.21 KB

Contents

module DataMapper
  module Persevere
    def self.enhance(object)
      Persevere::Proxy[object]
    end
    
    class Proxy
      instance_methods.each do |m|
        undef_method(m) if m.to_s !~ /(?:^__|^nil\?$|^send$|^object_id$|^extend$)/
      end
      
      def raise(*args)
        ::Object.send(:raise, *args)
      end
      
      def self.[](target)
        proxy = self.new(target)
        
        case target
        when DataMapper::Resource
          proxy.extend(JSONSupport::Core)
          proxy.extend(JSONSupport::Resource)
        when DataMapper::Model
          proxy.extend(JSONSupport::Core)
          proxy.extend(JSONSupport::Model)
          proxy.extend(JSONSupport::Model::Properties)
        when DataMapper::Property
          proxy.extend(JSONSupport::Core)
          proxy.extend(JSONSupport::Property)
        when DataMapper::Query
          proxy.extend(Persevere::Query)
        else
          return target
        end
        return proxy
      end
      
      def initialize(target)
        
        @target = target
      end
      
      def method_missing(method, *args, &block)
        @target.send(method, *args, &block)
      end
      
    end # Proxy
  end # Persevere
end # DataMapper

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dm-persevere-adapter-0.72.0 lib/persevere_adapter/enhance.rb