ga_events 4.0.0 → 4.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: af13dc202f2b24f7fa7ba45345d90fea5158e4b50c5e55fbb6bbc68752c6083b
4
- data.tar.gz: bbd3f2173bba05a2ce2d1dc4315a288b83b469810327dd2cbccd30799f6e595a
3
+ metadata.gz: b93d2ffe7308a325730dc5c73faf0765807c9a3c83aea96d911199044e73cf89
4
+ data.tar.gz: 044d35f5bba0adf9613e5886065cef5eadd38fded5957879b13ff16beb0dfb89
5
5
  SHA512:
6
- metadata.gz: cb529a2794580ae3c52a2a226c620b94ba79b278dc1171fcda5a27bdc511901b95f2d9243028285484a2a8d66af2feeb6a40539e82e5def320ed0974bf62e74e
7
- data.tar.gz: 9b9adf95d667f066198b222cb45e233b83b03420e84a6743cd93cfba70b90bbaed7982b070d552f37e69c148a21800159a18223af176d6dac955049fe8f02971
6
+ metadata.gz: e3ae1007735e30a3217f69fbbb026883eebb1096bb390ed831d855e9324b8444d5460b68842df05e9e5e0ffa5072d0f4ea4b7b09a95d63de8093f74f0c8f2212
7
+ data.tar.gz: 68ea2765ce64928d0b64bfebed5a9fdee2feffd4be04d22a31e3f6d40cd63584c60a576e6dce89809723f82f7c1b36263fa56f2a3af8e646c489e6755479c15f
data/.rubocop.yml CHANGED
@@ -1,5 +1,7 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.3
2
+ SuggestExtensions: false
3
+ NewCops: enable
4
+ TargetRubyVersion: 3.4
3
5
  Exclude:
4
6
  - 'vendor/bundle/**/*'
5
7
  DisplayCopNames: true
data/Gemfile CHANGED
@@ -5,7 +5,6 @@ source 'https://rubygems.org'
5
5
  # Specify your gem's dependencies in ga_events.gemspec
6
6
  gemspec
7
7
 
8
- gem 'pry'
9
8
  gem 'rake'
10
9
  gem 'rspec', '~> 3.12.0'
11
- gem 'rubocop', '~> 0.79.0', require: false
10
+ gem 'rubocop', '~> 1.80.2', require: false
data/README.md CHANGED
@@ -13,8 +13,8 @@ pushes it to Google Analytics via gtag.js or Google Tag Manager.
13
13
 
14
14
  ## Dependencies
15
15
 
16
- * Ruby >= 3.2
17
- * Rails 4.2 onwards
16
+ * Ruby >= 3.4
17
+ * Rails 7.2 onwards
18
18
  * jQuery
19
19
 
20
20
  ## Installation
@@ -156,7 +156,7 @@ Yes please! Use pull requests.
156
156
 
157
157
  ### Credits
158
158
 
