russ_inject 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/config.rb +16 -0
- data/lib/gosquared/account.rb +83 -0
- data/lib/gosquared/client.rb +68 -0
- data/lib/gosquared/now.rb +50 -0
- data/lib/gosquared/people.rb +54 -0
- data/lib/gosquared/tracking.rb +31 -0
- data/lib/gosquared/trends.rb +44 -0
- data/lib/gosquared.rb +40 -0
- data/lib/my_gem/injector.rb +39 -0
- data/lib/my_gem/railtie.rb +8 -0
- data/lib/rails/generators/gosquared/config/config_generator.rb +16 -0
- data/lib/rails/generators/gosquared/config/templates/gosquared.rb.erb +3 -0
- metadata +55 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 356c20cb738fb68f906b7ceadfe9c2d0197cba15
|
4
|
+
data.tar.gz: 6c7c0fc8821598649acf209cfe280fa5a07dbbfa
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: edc2b42c35350557ab2a05a15db3e2760513252930b66b6507f988915e4fbb74c6dd286d06efefa88b6d754613a2b31b0094e7cf8e17d3cc7d42dd59a25ae24f
|
7
|
+
data.tar.gz: 91dfe95c3d393c1fb472bee0b1f599d5f73fc2a7b1bf04d4c77a3f198dda41390c1cf7489c74f5870cac159df9e3e37b3facfff0d2b0862a2d251e7a5dfe26c8
|
data/lib/config.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
module Gosquared
|
2
|
+
|
3
|
+
class << self
|
4
|
+
attr_accessor :configuration
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.configure
|
8
|
+
self.configuration ||= Configuration.new
|
9
|
+
block_given? ? yield(configuration) : configuration
|
10
|
+
end
|
11
|
+
|
12
|
+
class Configuration
|
13
|
+
attr_accessor :site_token
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require_relative "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(build_url)
|
44
|
+
@@filters.each{|key, value| @@filters[key]=nil} if data
|
45
|
+
data
|
46
|
+
end
|
47
|
+
|
48
|
+
def post
|
49
|
+
response = @client.post(build_url, @data)
|
50
|
+
@@filters.each{|key, value| @@filters[key]=nil} if response.code === '200'
|
51
|
+
response
|
52
|
+
end
|
53
|
+
|
54
|
+
def delete
|
55
|
+
response = @client.post(build_url, @data)
|
56
|
+
@@filters.each{|key, value| @@filters[key]=nil} if response.code === '200'
|
57
|
+
response
|
58
|
+
end
|
59
|
+
|
60
|
+
def bots
|
61
|
+
@bots = "/bots"
|
62
|
+
end
|
63
|
+
|
64
|
+
def ips
|
65
|
+
@ips = "/ips"
|
66
|
+
self
|
67
|
+
end
|
68
|
+
|
69
|
+
def visitors(id="")
|
70
|
+
@visitor = "/visitors/#{id}"
|
71
|
+
self
|
72
|
+
end
|
73
|
+
|
74
|
+
def build_url(ips = @ips)
|
75
|
+
array = [""]
|
76
|
+
@url = BASEURL + @dimension + @dimension_filter + @visitor + @bots + ips +
|
77
|
+
"?api_key=#{@api_key}" + "&site_token=#{@site_token}"
|
78
|
+
@@filters.each {|key, value| array << "#{key}=#{value}" if value }
|
79
|
+
parameters=array.join('&')
|
80
|
+
@url = @url.concat(parameters)
|
81
|
+
end
|
82
|
+
|
83
|
+
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
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require_relative "client"
|
2
|
+
class Now
|
3
|
+
|
4
|
+
BASEURL = "https://api.gosquared.com/now/v3/"
|
5
|
+
DIMENSIONS = %w(browsers campaigns concurrents engagement geo languages notifications
|
6
|
+
organisations overview pages platforms sources time timeSeries visitors)
|
7
|
+
@@filters = {dateFormat: @date_format, from: @from, to: @to,
|
8
|
+
format: @format, limit: @limit, sort: @sort,
|
9
|
+
presenter: @presenter, visitors_mode: @string, href: @href,
|
10
|
+
drill_limit: @drill_limit, sections: @sections,
|
11
|
+
minimal: @minimal, interval: @interval}
|
12
|
+
|
13
|
+
def initialize(api_key, site_token, client=Client.new)
|
14
|
+
@site_token = site_token
|
15
|
+
@api_key = api_key
|
16
|
+
@client = client
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
DIMENSIONS.each do |dimension|
|
21
|
+
define_method dimension do
|
22
|
+
@dimension = dimension
|
23
|
+
self
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
@@filters.each do |key, value|
|
28
|
+
define_method key do |argument|
|
29
|
+
@@filters[key] = argument
|
30
|
+
self
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def fetch
|
35
|
+
data = @client.get(url)
|
36
|
+
@@filters.each{|key, value| @@filters[key]=nil} if data
|
37
|
+
data
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def url
|
43
|
+
array = [""]
|
44
|
+
@url = BASEURL + @dimension + "?api_key=#{@api_key}" + "&site_token=#{@site_token}"
|
45
|
+
@@filters.each {|key, value| array << "#{key}=#{value}" if value }
|
46
|
+
parameters=array.join('&')
|
47
|
+
@url = @url.concat(parameters)
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require_relative "client"
|
2
|
+
class People
|
3
|
+
|
4
|
+
BASEURL = "https://api.gosquared.com/people/v1/"
|
5
|
+
VERSION = %w(v1 v2 v3)
|
6
|
+
DIMENSIONS = %w(devices eventTypes people propertyTypes feed smartgroups)
|
7
|
+
@@filters = {query: @query, filters: @filters, sort: @sort,
|
8
|
+
format: @presenter, limit: @limit, type: @type, from: @from, to: @to}
|
9
|
+
|
10
|
+
def initialize(api_key, site_token, client =Client.new)
|
11
|
+
@site_token = site_token
|
12
|
+
@api_key = api_key
|
13
|
+
@person_id = ""
|
14
|
+
@person_filter = ""
|
15
|
+
@client = client
|
16
|
+
end
|
17
|
+
|
18
|
+
DIMENSIONS.each do |dimension|
|
19
|
+
define_method dimension do |options = ""|
|
20
|
+
@dimension = dimension
|
21
|
+
@data = options
|
22
|
+
self
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
@@filters.each do |key, value|
|
27
|
+
define_method key do |argument|
|
28
|
+
@@filters[key] = argument
|
29
|
+
self
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def person_id(object, filter)
|
34
|
+
@person_id = "/" + object
|
35
|
+
@person_filter = "/" + filter
|
36
|
+
self
|
37
|
+
end
|
38
|
+
|
39
|
+
def fetch
|
40
|
+
data = @client.get(url)
|
41
|
+
@@filters.each{|key, value| @@filters[key]=nil} if data
|
42
|
+
data
|
43
|
+
end
|
44
|
+
|
45
|
+
def url
|
46
|
+
array = [""]
|
47
|
+
url = BASEURL + @dimension + @person_id + @person_filter +
|
48
|
+
"?api_key=#{@api_key}" + "&site_token=#{@site_token}"
|
49
|
+
@@filters.each { |key, value| array << "#{key}=#{value}" if value }
|
50
|
+
parameters=array.join('&')
|
51
|
+
url.concat(parameters)
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative "client"
|
2
|
+
class Tracking
|
3
|
+
|
4
|
+
BASEURL = "https://api.gosquared.com/tracking/v1/"
|
5
|
+
DIMENSIONS = %w(event identify pageview ping properties timeout transaction)
|
6
|
+
|
7
|
+
def initialize(api_key, site_token, client=Client.new)
|
8
|
+
@site_token = site_token
|
9
|
+
@api_key = api_key
|
10
|
+
@client = client
|
11
|
+
end
|
12
|
+
|
13
|
+
DIMENSIONS.each do |dimension|
|
14
|
+
define_method dimension do |options|
|
15
|
+
@dimension = dimension
|
16
|
+
@data = options
|
17
|
+
self
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def post
|
22
|
+
response = @client.post(url, @data)
|
23
|
+
@data = nil if response.code === '200'
|
24
|
+
response
|
25
|
+
end
|
26
|
+
|
27
|
+
def url
|
28
|
+
url = BASEURL + @dimension + "?api_key=#{@api_key}" + "&site_token=#{@site_token}"
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require_relative "client"
|
2
|
+
class Trends
|
3
|
+
|
4
|
+
BASEURL = "https://api.gosquared.com/trends/v2/"
|
5
|
+
DIMENSIONS = %w(aggregate browser category country event language organisation os page path1 product screenDimensions sources transactions)
|
6
|
+
@@filters = {date_format: @date_format, from: @from, to: @to,
|
7
|
+
format: @format, limit: @limit, sort: @sort, group: @group}
|
8
|
+
|
9
|
+
def initialize(api_key, site_token, client=Client.new)
|
10
|
+
@site_token = site_token
|
11
|
+
@api_key = api_key
|
12
|
+
@client = client
|
13
|
+
end
|
14
|
+
|
15
|
+
DIMENSIONS.each do |dimension|
|
16
|
+
define_method dimension do
|
17
|
+
@dimension = dimension
|
18
|
+
self
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
@@filters.each do |key, value|
|
23
|
+
define_method key do |argument|
|
24
|
+
@@filters[key] = argument
|
25
|
+
self
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def fetch
|
30
|
+
data = @client.get(url)
|
31
|
+
@@filters.each{|key, value| @@filters[key]=nil} if data
|
32
|
+
data
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def url
|
38
|
+
array = [""]
|
39
|
+
url = BASEURL + @dimension + "?api_key=#{@api_key}" + "&site_token=#{@site_token}"
|
40
|
+
@@filters.each {|key, value| array << "#{key}=#{value}" if value }
|
41
|
+
parameters=array.join('&')
|
42
|
+
url.concat(parameters)
|
43
|
+
end
|
44
|
+
end
|
data/lib/gosquared.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'my_gem/railtie' if defined? (Rails)
|
2
|
+
require_relative "gosquared/trends"
|
3
|
+
require_relative "gosquared/tracking"
|
4
|
+
require_relative "gosquared/people"
|
5
|
+
require_relative "gosquared/now"
|
6
|
+
require_relative "gosquared/account"
|
7
|
+
require_relative "config"
|
8
|
+
|
9
|
+
module Gosquared
|
10
|
+
|
11
|
+
class RubyClient
|
12
|
+
|
13
|
+
def initialize api_key, site_id
|
14
|
+
@api_key = api_key
|
15
|
+
@site_id = site_id
|
16
|
+
end
|
17
|
+
|
18
|
+
def trends
|
19
|
+
@trends ||= Trends.new(@api_key, @site_id)
|
20
|
+
end
|
21
|
+
|
22
|
+
def tracking
|
23
|
+
@tracking ||= Tracking.new(@api_key, @site_id)
|
24
|
+
end
|
25
|
+
|
26
|
+
def people
|
27
|
+
@people ||= People.new(@api_key, @site_id)
|
28
|
+
end
|
29
|
+
|
30
|
+
def now
|
31
|
+
@now ||= Now.new(@api_key, @site_id)
|
32
|
+
end
|
33
|
+
|
34
|
+
def account
|
35
|
+
@account ||= Account.new(@api_key, @site_id)
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class Injector
|
2
|
+
|
3
|
+
module Filter
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
included do
|
6
|
+
append_after_filter :add_script
|
7
|
+
|
8
|
+
CLOSING_BODY_TAG = %r{</body>}
|
9
|
+
|
10
|
+
def add_script
|
11
|
+
response.body = response.body.gsub(CLOSING_BODY_TAG, "<script>
|
12
|
+
var trackingCode = function() {
|
13
|
+
|
14
|
+
!function(g,s,q,r,d){r=g[r]=g[r]||function(){(r.q=r.q||[]).push(
|
15
|
+
arguments)};d=s.createElement(q);q=s.getElementsByTagName(q)[0];
|
16
|
+
d.src='//d1l6p2sc9645hc.cloudfront.net/tracker.js';q.parentNode.
|
17
|
+
insertBefore(d,q)}(window,document,'script','_gs');
|
18
|
+
_gs('#{GoSquared.configure.site_token}'); _gs('set', 'trackLocal', true);
|
19
|
+
};
|
20
|
+
|
21
|
+
var loadTracker;
|
22
|
+
loadTracker=function(){
|
23
|
+
if(!window._gs) {
|
24
|
+
trackingCode();
|
25
|
+
} else {
|
26
|
+
delete _gs;
|
27
|
+
trackingCode();
|
28
|
+
}
|
29
|
+
};
|
30
|
+
$(document).on('page:load', loadTracker)
|
31
|
+
$(document).on('turbolinks:load', loadTracker);
|
32
|
+
</script>" + "\n </body>")
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'rails/generators/base'
|
2
|
+
|
3
|
+
module Gosquared
|
4
|
+
module Generators
|
5
|
+
class ConfigGenerator < Rails::Generators::Base
|
6
|
+
source_root File.expand_path("../templates", __FILE__)
|
7
|
+
|
8
|
+
argument :site_token
|
9
|
+
|
10
|
+
def copy_initializer_file
|
11
|
+
@site_token = site_token
|
12
|
+
template("gosquared.rb.erb", File.join("config/initializers/go_squared.rb"))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
metadata
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: russ_inject
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Russell Vaughan
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-08-23 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: injecting a script tag
|
14
|
+
email: russell@gosquared.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/config.rb
|
20
|
+
- lib/gosquared.rb
|
21
|
+
- lib/gosquared/account.rb
|
22
|
+
- lib/gosquared/client.rb
|
23
|
+
- lib/gosquared/now.rb
|
24
|
+
- lib/gosquared/people.rb
|
25
|
+
- lib/gosquared/tracking.rb
|
26
|
+
- lib/gosquared/trends.rb
|
27
|
+
- lib/my_gem/injector.rb
|
28
|
+
- lib/my_gem/railtie.rb
|
29
|
+
- lib/rails/generators/gosquared/config/config_generator.rb
|
30
|
+
- lib/rails/generators/gosquared/config/templates/gosquared.rb.erb
|
31
|
+
homepage: http://rubygems.org/gems/inject
|
32
|
+
licenses:
|
33
|
+
- MIT
|
34
|
+
metadata: {}
|
35
|
+
post_install_message:
|
36
|
+
rdoc_options: []
|
37
|
+
require_paths:
|
38
|
+
- lib
|
39
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
requirements: []
|
50
|
+
rubyforge_project:
|
51
|
+
rubygems_version: 2.6.6
|
52
|
+
signing_key:
|
53
|
+
specification_version: 4
|
54
|
+
summary: Inject!
|
55
|
+
test_files: []
|