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