class Twitter::Base
Attributes
@return [Hash]
@return [Hash]
@return [Hash]
Public Class Methods
Define methods that retrieve the value from attributes
@param attrs [Array, Symbol]
# File lib/twitter/base.rb, line 22 def attr_reader(*attrs) attrs.each do |attr| define_attribute_method(attr) define_predicate_method(attr) end end
Dynamically define a method for an attribute
@param key1 [Symbol] @param klass [Symbol] @param key2 [Symbol]
# File lib/twitter/base.rb, line 86 def define_attribute_method(key1, klass = nil, key2 = nil) define_method(key1) do || if attr_falsey_or_empty?(key1) NullObject.new elsif klass.nil? @attrs[key1] else attrs = attrs_for_object(key1, key2) Twitter.const_get(klass).new(attrs) end end memoize(key1) end
Dynamically define a predicate method for an attribute
@param key1 [Symbol] @param key2 [Symbol]
# File lib/twitter/base.rb, line 113 def define_predicate_method(key1, key2 = key1) define_method(:"#{key1}?") do || !attr_falsey_or_empty?(key2) end memoize(:"#{key1}?") end
Dynamically define a method for a URI
@param key1 [Symbol] @param key2 [Symbol]
# File lib/twitter/base.rb, line 74 def define_uri_method(key1, key2) define_method(key1) do || Addressable::URI.parse(@attrs[key2].chomp('#')) unless @attrs[key2].nil? end memoize(key1) end
@param key [Symbol]
# File lib/twitter/base.rb, line 101 def deprecate_attribute_method(key) define_method(key) do || warn "#{Kernel.caller.first}: [DEPRECATION] ##{key} is deprecated. Use ##{key}? instead." @attrs[key] end memoize(key) end
Define display_uri attribute methods
# File lib/twitter/base.rb, line 63 def display_uri_attr_reader define_attribute_method(:display_url) alias_method(:display_uri, :display_url) define_predicate_method(:display_uri, :display_url) alias_method(:display_url?, :display_uri?) end
Initializes a new object
@param attrs [Hash] @return [Twitter::Base]
# File lib/twitter/base.rb, line 125 def initialize(attrs = {}) @attrs = attrs || {} end
Define object methods from attributes
@param klass [Symbol] @param key1 [Symbol] @param key2 [Symbol]
# File lib/twitter/base.rb, line 41 def object_attr_reader(klass, key1, key2 = nil) define_attribute_method(key1, klass, key2) define_predicate_method(key1) end
# File lib/twitter/base.rb, line 29 def predicate_attr_reader(*attrs) attrs.each do |attr| define_predicate_method(attr) deprecate_attribute_method(attr) end end
Define URI methods from attributes
@param attrs [Array, Symbol]
# File lib/twitter/base.rb, line 49 def uri_attr_reader(*attrs) attrs.each do |uri_key| array = uri_key.to_s.split('_') index = array.index('uri') array[index] = 'url' url_key = array.join('_').to_sym define_uri_method(uri_key, url_key) alias_method(url_key, uri_key) define_predicate_method(uri_key, url_key) alias_method(:"#{url_key}?", :"#{uri_key}?") end end
Public Instance Methods
Fetches an attribute of an object using hash notation
@param method [String, Symbol] Message to send to the object
# File lib/twitter/base.rb, line 132 def [](method) warn "#{Kernel.caller.first}: [DEPRECATION] #[#{method.inspect}] is deprecated. Use ##{method} to fetch the value." send(method.to_sym) rescue NoMethodError nil end
Private Instance Methods
# File lib/twitter/base.rb, line 141 def attr_falsey_or_empty?(key) @attrs[key].nil? || @attrs[key] == false || @attrs[key].respond_to?(:empty?) && @attrs[key].empty? end
# File lib/twitter/base.rb, line 145 def attrs_for_object(key1, key2 = nil) if key2.nil? @attrs[key1] else attrs = @attrs.dup attrs.delete(key1).merge(key2 => attrs) end end