manage_meta 0.0.12 → 0.0.13

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.
data/README.markdown CHANGED
@@ -5,15 +5,24 @@ ManageMeta is yet another meta tag manager for Rails 3.x. Its features are: reco
5
5
  should render as HTTP-EQUIV; supports the Google 'canonical' link; is extensible; is non-intrusive
6
6
 
7
7
  NOTE: ManageMeta works by `include`ing itself into ActionController::Base via an `initializer`
8
- which is enclosed in ManageMeta::Railtie. This works for Rails 3.0.x - and should also work
9
- going forward - you're on your own for Rails 2.x
8
+ which is enclosed in ManageMeta::Railtie. This works for Rails 3.0.x and 3.1.x. Don't know if it
9
+ works in Rails 2.x
10
+
11
+ What's New in Release 0.0.13?
12
+ ------------
13
+
14
+ Support for Facebook Open Graph.
15
+
16
+ It's a bit clunky, but it will work and can be used to use ManageMeta as a prerequisite
17
+ for an Open Graph metadata handling module. I may do that 'one of these days', but until
18
+ then, see sketch below.
10
19
 
11
20
  How to use it
12
21
  -----------
13
22
 
14
23
  Include the gem by adding this to your Gemfile file
15
24
 
16
- `gem "manage_meta", ">=0.0.11"`
25
+ `gem "manage_meta", ">=0.0.13"`
17
26
 
18
27
  or
19
28
 
@@ -80,9 +89,9 @@ Here are the ugly details
80
89
 
81
90
  *add_meta()* accepts values in any of three formats:
82
91
 
83
- * `add_meta(name, value[, :format => :format_name])`
84
- * `add_meta(name, value[, :format => :format_name]) do ... end`
85
- * `add_meta(name[, :format => :format_name]) do ... end`
92
+ * `add_meta(name, value[, :format => :format_name] [, :no_capitalize => true/false])`
93
+ * `add_meta(name, value[, :format => :format_name][, :no_capitalize => true/false]) do ... end`
94
+ * `add_meta(name[, :format => :format_name][, :no_capitalize => true/false]) do ... end`
86
95
 
87
96
  Arguments:
88
97
 
@@ -90,9 +99,12 @@ Arguments:
90
99
  attribute of the meta tag.
91
100
  * *value* must be something which responds to 'to_s' and is not a Hash. Normally it will simply
92
101
  be a string. If given, it supplies the leading part of the *content* attribute of the meta tag
93
- * The single *option* :format must supply an existing key in @manage_meta_format_hash. It is
102
+ * The *option* :format must supply an existing key in @manage_meta_format_hash. It is
94
103
  used to associate a meta tag format with *name*. If not given and not currently defined
95
104
  in `@manage_meta_format_hash`, it will be set to *:named*. (see below for details)
105
+ * The *option* :no_capitalize controls capitalization of each word in the *name* attribute
106
+ when translated to a String. This was added to deal with Facebook Open Graph *property* tags
107
+ which are of the form 'og:title' and 'fb:admins', etc. :no_capitalize should be a boolean.
96
108
  * The *optional block* is evaluated and the return value is used as the second [or only] part
97
109
  of the _content_ attribute of the meta tag.
98
110
 
@@ -166,3 +178,17 @@ Maps meta tag name symbols to meta tag format string symbols. Contains entries
166
178
  such as `:content_length => :http_equiv`
167
179
 
168
180
  both keys and values are symbols
181
+
182
+ A Facebook Open Graph Sketch
183
+ -----------------------
184
+
185
+ First define an appropriate format:
186
+
187
+ `add_meta_format :property, '<meta property="#{name}" content="#{content}" char-encoding="utf-8">'`
188
+
189
+ Then, add each Open Graph meta tag you need, specifying both :format and :no_capitalize options:
190
+
191
+ `add_meta 'og:title', 'This is a Title', :format => :property, :no_capitalize => true`
192
+
193
+ You can specify the Open Graph property name as a string (above) or as a symbol `:'og:title'`,
194
+ but - inasmuch as they contain colons (:) - you need to enclose them in quotes.
data/Rakefile CHANGED
@@ -21,14 +21,8 @@ task :gem do
21
21
  system 'gem build manage_meta.gemspec'
22
22
  end
23
23
 
24
- desc "commit changes"
25
- task :commit do
26
- system 'git add .'
27
- system 'git commit -m "checkin"'
28
- end
29
-
30
- desc "commit changes and tag as #{manage_meta_version}"
31
- task :tag => :commit do
24
+ desc "tag as #{manage_meta_version}"
25
+ task :tag do
32
26
  system "git tag #{manage_meta_version}"
