roll-amp 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b3558881ad7ec6ca95fa5bd9dec9311fa2365512
4
- data.tar.gz: 05c3fb716d8c0c2352b939ec99b16da903e87e71
3
+ metadata.gz: 15a60f9621476bd9d68c5f0f7dd32323a0886a66
4
+ data.tar.gz: fbb79a383432b067e56ea670013cc3be3524f013
5
5
  SHA512:
6
- metadata.gz: eba77f753dd2bfff50e22aa43f2b1f9f94e426d1959b8f6265e5c4843d0a1e759b0fd9e37360fd8f1766229e091e0f14465d9a6f631e92053923c7f33431f936
7
- data.tar.gz: e2b07d19382183c53fcc8cc62a59722c6b6fa7c240d5f601acb74f71c601f4d2409fc0dc64c43306f57c4c4fbd9e63838394baa8267e8566e5bd8423da48dfc1
6
+ metadata.gz: e08f8e9f5b6d6188bd2509d227854773442a0c35637ecd0c83dbacc05f351dfe9713d344ab5f34e284bb805181bc8bda5a743d04cecdd1ba2b9a5f68f339c347
7
+ data.tar.gz: 63c8d8484a2bc4120e3ba60b2e4ab2dec61c1061e14755f32b80a7c88a88360ec3afc7cc898648ca4391b17449c6de1049fb4f75050ec514d45ce729ee91b015
data/README.md CHANGED
@@ -12,9 +12,9 @@ Implemented:
12
12
  * Tag to include AMP boilerplate CSS.
13
13
  * Tag to include AMP base JS.
14
14
  * Tag to include custom CSS.
15
+ * Google Analytics integration.
15
16
 
16
17
  Todo:
17
- * Google Analytics integration.
18
18
  * AMP validation via Ruby tests.
19
19
  * ...
20
20
 
@@ -50,19 +50,84 @@ Or install it yourself as:
50
50
  $ gem install roll-amp
51
51
 
52
52
  ## Usage
