class AppEarnings::Amazon::Reporter
Generates a report based on the data provided
Constants
- AVAILABLE_FORMATS
Attributes
data[RW]
Public Class Methods
new(data)
click to toggle source
# File lib/app_earnings/amazon/reporter.rb, line 7 def initialize(data) @data = data @payments_data = @data.find { |r| r[:report_type] == :payments } @earnings_data = (@data - [@payments_data]).first @exchange_info = fetch_exchange_info end
Public Instance Methods
as_json()
click to toggle source
# File lib/app_earnings/amazon/reporter.rb, line 83 def as_json puts JSON.generate(apps: @reports.map(&:to_json), currency: 'USD', total: full_amount) end
as_text()
click to toggle source
# File lib/app_earnings/amazon/reporter.rb, line 70 def as_text amount = AppEarnings::Report.formatted_amount('USD', full_amount) refund = AppEarnings::Report.formatted_amount('USD', refunds) puts @reports puts "Total of refunds: #{refund}" puts "Total of all transactions: #{amount}" if @payments_full_amount.round(2) != full_amount puts "Total from Payment Report: #{@payments_full_amount.round(2)}" end @reports end
fetch_exchange_info()
click to toggle source
# File lib/app_earnings/amazon/reporter.rb, line 14 def fetch_exchange_info @payments_full_amount = 0.0 @payments_data[:summary].reduce({}) do |all_info, data| all_info[data[:marketplace]] = data[:fx_rate] @payments_full_amount += data[:total_payment].gsub(/,/, '').to_f all_info end end
full_amount()
click to toggle source
# File lib/app_earnings/amazon/reporter.rb, line 23 def full_amount total = @reports.reduce(0.0) { |a, e| a + e.amount.to_f } total - refunds end
generate()
click to toggle source
# File lib/app_earnings/amazon/reporter.rb, line 37 def generate @reports = [] @data.each do |raw_data| if raw_data[:report_type] == :earnings by_apps = raw_data[:details].group_by { |element| element[:app] } .sort_by { |app| app } by_apps.each do |key, application| @reports << AmazonReport.new(key, application, @exchange_info) end end end end
refunds()
click to toggle source
# File lib/app_earnings/amazon/reporter.rb, line 28 def refunds @earnings_data[:summary].reduce(0.0) do |sum, marketplace| currency = marketplace[:refunds_currency_code] amount = marketplace[:refunds].gsub(/\(|\)/, '').to_f amount = amount * @exchange_info[currency].to_f if currency != 'USD' sum + amount end end
render_as(format = 'text')
click to toggle source
# File lib/app_earnings/amazon/reporter.rb, line 61 def render_as(format = 'text') case format when 'text' as_text when 'json' as_json end end
report_as(format = 'text')
click to toggle source
# File lib/app_earnings/amazon/reporter.rb, line 51 def report_as(format = 'text') unless AVAILABLE_FORMATS.include?(format) fail "#{format} Not supported. Available formats are: " + " #{AVAILABLE_FORMATS.join(", ")}" end generate render_as(format) end