lib/legato/query.rb in legato-0.5.1 vs lib/legato/query.rb in legato-0.5.2

- old
+ new

@@ -3,10 +3,16 @@ include Enumerable MONTH = 2592000 REQUEST_FIELDS = 'columnHeaders/name,rows,totalResults,totalsForAllResults' + VALID_TRACKING_SCOPES = { + 'ga' => 'ga', + 'mcf' => 'mcf', + 'rt' => 'realtime' + } + def define_filter(name, &block) (class << self; self; end).instance_eval do define_method(name) {|*args| apply_filter(*args, &block)} end end @@ -27,11 +33,11 @@ end end attr_reader :parent_klass attr_accessor :profile, :start_date, :end_date - attr_accessor :sort, :limit, :offset, :quota_user, :sampling_level #, :segment # individual, overwritten + attr_accessor :sort, :limit, :offset, :quota_user, :user_ip, :sampling_level, :segment_id #, :segment # individual, overwritten attr_accessor :filters, :segment_filters # combined, can be appended to attr_accessor :tracking_scope def initialize(klass, tracking_scope = "ga") @loaded = false @@ -89,11 +95,11 @@ self end def apply_basic_options(options) - [:sort, :limit, :offset, :start_date, :end_date, :quota_user, :sampling_level].each do |key| #:segment + [:sort, :limit, :offset, :start_date, :end_date, :quota_user, :user_ip, :sampling_level, :segment_id].each do |key| #:segment self.send("#{key}=".to_sym, options[key]) if options.has_key?(key) end end # def apply_filter_options(filter_options) @@ -187,13 +193,13 @@ def segment "sessions::condition::#{segment_filters.to_params}" if segment_filters.any? end - # def segment_id - # segment.nil? ? nil : "gaid::#{segment}" - # end + def segment_id=(segment_id) + @segment_id = "gaid::#{segment_id}" + end def profile_id profile && Legato.to_ga_string(profile.id) end @@ -211,14 +217,15 @@ 'ids' => profile_id, 'start-date' => Legato.format_time(start_date), 'end-date' => Legato.format_time(end_date), 'max-results' => limit, 'start-index' => offset, - 'segment' => segment, + 'segment' => segment_id || segment, 'filters' => filters.to_params, # defaults to AND filtering 'fields' => REQUEST_FIELDS, 'quotaUser' => quota_user, + 'userIp' => user_ip, 'samplingLevel' => sampling_level } [metrics, dimensions, sort].each do |list| params.merge!(list.to_params(tracking_scope)) unless list.nil? @@ -226,14 +233,26 @@ params.reject {|k,v| v.nil? || v.to_s.strip.length == 0} end def to_query_string - list = to_params.map {|k,v| [k,v].join("=")} - "?#{list.join("&")}" + to_params.map {|k,v| [k,v].join("=")}.join("&") end + def base_url + raise "invalid tracking_scope" unless tracking_scope_valid? + + endpoint = VALID_TRACKING_SCOPES[tracking_scope] + + "https://www.googleapis.com/analytics/v3/data/#{endpoint}" + end + private + + def tracking_scope_valid? + VALID_TRACKING_SCOPES.keys.include?(tracking_scope) + end + def request_for_query profile.user.request(self) end end end