module Garb::Model
Constants
- MONTH
- URL
Public Class Methods
extended(base)
click to toggle source
# File lib/garb/model.rb, line 6 def self.extended(base) ProfileReports.add_report_method(base) # base.set_instance_klass(base) end
Public Instance Methods
all_results(profile, options = {})
click to toggle source
# File lib/garb/model.rb, line 49 def all_results(profile, options = {}) options = options.dup limit = options.delete(:limit) options[:limit] = 10_000 # maximum allowed results = nil while ((rs = results(profile, options)) && !rs.empty?) results = results ? results + rs : rs options[:offset] = results.size + 1 break if limit && results.size >= limit break if results.size >= results.total_results end limit && results ? results[0...limit] : results end
dimensions(*fields)
click to toggle source
# File lib/garb/model.rb, line 16 def dimensions(*fields) @dimensions ||= ReportParameter.new(:dimensions) @dimensions << fields end
instance_klass()
click to toggle source
# File lib/garb/model.rb, line 25 def instance_klass @instance_klass || OpenStruct end
metrics(*fields)
click to toggle source
# File lib/garb/model.rb, line 11 def metrics(*fields) @metrics ||= ReportParameter.new(:metrics) @metrics << fields end
results(profile, options = {})
click to toggle source
# File lib/garb/model.rb, line 29 def results(profile, options = {}) return all_results(profile, options) if options.delete(:all) start_date = options[:start_date] || Time.now - MONTH end_date = options[:end_date] || Time.now default_params = build_default_params(profile, start_date, end_date) param_set = [ default_params, metrics.to_params, dimensions.to_params, parse_filters(options).to_params, parse_segment(options), parse_sort(options).to_params, build_page_params(options) ] data = send_request_for_data(profile, build_params(param_set)) ReportResponse.new(data, instance_klass).results end
set_instance_klass(klass)
click to toggle source
# File lib/garb/model.rb, line 21 def set_instance_klass(klass) @instance_klass = klass end
Private Instance Methods
build_default_params(profile, start_date, end_date)
click to toggle source
# File lib/garb/model.rb, line 96 def build_default_params(profile, start_date, end_date) { 'ids' => Garb.to_ga(profile.id), 'start-date' => format_time(start_date), 'end-date' => format_time(end_date) } end
build_page_params(options)
click to toggle source
# File lib/garb/model.rb, line 104 def build_page_params(options) params = {} params['max-results'] = options[:limit] if options.has_key? :limit params['start-index'] = options[:offset] if options.has_key? :offset params end
build_params(param_set)
click to toggle source
# File lib/garb/model.rb, line 71 def build_params(param_set) param_set.inject({}) { |p,i| p.merge i }.reject { |k,v| v.nil? } end
format_time(t)
click to toggle source
# File lib/garb/model.rb, line 111 def format_time(t) t.strftime('%Y-%m-%d') end
parse_filters(options)
click to toggle source
# File lib/garb/model.rb, line 75 def parse_filters(options) FilterParameters.new(options[:filters]) end
parse_segment(options)
click to toggle source
# File lib/garb/model.rb, line 79 def parse_segment(options) # dirty hack to support dynamic segments if options.has_key?(:segment_id) segment = "gaid::#{options[:segment_id]}" elsif options.has_key?(:dynamic_segment) filters = FilterParameters.new(options[:dynamic_segment]) segment = "dynamic::#{filters.to_params['filters']}" end {'segment' => segment} end
parse_sort(options)
click to toggle source
# File lib/garb/model.rb, line 90 def parse_sort(options) sort = ReportParameter.new(:sort) sort << options[:sort] if options.has_key?(:sort) sort end
send_request_for_data(profile, params)
click to toggle source
# File lib/garb/model.rb, line 65 def send_request_for_data(profile, params) request = Request::Data.new(profile.session, URL, params) response = request.send_request response.body end