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 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,8 @@
1
+ require_relative 'injector'
2
+ module Gosquared
3
+ class MyRailtie < Rails::Railtie
4
+ initializer "my_initialization" do |app|
5
+ ActionController::Base.send(:include, Injector::Filter)
6
+ end
7
+ end
8
+ 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
@@ -0,0 +1,3 @@
1
+ Gosquared.configure do |config|
2
+ config.site_token = ENV["GOSQUARED_SITE_TOKEN"] || "<%= @site_token %>"
3
+ 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: []