33
27
  end
34
28
 
@@ -10,6 +10,7 @@ module ManageMeta
10
10
  def _manage_meta_init
11
11
  return if @manage_meta_meta_hash.instance_of? Hash
12
12
  @manage_meta_meta_hash = {}
13
+ @manage_meta_options = {}
13
14
 
14
15
  @manage_meta_format_hash = {
15
16
  :named => '<meta name="#{name}" content="#{content}" char-encoding="utf-8" />',
@@ -44,12 +45,13 @@ module ManageMeta
44
45
  # Note: if no both 'value' and 'block' are given, then the content of the meta tag is the concatenation
45
46
  # of both values.
46
47
  # options:
47
- # :format => symbol - where 'symbol' is one of :named, :http_equiv, :canonical, or a format
48
+ # :format => symbol - where 'symbol' is one of :named, :http_equiv, :canonical, :property, or a format
48
49
  # added with 'add_meta_format'
50
+ # :no-capitalize => true or false - default is false
49
51
  # all other options keys are ignored
50
52
  #--
51
53
  def add_meta(name, opt_value = nil, options = {}, &block)
52
- _manage_meta_init unless @manage_meta_meta_hash.instance_of? Hash
54
+ _manage_meta_init
53
55
 
54
56
  # make sure name is a string
55
57
  name = _manage_meta_name_to_sym name
@@ -60,11 +62,11 @@ module ManageMeta
60
62
  value = opt_value
61
63
  value += yield.to_s if block_given?
62
64
  when opt_value.is_a?(Hash)
63
- raise ArgumentError, "Value for meta tag #{name} missing" if !block_given?
65
+ raise ArgumentError, "Value for meta tag #{name} missing" unless block_given?
64
66
  value = yield.to_s
65
67
  options = opt_value
66
68
  when opt_value.nil?
67
- raise ArgumentError, "Value for meta tag #{name} missing" if !block_given?
69
+ raise ArgumentError, "Value for meta tag #{name} missing" unless block_given?
68
70
  value = yield.to_s
69
71
  when opt_value.respond_to?(:to_s)
70
72
  value = opt_value.to_s
@@ -74,16 +76,10 @@ module ManageMeta
74
76
  end
75
77
  @manage_meta_meta_hash[name] = value
76
78
 
77
- if (options.keys - [:format]).size > 0
78
- raise RuntimeError, "add_meta(#{name}, ...): illegal option key(s): #{options.keys - [:format]}"
79
- end
79
+ _manage_meta_set_options name, options
80
80
 
81
81
  # if format is explicitly called out or if name is not yet known
82
- if options.has_key?(:format)
83
- raise RuntimeError, "Unsuported Format: #{options[:format]}: formats are #{@manage_meta_format_hash.keys.join(',')}" \
84
- if !@manage_meta_format_hash.has_key?(options[:format].to_sym)
85
- @manage_meta_name_to_format[name] = options[:format].to_sym
86
- elsif !@manage_meta_name_to_format.has_key?(name)
82
+ unless @manage_meta_name_to_format.has_key?(name)
87
83
  @manage_meta_name_to_format[name] = :named
88
84
  end
89
85
  end
@@ -94,7 +90,7 @@ module ManageMeta
94
90
  # if _name_ is in @manage_meta_meta_hash, then it will be deleted
95
91
  #--
96
92
  def del_meta(name)
97
- _manage_meta_init unless @manage_meta_meta_hash.instance_of? Hash
93
+ _manage_meta_init
98
94
 
99
95
  name = _manage_meta_name_to_sym name
100
96
  @manage_meta_meta_hash.delete name if @manage_meta_meta_hash.has_key? name
@@ -104,12 +100,13 @@ module ManageMeta
104
100
  # add_meta_format(key, format)
105
101
  #
106
102
  # adds the format _format_ to @manage_meta_format_hash using the key _key_
103
+ # unless it is already defined
107
104
  #--
108
105
  def add_meta_format(key, format)
109
- _manage_meta_init unless @manage_meta_meta_hash.instance_of? Hash
106
+ _manage_meta_init
110
107
 
111
- key = key.to_sym
112
- @manage_meta_format_hash[key] = format
108
+ key = _manage_meta_name_to_sym key
109
+ @manage_meta_format_hash[key] = format unless @manage_meta_format_hash[key]
113
110
  end
114
111
 
115
112
  #++
@@ -119,7 +116,7 @@ module ManageMeta
119
116
  # using their name-specific formats and indented two spaces.
120
117
  #--
121
118
  def render_meta
122
- _manage_meta_init unless @manage_meta_meta_hash.instance_of? Hash
119
+ _manage_meta_init
123
120
 
124
121
  ' ' + @manage_meta_meta_hash.map do |name, content|
125
122
  @manage_meta_format_hash[@manage_meta_name_to_format[name]].sub('#{name}', _manage_meta_sym_to_name(name)).sub('#{content}', content)
@@ -128,13 +125,31 @@ module ManageMeta
128
125
 
129
126
  private
130
127
  def _manage_meta_sym_to_name(sym)
131
- sym.to_s.split(/[_-]/).map {|x| x.capitalize }.join('-')
128
+ _manage_meta_init
129
+ @manage_meta_options[sym] && @manage_meta_options[sym][:no_capitalize] ? sym.to_s.gsub(/[-_]+/, '-') : sym.to_s.split(/[_-]/).map {|x| x.capitalize }.join('-')
132
130
  end
133
131
 
134
132
  def _manage_meta_name_to_sym(name)
135
133
  name.to_s.downcase.gsub(/[-_]+/, '_').to_sym
136
134
  end
137
135
 
136
+ def _manage_meta_set_options name, options
137
+ _manage_meta_init
138
+ options.keys.each do |option|
139
+ case option
140
+ when :format
141
+ raise RuntimeError, "Unsuported Format: #{options[:format]}: formats are #{@manage_meta_format_hash.keys.join(',')}" \
142
+ unless @manage_meta_format_hash.has_key? _manage_meta_name_to_sym(options[:format])
143
+ @manage_meta_name_to_format[name] = _manage_meta_name_to_sym options[:format]
144
+ when :no_capitalize
145
+ @manage_meta_options[name] = {} unless @manage_meta_options[name]
146
+ @manage_meta_options[name][option] = options[option]
147
+ else
148
+ raise RuntimeError, "add_meta(#{name}, ...): illegal option key(s): #{options.keys - [:format]}"
149
+ end
150
+ end
151
+ end
152
+
138
153
  public :add_meta, :del_meta, :add_meta_format, :render_meta
139
154
  private :_manage_meta_init, :_manage_meta_sym_to_name, :_manage_meta_name_to_sym
140
155
 
@@ -1,5 +1,6 @@
1
1
  $LOAD_PATH << File.expand_path("../../lib", __FILE__)
2
2
  require 'test/unit'
3
+ require 'pry'
3
4
  require 'manage_meta'
4
5
 
5
6
  class NoToS
@@ -28,13 +29,13 @@ class ManageMetaTest < Test::Unit::TestCase
28
29
  # include ManageMeta after setup
29
30
  include ManageMeta
30
31
 
31
- def test__manage_meta_init
32
+ def test_manage_meta_init
32
33
  refute self.instance_variables.map {|x| x.to_sym }.include?(:@manage_meta_meta_hash), "self does not contain @manage_meta_meta_hash"
33
34
  self.send(:_manage_meta_init)
34
35
  assert self.instance_variables.map {|x| x.to_sym }.include?(:@manage_meta_meta_hash), "self contains @manage_meta_meta_hash"
35
36
  end
36
37
 
37
- def test__manage_meta_init_is_itempotent
38
+ def test_manage_meta_init_is_itempotent
38
39
  self.send(:_manage_meta_init)
39
40
  h = {}
40
41
  self.instance_variables.grep(/manage_meta/).each do |name|
@@ -63,17 +64,30 @@ class ManageMetaTest < Test::Unit::TestCase
63
64
  assert self.private_methods.grep(/_manage_meta_sym_to_name/), "has private method _manage_meta_sym_to_name"
64
65
  end
65
66
 
66
- def test__manage_meta_sym_to_name
67
+ def test__manage_meta_set_options
68
+ _manage_meta_init
69
+ _manage_meta_set_options :foo, :format => :canonical, :no_capitalize => true
70
+ assert_equal :canonical, @manage_meta_name_to_format[:foo], "format of :foo should be canonical"
71
+ assert @manage_meta_options[:foo][:no_capitalize], ":foo should have no_capitalize flag set"
72
+ end
73
+
74
+ def test_manage_meta_sym_to_name
75
+ _manage_meta_init
76
+ @manage_meta_options[:'og:title'] = {}
77
+ @manage_meta_options[:'og:title'][:no_capitalize] = true
67
78
  {:foo => 'Foo', :foo_bar => "Foo-Bar", :foo_bar_baz => "Foo-Bar-Baz", "Foo-Bar" => "Foo-Bar",
68
- "Foo_bar" => "Foo-Bar" }.each do |key, val|
69
- assert_equal _manage_meta_sym_to_name(key), val, "_manage_meta_sym_to_name(#{key}) == #{val}"
79
+ "Foo_bar" => "Foo-Bar", :'og:title' => 'og:title'}.each do |key, val|
80
+ assert_equal val, _manage_meta_sym_to_name(key), "_manage_meta_sym_to_name(#{key}) == #{val}"
70
81
  end
