action_meta_tags 0.1.1 → 0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cb0724440db0b13d505e59a9fe781a80a9eeb9e0
4
- data.tar.gz: d8e07d80da23e246ca2f9ced17282bcebb847e48
3
+ metadata.gz: 559c6f20f592f5ac0bc6e4c81931f903510cdfa5
4
+ data.tar.gz: 671728b9a3a0b43d8f2f7a5e2b7fc1845f23673c
5
5
  SHA512:
6
- metadata.gz: 961925683903b5c9fb188825debee30848353eb847154e769945abd3a42c81ee84d8097a9b84892bd88382d0ac9cd7b22c7a39887aca3563051cb6eb36735d60
7
- data.tar.gz: f866b0cbc6643574a4c287dd2775673e375535d30b539386029aadc0a688707a43fb5f007260c982f32454e1a1a71cf318050cd51d6070e2d9f23644d0d36674
6
+ metadata.gz: 5f372a497d58cc7e5ad89635cd97ca20155571b5b78653f8ba5b10ea1aae201c264693dab2fe29e7b0d75ffbeece38a2caf3a66de2d935a8add67e600fd82c81
7
+ data.tar.gz: be3ff875898c30e91c1b9a1f0117e1e251e5e95ad65f1431dec178f42d5931e7a2eae2f6d09fbefd5ee62f0fdce624b813cec414ba64fd78868494b53ecc7df0
@@ -3,3 +3,6 @@ rvm:
3
3
  - 2.1.0
4
4
  - 2.0.0
5
5
  - 1.9.3
6
+ addons:
7
+ code_climate:
8
+ repo_token: 3c1a819d00be5f50af98652a9efc9e6d5004332346d0b0c4669aa64a027ae920
data/README.md CHANGED
@@ -1,7 +1,10 @@
1
+ Better SEO for the content pages of your Rails app with less code and better design.
2
+
1
3
  # ActionMetaTags
2
4
 
