garb 0.9.1 → 0.9.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +3 -0
- data/.travis.yml +7 -0
- data/CHANGELOG.md +95 -0
- data/Gemfile +15 -0
- data/README.md +47 -25
- data/Rakefile +8 -34
- data/garb.gemspec +22 -0
- data/lib/garb.rb +71 -48
- data/lib/garb/attributes.rb +35 -0
- data/lib/garb/core_ext/array.rb +13 -0
- data/lib/garb/core_ext/string.rb +48 -0
- data/lib/garb/core_ext/symbol.rb +59 -0
- data/lib/garb/destination.rb +5 -6
- data/lib/garb/errors.rb +20 -0
- data/lib/garb/filter_parameters.rb +20 -29
- data/lib/garb/management/account.rb +10 -16
- data/lib/garb/management/feed.rb +4 -5
- data/lib/garb/management/goal.rb +10 -15
- data/lib/garb/management/profile.rb +11 -20
- data/lib/garb/management/segment.rb +9 -15
- data/lib/garb/management/web_property.rb +11 -16
- data/lib/garb/model.rb +37 -13
- data/lib/garb/path_attribute.rb +7 -0
- data/lib/garb/report_parameter.rb +5 -5
- data/lib/garb/report_response.rb +29 -28
- data/lib/garb/reports/bounces.rb +1 -1
- data/lib/garb/reports/exits.rb +1 -1
- data/lib/garb/reports/pageviews.rb +1 -1
- data/lib/garb/reports/unique_pageviews.rb +1 -1
- data/lib/garb/reports/visits.rb +1 -1
- data/lib/garb/request/authentication.rb +54 -0
- data/lib/garb/request/data.rb +98 -0
- data/lib/garb/result_set.rb +23 -9
- data/lib/garb/session.rb +3 -3
- data/lib/garb/step.rb +4 -4
- data/lib/garb/support.rb +6 -0
- data/lib/garb/version.rb +3 -3
- data/test/fixtures/account_management.json +1 -0
- data/test/fixtures/ga_profile_management.json +1 -0
- data/test/fixtures/ga_segment_management.json +1 -0
- data/test/fixtures/ga_webproperty_management.json +1 -0
- data/test/fixtures/goal_management.json +1 -0
- data/test/fixtures/profile_feed.json +1 -0
- data/test/fixtures/report_feed.json +75 -0
- data/test/test_helper.rb +6 -10
- data/test/unit/garb/filter_parameters_test.rb +15 -46
- data/test/unit/garb/management/account_test.rb +8 -16
- data/test/unit/garb/management/feed_test.rb +5 -10
- data/test/unit/garb/management/goal_test.rb +7 -21
- data/test/unit/garb/management/profile_test.rb +11 -26
- data/test/unit/garb/management/segment_test.rb +7 -6
- data/test/unit/garb/management/web_property_test.rb +10 -12
- data/test/unit/garb/model_test.rb +70 -32
- data/test/unit/garb/report_parameter_test.rb +6 -6
- data/test/unit/garb/report_response_test.rb +23 -13
- data/test/unit/garb/request/authentication_test.rb +152 -0
- data/test/unit/garb/request/data_test.rb +157 -0
- data/test/unit/garb/session_test.rb +13 -13
- data/test/unit/garb_test.rb +4 -11
- data/test/unit/symbol_operator_test.rb +3 -3
- metadata +90 -292
- data/lib/garb/account.rb +0 -22
- data/lib/garb/account_feed_request.rb +0 -25
- data/lib/garb/authentication_request.rb +0 -53
- data/lib/garb/data_request.rb +0 -42
- data/lib/garb/goal.rb +0 -20
- data/lib/garb/profile.rb +0 -33
- data/lib/garb/report.rb +0 -28
- data/lib/garb/resource.rb +0 -115
- data/lib/support.rb +0 -40
- data/test/unit/garb/account_feed_request_test.rb +0 -42
- data/test/unit/garb/account_test.rb +0 -53
- data/test/unit/garb/authentication_request_test.rb +0 -121
- data/test/unit/garb/coverage/assets/0.3.9/app.js +0 -66
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/blank.gif +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/fancy_close.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/fancy_loading.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/fancy_nav_left.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/fancy_nav_right.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/fancy_shadow_e.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/fancy_shadow_n.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/fancy_shadow_ne.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/fancy_shadow_nw.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/fancy_shadow_s.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/fancy_shadow_se.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/fancy_shadow_sw.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/fancy_shadow_w.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/fancy_title_left.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/fancy_title_main.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/fancy_title_over.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/fancy_title_right.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/fancybox-x.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/fancybox-y.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/fancybox.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.css +0 -363
- data/test/unit/garb/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.pack.js +0 -44
- data/test/unit/garb/coverage/assets/0.3.9/favicon.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/jquery-1.4.2.min.js +0 -155
- data/test/unit/garb/coverage/assets/0.3.9/jquery.dataTables.min.js +0 -152
- data/test/unit/garb/coverage/assets/0.3.9/jquery.timeago.js +0 -141
- data/test/unit/garb/coverage/assets/0.3.9/jquery.url.js +0 -174
- data/test/unit/garb/coverage/assets/0.3.9/loading.gif +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/magnify.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/test/unit/garb/coverage/assets/0.3.9/smoothness/jquery-ui-1.8.4.custom.css +0 -295
- data/test/unit/garb/coverage/assets/0.3.9/stylesheet.css +0 -341
- data/test/unit/garb/coverage/index.html +0 -100
- data/test/unit/garb/coverage/resultset.yml +0 -5
- data/test/unit/garb/data_request_test.rb +0 -107
- data/test/unit/garb/destination_test.rb +0 -28
- data/test/unit/garb/goal_test.rb +0 -24
- data/test/unit/garb/management/coverage/assets/0.3.9/app.js +0 -66
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/blank.gif +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/fancy_close.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/fancy_loading.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/fancy_nav_left.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/fancy_nav_right.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/fancy_shadow_e.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/fancy_shadow_n.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/fancy_shadow_ne.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/fancy_shadow_nw.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/fancy_shadow_s.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/fancy_shadow_se.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/fancy_shadow_sw.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/fancy_shadow_w.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/fancy_title_left.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/fancy_title_main.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/fancy_title_over.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/fancy_title_right.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/fancybox-x.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/fancybox-y.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/fancybox.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.css +0 -363
- data/test/unit/garb/management/coverage/assets/0.3.9/fancybox/jquery.fancybox-1.3.1.pack.js +0 -44
- data/test/unit/garb/management/coverage/assets/0.3.9/favicon.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/jquery-1.4.2.min.js +0 -155
- data/test/unit/garb/management/coverage/assets/0.3.9/jquery.dataTables.min.js +0 -152
- data/test/unit/garb/management/coverage/assets/0.3.9/jquery.timeago.js +0 -141
- data/test/unit/garb/management/coverage/assets/0.3.9/jquery.url.js +0 -174
- data/test/unit/garb/management/coverage/assets/0.3.9/loading.gif +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/magnify.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/test/unit/garb/management/coverage/assets/0.3.9/smoothness/jquery-ui-1.8.4.custom.css +0 -295
- data/test/unit/garb/management/coverage/assets/0.3.9/stylesheet.css +0 -341
- data/test/unit/garb/management/coverage/index.html +0 -100
- data/test/unit/garb/management/coverage/resultset.yml +0 -5
- data/test/unit/garb/profile_test.rb +0 -77
- data/test/unit/garb/report_test.rb +0 -99
- data/test/unit/garb/resource_test.rb +0 -50
- data/test/unit/garb/step_test.rb +0 -15
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7f5abc6c78a276a4e48842d665234cf8d16ab5bc
|
4
|
+
data.tar.gz: 1e2bc9ad76235027b818e4d16f53cf28a8b19ef7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d02e72f9733c7b1d36c69020b3b4e7294290719eb3fccc38297303a4a7fa51343592df163075434d2844ed60a21d45d777e3c307e358c417ece0f61bad49640e
|
7
|
+
data.tar.gz: 855bcfeaa85559b085deb284a18f6acddf5f79c7c7edf71394bfdde3ed6bb8b4d7c906395040cb7941e5a7ee71ee6c0aeb6f48707bef82af3306bca5a8cacc80
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
Version 0.9.7
|
2
|
+
|
3
|
+
* Fixed bug causing Garb::Model#all_results to return nil if no limit provided
|
4
|
+
* Don't error out if goal Destination is missing steps
|
5
|
+
* Fixed "undefined method `map' for nil:NilClass" [#7]
|
6
|
+
* Single user requests supports fibers with `Garb.use_fibers = true` [#6]
|
7
|
+
* Made Garb::ResultSet comparable
|
8
|
+
|
9
|
+
Version 0.9.6
|
10
|
+
|
11
|
+
* Swapped Yajl/JSON for MultiJson
|
12
|
+
* Fixed "NameError: uninitialized constant Forwardable"
|
13
|
+
* Updated README
|
14
|
+
|
15
|
+
Version 0.9.5
|
16
|
+
|
17
|
+
* Moved all Garb::*Error classes to separate file
|
18
|
+
* Made all Garb::*Error classes inherit from Garb::Error
|
19
|
+
* Fixed couple of outstanding failing tests
|
20
|
+
* CA_CERT_FILE -> Garb.ca_cert_file
|
21
|
+
* API key as an element of the session
|
22
|
+
* Added `Garb.logger` module attribute
|
23
|
+
* Logs responses coming from GAPI (if logger set)
|
24
|
+
* Adds open_timeout support for Net::HTTP requests
|
25
|
+
* Added Travis CI configuration file
|
26
|
+
|
27
|
+
Version 0.9.4
|
28
|
+
|
29
|
+
* Fixed fetching all records
|
30
|
+
* Adds custom error classes inheriting from ClientError
|
31
|
+
* Made error messages a bit more descriptive
|
32
|
+
* Adds WebsiteProperty#name and #website_url properties
|
33
|
+
* Made Garb report its version with each request
|
34
|
+
* Made FilterParameter#hash_to_params do not escape backslash. Fixes #74
|
35
|
+
* Code cleanup
|
36
|
+
|
37
|
+
Version 0.9.3
|
38
|
+
|
39
|
+
* Adds support for fetching all results to Garb::Model
|
40
|
+
* ClientError handles properly error code and message from returned JSON
|
41
|
+
* Switches to GAPI v3
|
42
|
+
|
43
|
+
Version 0.9.2
|
44
|
+
|
45
|
+
* Removed all deprecated features: Garb::Report, Garb::Resource, Garb::Profile, and Garb::Account
|
46
|
+
* Moved the differing types of requests into a module, will refactor to share more code
|
47
|
+
* Fixed OR'ing in :filters option for results
|
48
|
+
|
49
|
+
Version 0.9.0
|
50
|
+
|
51
|
+
* New Garb::Model is solid. Garb::Resource and Garb::Report are deprecated.
|
52
|
+
* New GA Management API is functional and should be used in place of Garb::Profile and Garb::Account
|
53
|
+
|
54
|
+
Version 0.7.4
|
55
|
+
|
56
|
+
* Removes HappyMapper dependency in favor of Crack so we can drop libxml dependency
|
57
|
+
|
58
|
+
Version 0.7.0
|
59
|
+
|
60
|
+
* Adds multi-session support
|
61
|
+
|
62
|
+
Version 0.6.0
|
63
|
+
|
64
|
+
* Adds OAuth access token support
|
65
|
+
* Simplifies Garb report access through a profile
|
66
|
+
* Includes the start of a basic library of pre-built reports (require 'garb/reports')
|
67
|
+
|
68
|
+
Version 0.5.1
|
69
|
+
|
70
|
+
* Brings back hash filters and symbol operators after agreed upon SymbolOperator
|
71
|
+
|
72
|
+
Version 0.5.0
|
73
|
+
|
74
|
+
* Filters now have a new DSL so that I could toss Symbol operators (which conflict with DataMapper and MongoMapper)
|
75
|
+
* The method of passing a hash to filters no longer works, at all
|
76
|
+
|
77
|
+
Version 0.4.0
|
78
|
+
|
79
|
+
* Changes the api for filters and sort making it consistent with metrics/dimensions
|
80
|
+
* If you wish to clear the defaults defined on a class, you may use clear_(filters/sort/metrics/dimensions)
|
81
|
+
* To make a custom class using Garb::Resource, you must now extend instead of include the module
|
82
|
+
|
83
|
+
Version 0.3.2
|
84
|
+
|
85
|
+
* Adds Profile.first which can be used to get the first profile with a table id, or web property id (UA number)
|
86
|
+
|
87
|
+
Version 0.2.4
|
88
|
+
|
89
|
+
* Requires happymapper from rubygems, version 0.2.5. Be sure to update
|
90
|
+
|
91
|
+
Version 0.2.0
|
92
|
+
|
93
|
+
* Makes major changes (compared to 0.1.0) to the way garb is used to build reports
|
94
|
+
* There is now both a module that gets included for generating defined classes
|
95
|
+
* Slight changes to the way that the Report class can be used
|
data/Gemfile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
source 'http://rubygems.org'
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in garb.gemspec
|
4
|
+
gemspec
|
5
|
+
|
6
|
+
gem 'rake'
|
7
|
+
|
8
|
+
group :test do
|
9
|
+
gem 'shoulda'
|
10
|
+
gem 'shoulda-context'
|
11
|
+
gem 'simplecov', :require => false
|
12
|
+
gem 'minitest', '4.2', :require => false
|
13
|
+
gem 'jferris-mocha', :require => false
|
14
|
+
gem 'json'
|
15
|
+
end
|
data/README.md
CHANGED
@@ -1,28 +1,28 @@
|
|
1
|
-
Garb
|
1
|
+
Garb [![Build Status](https://secure.travis-ci.org/Sija/garb.png)](http://travis-ci.org/Sija/garb)
|
2
2
|
====
|
3
3
|
|
4
|
-
http://github.com/
|
4
|
+
http://github.com/Sija/garb
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
Legato
|
7
|
+
------
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
old features in the new classes, as well as any new features brought by the new classes. If you
|
15
|
-
are looking for something in particular, please open an issue and I will try to prioritize these
|
16
|
-
requests.
|
9
|
+
There's rewritten and (moar) actively maintained version of the library in the form of [Legato](https://github.com/tpitale/legato).
|
10
|
+
You might want to check it out as it's mostly compatible with `Garb`.
|
11
|
+
|
12
|
+
Important Changes
|
13
|
+
-----------------
|
17
14
|
|
18
|
-
|
15
|
+
This fork contains heavily modified version of vigetlab's `Garb` library.
|
16
|
+
It works only with version 3 of Google API.
|
19
17
|
|
18
|
+
Please read CHANGELOG.
|
19
|
+
|
20
20
|
Description
|
21
21
|
-----------
|
22
22
|
|
23
23
|
Provides a Ruby API to the Google Analytics API.
|
24
24
|
|
25
|
-
|
25
|
+
https://developers.google.com/analytics/devguides/reporting/core/v3/coreDevguide
|
26
26
|
|
27
27
|
Basic Usage
|
28
28
|
===========
|
@@ -30,15 +30,16 @@ Basic Usage
|
|
30
30
|
Single User Login
|
31
31
|
-----------------
|
32
32
|
|
33
|
+
> Garb::Session.api_key = api_key # required for 2-step authentication
|
33
34
|
> Garb::Session.login(username, password)
|
34
35
|
|
35
36
|
OAuth Access Token
|
36
37
|
------------------
|
37
38
|
|
38
|
-
> Garb::Session.access_token = access_token #
|
39
|
+
> Garb::Session.access_token = access_token # an instance of OAuth2::Client
|
39
40
|
|
40
41
|
Accounts, WebProperties, Profiles, and Goals
|
41
|
-
|
42
|
+
--------------------------------------------
|
42
43
|
|
43
44
|
> Garb::Management::Account.all
|
44
45
|
> Garb::Management::WebProperty.all
|
@@ -46,7 +47,7 @@ Accounts, WebProperties, Profiles, and Goals
|
|
46
47
|
> Garb::Management::Goal.all
|
47
48
|
|
48
49
|
Profiles for a UA- Number (a WebProperty)
|
49
|
-
|
50
|
+
-----------------------------------------
|
50
51
|
|
51
52
|
> profile = Garb::Management::Profile.all.detect {|p| p.web_property_id == 'UA-XXXXXXX-X'}
|
52
53
|
|
@@ -78,6 +79,7 @@ Other Parameters
|
|
78
79
|
* end_date: The date to end, inclusive
|
79
80
|
* limit: The maximum number of results to be returned
|
80
81
|
* offset: The starting index
|
82
|
+
* all: Return all results if true (which might result in several requests to GAPI)
|
81
83
|
|
82
84
|
Metrics & Dimensions
|
83
85
|
--------------------
|
@@ -86,7 +88,7 @@ Metrics & Dimensions
|
|
86
88
|
|
87
89
|
I suggest reading the google documentation to familiarize yourself with this.
|
88
90
|
|
89
|
-
|
91
|
+
https://developers.google.com/analytics/devguides/reporting/core/dimsmets#q=bouncerate
|
90
92
|
|
91
93
|
When you've returned, you can pass the appropriate combinations to Garb, as symbols.
|
92
94
|
|
@@ -95,7 +97,7 @@ Filtering
|
|
95
97
|
|
96
98
|
Google Analytics supports a significant number of filtering options.
|
97
99
|
|
98
|
-
|
100
|
+
https://developers.google.com/analytics/devguides/reporting/core/v3/reference#filters
|
99
101
|
|
100
102
|
Here is what we can do currently:
|
101
103
|
(the operator is a method on a symbol for the appropriate metric or dimension)
|
@@ -130,11 +132,20 @@ SSL
|
|
130
132
|
Garb::Session.login(username, password, :secure => true)
|
131
133
|
|
132
134
|
Next, be sure to download http://curl.haxx.se/ca/cacert.pem into your application somewhere.
|
133
|
-
Then,
|
135
|
+
Then, point `Garb.ca_cert_file` property to that file.
|
134
136
|
|
135
137
|
For whatever reason, simply creating a new certificate store and setting the defaults would
|
136
138
|
not validate the google ssl certificate as authentic.
|
137
139
|
|
140
|
+
OPEN / READ TIMEOUT
|
141
|
+
-------------------
|
142
|
+
|
143
|
+
The open and read timeout values used with the network client (Net::HTTP) are configurable.
|
144
|
+
Both values default to 60 seconds.
|
145
|
+
|
146
|
+
Garb.open_timeout = 3
|
147
|
+
Garb.read_timeout = 3
|
148
|
+
|
138
149
|
TODOS
|
139
150
|
-----
|
140
151
|
|
@@ -143,19 +154,28 @@ TODOS
|
|
143
154
|
Requirements
|
144
155
|
------------
|
145
156
|
|
146
|
-
*
|
147
|
-
*
|
157
|
+
* active_support >= 2.2
|
158
|
+
* multi_json >= 1.3
|
148
159
|
|
149
160
|
Requirements for Testing
|
150
161
|
------------------------
|
151
162
|
|
152
163
|
* shoulda
|
153
|
-
*
|
164
|
+
* mocha
|
165
|
+
* bourne
|
154
166
|
|
155
167
|
Install
|
156
168
|
-------
|
157
169
|
|
158
|
-
|
170
|
+
From git:
|
171
|
+
|
172
|
+
`git clone git://github.com/Sija/garb.git`
|
173
|
+
`cd garb && rake install`
|
174
|
+
|
175
|
+
OR with bundler:
|
176
|
+
|
177
|
+
gem 'garb', :git => 'git://github.com/Sija/garb.git'
|
178
|
+
`bundle install`
|
159
179
|
|
160
180
|
Contributors
|
161
181
|
------------
|
@@ -165,13 +185,15 @@ Contributors
|
|
165
185
|
* Patrick Reagan
|
166
186
|
* Justin Marney
|
167
187
|
* Nick Plante
|
188
|
+
* James Cook
|
189
|
+
* Chris Gunther
|
168
190
|
|
169
191
|
License
|
170
192
|
-------
|
171
193
|
|
172
194
|
(The MIT License)
|
173
195
|
|
174
|
-
Copyright (c)
|
196
|
+
Copyright (c) 2011 Tony Pitale, Viget Labs
|
175
197
|
|
176
198
|
Permission is hereby granted, free of charge, to any person obtaining
|
177
199
|
a copy of this software and associated documentation files (the
|
data/Rakefile
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
-
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
|
3
|
+
require 'rubygems/package_task'
|
4
|
+
require 'bundler/gem_tasks'
|
2
5
|
require 'rake/testtask'
|
3
6
|
|
4
7
|
$:.unshift File.expand_path('../lib', __FILE__)
|
@@ -6,52 +9,23 @@ require 'garb'
|
|
6
9
|
|
7
10
|
task :default => :test
|
8
11
|
|
9
|
-
spec = Gem::Specification.new do |s|
|
10
|
-
s.name = 'garb'
|
11
|
-
s.version = Garb::Version.to_s
|
12
|
-
s.has_rdoc = false
|
13
|
-
s.rubyforge_project = 'viget'
|
14
|
-
s.summary = "Google Analytics API Ruby Wrapper"
|
15
|
-
s.authors = ['Tony Pitale']
|
16
|
-
s.email = 'tony.pitale@viget.com'
|
17
|
-
s.homepage = 'http://github.com/vigetlabs/garb'
|
18
|
-
s.files = %w(README.md Rakefile) + Dir.glob("lib/**/*")
|
19
|
-
s.test_files = Dir.glob("test/**/*")
|
20
|
-
|
21
|
-
s.add_dependency("crack", [">= 0.1.6"])
|
22
|
-
s.add_dependency("activesupport", [">= 2.2.0"])
|
23
|
-
end
|
24
|
-
|
25
|
-
Rake::GemPackageTask.new(spec) do |pkg|
|
26
|
-
pkg.gem_spec = spec
|
27
|
-
end
|
28
|
-
|
29
12
|
Rake::TestTask.new do |t|
|
30
13
|
t.libs << 'test'
|
31
|
-
t.test_files = FileList[
|
14
|
+
t.test_files = FileList['test/**/*_test.rb']
|
32
15
|
t.verbose = true
|
33
16
|
end
|
34
17
|
|
35
|
-
desc 'Generate the gemspec to serve this Gem from Github'
|
36
|
-
task :github do
|
37
|
-
file = File.dirname(__FILE__) + "/#{spec.name}.gemspec"
|
38
|
-
File.open(file, 'w') {|f| f << spec.to_ruby }
|
39
|
-
puts "Created gemspec: #{file}"
|
40
|
-
end
|
41
|
-
|
42
18
|
begin
|
43
19
|
require 'rcov/rcovtask'
|
44
20
|
|
45
|
-
desc
|
21
|
+
desc 'Generate RCov coverage report'
|
46
22
|
Rcov::RcovTask.new(:rcov) do |t|
|
47
|
-
t.libs <<
|
23
|
+
t.libs << 'test'
|
48
24
|
t.test_files = FileList['test/**/*_test.rb']
|
49
|
-
t.rcov_opts <<
|
25
|
+
t.rcov_opts << '-x "test/*,gems/*,/Library/Ruby/*,config/*" -x lib/garb.rb -x lib/garb/version.rb --rails'
|
50
26
|
end
|
51
27
|
rescue LoadError
|
52
28
|
nil
|
53
29
|
end
|
54
30
|
|
55
|
-
task :default => 'test'
|
56
|
-
|
57
31
|
# EOF
|
data/garb.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/garb/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ['Tony Pitale', 'Sijawusz Pur Rahnama']
|
6
|
+
gem.email = ['tony.pitale@viget.com', 'sija@sija.pl']
|
7
|
+
gem.homepage = 'http://github.com/Sija/garb'
|
8
|
+
gem.license = 'MIT'
|
9
|
+
|
10
|
+
gem.summary = 'Google Analytics API Ruby Wrapper'
|
11
|
+
gem.description = ''
|
12
|
+
|
13
|
+
gem.files = `git ls-files`.split $\
|
14
|
+
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
15
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
16
|
+
gem.name = 'garb'
|
17
|
+
gem.require_paths = ['lib']
|
18
|
+
gem.version = Garb::VERSION
|
19
|
+
|
20
|
+
gem.add_dependency 'activesupport', '>= 2.2'
|
21
|
+
gem.add_dependency 'multi_json', '>= 1.3'
|
22
|
+
end
|
data/lib/garb.rb
CHANGED
@@ -1,56 +1,84 @@
|
|
1
|
+
$:.unshift File.dirname(__FILE__)
|
2
|
+
|
1
3
|
require 'net/http'
|
2
4
|
require 'net/https'
|
3
5
|
|
4
6
|
require 'cgi'
|
5
7
|
require 'ostruct'
|
6
|
-
require 'crack'
|
7
|
-
|
8
|
-
begin
|
9
|
-
require 'active_support/inflector'
|
10
|
-
require 'active_support/deprecation'
|
11
|
-
rescue LoadError
|
12
|
-
require 'active_support'
|
13
|
-
end
|
14
8
|
|
15
|
-
require '
|
16
|
-
require 'garb/authentication_request'
|
17
|
-
require 'garb/data_request'
|
18
|
-
require 'garb/account_feed_request'
|
19
|
-
require 'garb/session'
|
20
|
-
require 'garb/profile_reports'
|
21
|
-
require 'garb/step'
|
22
|
-
require 'garb/destination'
|
23
|
-
require 'garb/goal'
|
24
|
-
require 'garb/profile'
|
25
|
-
require 'garb/account'
|
26
|
-
require 'garb/filter_parameters'
|
27
|
-
require 'garb/report_parameter'
|
28
|
-
require 'garb/result_set'
|
29
|
-
require 'garb/report_response'
|
30
|
-
require 'garb/resource'
|
31
|
-
require 'garb/report'
|
32
|
-
|
33
|
-
require 'garb/model'
|
34
|
-
|
35
|
-
# management
|
36
|
-
require 'garb/management/feed'
|
37
|
-
require 'garb/management/segment'
|
38
|
-
require 'garb/management/account'
|
39
|
-
require 'garb/management/web_property'
|
40
|
-
require 'garb/management/profile'
|
41
|
-
require 'garb/management/goal'
|
42
|
-
|
43
|
-
require 'support'
|
9
|
+
require 'multi_json'
|
44
10
|
|
45
11
|
module Garb
|
46
|
-
|
12
|
+
autoload :VERSION, 'garb/version'
|
13
|
+
|
14
|
+
autoload :Attributes, 'garb/attributes'
|
15
|
+
autoload :PathAttribute, 'garb/path_attribute'
|
16
|
+
autoload :Destination, 'garb/destination'
|
17
|
+
autoload :FilterParameters, 'garb/filter_parameters'
|
18
|
+
autoload :Model, 'garb/model'
|
19
|
+
autoload :ProfileReports, 'garb/profile_reports'
|
20
|
+
autoload :ReportParameter, 'garb/report_parameter'
|
21
|
+
autoload :ReportResponse, 'garb/report_response'
|
22
|
+
autoload :ResultSet, 'garb/result_set'
|
23
|
+
autoload :Session, 'garb/session'
|
24
|
+
autoload :Step, 'garb/step'
|
25
|
+
|
26
|
+
module Management
|
27
|
+
autoload :Account, 'garb/management/account'
|
28
|
+
autoload :Feed, 'garb/management/feed'
|
29
|
+
autoload :Goal, 'garb/management/goal'
|
30
|
+
autoload :Profile, 'garb/management/profile'
|
31
|
+
autoload :Segment, 'garb/management/segment'
|
32
|
+
autoload :WebProperty, 'garb/management/web_property'
|
33
|
+
end
|
34
|
+
|
35
|
+
module Request
|
36
|
+
autoload :Authentication, 'garb/request/authentication'
|
37
|
+
autoload :Data, 'garb/request/data'
|
38
|
+
end
|
39
|
+
end
|
47
40
|
|
41
|
+
module Garb
|
48
42
|
extend self
|
49
43
|
|
44
|
+
class << self
|
45
|
+
attr_accessor :proxy_address, :proxy_port, :proxy_user, :proxy_password, :logger
|
46
|
+
attr_writer :open_timeout, :read_timeout, :ca_cert_file
|
47
|
+
end
|
48
|
+
|
49
|
+
def use_fibers=(val)
|
50
|
+
if val and (!defined?(EM) || !defined?(Fiber))
|
51
|
+
raise ArgumentError, 'Eventmachine and Fibers required (Ruby 1.9+ only)'
|
52
|
+
end
|
53
|
+
require 'em-net-http' if val
|
54
|
+
@use_fibers = val
|
55
|
+
end
|
56
|
+
|
57
|
+
def use_fibers
|
58
|
+
@use_fibers || false
|
59
|
+
end
|
60
|
+
|
61
|
+
def open_timeout
|
62
|
+
@open_timeout || 60
|
63
|
+
end
|
64
|
+
|
65
|
+
def read_timeout
|
66
|
+
@read_timeout || 60
|
67
|
+
end
|
68
|
+
|
69
|
+
def ca_cert_file
|
70
|
+
@ca_cert_file || raise(MissingCertFileError)
|
71
|
+
end
|
72
|
+
|
73
|
+
def log(str, level = :debug)
|
74
|
+
level, str = str, level if str.is_a? Symbol
|
75
|
+
logger.send level, str unless logger.nil?
|
76
|
+
end
|
77
|
+
|
50
78
|
def to_google_analytics(thing)
|
51
|
-
return thing.to_google_analytics if thing.respond_to?
|
79
|
+
return thing.to_google_analytics if thing.respond_to? :to_google_analytics
|
52
80
|
|
53
|
-
"ga:#{thing.to_s.camelize(:lower)}"
|
81
|
+
"#{$1}ga:#{$2}" if "#{thing.to_s.camelize(:lower)}" =~ /^(-)?(.*)$/
|
54
82
|
end
|
55
83
|
alias :to_ga :to_google_analytics
|
56
84
|
|
@@ -58,12 +86,7 @@ module Garb
|
|
58
86
|
thing.to_s.gsub(/^ga\:/, '').underscore
|
59
87
|
end
|
60
88
|
alias :from_ga :from_google_analytics
|
61
|
-
|
62
|
-
def parse_properties(entry)
|
63
|
-
Hash[entry['dxp:property'].map {|p| [Garb.from_ga(p['name']),p['value']]}]
|
64
|
-
end
|
65
|
-
|
66
|
-
def parse_link(entry, rel)
|
67
|
-
entry['link'].detect {|link| link["rel"] == rel}['href']
|
68
|
-
end
|
69
89
|
end
|
90
|
+
|
91
|
+
require 'garb/support'
|
92
|
+
require 'garb/errors'
|