159
- * [danielbayerlein](https://github.com/danielbayerlein) former core committer
159
+ * [danielbayerlein](https://github.com/danielbayerlein), [der-flo](https://github.com/der-flo), [svenwin](https://github.com/svenwin) former core committer
160
160
  * [jhilden](https://github.com/jhilden) for ideas and bug reports
161
161
  * [brain-geek](https://github.com/brain-geek) for bug fixes, specs, features
162
162
 
data/ga_events.gemspec CHANGED
@@ -3,9 +3,8 @@
3
3
  require File.expand_path('lib/ga_events/version', __dir__)
4
4
 
5
5
  Gem::Specification.new do |gem|
6
- gem.authors = ['Florian Dütsch', 'Sven Winkler']
7
- gem.email = ['florian.duetsch@nix-wie-weg.de',
8
- 'sven.winkler@nix-wie-weg.de']
6
+ gem.authors = ['Nix-wie-weg Team']
7
+ gem.email = ['admin@nix-wie-weg.de']
9
8
  gem.description =
10
9
  "Google Analytics' Event Tracking everywhere in your Rails app)"
11
10
  gem.summary = 'This gem allows you to annotate events everywhere in ' \
@@ -21,12 +20,12 @@ Gem::Specification.new do |gem|
21
20
 
22
21
  gem.files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
23
22
  gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
24
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
25
23
  gem.name = 'ga_events'
26
24
  gem.require_paths = ['lib']
27
25
  gem.version = GaEvents::VERSION
28
26
  gem.licenses = ['MIT']
29
27
 
30
- gem.required_ruby_version = '>= 3.2'
31
- gem.add_dependency 'rails', '>= 4.2'
28
+ gem.required_ruby_version = '>= 3.4'
29
+ gem.add_dependency 'rails', '>= 7.2'
30
+ gem.metadata['rubygems_mfa_required'] = 'true'
32
31
  end
@@ -9,6 +9,7 @@ module GaEvents
9
9
  module List
10
10
  class << self
11
11
  extend Forwardable
12
+
12
13
  def_delegators :data, :<<, :present?
13
14
 
14
15
  def to_s
@@ -1,38 +1,49 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rack/utils'
4
+ require 'rack/request'
5
+ require 'rack/headers'
6
+ require 'cgi'
7
+ require 'rubygems'
4
8
 
5
9
  module GaEvents
6
10
  class Middleware
7
11
  SESSION_GA_EVENTS_KEY = 'ga_events.events'
8
12
 
13
+ HEADERS_KLASS = if Gem::Version.new(Rack.release) < Gem::Version.new('3.0')
14
+ Rack::Utils::HeaderHash
15
+ else
16
+ Rack::Headers
17
+ end
18
+ private_constant :HEADERS_KLASS
19
+
9
20
  def initialize(app)
10
21
  @app = app
11
22
  end
12
23
 
13
24
  def call(env)
14
25
  init_event_list(env)
15
- status, headers, response = @app.call(env)
26
+ status, headers, body = @app.call(env)
16
27
 
17
- headers = Rack::Utils::HeaderHash.new(headers)
18
28
  if GaEvents::List.present?
29
+ headers = HEADERS_KLASS.new.merge(headers)
19
30
  request = Rack::Request.new(env)
20
31
 
21
32
  # Can outgrow, headers might get too big
22
- serialized = GaEvents::List.to_s
33
+ serialized_events = GaEvents::List.to_s
23
34
  if xhr_or_turbolinks?(request)
24
35
  # AJAX request
25
- headers['x-ga-events'] = CGI.escapeURIComponent(serialized)
36
+ headers['x-ga-events'] = CGI.escapeURIComponent(serialized_events)
26
37
  elsif redirect?(status)
27
38
  # 30x/redirect? Then add event list to rack session to survive the
28
39
  # redirect.
29
- add_events_to_session(env, serialized)
40
+ add_events_to_session(env, serialized_events)
30
41
  elsif html?(status, headers)
31
- response = inject_div(response, serialized)
42
+ body = inject_div(body, serialized_events)
32
43
  end
33
44
  end
34
45
 
35
- [status, headers, response]
46
+ [status, headers, body]
36
47
  end
37
48
 
38
49
  private
@@ -43,28 +54,32 @@ module GaEvents
43
54
  end
44
55
 
45
56
  def add_events_to_session env, serialized_data
46
- if session = env.dig('rack.session')
57
+ if session = env['rack.session']
47
58
  session[SESSION_GA_EVENTS_KEY] = serialized_data
48
59
  end
49
60
  end
50
61
 
51
- def normalize_response(response)
52
- response = response.body if response.respond_to?(:body)
53
- response = response.join if response.respond_to?(:join)
54
- response
55
- end
56
-
57
- def inject_div(response, serialized_data)
58
- r = normalize_response(response)
59
- [r.sub('</body>', "<div data-ga-events='#{serialized_data}'></div>\\0")]
62
+ def inject_div(body, serialized_data)
63
+ if body.respond_to?(:to_ary)
64
+ html = +''
65
+ body.to_ary.each { |chunk| html << chunk }
66
+ html.sub!(%r{</body>}i) do |body|
67
+ serialized_data = CGI.escapeHTML(serialized_data)
68
+ "<div data-ga-events=\"#{serialized_data}\"></div>#{body}"
69
+ end
70
+ body = [html]
71
+ end
72
+ body
73
+ ensure
74
+ body.close if body.respond_to?(:close)
60
75
  end
61
76
 
62
77
  # Taken from:
63
78
  # https://github.com/rack/rack-contrib/blob/master/lib/rack/contrib/jsonp.rb
64
79
  def html?(status, headers)
65
80
  !Rack::Utils::STATUS_WITH_NO_ENTITY_BODY.include?(status.to_i) &&
66
- headers.key?('Content-Type') &&
67
- headers['Content-Type'].include?('text/html')
81
+ headers.key?('content-type') &&
82
+ headers['content-type'].start_with?('text/html')
68
83
  end
69
84
 
70
85
  def redirect?(status)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GaEvents
4
- VERSION = '4.0.0'
4
+ VERSION = '4.1.0'
5
5
  end
data/spec/event_spec.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  RSpec.describe GaEvents::Event do
data/spec/list_spec.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  RSpec.describe 'GaEvents::List' do
@@ -22,7 +24,7 @@ RSpec.describe 'GaEvents::List' do
22
24
  JSON
23
25
 
24
26
  expect(
25
- GaEvents::List.send(:data).to_h { [_1.event_name, _1.event_params] }
27
+ GaEvents::List.send(:data).to_h { [it.event_name, it.event_params] }
26
28
  ).to eq({ 'clicked' => { 'a' => 'a' } })
27
29
  end
28
30
 
@@ -34,7 +36,7 @@ RSpec.describe 'GaEvents::List' do
34
36
  JSON
35
37
 
36
38
  expect(
37
- GaEvents::List.send(:data).to_h { [_1.event_name, _1.event_params] }
39
+ GaEvents::List.send(:data).to_h { [it.event_name, it.event_params] }
38
40
  ).to be_empty
39
41
  end
40
42
  end
@@ -33,13 +33,18 @@ describe GaEvents::Middleware do
33
33
  context 'events present in GaEvents::List' do
34
34
  let(:app) do
35
35
  proc do |_|
36
- GaEvents::Event.new('test', { 'cool' => 'stuff' })
37
- [200, { 'Content-Type' => 'text/html' }, response_body]
36
+ GaEvents::Event.new(
37
+ 'test',
38
+ 'cool' => 'stuff',
39
+ 'ding' => ["it's a bug", 'this is "fine"', 'x=1&y=2', '>:3<']
40
+ )
41
+ [200, { 'Content-Type' => 'text/html' }, [response_body]]
38
42
  end
39
43
  end
40
44
 
41
- context 'when no body closing tag exists' do
45
+ context 'when no closing body tag exists' do
42
46
  let(:response) { request.get('/') }
47
+
43
48
  it 'leaves everything as it was' do
44
49
  expect(response.body).to eq response_body
45
50
  end
@@ -52,7 +57,16 @@ describe GaEvents::Middleware do
52
57
  it 'injects data-ga-events' do
53
58
  expect(response.body).to eq(
54
59
  'something awesome!' \
55
- "<div data-ga-events='[{\"__event__\":\"test\",\"cool\":\"stuff\"}]'></div></body>"
60
+ '<div data-ga-events="[{' \
61
+ '&quot;__event__&quot;:&quot;test&quot;,' \
62
+ '&quot;cool&quot;:&quot;stuff&quot;,' \
63
+ '&quot;ding&quot;:[' \
64
+ '&quot;it&#39;s a bug&quot;,' \
65
+ '&quot;this is \&quot;fine\&quot;&quot;,' \
66
+ '&quot;x=1&amp;y=2&quot;,' \
67
+ '&quot;&gt;:3&lt;&quot;' \
68
+ ']' \
69
+ '}]"></div></body>'
56
70
  )
57
71
  end
58
72
  end
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'bundler/setup'
4
- require 'pry'
5
4
  require 'rspec'
6
5
  require 'rails'
7
6
  require 'ga_events'
metadata CHANGED
@@ -1,15 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ga_events
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.1.0
5
5
  platform: ruby
6
6
  authors:
7
- - Florian Dütsch
8
- - Sven Winkler
9
- autorequire:
7
+ - Nix-wie-weg Team
10
8
  bindir: bin
11
9
  cert_chain: []
12
- date: 2023-08-09 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
13
11
  dependencies:
14
12
  - !ruby/object:Gem::Dependency
15
13
  name: rails
@@ -17,18 +15,17 @@ dependencies:
17
15
  requirements:
18
16
  - - ">="
19
17
  - !ruby/object:Gem::Version
20
- version: '4.2'
18
+ version: '7.2'
21
19
  type: :runtime
22
20
  prerelease: false
23
21
  version_requirements: !ruby/object:Gem::Requirement
24
22
  requirements:
25
23
  - - ">="
26
24
  - !ruby/object:Gem::Version
27
- version: '4.2'
25
+ version: '7.2'
28
26
  description: Google Analytics' Event Tracking everywhere in your Rails app)
29
27
  email:
30
- - florian.duetsch@nix-wie-weg.de
31
- - sven.winkler@nix-wie-weg.de
28
+ - admin@nix-wie-weg.de
32
29
  executables: []
33
30
  extensions: []
34
31
  extra_rdoc_files: []
@@ -56,8 +53,8 @@ files:
56
53
  homepage: https://github.com/Nix-wie-weg/ga_events
57
54
  licenses:
58
55
  - MIT
59
- metadata: {}
60
- post_install_message:
56
+ metadata:
57
+ rubygems_mfa_required: 'true'
61
58
  rdoc_options: []
62
59
  require_paths:
63
60
  - lib
@@ -65,15 +62,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
65
62
  requirements:
66
63
  - - ">="
67
64
  - !ruby/object:Gem::Version
68
- version: '3.2'
65
+ version: '3.4'
69
66
  required_rubygems_version: !ruby/object:Gem::Requirement
70
67
  requirements:
71
68
  - - ">="
72
69
  - !ruby/object:Gem::Version
73
70
  version: '0'
74
71
  requirements: []
75
- rubygems_version: 3.4.6
76
- signing_key:
72
+ rubygems_version: 3.7.2
77
73
  specification_version: 4
78
74
  summary: This gem allows you to annotate events everywhere in the code of your Rails
79
75
  app. A rack middleware is automatically inserted into the stack. It transports the
@@ -81,8 +77,4 @@ summary: This gem allows you to annotate events everywhere in the code of your R
81
77
  a data-pounded custom HTTP header appended. The asset pipeline-ready CoffeeScript
82
78
  extracts this data on the client side and pushes it to Google Analytics via ga.js
83
79
  or Google Tag Manager.
84
- test_files:
85
- - spec/event_spec.rb
86
- - spec/list_spec.rb
87
- - spec/middleware_spec.rb
88
- - spec/spec_helper.rb
80
+ test_files: []