Module: Musashi::Retriever::VisitorStrategist

Includes:
Base, Strategist
Included in:
DelegateHash
Defined in:
lib/musashi/retriever.rb

Instance Attribute Summary

Attributes included from Connection

#endpoint, #format

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Strategist

define, #define, define_by_behavior, define_by_name, retrievers_by_behavior, retrievers_by_behavior=, retrievers_by_name, retrievers_by_name=

Methods included from Base

#retrieve, #retrieved?

Methods included from Connection

#accept, #connection, #options

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(sym, *args, &block) ⇒ Object



109
110
111
112
113
114
115
116
117
118
# File 'lib/musashi/retriever.rb', line 109

def method_missing(sym,*args,&block)
  super unless args.empty?
  super unless has_key?(sym)

  value = self.fetch(sym.to_s) rescue self.fetch(sym) rescue nil
  return value if value.nil?

  define value, sym
  value
end

Class Method Details

.extend?(receiver) ⇒ Boolean

Returns:

  • (Boolean)


82
83
84
85
# File 'lib/musashi/retriever.rb', line 82

def self.extend?(receiver)
  !receiver.nil? && receiver.respond_to?(:keys) && \
  receiver.respond_to?(:fetch) && !receiver.is_a?(VisitorStrategist)
end

.extend_object(receiver) ⇒ Object

Raises:

  • (RuntimeError)


87
88
89
90
91
# File 'lib/musashi/retriever.rb', line 87

def self.extend_object(receiver)
  return if receiver.is_a?(VisitorStrategist)
  raise RuntimeError.new unless VisitorStrategist.extend? receiver
  super
end

Instance Method Details

#[](key) ⇒ Object



93
94
95
96
97
98
99
# File 'lib/musashi/retriever.rb', line 93

def [](key)
  return nil unless self.has_key?(key)
  value = self.fetch(key.to_s) rescue self.fetch(key) rescue nil
  return value if value.nil?
  define value,key.to_sym
  value
end

#has_key?(key) ⇒ Boolean

Returns:

  • (Boolean)


101
102
103
# File 'lib/musashi/retriever.rb', line 101

def has_key?(key)
  self.key?(key.to_s) || self.key?(key)
end

#respond_to?(method) ⇒ Boolean

Returns:

  • (Boolean)


105
106
107
# File 'lib/musashi/retriever.rb', line 105

def respond_to?(method)
  self.has_key?(method) ? true : super
end