lib/garb/resource.rb in garb-0.3.2 vs lib/garb/resource.rb in garb-0.4.0

- old
+ new

@@ -1,89 +1,92 @@ module Garb module Resource MONTH = 2592000 URL = "https://www.google.com/analytics/feeds/data" - def self.included(report) - report.extend(ResourceMethods) + %w(metrics dimensions filters sort).each do |parameter| + class_eval <<-CODE + def #{parameter}(*fields) + @#{parameter} ||= ReportParameter.new(:#{parameter}) + @#{parameter} << fields + end + + def clear_#{parameter} + @#{parameter} = ReportParameter.new(:#{parameter}) + end + CODE end - module ResourceMethods + # def metrics(*fields) + # @metrics ||= ReportParameter.new(:metrics) + # @metrics << fields + # end + # + # def dimensions(*fields) + # @dimensions ||= ReportParameter.new(:dimensions) + # @dimensions << fields + # end + # + # def filters(*hashes) + # @filters ||= ReportParameter.new(:filters) + # @filters << hashes + # end + # + # def sort(*fields) + # @sort ||= ReportParameter.new(:sort) + # @sort << fields + # end + # + # def clear_filters + # @filters = ReportParameter.new(:filters) + # end + # + # def clear_sort + # @sort = ReportParameter.new(:sort) + # end - def metrics(*fields) - @metrics ||= ReportParameter.new(:metrics) - @metrics << fields - end + def results(profile, opts = {}, &block) + @profile = profile.is_a?(Profile) ? profile : Profile.first(profile) - def dimensions(*fields) - @dimensions ||= ReportParameter.new(:dimensions) - @dimensions << fields - end + @start_date = opts.fetch(:start_date, Time.now - MONTH) + @end_date = opts.fetch(:end_date, Time.now) + @limit = opts.fetch(:limit, nil) + @offset = opts.fetch(:offset, nil) - def filter(*hash) - @filters << hash - end + instance_eval(&block) if block_given? - def filters - @filters ||= ReportParameter.new(:filters) - end + ReportResponse.new(send_request_for_body).results + end - def sort(*fields) - @sorts << fields - end + def page_params + {'max-results' => @limit, 'start-index' => @offset}.reject{|k,v| v.nil?} + end - def sorts - @sorts ||= ReportParameter.new(:sort) - end + def default_params + {'ids' => @profile.table_id, + 'start-date' => format_time(@start_date), + 'end-date' => format_time(@end_date)} + end - def results(profile, opts = {}, &block) - @profile = profile - - # clear filters and sort - @filters = ReportParameter.new(:filters) - @sorts = ReportParameter.new(:sort) - - @start_date = opts.fetch(:start_date, Time.now - MONTH) - @end_date = opts.fetch(:end_date, Time.now) - @limit = opts.fetch(:limit, nil) - @offset = opts.fetch(:offset, nil) - - instance_eval(&block) if block_given? - - ReportResponse.new(send_request_for_body).results + def params + [ + metrics.to_params, + dimensions.to_params, + sort.to_params, + filters.to_params, + page_params + ].inject(default_params) do |p, i| + p.merge(i) end + end - def page_params - {'max-results' => @limit, 'start-index' => @offset}.reject{|k,v| v.nil?} - end + def format_time(t) + t.strftime('%Y-%m-%d') + end - def default_params - {'ids' => @profile.table_id, - 'start-date' => format_time(@start_date), - 'end-date' => format_time(@end_date)} - end - - def params - [ - metrics.to_params, - dimensions.to_params, - sorts.to_params, - filters.to_params, - page_params - ].inject(default_params) do |p, i| - p.merge(i) - end - end - - def format_time(t) - t.strftime('%Y-%m-%d') - end - - def send_request_for_body - request = DataRequest.new(URL, params) - response = request.send_request - response.body - end - + def send_request_for_body + request = DataRequest.new(URL, params) + response = request.send_request + response.body end end end