metaslug 0.3.3

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.
Files changed (96) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/Gemfile +6 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.md +112 -0
  6. data/Rakefile +19 -0
  7. data/lib/metaslug/controllers/action_controller_extension.rb +165 -0
  8. data/lib/metaslug/helpers/action_view_extension.rb +49 -0
  9. data/lib/metaslug/hooks.rb +15 -0
  10. data/lib/metaslug/railtie.rb +7 -0
  11. data/lib/metaslug/version.rb +3 -0
  12. data/lib/metaslug.rb +7 -0
  13. data/lib/rails/generators/metaslug/install/install_generator.rb +21 -0
  14. data/lib/rails/generators/metaslug/locale/locale_generator.rb +69 -0
  15. data/lib/tasks/metaslug_tasks.rake +4 -0
  16. data/metaslug.gemspec +24 -0
  17. data/test/dummy/Rakefile +6 -0
  18. data/test/dummy/app/assets/images/.keep +0 -0
  19. data/test/dummy/app/assets/javascripts/application.js +13 -0
  20. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  21. data/test/dummy/app/assets/stylesheets/scaffold.css +56 -0
  22. data/test/dummy/app/controllers/application_controller.rb +13 -0
  23. data/test/dummy/app/controllers/categories_controller.rb +58 -0
  24. data/test/dummy/app/controllers/concerns/.keep +0 -0
  25. data/test/dummy/app/controllers/pages_controller.rb +12 -0
  26. data/test/dummy/app/controllers/posts_controller.rb +60 -0
  27. data/test/dummy/app/helpers/application_helper.rb +2 -0
  28. data/test/dummy/app/helpers/categories_helper.rb +2 -0
  29. data/test/dummy/app/helpers/metaslug_helper.rb +2 -0
  30. data/test/dummy/app/helpers/pages_helper.rb +2 -0
  31. data/test/dummy/app/helpers/posts_helper.rb +2 -0
  32. data/test/dummy/app/mailers/.keep +0 -0
  33. data/test/dummy/app/models/.keep +0 -0
  34. data/test/dummy/app/models/category.rb +3 -0
  35. data/test/dummy/app/models/concerns/.keep +0 -0
  36. data/test/dummy/app/models/page.rb +3 -0
  37. data/test/dummy/app/models/post.rb +5 -0
  38. data/test/dummy/app/views/categories/_form.html.erb +21 -0
  39. data/test/dummy/app/views/categories/edit.html.erb +6 -0
  40. data/test/dummy/app/views/categories/index.html.erb +25 -0
  41. data/test/dummy/app/views/categories/new.html.erb +5 -0
  42. data/test/dummy/app/views/categories/show.html.erb +9 -0
  43. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  44. data/test/dummy/app/views/pages/show.html.erb +1 -0
  45. data/test/dummy/app/views/posts/_form.html.erb +33 -0
  46. data/test/dummy/app/views/posts/edit.html.erb +6 -0
  47. data/test/dummy/app/views/posts/index.html.erb +31 -0
  48. data/test/dummy/app/views/posts/new.html.erb +5 -0
  49. data/test/dummy/app/views/posts/show.html.erb +24 -0
  50. data/test/dummy/bin/bundle +3 -0
  51. data/test/dummy/bin/rails +4 -0
  52. data/test/dummy/bin/rake +4 -0
  53. data/test/dummy/config/application.rb +23 -0
  54. data/test/dummy/config/boot.rb +5 -0
  55. data/test/dummy/config/database.example.yml +22 -0
  56. data/test/dummy/config/environment.rb +5 -0
  57. data/test/dummy/config/environments/development.rb +37 -0
  58. data/test/dummy/config/environments/production.rb +82 -0
  59. data/test/dummy/config/environments/test.rb +39 -0
  60. data/test/dummy/config/initializers/assets.rb +8 -0
  61. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  62. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  63. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  64. data/test/dummy/config/initializers/inflections.rb +16 -0
  65. data/test/dummy/config/initializers/initializer.rb +1 -0
  66. data/test/dummy/config/initializers/metaslug.rb +1 -0
  67. data/test/dummy/config/initializers/mime_types.rb +4 -0
  68. data/test/dummy/config/initializers/session_store.rb +3 -0
  69. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  70. data/test/dummy/config/locales/de.yml +2 -0
  71. data/test/dummy/config/locales/en.yml +23 -0
  72. data/test/dummy/config/locales/fr.yml +23 -0
  73. data/test/dummy/config/metaslug/de.yml +4 -0
  74. data/test/dummy/config/metaslug/en.yml +61 -0
  75. data/test/dummy/config/metaslug/fr.yml +41 -0
  76. data/test/dummy/config/routes.rb +12 -0
  77. data/test/dummy/config.ru +4 -0
  78. data/test/dummy/db/migrate/20140924091048_create_posts.rb +12 -0
  79. data/test/dummy/db/migrate/20140924091105_create_categories.rb +9 -0
  80. data/test/dummy/db/migrate/20140925101545_create_pages.rb +11 -0
  81. data/test/dummy/db/migrate/20140929145421_add_title_and_description_to_page.rb +6 -0
  82. data/test/dummy/db/schema.rb +43 -0
  83. data/test/dummy/lib/assets/.keep +0 -0
  84. data/test/dummy/log/.keep +0 -0
  85. data/test/dummy/public/404.html +67 -0
  86. data/test/dummy/public/422.html +67 -0
  87. data/test/dummy/public/500.html +66 -0
  88. data/test/dummy/public/favicon.ico +0 -0
  89. data/test/dummy/test/fixtures/categories.yml +7 -0
  90. data/test/dummy/test/fixtures/pages.yml +23 -0
  91. data/test/dummy/test/fixtures/posts.yml +13 -0
  92. data/test/dummy/test/helpers/metaslug_helper_test.rb +25 -0
  93. data/test/dummy/test/integration/metas_test.rb +91 -0
  94. data/test/metaslug_test.rb +5 -0
  95. data/test/test_helper.rb +30 -0
  96. metadata +274 -0
