class Gogcom::Sale

Public Class Methods

new(options) click to toggle source
# File lib/gogcom/sale.rb, line 4
def initialize(options)
  @type = options[:type] || nil
  @limit = options[:limit] || nil
end

Public Instance Methods

get() click to toggle source

Main method to get sales data.

# File lib/gogcom/sale.rb, line 10
def get()
  parse(fetch())
end

Private Instance Methods

fetch() click to toggle source

Fetches raw data from source.

@return [Object]

# File lib/gogcom/sale.rb, line 19
def fetch()
  url = "http://www.gog.com/"
  page = Net::HTTP.get(URI(url))
  @data = JSON.parse(page[/(?<=var gogData = )(.*)(?=;)/,1])
end
get_current_price(data) click to toggle source
# File lib/gogcom/sale.rb, line 60
def get_current_price(data)
  data["price"]["symbol"] + data["price"]["amount"]
end
get_discount_amount(data) click to toggle source
# File lib/gogcom/sale.rb, line 72
def get_discount_amount(data)
  data["price"]["symbol"] + data["price"]["discountDifference"]
end
get_discount_percentage(data) click to toggle source
# File lib/gogcom/sale.rb, line 68
def get_discount_percentage(data)
  data["price"]["discountPercentage"]
end
get_original_price(data) click to toggle source
# File lib/gogcom/sale.rb, line 64
def get_original_price(data)
  data["price"]["symbol"] + data["price"]["baseAmount"]
end
get_title(data) click to toggle source
# File lib/gogcom/sale.rb, line 56
def get_title(data)
  data["title"]
end
is_game?(data) click to toggle source
# File lib/gogcom/sale.rb, line 76
def is_game?(data)
  data["isGame"]
end
is_movie?(data) click to toggle source
# File lib/gogcom/sale.rb, line 80
def is_movie?(data)
  data["isMovie"]
end
parse(data) click to toggle source

Parses raw data and returns sale items.

@return [Array]

# File lib/gogcom/sale.rb, line 28
def parse(data)
  items = []

  data["on_sale"].each do |item|
    sale_item = SaleItem.new(get_title(item), get_current_price(item),
      get_original_price(item), get_discount_percentage(item),
      get_discount_amount(item))

    if @type.nil?
      items.push(sale_item)
    else
      if (@type == "games" && is_game?(item))
        items.push(sale_item)
      end

      if (@type == "movies" && is_movie?(item))
        items.push(sale_item)
      end
    end
  end

  unless @limit.nil?
    items.take(@limit)
  else
    items
  end
end