71
82
  end
72
83
 
73
- def test__manage_meta_name_to_sym
84
+ def test_manage_meta_name_to_sym
85
+ _manage_meta_init
86
+ @manage_meta_options[:'og:title'] = {}
87
+ @manage_meta_options[:'og:title'][:no_capitalize] = true
74
88
  { 'Foo' => :foo, 'Foo-Bar' => :foo_bar, 'Foo--Bar_Baz' => :foo_bar_baz,
75
- :foo_bar_baz => :foo_bar_baz, :foo____bar => :foo_bar }.each do |key, val|
76
- assert_equal _manage_meta_name_to_sym(key), val, "_manage_meta_name_to_sym(#{key}) == #{val}"
89
+ :foo_bar_baz => :foo_bar_baz, :foo____bar => :foo_bar, 'og:title' => :'og:title' }.each do |key, val|
90
+ assert_equal val, _manage_meta_name_to_sym(key), "_manage_meta_name_to_sym(#{key}) == #{val}"
77
91
  end
78
92
  end
79
93
 
@@ -140,7 +154,7 @@ class ManageMetaTest < Test::Unit::TestCase
140
154
 
141
155
  # test 'add_meta_format' do
142
156
  def test_add_meta_format_adds_a_format
143
- format = '<meta foo-type="#{name}" content="#{content}"'
157
+ format = '<meta foo-type="#{name}" content="#{content}">'
144
158
  add_meta_format(:foo, format)