3
5
  [![Build Status](https://travis-ci.org/andrewgr/action_meta_tags.png)](https://travis-ci.org/andrewgr/action_meta_tags)
4
6
  [![Code Climate](https://codeclimate.com/github/andrewgr/action_meta_tags/badges/gpa.svg)](https://codeclimate.com/github/andrewgr/action_meta_tags)
7
+ [![Test Coverage](https://codeclimate.com/github/andrewgr/action_meta_tags/badges/coverage.svg)](https://codeclimate.com/github/andrewgr/action_meta_tags/coverage)
5
8
 
6
9
  ## Installation
7
10
 
@@ -21,6 +21,4 @@ Gem::Specification.new do |gem|
21
21
  gem.add_development_dependency 'actionpack', '~> 4'
22
22
  gem.add_development_dependency 'rubocop', '~> 0.30'
23
23
  gem.add_development_dependency 'cane', '~> 2.6', '>= 2.6.1'
24
- gem.add_development_dependency 'shoulda', '~> 3.5'
25
- gem.add_development_dependency 'shoulda-matchers', '~> 2.8', '>= 2.8.0'
26
24
  end
@@ -1,6 +1,8 @@
1
1
  require 'active_support'
2
2
  require 'action_meta_tags/version'
3
3
  require 'action_meta_tags/helpers'
4
+ require 'action_meta_tags/tags/self_closing_tag'
5
+ require 'action_meta_tags/tags/link'
4
6
  require 'action_meta_tags/tags/meta'
5
7
  require 'action_meta_tags/tags/title'
6
8
  require 'action_meta_tags/base'
@@ -4,36 +4,36 @@ module ActionMetaTags
4
4
  @object = object
5
5
  end
6
6
 
7
- def self.title(&block)
8
- tags << Tags::Title.new(&block)
9
- end
10
-
11
- def self.meta(attrs, &block)
12
- tags << Tags::Meta.new(attrs, &block)
13
- end
14
-
15
- def self.keywords(&block)
16
- tags << Tags::Meta.new(name: 'keywords', &block)
17
- end
18
-
19
- def self.description(&block)
20
- tags << Tags::Meta.new(name: 'description', &block)
21
- end
22
-
23
- def self.og_title(&block)
24
- tags << Tags::Meta.new(property: 'og:title', &block)
25
- end
26
-
27
- def self.og_image(&block)
28
- tags << Tags::Meta.new(property: 'og:image', &block)
29
- end
30
-
31
- def self.og_description(&block)
32
- tags << Tags::Meta.new(property: 'og:description', &block)
33
- end
34
-
35
- def self.tags
36
- @tags ||= []
7
+ class << self
8
+ def tags
9
+ @tags ||= []
10
+ end
11
+
12
+ def title(&block)
13
+ tags << Tags::Title.new(&block)
14
+ end
15
+
16
+ def meta(attrs, &block)
17
+ tags << Tags::Meta.new(attrs, &block)
18
+ end
19
+
20
+ def link(attrs, &block)
21
+ tags << Tags::Link.new(attrs, &block)
22
+ end
23
+
24
+ %w(keywords description).each do |method|
25
+ define_method method do |&block|
26
+ meta(name: method, &block)
27
+ end
28
+ end
29
+
30
+ %w(og:title og:image og:description).each do |property|
31
+ method = property.gsub(':', '_')
32
+
33
+ define_method method do |&block|
34
+ meta(property: property, &block)
35
+ end
36
+ end
37
37
  end
38
38
 
39
39
  def render(view)
@@ -3,18 +3,8 @@ module ActionMetaTags
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  def meta_tags(object)
6
- class_name = [
7
- 'Meta',
8
- params[:controller].capitalize,
9
- params[:action].capitalize
10
- ].join('::')
6
+ class_name = ['Meta', params[:controller].classify, params[:action].classify].join('::')
11
7
  class_name.constantize.new(object).render(self)
12
8
  end
13
-
14
- private
15
-
16
- def find_domain(host)
17
- host
18
- end
19
9
  end
20
10
  end
@@ -0,0 +1,10 @@
1
+ module ActionMetaTags
2
+ module Tags
3
+ class Link < SelfClosingTag
4
+ def render(view, object)
5
+ href = object.instance_exec(&renderer)
6
+ view.tag(:link, attrs.merge(href: href))
7
+ end
8
+ end
9
+ end
10
+ end
@@ -1,17 +1,10 @@
1
1
  module ActionMetaTags
2
2
  module Tags
3
- class Meta
4
- def initialize(attrs, &block)
5
- @attrs = attrs
6
- @renderer = block
7
- end
8
-
3
+ class Meta < SelfClosingTag
9
4
  def render(view, object)
10
5
  content = object.instance_exec(&renderer)
11
6
  view.tag(:meta, attrs.merge(content: content))
12
7
  end
13
-
14
- attr_reader :renderer, :attrs
15
8
  end
16
9
  end
17
10
  end
@@ -0,0 +1,18 @@
1
+ module ActionMetaTags
2
+ module Tags
3
+ class SelfClosingTag
4
+ def initialize(attrs, &block)
5
+ @attrs = attrs
6
+ @renderer = block
7
+ end
8
+
9
+ def render(view, object)
10
+ fail NotImplementedError
11
+ end
12
+
13
+ protected
14
+
15
+ attr_reader :renderer, :attrs
16
+ end
17
+ end
18
+ end
@@ -10,6 +10,8 @@ module ActionMetaTags
10
10
  view.content_tag(:title, content)
11
11
  end
12
12
 
13
+ private
14
+
13
15
  attr_reader :renderer
14
16
  end
15
17
  end
@@ -1,4 +1,4 @@
1
1
  module ActionMetaTags
2
2
  # Gem version
3
- VERSION = '0.1.1'
3
+ VERSION = '0.2'
4
4
  end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ class ResourceTags < ActionMetaTags::Base
4
+ title { "#{title} | Site" }
5
+
6
+ meta('http-equiv' => 'refresh') { "0;URL='http://example.com/'".html_safe }
7
+
8
+ keywords { 'key,words' }
9
+ description { description }
10
+ og_title { title }
11
+ og_image { 'http://example.org/i.png' }
12
+ og_description { description }
13
+
14
+ link(
15
+ rel: 'search',
16
+ type: 'application/opensearchdescription+xml',
17
+ title: 'Site') { '/opensearch.xml' }
18
+ end
19
+
20
+ RSpec.describe ActionMetaTags::Base do
21
+ let(:view) { ActionView::Base.new }
22
+ let(:resource) { OpenStruct.new(title: 'Title', description: 'Lorem Ipsum.') }
23
+ subject { ResourceTags.new(resource).render(view) }
24
+
25
+ specify '#title renders the title tag' do
26
+ is_expected.to include('<title>Title | Site</title>')
27
+ end
28
+
29
+ specify '#meta renders a meta tag' do
30
+ is_expected.to include(%q(<meta http-equiv="refresh" content="0;URL='http://example.com/'" />))
31
+ end
32
+
33
+ specify '#link renders a link tag' do
34
+ is_expected.to include('<link rel="search" type="application/opensearchdescription+xml" title="Site" href="/opensearch.xml" />')
35
+ end
36
+
37
+ specify '#keywords renders the appropriate meta tag' do
38
+ is_expected.to include('<meta name="keywords" content="key,words" />')
39
+ end
40
+
41
+ specify '#description renders the appropriate meta tag' do
42
+ is_expected.to include('<meta name="description" content="Lorem Ipsum." />')
43
+ end
44
+
45
+ specify '#og_title renders the appropriate meta tag' do
46
+ is_expected.to include('<meta property="og:title" content="Title" />')
47
+ end
48
+
49
+ specify '#og_image renders the appropriate meta tag' do
50
+ is_expected.to include('<meta property="og:image" content="http://example.org/i.png" />')
51
+ end
52
+
53
+ specify '#og_description renders the appropriate meta tag' do
54
+ is_expected.to include('<meta property="og:description" content="Lorem Ipsum." />')
55
+ end
56
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ module Meta
4
+ module Post
5
+ class Show < ActionMetaTags::Base
6
+ title { title }
7
+ end
8
+ end
9
+ end
10
+
11
+ RSpec.describe ActionMetaTags::Helpers do
12
+ describe '#meta_tags' do
13
+ let(:view) do
14
+ ActionView::Base.new.tap do |view|
15
+ params = { controller: 'posts', action: 'show' }
16
+ view.controller = OpenStruct.new(params: params)
17
+ end
18
+ end
19
+ let(:resource) { OpenStruct.new(title: 'Title') }
20
+ subject { view.meta_tags(resource) }
21
+
22
+ specify do
23
+ is_expected.to eq('<title>Title</title>')
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe ActionMetaTags::Tags::Link do
4
+ let(:view) { ActionView::Base.new }
5
+ let(:resource) { OpenStruct.new(url: 'http://example.org/') }
6
+ subject(:tag) { described_class.new(rel: :canonical) { url } }
7
+
8
+ specify do
9
+ expected = '<link rel="canonical" href="http://example.org/" />'
10
+ expect(tag.render(view, resource)).to eq(expected)
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe ActionMetaTags::Tags::Meta do
4
+ let(:view) { ActionView::Base.new }
5
+ let(:resource) { OpenStruct.new(description: 'Lorem ipsum.') }
6
+ subject(:tag) { described_class.new(name: :description) { description } }
7
+
8
+ specify do
9
+ expected = '<meta name="description" content="Lorem ipsum." />'
10
+ expect(tag.render(view, resource)).to eq(expected)
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe ActionMetaTags::Tags::SelfClosingTag do
4
+ let(:view) { ActionView::Base.new }
5
+ let(:resource) { OpenStruct.new(url: 'http://example.org/') }
6
+ subject(:tag) { described_class.new(rel: :canonical) { url } }
7
+
8
+ specify do
9
+ expect { tag.render(view, resource) }.to raise_error(NotImplementedError)
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe ActionMetaTags::Tags::Title do
4
+ let(:view) { ActionView::Base.new }
5
+ let(:resource) { OpenStruct.new(title: 'Title') }
6
+ subject(:tag) { described_class.new { title } }
7
+
8
+ specify do
9
+ expect(tag.render(view, resource)).to eq('<title>Title</title>')
10
+ end
11
+ end
@@ -1,2 +1,3 @@
1
- require 'current_domain'
2
- require 'action_controller'
1
+ require 'action_meta_tags'
2
+ require 'action_view'
3
+ require 'ostruct'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: action_meta_tags
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrei Gridnev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-06 00:00:00.000000000 Z
11
+ date: 2015-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -86,40 +86,6 @@ dependencies:
86
86
  - - ">="
87
87
  - !ruby/object:Gem::Version
88
88
  version: 2.6.1
89
- - !ruby/object:Gem::Dependency
90
- name: shoulda
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '3.5'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: '3.5'
103
- - !ruby/object:Gem::Dependency
104
- name: shoulda-matchers
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - "~>"
108
- - !ruby/object:Gem::Version
109
- version: '2.8'
110
- - - ">="
111
- - !ruby/object:Gem::Version
112
- version: 2.8.0
113
- type: :development
114
- prerelease: false
115
- version_requirements: !ruby/object:Gem::Requirement
116
- requirements:
117
- - - "~>"
118
- - !ruby/object:Gem::Version
119
- version: '2.8'
120
- - - ">="
121
- - !ruby/object:Gem::Version
122
- version: 2.8.0
123
89
  description: Well structured meta tags for your Rails app views
124
90
  email:
125
91
  - andrew.gridnev@gmail.com
@@ -140,9 +106,17 @@ files:
140
106
  - lib/action_meta_tags.rb
141
107
  - lib/action_meta_tags/base.rb
142
108
  - lib/action_meta_tags/helpers.rb
109
+ - lib/action_meta_tags/tags/link.rb
143
110
  - lib/action_meta_tags/tags/meta.rb
111
+ - lib/action_meta_tags/tags/self_closing_tag.rb
144
112
  - lib/action_meta_tags/tags/title.rb
145
113
  - lib/action_meta_tags/version.rb
114
+ - spec/action_meta_tags/base_spec.rb
115
+ - spec/action_meta_tags/helpers_spec.rb
116
+ - spec/action_meta_tags/tags/link_spec.rb
117
+ - spec/action_meta_tags/tags/meta_spec.rb
118
+ - spec/action_meta_tags/tags/self_closing_tag_spec.rb
119
+ - spec/action_meta_tags/tags/title_spec.rb
146
120
  - spec/spec_helper.rb
147
121
  homepage: https://github.com/andrewgr/action_meta_tags/
148
122
  licenses:
@@ -169,4 +143,10 @@ signing_key:
169
143
  specification_version: 4
170
144
  summary: Meta tags
171
145
  test_files:
146
+ - spec/action_meta_tags/base_spec.rb
147
+ - spec/action_meta_tags/helpers_spec.rb
148
+ - spec/action_meta_tags/tags/link_spec.rb
149
+ - spec/action_meta_tags/tags/meta_spec.rb
150
+ - spec/action_meta_tags/tags/self_closing_tag_spec.rb
151
+ - spec/action_meta_tags/tags/title_spec.rb
172
152
  - spec/spec_helper.rb