class Twitter::Base

Attributes

attrs[R]

@return [Hash]

to_h[R]

@return [Hash]

to_hash[R]

@return [Hash]

Public Class Methods

attr_reader(*attrs) click to toggle source

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
define_attribute_method(key1, klass = nil, key2 = nil) click to toggle source

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
define_predicate_method(key1, key2 = key1) click to toggle source

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
define_uri_method(key1, key2) click to toggle source

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
deprecate_attribute_method(key) click to toggle source

@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
display_uri_attr_reader() click to toggle source

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
new(attrs = {}) click to toggle source

Initializes a new object

@param attrs [Hash] @return [Twitter::Base]

# File lib/twitter/base.rb, line 125
def initialize(attrs = {})
  @attrs = attrs || {}
end
object_attr_reader(klass, key1, key2 = nil) click to toggle source

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
predicate_attr_reader(*attrs) click to toggle source
# 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
uri_attr_reader(*attrs) click to toggle source

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

[](method) click to toggle source

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

attr_falsey_or_empty?(key) click to toggle source
# 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
attrs_for_object(key1, key2 = nil) click to toggle source
# 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