class GiantBombApi::Resource::Factory

Public Class Methods

constant_for(resource_name) click to toggle source
# File lib/giant_bomb_api/resource/factory.rb, line 31
def self.constant_for(resource_name)
  "GiantBombApi::Resource::#{resource_name.to_s.classify}"
end
discover_resource_name(string) click to toggle source
# File lib/giant_bomb_api/resource/factory.rb, line 19
def self.discover_resource_name(string)
  return unless string
  match_data = string.match("/api/(?<resource_name>[a-z_]*)/")
  return if match_data.nil?
  return match_data["resource_name"]
end
init_object(resource_name, json) click to toggle source
# File lib/giant_bomb_api/resource/factory.rb, line 13
def self.init_object(resource_name, json)
  if resource_exists? resource_name
    constant_for(resource_name).constantize.new(json)
  end
end
init_resource_from(json, attribute_name: nil, resource_name: nil) click to toggle source
# File lib/giant_bomb_api/resource/factory.rb, line 4
def self.init_resource_from(json, attribute_name: nil, resource_name: nil)
  resource_name ||= discover_resource_name(json["api_detail_url"])
  resource_name ||= attribute_name if resource_exists?(attribute_name)
  resource_name ||= attribute_name.to_s.singularize if resource_exists?(attribute_name.to_s.singularize)
  return if resource_name.nil?

  init_object(resource_name, json)
end
resource_exists?(resource_name) click to toggle source
# File lib/giant_bomb_api/resource/factory.rb, line 26
def self.resource_exists?(resource_name)
  return false unless resource_name.present?
  Object.const_defined? constant_for(resource_name)
end