Class: BetterSeo::Analytics::GoogleTagManager

Inherits:
Object
  • Object
show all
Defined in:
lib/better_seo/analytics/google_tag_manager.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(container_id, data_layer_name: "dataLayer") ⇒ GoogleTagManager

Returns a new instance of GoogleTagManager.



10
11
12
13
# File 'lib/better_seo/analytics/google_tag_manager.rb', line 10

def initialize(container_id, data_layer_name: "dataLayer")
  @container_id = container_id
  @data_layer_name = data_layer_name
end

Instance Attribute Details

#container_idObject (readonly)

Returns the value of attribute container_id.



8
9
10
# File 'lib/better_seo/analytics/google_tag_manager.rb', line 8

def container_id
  @container_id
end

#data_layer_nameObject (readonly)

Returns the value of attribute data_layer_name.



8
9
10
# File 'lib/better_seo/analytics/google_tag_manager.rb', line 8

def data_layer_name
  @data_layer_name
end

Instance Method Details

#push_data_layer(**data) ⇒ Object

Push data to data layer



37
38
39
40
41
# File 'lib/better_seo/analytics/google_tag_manager.rb', line 37

def push_data_layer(**data)
  <<~JS.strip
    #{@data_layer_name}.push(#{JSON.generate(data.transform_keys(&:to_s))});
  JS
end

#push_ecommerce(event:, ecommerce:) ⇒ Object

Push e-commerce data



44
45
46
47
48
49
50
51
52
53
# File 'lib/better_seo/analytics/google_tag_manager.rb', line 44

def push_ecommerce(event:, ecommerce:)
  data = {
    "event" => event,
    "ecommerce" => ecommerce.transform_keys(&:to_s)
  }

  <<~JS.strip
    #{@data_layer_name}.push(#{JSON.generate(data)});
  JS
end

#push_user_data(**user_data) ⇒ Object

Push user data



56
57
58
# File 'lib/better_seo/analytics/google_tag_manager.rb', line 56

def push_user_data(**user_data)
  push_data_layer(**user_data)
end

#to_body_noscriptObject

Generate GTM body noscript tag



29
30
31
32
33
34
# File 'lib/better_seo/analytics/google_tag_manager.rb', line 29

def to_body_noscript
  <<~HTML.strip
    <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=#{@container_id}"
    height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  HTML
end

#to_head_script(nonce: nil) ⇒ Object

Generate GTM head script tag



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/better_seo/analytics/google_tag_manager.rb', line 16

def to_head_script(nonce: nil)
  nonce_attr = nonce ? %( nonce="#{escape_html(nonce)}") : ""

  <<~HTML.strip
    <script#{nonce_attr}>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
    new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
    j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
    'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    })(window,document,'script','#{@data_layer_name}','#{@container_id}');</script>
  HTML
end