Class: Object
- Inherits:
- BasicObject
- Defined in:
- lib/extlib/blank.rb,
lib/extlib/object.rb
Instance Method Summary collapse
-
#blank? ⇒ TrueClass, FalseClass
Returns true if the object is nil or empty (if applicable).
-
#full_const_get(name) ⇒ Object
The constant corresponding to the name.
-
#full_const_set(name, value) ⇒ Object
The constant corresponding to the name.
-
#in?(arrayish, *more) ⇒ TrueClass, FalseClass
True if the object is included in arrayish (+ more).
- #instance_variable_defined?(variable) ⇒ Boolean
-
#make_module(str) ⇒ NilClass
Defines module from a string name (e.g. Foo::Bar::Baz) If module already exists, no exception raised.
-
#meta_class ⇒ Class
Extracts the singleton class, so that metaprogramming can be done on it.
-
#quacks_like?(duck) ⇒ TrueClass, FalseClass
True if the object quacks like duck.
-
#try_call(*args) ⇒ Object
If receiver is callable, calls it and returns result.
-
#try_dup ⇒ Object
Override this in a child if it cannot be dup’ed.
Instance Method Details
#blank? ⇒ TrueClass, FalseClass
Returns true if the object is nil or empty (if applicable)
[].blank? #=> true
[1].blank? #=> false
[nil].blank? #=> false
12 13 14 |
# File 'lib/extlib/blank.rb', line 12 def blank? nil? || (respond_to?(:empty?) && empty?) end |
#full_const_get(name) ⇒ Object
Returns The constant corresponding to the name.
64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/extlib/object.rb', line 64 def full_const_get(name) list = name.split("::") list.shift if list.first.blank? obj = self list.each do |x| # This is required because const_get tries to look for constants in the # ancestor chain, but we only want constants that are HERE obj = obj.const_defined?(x) ? obj.const_get(x) : obj.const_missing(x) end obj end |
#full_const_set(name, value) ⇒ Object
Returns The constant corresponding to the name.
80 81 82 83 84 85 86 87 |
# File 'lib/extlib/object.rb', line 80 def full_const_set(name, value) list = name.split("::") toplevel = list.first.blank? list.shift if toplevel last = list.pop obj = list.empty? ? Object : Object.full_const_get(list.join("::")) obj.const_set(last, value) if obj && !obj.const_defined?(last) end |
#in?(arrayish, *more) ⇒ TrueClass, FalseClass
Returns True if the object is included in arrayish (+ more).
160 161 162 163 |
# File 'lib/extlib/object.rb', line 160 def in?(arrayish,*more) arrayish = more.unshift(arrayish) unless more.empty? arrayish.include?(self) end |
#instance_variable_defined?(variable) ⇒ Boolean
171 172 173 |
# File 'lib/extlib/object.rb', line 171 def instance_variable_defined?(variable) instance_variables.include?(variable.to_s) end |
#make_module(str) ⇒ NilClass
Defines module from a string name (e.g. Foo::Bar::Baz) If module already exists, no exception raised.
95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/extlib/object.rb', line 95 def make_module(str) mod = str.split("::") current_module = self mod.each do |x| unless current_module.const_defined?(x) current_module.class_eval "module #{x}; end", __FILE__, __LINE__ end current_module = current_module.const_get(x) end current_module end |
#meta_class ⇒ Class
Extracts the singleton class, so that metaprogramming can be done on it.
59 |
# File 'lib/extlib/object.rb', line 59 def () class << self; self end end |
#quacks_like?(duck) ⇒ TrueClass, FalseClass
The behavior of the method depends on the type of duck as follows:
- Symbol
-
Check whether the object respond_to?(duck).
- Class
-
Check whether the object is_a?(duck).
- Array
-
Check whether the object quacks_like? at least one of the options in the array.
Returns True if the object quacks like duck.
119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/extlib/object.rb', line 119 def quacks_like?(duck) case duck when Symbol self.respond_to?(duck) when Class self.is_a?(duck) when Array duck.any? {|d| self.quacks_like?(d) } else false end end |
#try_call(*args) ⇒ Object
If receiver is callable, calls it and returns result. If not, just returns receiver itself
144 145 146 147 148 149 150 |
# File 'lib/extlib/object.rb', line 144 def try_call(*args) if self.respond_to?(:call) self.call(*args) else self end end |
#try_dup ⇒ Object
Override this in a child if it cannot be dup’ed
135 136 137 |
# File 'lib/extlib/object.rb', line 135 def try_dup self.dup end |