53
+ * [Documentation on RubyDoc](http://www.rubydoc.info/gems/roll-amp/)
53
54
  * [How to setup AMP layout for Rails app pages](https://github.com/roll-rails/roll-amp/wiki/How-to-setup-AMP-layout-for-Rails-app-pages)
54
55
 
55
- Layout example:
56
+ ### Include main JS
57
+ ```
58
+ <%= amp_js %>
59
+ ```
60
+ Includes `https://cdn.ampproject.org/v0.js` script at a place where the `amp_js`
61
+ tag was specified.
62
+ This tag is required for AMP.
63
+
64
+ ### Include boilerplate CSS
65
+ ```
66
+ <%= amp_boilerplate %>
67
+ ```
68
+ Includes basic CSS suggested at https://www.ampproject.org/docs/get_started/create/basic_markup
69
+
70
+ ### Include custom CSS
71
+ 1. Create CSS (SASS, SCSS) file under `app/stylesheets` of your Rails app.
72
+ For example `app/stylesheets/amp/application.scss`.
73
+ 2. Add the following line to your AMP layout:
74
+ ```
75
+ <%= amp_custom_style('amp/application') %>
76
+ ```
77
+ When `amp/application` is available in the assets pipeline,
78
+ its content will be loaded from there. Otherwise such file will be searched in
79
+ the `public` directory.
80
+ Usually it’s sufficient to create CSS file and Rails will handle the rest.
81
+ *Please note, AMP sets 50K limit on CSS size. If you include larger stylesheet
82
+ your pages won’t be valid.*
83
+
84
+ ### Google Analytics
85
+ 1. Insert the following tag *before* `amp_js`:
86
+ ```
87
+ <%= amp_analytics_js %>
88
+ ```
89
+ 2. Add analytics configuration to the *body*:
90
+ ```
91
+ <%=
92
+ amp_google_analytics(
93
+ 'UA-00000-1',
94
+ {
95
+ trackPageview: {
96
+ on: 'visible',
97
+ request: 'pageview'
98
+ }
99
+ }
100
+ )
101
+ %>
102
+ ```
103
+ First parameter is Google Analytics account ID.
104
+ Second parameter defines triggers. Please see [Adding Analytics to your AMP pages](https://developers.google.com/analytics/devguides/collection/amp-analytics/)
105
+ to learn about triggers. The example above shows the most common configuration.
106
+
107
+
108
+ ### Layout example
56
109
  ```html
57
110
  <!doctype html>
58
111
  <html ⚡>
59
112
  <head>
113
+ <%= amp_analytics_js %>
60
114
  <%= amp_js %>
61
115
  <%= csrf_meta_tags %>
62
116
  <%= amp_boilerplate %>
63
117
  <%= amp_custom_style('amp/application') %>
64
118
  </head>
65
119
  <body>
120
+ <%=
121
+ amp_google_analytics(
122
+ 'UA-00000-1',
123
+ {
124
+ trackPageview: {
125
+ on: 'visible',
126
+ request: 'pageview'
127
+ }
128
+ }
129
+ )
130
+ %>
66
131
  <%= yield %>
67
132
  </body>
68
133
  </html>
@@ -20,7 +20,17 @@ module Roll
20
20
 
21
21
  # JS in AMP.
22
22
  module Script
23
- use :AmpJsTag, 'script/amp_js_tag'
23
+ use :AnalyticsScriptTag, 'script/analytics_script_tag'
24
+ use :AmpJsTag, 'script/amp_js_tag'
25
+ use :IncludeScriptTag, 'script/include_script_tag'
26
+ use :ScriptTag, 'script/script_tag'
27
+ use :JsonScriptTag, 'script/json_script_tag'
28
+ end
29
+
30
+ # HTML in AMP.
31
+ module Html
32
+ use :AnalyticsTag, 'html/analytics_tag'
33
+ use :GoogleAnalyticsTag, 'html/google_analytics_tag'
24
34
  end
25
35
 
26
36
  # Modules with utility functions to use in Rails helpers.
@@ -1,4 +1,5 @@
1
1
  require 'rails'
2
+ require 'json'
2
3
 
3
4
  module Roll
4
5
  module Amp
@@ -29,6 +30,26 @@ module Roll
29
30
  def amp_js
30
31
  Script::AmpJsTag.new.to_html
31
32
  end
33
+
34
+ # Renders script tag with link to AMP analytics JS.
35
+ # @return [String] HTML containing script tag.
36
+ def amp_analytics_js
37
+ Script::AnalyticsScriptTag.new.to_html
38
+ end
39
+
40
+ # Renders tags to connect Google Analytics.
41
+ # @return [String] HTML containing AMP analytics tag with script tag,
42
+ # which configures Google Analytics.
43
+ def amp_google_analytics(account, triggers = {})
44
+ Html::GoogleAnalyticsTag.new(
45
+ Script::JsonScriptTag.new({
46
+ vars: {
47
+ account: account
48
+ },
49
+ triggers: triggers
50
+ }.to_json).to_html
51
+ ).to_html
52
+ end
32
53
  end
33
54
  end
34
55
  end
@@ -0,0 +1,27 @@
1
+ require 'action_view'
2
+
3
+ module Roll
4
+ module Amp
5
+ module Html
6
+ # The amp-analytics tag.
7
+ class AnalyticsTag
8
+ include ActionView::Helpers::TagHelper
9
+ include ActionView::Helpers::OutputSafetyHelper
10
+
11
+ # Initializes new instance of the analytics tag.
12
+ # @param type [String] the type of AMP analytics.
13
+ # @param content [String] the content of the tag.
14
+ def initialize(type, content)
15
+ @type = type
16
+ @content = content
17
+ end
18
+
19
+ # Prints this tag as HTML.
20
+ # @return [String] HTML-safe string containing the tag's HTML view.
21
+ def to_html
22
+ content_tag('amp-analytics', raw(@content), type: @type)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,18 @@
1
+ module Roll
2
+ module Amp
3
+ module Html
4
+ # The amp-analytics tag for Google Analytics.
5
+ class GoogleAnalyticsTag < AnalyticsTag
6
+ # Initializes new instance of the analytics tag.
7
+ # @param content [String] the content of the tag.
8
+ def initialize(content)
9
+ super(GoogleAnalyticsTag.type, content)
10
+ end
11
+
12
+ def self.type
13
+ 'googleanalytics'.freeze
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,16 +1,17 @@
1
- require 'action_view'
2
-
3
1
  module Roll
4
2
  module Amp
5
3
  module Script
6
- # The script tag with AMP utilities.
7
- class AmpJsTag
8
- include ActionView::Helpers::OutputSafetyHelper
4
+ # The script tag with AMP main JS file.
5
+ class AmpJsTag < IncludeScriptTag
6
+ # Initializes new instance of the AMP script tag.
7
+ def initialize
8
+ super(AmpJsTag.src)
9
+ end
9
10
 
10
- # Prints this tag as HTML.
11
- # @return [String] HTML-safe string containing the tag's HTML view.
12
- def to_html
13
- raw('<script async src="https://cdn.ampproject.org/v0.js"></script>')
11
+ # @return [String] Link to main AMP script which
12
+ # must be always included on AMP pages.
13
+ def self.src
14
+ 'https://cdn.ampproject.org/v0.js'.freeze
14
15
  end
15
16
  end
16
17
  end
@@ -0,0 +1,18 @@
1
+ module Roll
2
+ module Amp
3
+ module Script
4
+ # The script tag that enables analytics on AMP pages.
5
+ class AnalyticsScriptTag < IncludeScriptTag
6
+ # Initializes analytics script tag instance.
7
+ def initialize
8
+ super(AnalyticsScriptTag.src, 'amp-analytics')
9
+ end
10
+
11
+ # @return [String] Link to the script.
12
+ def self.src
13
+ 'https://cdn.ampproject.org/v0/amp-analytics-0.1.js'.freeze
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,33 @@
1
+ require 'action_view'
2
+
3
+ module Roll
4
+ module Amp
5
+ module Script
6
+ # The script tag to include AMP scripts. Note, it's always async.
7
+ class IncludeScriptTag
8
+ include ActionView::Helpers::OutputSafetyHelper
9
+
10
+ # Initializes new instance of the include script tag.
11
+ # @param src [String] the URL to the script.
12
+ # @param custom_element [String] the custom-element attribute value.
13
+ def initialize(src, custom_element = '')
14
+ @src = src
15
+ @custom_element = custom_element
16
+ end
17
+
18
+ # Prints this tag as HTML.
19
+ # @return [String] HTML-safe string containing the tag's HTML view.
20
+ def to_html
21
+ if @custom_element.empty?
22
+ raw("<script async src=\"#{@src}\"></script>")
23
+ else
24
+ raw(
25
+ "<script async src=\"#{@src}\" " \
26
+ "custom-element=\"#{@custom_element}\"></script>"
27
+ )
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,19 @@
1
+ module Roll
2
+ module Amp
3
+ module Script
4
+ # The script tag that contains JSON.
5
+ class JsonScriptTag < ScriptTag
6
+ # Initializes script tag instance.
7
+ # @param content [String] the content of the tag.
8
+ def initialize(content)
9
+ super(JsonScriptTag.type, content)
10
+ end
11
+
12
+ # @return [String] JSON MIME type.
13
+ def self.type
14
+ 'application/json'.freeze
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,27 @@
1
+ require 'action_view'
2
+
3
+ module Roll
4
+ module Amp
5
+ module Script
6
+ # The script tag for embedded scripts.
7
+ class ScriptTag
8
+ include ActionView::Helpers::TagHelper
9
+ include ActionView::Helpers::OutputSafetyHelper
10
+
11
+ # Initializes new instance of the script tag.
12
+ # @param type [String] the MIME type of the script.
13
+ # @param content [String] the script's content.
14
+ def initialize(type, content)
15
+ @type = type
16
+ @content = content
17
+ end
18
+
19
+ # Prints this tag as HTML.
20
+ # @return [String] HTML-safe string containing the tag's HTML view.
21
+ def to_html
22
+ content_tag('script', raw(@content), type: @type)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -6,11 +6,12 @@ module Roll
6
6
  # The style tag.
7
7
  class StyleTag
8
8
  include ActionView::Helpers::TagHelper
9
+ include ActionView::Helpers::OutputSafetyHelper
9
10
 
10
11
  # Initializes new instance of the style tag.
11
12
  # @param amp_attr [String] the AMP-specific attribute of the tag
12
13
  # to indicate its purpose.
13
- # @param [String] the content of the tag.
14
+ # @param content [String] the content of the tag.
14
15
  def initialize(amp_attr, content)
15
16
  @amp_attr = amp_attr
16
17
  @content = content
@@ -19,7 +20,7 @@ module Roll
19
20
  # Prints this tag as HTML.
20
21
  # @return [String] HTML-safe string containing the tag's HTML view.
21
22
  def to_html
22
- content_tag('style', @content, @amp_attr => '')
23
+ content_tag('style', raw(@content), @amp_attr => '')
23
24
  end
24
25
  end
25
26
  end
@@ -1,5 +1,5 @@
1
1
  module Roll
2
2
  module Amp
3
- VERSION = '0.1.0'.freeze
3
+ VERSION = '0.2.0'.freeze
4
4
  end
5
5
  end
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
 
12
12
  spec.summary = 'AMP in Rails apps'
13
13
  spec.description = 'Utilities to simplify Accelerated Mobile Pages (AMP)'\
14
- 'implementation in Rails apps'
14
+ ' implementation in Rails apps'
15
15
  spec.homepage = 'https://github.com/roll-rails/roll-amp'
16
16
  spec.license = 'MIT'
17
17
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roll-amp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Viacheslav Shynkarenko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-23 00:00:00.000000000 Z
11
+ date: 2017-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionview
@@ -134,7 +134,7 @@ dependencies:
134
134
  - - "~>"
135
135
  - !ruby/object:Gem::Version
136
136
  version: 0.9.1
137
- description: Utilities to simplify Accelerated Mobile Pages (AMP)implementation in
137
+ description: Utilities to simplify Accelerated Mobile Pages (AMP) implementation in
138
138
  Rails apps
139
139
  email:
140
140
  - shinkarenko.vi@gmail.com
@@ -158,7 +158,13 @@ files:
158
158
  - lib/roll/amp/autoload.rb
159
159
  - lib/roll/amp/helpers/config.reek
160
160
  - lib/roll/amp/helpers/tags.rb
161
+ - lib/roll/amp/html/analytics_tag.rb
162
+ - lib/roll/amp/html/google_analytics_tag.rb
161
163
  - lib/roll/amp/script/amp_js_tag.rb
164
+ - lib/roll/amp/script/analytics_script_tag.rb
165
+ - lib/roll/amp/script/include_script_tag.rb
166
+ - lib/roll/amp/script/json_script_tag.rb
167
+ - lib/roll/amp/script/script_tag.rb
162
168
  - lib/roll/amp/style/boilerplate_style_tag.rb
163
169
  - lib/roll/amp/style/boilerplate_style_tags_set.rb
164
170
  - lib/roll/amp/style/compiled_stylesheet_file.rb