@@ -0,0 +1,91 @@
1
+ require 'test_helper'
2
+
3
+ class MetasTest < ActionDispatch::IntegrationTest
4
+ fixtures :all
5
+
6
+ test "title when visiting categories path with en locale" do
7
+ visit "/categories?locale=en"
8
+ assert_title "Categories"
9
+ end
10
+
11
+ test "title when visiting categories path with french locale" do
12
+ visit "/categories?locale=fr"
13
+ assert_title "Catégories"
14
+ end
15
+
16
+ test "title when visiting dynamic slug with en locale" do
17
+ visit "/awesome-page?locale=en"
18
+ assert_title "Really awesome"
19
+ end
20
+
21
+ test "title when visiting dynamic slug with french locale" do
22
+ visit "/awesome-page?locale=fr"
23
+ assert_title "Super page"
24
+ end
25
+
26
+ test "title when browsing a path with a / at the end" do
27
+ visit "/categories/?locale=fr"
28
+ assert_title "Catégories"
29
+ end
30
+
31
+ test "title when editing a category path in en" do
32
+ visit edit_category_path(categories(:phone), locale: 'en')
33
+ assert_title "Edit this category"
34
+ end
35
+
36
+ test "description when visiting categories path without locale" do
37
+ visit "/categories?locale=en"
38
+ assert_selector("meta[name='description'][content='List of categories']", visible: false)
39
+ end
40
+
41
+ test "description when visiting categories path with french locale" do
42
+ visit "/categories?locale=fr"
43
+ assert_selector("meta[name='description'][content='Liste des catégories']", visible: false)
44
+ end
45
+
46
+ test "every meta in locale file is present in the DOM" do
47
+ visit "/categories?locale=en"
48
+ assert_selector("meta[name='keywords'][content='categories, test']", visible: false)
49
+ end
50
+
51
+ test "use default metas if none match and default has been set" do
52
+ visit "/without-metas?locale=de"
53
+ assert_title "Standardtitel"
54
+ end
55
+
56
+ test "title should be empty if none match and default has not been set" do
57
+ visit "/without-metas?locale=fr"
58
+ assert_title ""
59
+ end
60
+
61
+ test "dynamic title should be set" do
62
+ visit post_path(posts(:phone))
63
+ assert_title "Phone article"
64
+ end
65
+
66
+ test "dynamic og title should be set" do
67
+ visit post_path(posts(:phone))
68
+ assert_selector("meta[property='og:title'][content='Phone article']", visible: false)
69
+ end
70
+
71
+ test "dynamic content works with many controller filter (metaslug_vars)" do
72
+ visit edit_post_path(posts(:phone))
73
+ assert_title "Edit Phone article"
74
+ end
75
+
76
+ test "doesn't interpolate when metas metaslug_vars are not set in the controller" do
77
+ visit category_path(categories(:phone))
78
+ assert_title "Category {{category.title}}"
79
+ end
80
+
81
+ test "title for dynamic page with slug containing dash" do
82
+ visit "/another-page"
83
+ assert_title "Yet another page"
84
+ end
85
+
86
+ test "twitter metas are all presents" do
87
+ visit "/twitter?locale=en"
88
+ assert_selector("meta[property='twitter:title'][content='Twitter title']", visible: false)
89
+ assert_selector("meta[property='twitter:url'][content='Twitter url']", visible: false)
90
+ end
91
+ end
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+ require 'test_helper'
3
+
4
+ class MetaslugTest < ActiveSupport::TestCase
5
+ end
@@ -0,0 +1,30 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require "rails/test_help"
6
+ require 'capybara/rails'
7
+
8
+ Rails.backtrace_cleaner.remove_silencers!
9
+
10
+ # Load support files
11
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
12
+
13
+ # Load fixtures from the engine
14
+ if ActiveSupport::TestCase.method_defined?(:fixture_path=)
15
+ ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
16
+ end
17
+
18
+ class ActionDispatch::IntegrationTest
19
+ # Make the Capybara DSL available in all integration tests
20
+ include Capybara::DSL
21
+ end
22
+
23
+ # FIXME: use this selector for refactoring
24
+ Capybara.add_selector(:meta) do
25
+ xpath { |name| "//meta[name='description']" }
26
+ end
27
+
28
+ Capybara.add_selector(:meta_with_content) do
29
+ xpath { |name, content| "//meta[name='#{name}'][content='#{content}']" }
30
+ end
metadata ADDED
@@ -0,0 +1,274 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: metaslug
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.3
5
+ platform: ruby
6
+ authors:
7
+ - Martin Catty
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: liquid
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: capybara
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: sqlite3
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Metaslug allows you to set your metas information in a localized YAML
70
+ file.
71
+ email:
72
+ - mcatty@synbioz.com
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - ".gitignore"
78
+ - Gemfile
79
+ - MIT-LICENSE
80
+ - README.md
81
+ - Rakefile
82
+ - lib/metaslug.rb
83
+ - lib/metaslug/controllers/action_controller_extension.rb
84
+ - lib/metaslug/helpers/action_view_extension.rb
85
+ - lib/metaslug/hooks.rb
86
+ - lib/metaslug/railtie.rb
87
+ - lib/metaslug/version.rb
88
+ - lib/rails/generators/metaslug/install/install_generator.rb
89
+ - lib/rails/generators/metaslug/locale/locale_generator.rb
90
+ - lib/tasks/metaslug_tasks.rake
91
+ - metaslug.gemspec
92
+ - test/dummy/Rakefile
93
+ - test/dummy/app/assets/images/.keep
94
+ - test/dummy/app/assets/javascripts/application.js
95
+ - test/dummy/app/assets/stylesheets/application.css
96
+ - test/dummy/app/assets/stylesheets/scaffold.css
97
+ - test/dummy/app/controllers/application_controller.rb
98
+ - test/dummy/app/controllers/categories_controller.rb
99
+ - test/dummy/app/controllers/concerns/.keep
100
+ - test/dummy/app/controllers/pages_controller.rb
101
+ - test/dummy/app/controllers/posts_controller.rb
102
+ - test/dummy/app/helpers/application_helper.rb
103
+ - test/dummy/app/helpers/categories_helper.rb
104
+ - test/dummy/app/helpers/metaslug_helper.rb
105
+ - test/dummy/app/helpers/pages_helper.rb
106
+ - test/dummy/app/helpers/posts_helper.rb
107
+ - test/dummy/app/mailers/.keep
108
+ - test/dummy/app/models/.keep
109
+ - test/dummy/app/models/category.rb
110
+ - test/dummy/app/models/concerns/.keep
111
+ - test/dummy/app/models/page.rb
112
+ - test/dummy/app/models/post.rb
113
+ - test/dummy/app/views/categories/_form.html.erb
114
+ - test/dummy/app/views/categories/edit.html.erb
115
+ - test/dummy/app/views/categories/index.html.erb
116
+ - test/dummy/app/views/categories/new.html.erb
117
+ - test/dummy/app/views/categories/show.html.erb
118
+ - test/dummy/app/views/layouts/application.html.erb
119
+ - test/dummy/app/views/pages/show.html.erb
120
+ - test/dummy/app/views/posts/_form.html.erb
121
+ - test/dummy/app/views/posts/edit.html.erb
122
+ - test/dummy/app/views/posts/index.html.erb
123
+ - test/dummy/app/views/posts/new.html.erb
124
+ - test/dummy/app/views/posts/show.html.erb
125
+ - test/dummy/bin/bundle
126
+ - test/dummy/bin/rails
127
+ - test/dummy/bin/rake
128
+ - test/dummy/config.ru
129
+ - test/dummy/config/application.rb
130
+ - test/dummy/config/boot.rb
131
+ - test/dummy/config/database.example.yml
132
+ - test/dummy/config/environment.rb
133
+ - test/dummy/config/environments/development.rb
134
+ - test/dummy/config/environments/production.rb
135
+ - test/dummy/config/environments/test.rb
136
+ - test/dummy/config/initializers/assets.rb
137
+ - test/dummy/config/initializers/backtrace_silencers.rb
138
+ - test/dummy/config/initializers/cookies_serializer.rb
139
+ - test/dummy/config/initializers/filter_parameter_logging.rb
140
+ - test/dummy/config/initializers/inflections.rb
141
+ - test/dummy/config/initializers/initializer.rb
142
+ - test/dummy/config/initializers/metaslug.rb
143
+ - test/dummy/config/initializers/mime_types.rb
144
+ - test/dummy/config/initializers/session_store.rb
145
+ - test/dummy/config/initializers/wrap_parameters.rb
146
+ - test/dummy/config/locales/de.yml
147
+ - test/dummy/config/locales/en.yml
148
+ - test/dummy/config/locales/fr.yml
149
+ - test/dummy/config/metaslug/de.yml
150
+ - test/dummy/config/metaslug/en.yml
151
+ - test/dummy/config/metaslug/fr.yml
152
+ - test/dummy/config/routes.rb
153
+ - test/dummy/db/migrate/20140924091048_create_posts.rb
154
+ - test/dummy/db/migrate/20140924091105_create_categories.rb
155
+ - test/dummy/db/migrate/20140925101545_create_pages.rb
156
+ - test/dummy/db/migrate/20140929145421_add_title_and_description_to_page.rb
157
+ - test/dummy/db/schema.rb
158
+ - test/dummy/lib/assets/.keep
159
+ - test/dummy/log/.keep
160
+ - test/dummy/public/404.html
161
+ - test/dummy/public/422.html
162
+ - test/dummy/public/500.html
163
+ - test/dummy/public/favicon.ico
164
+ - test/dummy/test/fixtures/categories.yml
165
+ - test/dummy/test/fixtures/pages.yml
166
+ - test/dummy/test/fixtures/posts.yml
167
+ - test/dummy/test/helpers/metaslug_helper_test.rb
168
+ - test/dummy/test/integration/metas_test.rb
169
+ - test/metaslug_test.rb
170
+ - test/test_helper.rb
171
+ homepage: https://github.com/synbioz/metaslug
172
+ licenses:
173
+ - MIT
174
+ metadata: {}
175
+ post_install_message:
176
+ rdoc_options: []
177
+ require_paths:
178
+ - lib
179
+ required_ruby_version: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ required_rubygems_version: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ requirements: []
190
+ rubyforge_project:
191
+ rubygems_version: 2.2.2
192
+ signing_key:
193
+ specification_version: 4
194
+ summary: Set metas according to a path.
195
+ test_files:
196
+ - test/dummy/Rakefile
197
+ - test/dummy/app/assets/images/.keep
198
+ - test/dummy/app/assets/javascripts/application.js
199
+ - test/dummy/app/assets/stylesheets/application.css
200
+ - test/dummy/app/assets/stylesheets/scaffold.css
201
+ - test/dummy/app/controllers/application_controller.rb
202
+ - test/dummy/app/controllers/categories_controller.rb
203
+ - test/dummy/app/controllers/concerns/.keep
204
+ - test/dummy/app/controllers/pages_controller.rb
205
+ - test/dummy/app/controllers/posts_controller.rb
206
+ - test/dummy/app/helpers/application_helper.rb
207
+ - test/dummy/app/helpers/categories_helper.rb
208
+ - test/dummy/app/helpers/metaslug_helper.rb
209
+ - test/dummy/app/helpers/pages_helper.rb
210
+ - test/dummy/app/helpers/posts_helper.rb
211
+ - test/dummy/app/mailers/.keep
212
+ - test/dummy/app/models/.keep
213
+ - test/dummy/app/models/category.rb
214
+ - test/dummy/app/models/concerns/.keep
215
+ - test/dummy/app/models/page.rb
216
+ - test/dummy/app/models/post.rb
217
+ - test/dummy/app/views/categories/_form.html.erb
218
+ - test/dummy/app/views/categories/edit.html.erb
219
+ - test/dummy/app/views/categories/index.html.erb
220
+ - test/dummy/app/views/categories/new.html.erb
221
+ - test/dummy/app/views/categories/show.html.erb
222
+ - test/dummy/app/views/layouts/application.html.erb
223
+ - test/dummy/app/views/pages/show.html.erb
224
+ - test/dummy/app/views/posts/_form.html.erb
225
+ - test/dummy/app/views/posts/edit.html.erb
226
+ - test/dummy/app/views/posts/index.html.erb
227
+ - test/dummy/app/views/posts/new.html.erb
228
+ - test/dummy/app/views/posts/show.html.erb
229
+ - test/dummy/bin/bundle
230
+ - test/dummy/bin/rails
231
+ - test/dummy/bin/rake
232
+ - test/dummy/config.ru
233
+ - test/dummy/config/application.rb
234
+ - test/dummy/config/boot.rb
235
+ - test/dummy/config/database.example.yml
236
+ - test/dummy/config/environment.rb
237
+ - test/dummy/config/environments/development.rb
238
+ - test/dummy/config/environments/production.rb
239
+ - test/dummy/config/environments/test.rb
240
+ - test/dummy/config/initializers/assets.rb
241
+ - test/dummy/config/initializers/backtrace_silencers.rb
242
+ - test/dummy/config/initializers/cookies_serializer.rb
243
+ - test/dummy/config/initializers/filter_parameter_logging.rb
244
+ - test/dummy/config/initializers/inflections.rb
245
+ - test/dummy/config/initializers/initializer.rb
246
+ - test/dummy/config/initializers/metaslug.rb
247
+ - test/dummy/config/initializers/mime_types.rb
248
+ - test/dummy/config/initializers/session_store.rb
249
+ - test/dummy/config/initializers/wrap_parameters.rb
250
+ - test/dummy/config/locales/de.yml
251
+ - test/dummy/config/locales/en.yml
252
+ - test/dummy/config/locales/fr.yml
253
+ - test/dummy/config/metaslug/de.yml
254
+ - test/dummy/config/metaslug/en.yml
255
+ - test/dummy/config/metaslug/fr.yml
256
+ - test/dummy/config/routes.rb
257
+ - test/dummy/db/migrate/20140924091048_create_posts.rb
258
+ - test/dummy/db/migrate/20140924091105_create_categories.rb
259
+ - test/dummy/db/migrate/20140925101545_create_pages.rb
260
+ - test/dummy/db/migrate/20140929145421_add_title_and_description_to_page.rb
261
+ - test/dummy/db/schema.rb
262
+ - test/dummy/lib/assets/.keep
263
+ - test/dummy/log/.keep
264
+ - test/dummy/public/404.html
265
+ - test/dummy/public/422.html
266
+ - test/dummy/public/500.html
267
+ - test/dummy/public/favicon.ico
268
+ - test/dummy/test/fixtures/categories.yml
269
+ - test/dummy/test/fixtures/pages.yml
270
+ - test/dummy/test/fixtures/posts.yml
271
+ - test/dummy/test/helpers/metaslug_helper_test.rb
272
+ - test/dummy/test/integration/metas_test.rb
273
+ - test/metaslug_test.rb
274
+ - test/test_helper.rb