Sha256: 45a079b39fa9c1377eb6d351f51e840bc1d0699a746de5c426a926db64af6b36

Contents?: true

Size: 1.24 KB

Versions: 7

Compression:

Stored size: 1.24 KB

Contents

require 'rest-core/middleware'

class RestCore::Defaults
  def self.members; [:defaults]; end
  include RestCore::Middleware

  # the use of singleton_class is making serialization hard!
  # def initialize app, defaults
  #   super
  #   singleton_class.module_eval do
  #     defaults.each{ |(key, value)|
  #       define_method(key) do |env|
  #         if value.respond_to?(:call)
  #           value.call
  #         else
  #           value
  #         end
  #       end
  #     }
  #   end
  # end

  def method_missing msg, *args, &block
    env = args.first
    if env.kind_of?(Hash) && (d = defaults(env)) && d.key?(msg)
      if (value = defaults(env)[msg]).respond_to?(:call)
        value.call
      else
        value
      end
    else
      super
    end
  end

  def respond_to? msg
    # since psych would call respond_to? before setting up
    # instance variables when restoring ruby objects, we might
    # be accessing undefined ivars in that case even all ivars are
    # defined in initialize. we can't avoid this because we can't
    # use singleton_class (otherwise we can't serialize this)
    return super unless instance_variable_defined?(:@defaults)
    if (d = defaults({})) && d.key?(msg)
      true
    else
      super
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
rest-core-0.7.2 lib/rest-core/middleware/defaults.rb
rest-core-0.7.0 lib/rest-core/middleware/defaults.rb
rest-core-0.4.0 lib/rest-core/middleware/defaults.rb
rest-core-0.4.0.pre.2 lib/rest-core/middleware/defaults.rb
rest-core-0.4.0.pre.1 lib/rest-core/middleware/defaults.rb
rest-core-0.4.0.pre.0 lib/rest-core/middleware/defaults.rb
rest-core-0.3.0 lib/rest-core/middleware/defaults.rb