gosquared 0.1.5 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 51c2a6717a8db7d61b602c4f51dda78e7328ce59
4
+ data.tar.gz: c723eb2426af2869ee78dfb14d680cba1210bb8e
5
+ SHA512:
6
+ metadata.gz: 704d1fac4d900e0c188fb816cbdeb34bce2075864fcf3c52deaedf103dd9b0d248ba90eac2cff5ca131bae7cb424dc0de9577a37f0627d1d49d68cde8e3f14c0
7
+ data.tar.gz: f380d51a645dc84095895e9594fdd58e9fcd116faa60e12c904867524590c94f786d7da6f5a9eea2965fe965319f3224b8183bcd0a69234ae44a074685178fd4
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --require spec_helper
3
+ --format documentation
data/Gemfile CHANGED
@@ -1,14 +1,8 @@
1
- ruby '1.9.3'
2
1
  source 'https://rubygems.org'
3
2
 
4
- gem 'faraday', '~> 0.8'
5
- gem 'json', '~> 1.7'
3
+ ruby '2.2.2'
6
4
 
7
- group :development do
8
- gem 'rake', '~> 0.9'
5
+ group :development, :test do
6
+ gem 'rspec'
7
+ gem 'webmock'
9
8
  end
10
-
11
- group :test do
12
- gem 'guard-minitest', '~> 0.5'
13
- gem 'minitest', '~> 3.4'
14
- end
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015-2016 Go Squared Ltd.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md CHANGED
@@ -1,75 +1,165 @@
1
- ## GoSquared Ruby API client
1
+ ## GoSquared Ruby Gem
2
2
 
