Class: BetterSeo::Analytics::GoogleTagManager
- Inherits:
-
Object
- Object
- BetterSeo::Analytics::GoogleTagManager
- Defined in:
- lib/better_seo/analytics/google_tag_manager.rb
Instance Attribute Summary collapse
-
#container_id ⇒ Object
readonly
Returns the value of attribute container_id.
-
#data_layer_name ⇒ Object
readonly
Returns the value of attribute data_layer_name.
Instance Method Summary collapse
-
#initialize(container_id, data_layer_name: "dataLayer") ⇒ GoogleTagManager
constructor
A new instance of GoogleTagManager.
-
#push_data_layer(**data) ⇒ Object
Push data to data layer.
-
#push_ecommerce(event:, ecommerce:) ⇒ Object
Push e-commerce data.
-
#push_user_data(**user_data) ⇒ Object
Push user data.
-
#to_body_noscript ⇒ Object
Generate GTM body noscript tag.
-
#to_head_script(nonce: nil) ⇒ Object
Generate GTM head script tag.
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_id ⇒ Object (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_name ⇒ Object (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_noscript ⇒ Object
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 |