meta-tags-helpers 0.1.7 → 0.2.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 +7 -0
- data/.gitignore +117 -0
- data/Gemfile +3 -7
- data/LICENSE.txt +22 -0
- data/README.md +26 -6
- data/Rakefile +4 -51
- data/lib/meta_tags_helpers.rb +35 -32
- data/meta-tags-helpers.gemspec +21 -47
- data/test_app/Gemfile +4 -0
- data/test_app/README.rdoc +28 -0
- data/test_app/Rakefile +6 -0
- data/test_app/app/assets/javascripts/application.js +13 -0
- data/test_app/app/assets/javascripts/metatags.js +2 -0
- data/test_app/app/assets/stylesheets/application.css +13 -0
- data/test_app/app/assets/stylesheets/metatags.css +4 -0
- data/test_app/app/controllers/application_controller.rb +5 -0
- data/test_app/app/controllers/metatags_controller.rb +33 -0
- data/test_app/app/helpers/application_helper.rb +2 -0
- data/test_app/app/helpers/metatags_helper.rb +2 -0
- data/test_app/app/views/layouts/application.html.erb +17 -0
- data/test_app/app/views/metatags/arrays.html.erb +0 -0
- data/test_app/app/views/metatags/default.html.erb +0 -0
- data/test_app/app/views/metatags/namespaced.html.erb +0 -0
- data/test_app/app/views/metatags/options.html.erb +0 -0
- data/test_app/app/views/metatags/override_controller.html.erb +0 -0
- data/test_app/app/views/metatags/override_view.html.erb +1 -0
- data/test_app/bin/bundle +3 -0
- data/test_app/bin/rails +4 -0
- data/test_app/bin/rake +4 -0
- data/test_app/config.ru +4 -0
- data/test_app/config/application.rb +31 -0
- data/test_app/config/boot.rb +4 -0
- data/test_app/config/environment.rb +5 -0
- data/test_app/config/environments/development.rb +23 -0
- data/test_app/config/environments/production.rb +65 -0
- data/test_app/config/environments/test.rb +36 -0
- data/test_app/config/initializers/backtrace_silencers.rb +7 -0
- data/test_app/config/initializers/filter_parameter_logging.rb +4 -0
- data/test_app/config/initializers/inflections.rb +16 -0
- data/test_app/config/initializers/mime_types.rb +5 -0
- data/test_app/config/initializers/secret_token.rb +12 -0
- data/test_app/config/initializers/session_store.rb +3 -0
- data/test_app/config/initializers/wrap_parameters.rb +9 -0
- data/test_app/config/locales/en.yml +23 -0
- data/test_app/config/routes.rb +8 -0
- data/test_app/db/seeds.rb +7 -0
- data/test_app/log/development.log +0 -0
- data/test_app/log/test.log +123 -0
- data/test_app/public/404.html +58 -0
- data/test_app/public/422.html +58 -0
- data/test_app/public/500.html +57 -0
- data/test_app/public/favicon.ico +0 -0
- data/test_app/public/robots.txt +5 -0
- data/test_app/test/controllers/metatags_controller_test.rb +89 -0
- data/test_app/test/helpers/metatags_helper_test.rb +4 -0
- data/test_app/test/test_helper.rb +7 -0
- metadata +127 -34
- data/Gemfile.lock +0 -93
- data/VERSION +0 -1
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: da68ee4c3c07370f7b41fbca573c38cfecf5398c
|
4
|
+
data.tar.gz: 3483ced9ffb0496a8855e78a4158df86eb081449
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5e4fc8b3a89d66a3fc9ae5d5ef48d6c80917e642c9e261f433e7aa20afe58f4fa1a172a09391a9ab0eed63bc3724eaaf12dd3bc5999d19e462b8ebd8989523ec
|
7
|
+
data.tar.gz: e0709490ffe13ab1d4e6c9862bb36890d9ab09e1ac22d24ce8b11e2a4cb3004575058ddf190f6176f5be223a70ebeb46de3dc307ad1c621c2cb198e7eb0fa441
|
data/.gitignore
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
# Created by http://gitignore.io
|
2
|
+
|
3
|
+
Gemfile.lock
|
4
|
+
|
5
|
+
### Ruby ###
|
6
|
+
*.gem
|
7
|
+
*.rbc
|
8
|
+
.bundle
|
9
|
+
.config
|
10
|
+
coverage
|
11
|
+
InstalledFiles
|
12
|
+
lib/bundler/man
|
13
|
+
pkg
|
14
|
+
rdoc
|
15
|
+
spec/reports
|
16
|
+
test/tmp
|
17
|
+
test/version_tmp
|
18
|
+
tmp
|
19
|
+
|
20
|
+
# YARD artifacts
|
21
|
+
.yardoc
|
22
|
+
_yardoc
|
23
|
+
doc/
|
24
|
+
|
25
|
+
### Rails ###
|
26
|
+
*.rbc
|
27
|
+
*.sassc
|
28
|
+
.sass-cache
|
29
|
+
capybara-*.html
|
30
|
+
.rspec
|
31
|
+
.rvmrc
|
32
|
+
/.bundle
|
33
|
+
/vendor/bundle
|
34
|
+
/log/*
|
35
|
+
/tmp/*
|
36
|
+
/db/*.sqlite3
|
37
|
+
/public/system/*
|
38
|
+
/coverage/
|
39
|
+
/spec/tmp/*
|
40
|
+
**.orig
|
41
|
+
rerun.txt
|
42
|
+
pickle-email-*.html
|
43
|
+
.project
|
44
|
+
!.keep
|
45
|
+
|
46
|
+
|
47
|
+
### SublimeText ###
|
48
|
+
# SublimeText project files
|
49
|
+
*.sublime-workspace
|
50
|
+
|
51
|
+
### TextMate ###
|
52
|
+
*.tmproj
|
53
|
+
*.tmproject
|
54
|
+
tmtags
|
55
|
+
|
56
|
+
### OSX ###
|
57
|
+
.DS_Store
|
58
|
+
.AppleDouble
|
59
|
+
.LSOverride
|
60
|
+
Icon
|
61
|
+
|
62
|
+
|
63
|
+
# Thumbnails
|
64
|
+
._*
|
65
|
+
|
66
|
+
# Files that might appear on external disk
|
67
|
+
.Spotlight-V100
|
68
|
+
.Trashes
|
69
|
+
|
70
|
+
### Windows ###
|
71
|
+
# Windows image file caches
|
72
|
+
Thumbs.db
|
73
|
+
ehthumbs.db
|
74
|
+
|
75
|
+
# Folder config file
|
76
|
+
Desktop.ini
|
77
|
+
|
78
|
+
# Recycle Bin used on file shares
|
79
|
+
$RECYCLE.BIN/
|
80
|
+
|
81
|
+
### Linux ###
|
82
|
+
.*
|
83
|
+
!.gitignore
|
84
|
+
!.git*
|
85
|
+
*~
|
86
|
+
|
87
|
+
|
88
|
+
### RubyMine ###
|
89
|
+
.idea/workspace.xml
|
90
|
+
|
91
|
+
### Eclipse ###
|
92
|
+
*.pydevproject
|
93
|
+
.project
|
94
|
+
.metadata
|
95
|
+
bin/**
|
96
|
+
tmp/**
|
97
|
+
tmp/**/*
|
98
|
+
*.tmp
|
99
|
+
*.bak
|
100
|
+
*.swp
|
101
|
+
*~.nib
|
102
|
+
local.properties
|
103
|
+
.classpath
|
104
|
+
.settings/
|
105
|
+
.loadpath
|
106
|
+
|
107
|
+
# External tool builders
|
108
|
+
.externalToolBuilders/
|
109
|
+
|
110
|
+
# Locally stored "Eclipse launch configurations"
|
111
|
+
*.launch
|
112
|
+
|
113
|
+
# CDT-specific
|
114
|
+
.cproject
|
115
|
+
|
116
|
+
# PDT-specific
|
117
|
+
.buildpath
|
data/Gemfile
CHANGED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 mcasimir
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
@@ -4,10 +4,12 @@
|
|
4
4
|
|
5
5
|
The `meta-tags-helpers` gem consists of a set of helpers to setup and render html meta tags in a simple way. It has good customizable defaults that also come with built-in support for open-graph and csrf: all your meta tags in a single call.
|
6
6
|
|
7
|
+
Supports both Rails 3 and 4.
|
8
|
+
|
7
9
|
### Install
|
8
10
|
|
9
11
|
``` rb
|
10
|
-
gem 'meta-tags-helpers'
|
12
|
+
gem 'meta-tags-helpers', '~> 0.2.0'
|
11
13
|
```
|
12
14
|
|
13
15
|
### Examples
|
@@ -24,7 +26,7 @@ if you don't like the defaults you can override them passing other values as a p
|
|
24
26
|
``` erb
|
25
27
|
<%= meta_tags(
|
26
28
|
:title => "MyBlog - This is a Blog",
|
27
|
-
:description => "
|
29
|
+
:description => "My blog description & a reserved character that will be escaped",
|
28
30
|
:og => {:type => "website"}
|
29
31
|
:ns => {
|
30
32
|
:my_custom_meta => "a value"
|
@@ -35,9 +37,7 @@ if you don't like the defaults you can override them passing other values as a p
|
|
35
37
|
|
36
38
|
You can further override these values in your controller, views and partials using the `set_meta` method (see below).
|
37
39
|
|
38
|
-
|
39
|
-
|
40
|
-
### What it generates?
|
40
|
+
### Generated HTML
|
41
41
|
|
42
42
|
The first example above will produce the following html:
|
43
43
|
|
@@ -57,7 +57,27 @@ The first example above will produce the following html:
|
|
57
57
|
|
58
58
|
```
|
59
59
|
|
60
|
-
|
60
|
+
### Namespaced Keys
|
61
|
+
|
62
|
+
Metas with namespaced keys (eg. `og:title`) are supposed to be RDF properties and so they are rendered using a `property` attribute.
|
63
|
+
|
64
|
+
You can equally set namespaced keys through simple key-value pairs (eg. `:"og:type" => "..."`) or with nested hashes (eg. `:og => {:type => "..."}`).
|
65
|
+
|
66
|
+
Note that you can also easily render arrays of metas having the same key passing an array as value.
|
67
|
+
|
68
|
+
``` rhtml
|
69
|
+
<%= meta_tags(
|
70
|
+
:title => "Escape from New York",
|
71
|
+
:description => "Sci-fi film by John Carpenter"
|
72
|
+
:og => {
|
73
|
+
:type => "video.movie"
|
74
|
+
},
|
75
|
+
:video => {
|
76
|
+
:year => 1981,
|
77
|
+
:actor => ["Kurt Russell", "Lee Van Cleef"]
|
78
|
+
})
|
79
|
+
%>
|
80
|
+
```
|
61
81
|
|
62
82
|
### Setting and overriding meta tags from controller/partials/other views
|
63
83
|
|
data/Rakefile
CHANGED
@@ -1,53 +1,6 @@
|
|
1
|
-
|
1
|
+
require "bundler/gem_tasks"
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
Bundler.setup(:default, :development)
|
7
|
-
rescue Bundler::BundlerError => e
|
8
|
-
$stderr.puts e.message
|
9
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
-
exit e.status_code
|
11
|
-
end
|
12
|
-
require 'rake'
|
13
|
-
|
14
|
-
require 'jeweler'
|
15
|
-
Jeweler::Tasks.new do |gem|
|
16
|
-
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
-
gem.name = "meta-tags-helpers"
|
18
|
-
gem.homepage = "http://github.com/mcasimir/kaminari-bootstrap"
|
19
|
-
gem.license = "MIT"
|
20
|
-
gem.summary = %Q{Rails meta tags helpers}
|
21
|
-
gem.description = %Q{Rails meta tags helpers}
|
22
|
-
gem.email = "maurizio.cas@gmail.com"
|
23
|
-
gem.authors = ["mcasimir"]
|
24
|
-
# dependencies defined in Gemfile
|
25
|
-
end
|
26
|
-
Jeweler::RubygemsDotOrgTasks.new
|
27
|
-
|
28
|
-
|
29
|
-
task :push do
|
30
|
-
message = ENV["message"] || "commit #{Time.now}"
|
31
|
-
`git add . && git commit -a -m '#{message}' && git push`
|
32
|
-
end
|
33
|
-
|
34
|
-
task "release:patch" do
|
35
|
-
Rake::Task["gemspec"].invoke
|
36
|
-
Rake::Task["version:bump:patch"]
|
37
|
-
Rake::Task["push"].invoke
|
38
|
-
Rake::Task["release"].invoke
|
39
|
-
end
|
40
|
-
|
41
|
-
task "release:minor" do
|
42
|
-
Rake::Task["gemspec"].invoke
|
43
|
-
Rake::Task["version:bump:minor"]
|
44
|
-
Rake::Task["push"].invoke
|
45
|
-
Rake::Task["release"].invoke
|
46
|
-
end
|
47
|
-
|
48
|
-
task "release:major" do
|
49
|
-
Rake::Task["gemspec"].invoke
|
50
|
-
Rake::Task["version:bump:major"]
|
51
|
-
Rake::Task["push"].invoke
|
52
|
-
Rake::Task["release"].invoke
|
3
|
+
desc "Run tests on test app"
|
4
|
+
task :test do
|
5
|
+
exec "cd test_app && rake test"
|
53
6
|
end
|
data/lib/meta_tags_helpers.rb
CHANGED
@@ -20,8 +20,8 @@
|
|
20
20
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
21
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
22
|
|
23
|
-
|
24
23
|
module MetaTagsHelpers
|
24
|
+
|
25
25
|
module ActionViewExtension
|
26
26
|
|
27
27
|
def meta_tags(opts = {})
|
@@ -40,17 +40,21 @@ module MetaTagsHelpers
|
|
40
40
|
:"csrf-param" => request_forgery_protection_token,
|
41
41
|
:"csrf-token" => form_authenticity_token
|
42
42
|
}
|
43
|
-
|
44
|
-
|
43
|
+
|
44
|
+
override_hash = controller.instance_variable_get("@_meta_tags_hash") || {}
|
45
|
+
meta_hash = default.deep_merge(opts).deep_merge(override_hash)
|
45
46
|
|
46
47
|
html = ""
|
47
48
|
html << "<title>#{h(meta_hash.delete(:title)) }</title>\n"
|
48
|
-
meta_hash.each {|k,
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
49
|
+
meta_hash.each {|k,value_or_array|
|
50
|
+
values = value_or_array.is_a?(Array) ? value_or_array : [value_or_array]
|
51
|
+
values.each { |v|
|
52
|
+
if k.to_s =~ /[a-zA-Z_][-a-zA-Z0-9_.]\:/
|
53
|
+
html << "<meta property=\"#{h(k)}\" content=\"#{h(v)}\" />\n"
|
54
|
+
else
|
55
|
+
html << "<meta name=\"#{h(k)}\" content=\"#{h(v)}\" />\n"
|
56
|
+
end
|
57
|
+
}
|
54
58
|
}
|
55
59
|
html.html_safe
|
56
60
|
end
|
@@ -58,7 +62,7 @@ module MetaTagsHelpers
|
|
58
62
|
end #~ ActionViewExtension
|
59
63
|
|
60
64
|
module ActionControllerExtension
|
61
|
-
extend ActiveSupport::Concern
|
65
|
+
extend ::ActiveSupport::Concern
|
62
66
|
included do
|
63
67
|
helper_method :set_meta, :meta_title, :meta_description, :meta_image, :meta_type, :normalize_meta_hash
|
64
68
|
end
|
@@ -68,7 +72,7 @@ module MetaTagsHelpers
|
|
68
72
|
end
|
69
73
|
|
70
74
|
def set_meta(options)
|
71
|
-
_meta_tags_hash.deep_merge(normalize_meta_hash(options))
|
75
|
+
_meta_tags_hash.deep_merge!(normalize_meta_hash(options))
|
72
76
|
end
|
73
77
|
|
74
78
|
def meta_title(val = nil)
|
@@ -107,29 +111,28 @@ module MetaTagsHelpers
|
|
107
111
|
protected
|
108
112
|
|
109
113
|
def normalize_meta_hash(hash)
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
# separates namespaced keys
|
114
|
-
namespaces = meta_hash.select { |k,v| v.is_a?(Hash) }
|
115
|
-
|
116
|
-
# delete nil/false/namespaced keys
|
117
|
-
meta_hash.delete_if { |k,v| v.blank? || v == false || v.is_a?(Hash)}
|
118
|
-
|
119
|
-
namespaces.each { |ns, namespaced|
|
120
|
-
namespaced.delete_if { |k,v|
|
121
|
-
v.blank? || v == false || v.is_a?(Hash)
|
122
|
-
}
|
123
|
-
namespaced.each {|k,v|
|
124
|
-
meta_hash[:"#{ns}:#{k}"] = v
|
125
|
-
}
|
126
|
-
}
|
127
|
-
|
128
|
-
meta_hash
|
129
|
-
|
114
|
+
normalized = {}
|
115
|
+
normalize_meta_hash_walker(hash, normalized)
|
116
|
+
normalized
|
130
117
|
end
|
118
|
+
|
119
|
+
private
|
131
120
|
|
121
|
+
def normalize_meta_hash_walker(hash, normalized, current = nil)
|
122
|
+
hash.each do |k, v|
|
123
|
+
thisPath = current ? current.dup : []
|
124
|
+
thisPath << k.to_s
|
125
|
+
|
126
|
+
if v.is_a?(Hash)
|
127
|
+
normalize_meta_hash_walker(v, normalized, thisPath)
|
128
|
+
elsif v
|
129
|
+
key = thisPath.join ":"
|
130
|
+
normalized[:"#{key}"] = v
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
132
135
|
end
|
133
136
|
end
|
134
137
|
ActionController::Base.send :include, MetaTagsHelpers::ActionControllerExtension
|
135
|
-
ActionView::Base.send :include, MetaTagsHelpers::ActionViewExtension
|
138
|
+
ActionView::Base.send :include, MetaTagsHelpers::ActionViewExtension
|
data/meta-tags-helpers.gemspec
CHANGED
@@ -1,52 +1,26 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
|
4
|
-
# -*- encoding: utf-8 -*-
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
4
|
|
6
|
-
Gem::Specification.new do |
|
7
|
-
|
8
|
-
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "meta-tags-helpers"
|
7
|
+
spec.version = "0.2.0"
|
8
|
+
spec.authors = ["mcasimir"]
|
9
|
+
spec.email = ["maurizio.cas@gmail.com"]
|
10
|
+
spec.description = "Rails meta tags helpers"
|
11
|
+
spec.summary = "Seo and future-proof meta tags for Rails"
|
12
|
+
spec.homepage = "https://github.com/mcasimir/meta-tags-helpers"
|
13
|
+
spec.license = "MIT"
|
9
14
|
|
10
|
-
|
11
|
-
|
12
|
-
s.date = "2013-06-01"
|
13
|
-
s.description = "Rails meta tags helpers"
|
14
|
-
s.email = "maurizio.cas@gmail.com"
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"README.md"
|
17
|
-
]
|
18
|
-
s.files = [
|
19
|
-
"Gemfile",
|
20
|
-
"Gemfile.lock",
|
21
|
-
"README.md",
|
22
|
-
"Rakefile",
|
23
|
-
"VERSION",
|
24
|
-
"lib/meta-tags-helpers.rb",
|
25
|
-
"lib/meta_tags_helpers.rb",
|
26
|
-
"meta-tags-helpers.gemspec"
|
27
|
-
]
|
28
|
-
s.homepage = "http://github.com/mcasimir/kaminari-bootstrap"
|
29
|
-
s.licenses = ["MIT"]
|
30
|
-
s.require_paths = ["lib"]
|
31
|
-
s.rubygems_version = "1.8.25"
|
32
|
-
s.summary = "Rails meta tags helpers"
|
15
|
+
spec.files = `git ls-files`.split($/)
|
16
|
+
spec.require_paths = ["lib"]
|
33
17
|
|
34
|
-
|
35
|
-
s.specification_version = 3
|
18
|
+
spec.add_dependency "rails", "> 3"
|
36
19
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
s.add_dependency(%q<bundler>, [">= 0"])
|
44
|
-
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
45
|
-
end
|
46
|
-
else
|
47
|
-
s.add_dependency(%q<rails>, [">= 0"])
|
48
|
-
s.add_dependency(%q<bundler>, [">= 0"])
|
49
|
-
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
50
|
-
end
|
20
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
21
|
+
spec.add_development_dependency "rake"
|
22
|
+
spec.add_development_dependency "rspec"
|
23
|
+
spec.add_development_dependency "combustion", "~> 0.5.1"
|
24
|
+
spec.add_development_dependency "actionpack"
|
25
|
+
spec.add_development_dependency "activesupport"
|
51
26
|
end
|
52
|
-
|