3
- This module works with the [GoSquared API][api-docs], making it really easy to integrate GoSquared with your node app. You can also use it to track metrics and events in your application using GoSquared
3
+ [![Build Status](https://travis-ci.org/gosquared/ruby-gem.svg?branch=master)](https://travis-ci.org/gosquared/ruby-gem)
4
+
5
+ **This is an early beta, please open an issue if you find anything not working, or to leave feedback for improvement. You can also get in touch directly: russell@gosquared.com**
6
+
7
+ This gems works with the [GoSquared API](https://www.gosquared.com/docs/api/), making it simple to integrate GoSquared with your Rails app. You can use it for both fetching metrics from your GoSquared account and also posting new events and contacts.
8
+
9
+ All functions listed in the API documentation are methods you can call on the GoSquared class.
10
+
11
+ #Installation
12
+
13
+ ```ruby
14
+ gem install gosquared
15
+ ```
16
+
17
+ #Tracking API
18
+ This is for sending data to GoSquared. It allows you to track:
19
+ * Events
20
+ * Transactions
21
+ * People profiles
22
+
23
+ ##Track Events
24
+ ```ruby
25
+
26
+ gs = GoSquared.new("your_API_key","your_project_token")
27
+
28
+ gs.tracking.event({event: {name: 'event'}})
29
+
30
+ #builds the url to the 'GoSquared Tracking' endpoint with the "events" dimension and an event to add to the events list
31
+
32
+ gs.tracking.post
33
+
34
+ #posts the data to the 'GoSquared Tracking' endpoint
35
+
36
+ Reponse Message: OK
37
+ => #<Net::HTTPOK 200 OK readbody=true>
4
38
 
5
- ## Installation
6
- ```bash
7
- gem install gosquared
8
39
  ```
9
40
 
10
- ## Usage
41
+ ##Track Transactions
42
+
43
+ ```ruby
44
+ gs = GoSquared.new("your_API_key","your_project_token")
45
+
46
+ gs.tracking.transaction({ transaction: {id: "1", revenue: 50, quantity: 1, previous_transaction_timestamp: Time.new } })
11
47
 
48
+ gs.tracking.post
49
+
50
+ Reponse Message: OK
51
+ => #<Net::HTTPOK 200 OK readbody=true>
52
+ ```
53
+
54
+ ##Track People
12
55
  ```ruby
13
- # Create an API client
14
- gosquared_api = GoSquared::API.new(opts)
56
+ gs = GoSquared.new("your_API_key","your_project_token")
57
+
58
+ gs.tracking.identify({person_id:"email:example_email@example.com", properties: {first_name: 'Example', last_name: "User", created_at: Time.new, custom: {any: "properties", you: "would_like" } })
15
59
 
16
- # Create Event client
17
- gosquared_event = GoSquared::Event.new(opts)
60
+ gs.tracking.post
18
61
 
62
+ Reponse Message: OK
63
+ => #<Net::HTTPOK 200 OK readbody=true>
19
64
  ```
20
65
 
21
- ##### Options
22
66
 
23
- * api_key: API key from your [account][casa]. Required for API client, not required for event client.
24
- * site_token: Token for the registered site you're working with. Required.
25
- * debugLevel: One of:
26
- * GoSquared::DEBUG_LEVELS[:ALL]
27
- * GoSquared::DEBUG_LEVELS[:TRACE]
28
- * GoSquared::DEBUG_LEVELS[:NOTICE]
29
- * GoSquared::DEBUG_LEVELS[:WARNING]
30
- * GoSquared::DEBUG_LEVELS[:FATAL]
67
+ #Reporting API
68
+ This is for pulling data from your GoSquared account. It is split into 3 sections;
69
+ * Now - realtime data
70
+ * Trends – historical data (includes ecommerce)
71
+ * People - user data
72
+ * Account - administration
73
+
74
+ ##Now
75
+ The Now API provides real-time concurrent information about your sites and apps, such as the number of concurrent visitors online, the most popular pages right now, the most influential traffic sources, and much more.
76
+
77
+ _Now Example:_
31
78
 
32
- ### API
33
79
  ```ruby
34
- require 'gosquared'
80
+ gs = GoSquared.new("your_API_key","your_project_token")
81
+
82
+ #instantiates new GoSquared object
83
+
84
+ gs.now.concurrents
35
85
 
36
- gosquared_api = GoSquared::API.new({
37
- :api_key => 'demo',
38
- :site_token => 'GSN-181546-E'
39
- })
86
+ #builds the url to the 'GoSquared Now' endpoint with the "Concurrents dimension"
40
87
 
41
- response = gosquared_api.concurrents(params)
88
+ gs.now.fetch
89
+
90
+ #fetches the data from the 'GoSquared Now' endpoint
91
+
92
+ => {"visitors"=>3, "returning"=>1, "pages"=>0, "active"=>0, "tagged"=>0}
42
93
  ```
43
94
 
44
- All functions listed in the [API documentation][api-docs] are methods you can call on the ```GoSquared::API``` class.
95
+ ##Trends
96
+ The Trends API provides historical analytics information for any given period in a project's history. The data for the current period updates in real-time, so the figures are always fresh and up-to-date.
97
+
98
+ _Trends Example:_
45
99
 
100
+ ```ruby
101
+ gs = GoSquared.new("your_API_key","your_project_token")
102
+
103
+ gs.trends.browser.from('2016-06-30').to('2016-07-07')
104
+
105
+ #builds the url to the 'GoSquared Trends' endpoint with the "Trends dimension" and date filters
106
+
107
+ gs.trends.fetch
108
+
109
+ #fetches the filtered data from the 'GoSquared Trends' endpoint
110
+
111
+ => {"list"=>[{"id"=>"chrome", "browser"=>"chrome", "name"=>"Chrome", "metrics"=>{"visits"=>3}}], "cardinality"=>1, "dimension"=>"browser", "range"=>{"from"=>"2016-06-30T00:00:00+01:00", "to"=>"2016-07-07T23:59:59+01:00"}, "interval"=>"day"}
112
+
113
+ ```
46
114
 
47
- ### Tracking
115
+ ##People
48
116
 
49
- ##### Events
50
- Send events to GoSquared:
51
117
 
52
118
  ```ruby
53
- require 'gosquared'
54
-
55
- gosquared_event = GoSquared::Event.new({
56
- :site_token => 'GSN-181546-E'
57
- })
58
-
59
- response = gosquared_event.store_event('Test Event', {
60
- :its => true,
61
- :'you can' => 'store',
62
- :any => 'event',
63
- :properties => 'You Like'
64
- })
119
+
120
+ gs = GoSquared.new("your_API_key","your_project_token")
121
+
122
+ gs.people.smartgroups
123
+
124
+ #builds the url to the 'GoSquared People' endpoint with the "people" dimension.
125
+
126
+ gs.people.fetch
127
+
128
+ #fetches all smartgroups associated with the account.
129
+
65
130
  ```
66
131
 
67
- ## Run tests
68
- Install all dependencies using ```bundle``` then:
132
+ ##Account
133
+ The Account API allows you to perform administrative actions against GoSquared accounts. This includes actions like changing settings, configuration, and listing resources under the account.
134
+
135
+ _Account Example:_
136
+
137
+ ```ruby
138
+
139
+ gs = GoSquared.new("your_API_key","your_project_token")
140
+
141
+ gs.account.blocked.ips.ip('5.10.148.50')
142
+
143
+ #builds the url to the 'GoSquared Account' endpoint with the "Blocked dimension" and ip address to add to the blocked list
144
+
145
+ gs.account.post
146
+
147
+ #posts the data to the 'GoSquared Account' endpoint
148
+
149
+ Reponse Message: OK
150
+ => #<Net::HTTPOK 200 OK readbody=true>
151
+
152
+ gs.sites.token("you_site_token")
153
+
154
+ #builds the url to the 'GoSquared Account' endpoint with the "Sites" dimension and token you want to retrieve the site by.
155
+
156
+ gs.sites.fetch
69
157
 
70
- ```bash
71
- rake
72
158
  ```
73
159
 
74
- [api-docs]: https://www.gosquared.com/developer/latest/
75
- [casa]: https://www.gosquared.com/home/developer
160
+
161
+ #Tests
162
+
163
+ ```ruby
164
+ rspec
165
+ ```
data/lib/gosquared.rb CHANGED
@@ -1,47 +1,34 @@
1
- require_relative './client'
2
- module GoSquared
3
- class API < Client
4
- API_VERSION = ENV.fetch('GOSQUARED_API_VERSION') { "latest" }
5
-
6
- def initialize(opts={})
7
- super
8
- debug 2, GoSquared::DEBUG_LEVELS[:WARNING] if @opts[:api_key].nil?
9
- debug 3, GoSquared::DEBUG_LEVELS[:NOTICE], {:api_version => API_VERSION} if @opts[:api_version].nil?
10
-
11
- @req_opts[:api_key] = @opts[:api_key]
12
- @opts[:api_version] ||= API_VERSION
13
- end
14
-
15
- def url
16
- @url ||= GoSquared::API_ENDPOINT + '/' + @opts[:api_version]
17
- end
18
-
19
- GoSquared::API_FUNCTIONS.each do | func_name |
20
- define_method(func_name) { | func_params={} |
21
- get("/#{func_name}", func_params)
22
- }
23
- end
24
- end
25
-
26
- class Event < Client
27
-
28
- def initialize(opts={})
29
- super
30
- end
31
-
32
- def url
33
- @url ||= GoSquared::EVENT_ENDPOINT
34
- end
35
-
36
- def store_event(name, params={})
37
- debug 4, GoSquared::DEBUG_LEVELS[:WARNING] if name.nil?
38
-
39
- params = JSON.generate(params)
40
- query_params = {
41
- :_name => name
42
- }
43
- post('/event', query_params, params)
44
- end
45
- end
46
-
47
- end
1
+ require './lib/gosquared/trends'
2
+ require './lib/gosquared/tracking'
3
+ require './lib/gosquared/people'
4
+ require './lib/gosquared/now'
5
+ require './lib/gosquared/account'
6
+
7
+ class GoSquared
8
+
9
+ def initialize api_key, site_id
10
+ @api_key = api_key
11
+ @site_id = site_id
12
+ end
13
+
14
+ def trends
15
+ @trends ||= Trends.new(@api_key, @site_id)
16
+ end
17
+
18
+ def tracking
19
+ @tracking ||= Tracking.new(@api_key, @site_id)
20
+ end
21
+
22
+ def people
23
+ @people ||= People.new(@api_key, @site_id)
24
+ end
25
+
26
+ def now
27
+ @now ||= Now.new(@api_key, @site_id)
28
+ end
29
+
30
+ def account
31
+ @account ||= Account.new(@api_key, @site_id)
32
+ end
33
+
34
+ end
@@ -0,0 +1,79 @@
1
+ require './lib/gosquared/client'
2
+
3
+ class Account
4
+
5
+ BASEURL = "https://api.gosquared.com/account/v1/"
6
+ DIMENSIONS = %w(blocked feeds reportPreferences sharedUsers sites taggedVisitors triggerTypes webhooks)
7
+ DIMENSION_FILTER = %w(token webhookID visitorID triggerType)
8
+ @@filters = {presenter: @presenter, ip: @ip, url: @url, email: @email}
9
+
10
+ def initialize(api_key, site_token, client = Client.new)
11
+ @site_token = site_token
12
+ @api_key = api_key
13
+ @client = client
14
+ @bots= ""
15
+ @ips = ""
16
+ @visitor = ""
17
+ @dimension_filter = ""
18
+ end
19
+
20
+ DIMENSION_FILTER.each do |filter|
21
+ define_method filter do |parameter = ""|
22
+ @dimension_filter = "/" + parameter
23
+ self
24
+ end
25
+ end
26
+
27
+ DIMENSIONS.each do |dimension|
28
+ define_method dimension do |options = ""|
29
+ @dimension = dimension
30
+ @data = options
31
+ self
32
+ end
33
+ end
34
+
35
+ @@filters.each do |key, value|
36
+ define_method key do |argument|
37
+ @@filters[key] = argument
38
+ self
39
+ end
40
+ end
41
+
42
+ def fetch
43
+ data = @client.get(url)
44
+ @@filters.each{|key, value| @@filters[key]=nil} if data
45
+ data
46
+ end
47
+
48
+ def post
49
+ @client.post(url, @data)
50
+ end
51
+
52
+ def delete
53
+ @client.delete(url, @data)
54
+ end
55
+
56
+ def bots
57
+ @bots = "/bots"
58
+ end
59
+
60
+ def ips
61
+ @ips = "/ips"
62
+ self
63
+ end
64
+
65
+ def visitors(id="")
66
+ @visitor = "/visitors/#{id}"
67
+ self
68
+ end
69
+
70
+ def url(ips = @ips)
71
+ array = [""]
72
+ @url = BASEURL + @dimension + @dimension_filter + @visitor + @bots + ips +
73
+ "?api_key=#{@api_key}" + "&site_token=#{@site_token}"
74
+ @@filters.each {|key, value| array << "#{key}=#{value}" if value }
75
+ parameters=array.join('&')
76
+ @url = @url.concat(parameters)
77
+ end
78
+
79
+ end
@@ -0,0 +1,68 @@
1
+ require 'net/https'
2
+ require 'uri'
3
+ require 'json'
4
+
5
+ class Client
6
+
7
+ def get(url)
8
+ uri = URI(url)
9
+ begin
10
+ response = Net::HTTP.get(uri)
11
+ rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError,
12
+ Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
13
+ puts "[error] HTTP error: #{e}"
14
+ begin
15
+ JSON.parse(response)
16
+ rescue StandardError => e
17
+ puts "[error] StandardError: Could not parse JSON"
18
+ response = false
19
+ end
20
+ end
21
+ @data = JSON.parse(response) if response
22
+ end
23
+
24
+ def post(url,data)
25
+ uri = URI.parse(url)
26
+ begin
27
+ https = Net::HTTP.new(uri.host, uri.port)
28
+ https.use_ssl = true
29
+ request = Net::HTTP::Post.new(uri.request_uri, initheader = {'Content-Type' =>'application/json'})
30
+ request.body = "[ #{data.to_json} ]"
31
+ response = https.request(request)
32
+ rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError,
33
+ Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
34
+ puts "[error] HTTP error: #{e}"
35
+ begin
36
+ response.message
37
+ rescue StandardError => e
38
+ puts "[error] StandardError: Could not print response message"
39
+ response = false
40
+ end
41
+ end
42
+ puts "Reponse Message: #{response.message}" if response
43
+ response
44
+ end
45
+
46
+ def delete(url,data)
47
+ uri = URI.parse(url)
48
+ begin
49
+ https = Net::HTTP.new(uri.host, uri.port)
50
+ https.use_ssl = true
51
+ request = Net::HTTP::Delete.new(uri.request_uri, initheader = {'Content-Type' =>'application/json'})
52
+ request.body = "[ #{data.to_json} ]"
53
+ response = https.request(request)
54
+ rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError,
55
+ Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
56
+ puts "[error] HTTP error: #{e}"
57
+ begin
58
+ response.message
59
+ rescue StandardError => e
60
+ puts "[error] StandardError: Could not print response message"
61
+ response = false
62
+ end
63
+ end
64
+ puts "Reponse Message: #{response.message}" if response
65
+ response
66
+ end
67
+
68
+ end