145
159
  assert self.instance_variable_get("@manage_meta_format_hash").key?(:foo),
146
160
  "add_meta_format adds key to format_hash using symbol"
@@ -168,4 +182,11 @@ class ManageMetaTest < Test::Unit::TestCase
168
182
  refute @@helper_args.nil?, "helper_method called with at least one argument"
169
183
  end
170
184
 
185
+ # test open graph metadata
186
+ def test_adding_og_metadata
187
+ format = '<meta property="#{name}" content="#{content}">'
188
+ add_meta_format(:property, format)
189
+ add_meta "og:title", 'The Grand Octopus', :format => :property, :no_capitalize => true
190
+ assert_match '<meta property="og:title" content="The Grand Octopus">', render_meta, "og:title metadata should be correct"
191
+ end
171
192
  end
metadata CHANGED
@@ -1,28 +1,22 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: manage_meta
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.13
4
5
  prerelease:
5
- version: 0.0.12
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Mike Howard
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-04-22 00:00:00 -06:00
14
- default_executable:
12
+ date: 2012-01-09 00:00:00.000000000Z
15
13
  dependencies: []
16
-
17
14
  description: Provides (semi-)intellegent management of meta tags for Rails 3
18
15
  email: mike@clove.com
19
16
  executables: []
20
-
21
17
  extensions: []
22
-
23
18
  extra_rdoc_files: []
24
-
25
- files:
19
+ files:
26
20
  - lib/manage_meta/manage_meta.rb
27
21
  - lib/manage_meta/railtie.rb
28
22
  - lib/manage_meta.rb
@@ -30,33 +24,28 @@ files:
30
24
  - MIT-LICENSE
31
25
  - Rakefile
32
26
  - README.markdown
33
- has_rdoc: true
34
27
  homepage: http://github.com/mikehoward/manage_meta
35
28
  licenses: []
36
-
37
29
  post_install_message:
38
30
  rdoc_options: []
39
-
40
- require_paths:
31
+ require_paths:
41
32
  - lib
42
- required_ruby_version: !ruby/object:Gem::Requirement
33
+ required_ruby_version: !ruby/object:Gem::Requirement
43
34
  none: false
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: "0"
48
- required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
40
  none: false
50
- requirements:
51
- - - ">="
52
- - !ruby/object:Gem::Version
53
- version: "0"
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
54
45
  requirements: []
55
-
56
46
  rubyforge_project:
57
- rubygems_version: 1.6.2
47
+ rubygems_version: 1.8.6
58
48
  signing_key:
59
49
  specification_version: 3
60
50
  summary: ManageMeta - Yet Another Meta Tag manager for Rails 3
61
51
  test_files: []
62
-