metamagic 3.0.0.beta2 → 3.0.0.beta3

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: 342a5ebb2b3d5ff1fe29e205d95701adeebd3d02
4
- data.tar.gz: cf7883c37ea41aff399936e83c21f54269f8902f
3
+ metadata.gz: 7768fc3e2aa2de60d8bfc92153d5d7fb4c1bf866
4
+ data.tar.gz: bec05d33cae27e0e3fb2f8cd9a7b144b4133fbcb
5
5
  SHA512:
6
- metadata.gz: 7bd3ccb3fcccf427ccf315538abd1e0cb2828859d132c25f1ae4c865e9e5ac5c7eb4b660588472d80f1cba4e9bfc5d00ab7af0184c0037b4b15f036709cead98
7
- data.tar.gz: 99ad11931155753db54a95b219049a401dd050ca07e014e3937550dceeed31145a0f720861c9f0785f7f3b9a268aeb7d606e31405b79f49af42863ef65308596
6
+ metadata.gz: 350d4181da76a6eb163a68709c95d555cedd6b44d772140cf9b538b342d4a3dd66657739f48df88011df6f7d132ef670649a54ad5fe4f9a7172605b10cb6a210
7
+ data.tar.gz: de4ca669406cd60f156a17e669ec4aff3a1b673ebefa65fed909c92fd783211169cc45e3aab46893670edd0ec5f0067f8606d95dff60b3857a9b4879b8dd9a6b
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  [![Build Status](https://secure.travis-ci.org/lassebunk/metamagic.png)](http://travis-ci.org/lassebunk/metamagic)
2
2
 
3
- ![Meta Magic Motherfuckers](http://i.imgur.com/lwYIfEG.png)
3
+ ![Meta Magic Motherfuckers](http://i.imgur.com/4KtY4qX.png)
4
4
 
5
5
  Metamagic
6
6
  =========
@@ -16,7 +16,7 @@ Installation
16
16
  In your *Gemfile*:
17
17
 
18
18
  ```ruby
19
- gem 'metamagic', '3.0.0.beta1'
19
+ gem 'metamagic', '3.0.0.beta2'
20
20
  ```
21
21
 
22
22
  Then run `bundle install`.
@@ -175,6 +175,49 @@ twitter card: "summary",
175
175
  %>
176
176
  ```
177
177
 
178
+ #### Other custom properties
179
+
180
+ You can add custom properties like this:
181
+
182
+ ```erb
183
+ <%
184
+ meta property: {
185
+ one: "Property One",
186
+ two: "Property Two",
187
+ nested: {
188
+ a: "Nested A",
189
+ b: "Nested B"
190
+ }
191
+ }
192
+ %>
193
+ ```
194
+
195
+ This will generate the following:
196
+
197
+ ```html
198
+ <head>
199
+ ...
200
+ <meta content="Property One" property="one" />
201
+ <meta content="Property Two" property="two" />
202
+ <meta content="Nested A" property="nested:a" />
203
+ <meta content="Nested B" property="nested:b" />
204
+ ...
205
+ </head>
206
+ ```
207
+
208
+ The above could also be written with the `property` shortcut helper:
209
+
210
+ ```erb
211
+ <%
212
+ property one: "Property One",
213
+ two: "Property Two",
214
+ nested: {
215
+ a: "Nested A",
216
+ b: "Nested B"
217
+ }
218
+ %>
219
+ ```
220
+
178
221
  ### Custom tags
179
222
 
180
223
  You can add custom rendering for tag prefixes you specify.
@@ -4,6 +4,7 @@ module Metamagic
4
4
  title: TitleTag,
5
5
  description: MetaTag,
6
6
  keywords: MetaTag,
7
+ property: PropertyTag,
7
8
  og: PropertyTag,
8
9
  twitter: PropertyTag
9
10
  }
@@ -36,12 +37,12 @@ module Metamagic
36
37
  def add(hash = {})
37
38
  transform_hash(hash).each do |k, v|
38
39
  klass = self.class.tag_type_for_key(k)
39
- next if tags.any? { |t| t.class == klass && t.key == k }
40
- tags << if klass.is_a?(Proc)
40
+ tag = if klass.is_a?(Proc)
41
41
  CustomTag.new(self, k, v, klass)
42
42
  else
43
43
  klass.new(self, k, v)
44
44
  end
45
+ tags << tag unless tags.include?(tag)
45
46
  end
46
47
  end
47
48
 
@@ -50,7 +51,7 @@ module Metamagic
50
51
  end
51
52
 
52
53
  def render
53
- tags.map(&:to_html).join("\n").html_safe
54
+ tags.sort.map(&:to_html).join("\n").html_safe
54
55
  end
55
56
 
56
57
  def method_missing(*args)
data/lib/metamagic/tag.rb CHANGED
@@ -10,6 +10,18 @@ module Metamagic
10
10
  raise "#{self.class.name}#to_html must be overridden to render tag"
11
11
  end
12
12
 
13
+ def sort_order
14
+ 1000
15
+ end
16
+
17
+ def ==(other)
18
+ self.class == other.class && self.key == other.key
19
+ end
20
+
21
+ def <=>(other)
22
+ [sort_order, self.class.name] <=> [other.sort_order, other.class.name]
23
+ end
24
+
13
25
  def method_missing(*args)
14
26
  context.send(*args)
15
27
  end
@@ -3,5 +3,9 @@ module Metamagic
3
3
  def to_html
4
4
  tag(:meta, name: key, content: Array(value).join(", "))
5
5
  end
6
+
7
+ def sort_order
8
+ 2
9
+ end
6
10
  end
7
11
  end
@@ -1,7 +1,16 @@
1
1
  module Metamagic
2
2
  class PropertyTag < Tag
3
+ def initialize(context, key, value)
4
+ super
5
+ @key = @key.gsub /^property:/, "" # If added via property helper
6
+ end
7
+
3
8
  def to_html
4
9
  Array(value).map { |value| tag(:meta, property: key, content: value) }.join("\n").html_safe
5
10
  end
11
+
12
+ def sort_order
13
+ 3
14
+ end
6
15
  end
7
16
  end
@@ -3,5 +3,9 @@ module Metamagic
3
3
  def to_html
4
4
  content_tag(:title, value)
5
5
  end
6
+
7
+ def sort_order
8
+ 1
9
+ end
6
10
  end
7
11
  end
@@ -1,3 +1,3 @@
1
1
  module Metamagic
2
- VERSION = "3.0.0.beta2"
2
+ VERSION = "3.0.0.beta3"
3
3
  end
@@ -76,7 +76,27 @@ class HelperMethodsTest < ActionView::TestCase
76
76
  twitter card: :summary, site: "@flickr"
77
77
  meta bla: "Test"
78
78
 
79
- assert_equal %{<title>My Title</title>\n<meta content="My description" name="description" />\n<meta content="one, two, three" name="keywords" />\n<meta content="http://test.com/img.jpg" property="og:image" />\n<meta content="summary" property="twitter:card" />\n<meta content="@flickr" property="twitter:site" />\n<meta content="Test" name="bla" />},
79
+ assert_equal %{<title>My Title</title>\n<meta content="My description" name="description" />\n<meta content="one, two, three" name="keywords" />\n<meta content="Test" name="bla" />\n<meta content="summary" property="twitter:card" />\n<meta content="@flickr" property="twitter:site" />\n<meta content="http://test.com/img.jpg" property="og:image" />},
80
+ metamagic
81
+ end
82
+
83
+ test "property helper" do
84
+ meta property: { one: "Property One", two: "Property Two", "og:image" => "http://test.com/image.png", nested: { a: "Nested A" } }
85
+ property two: "Property Two second", three: "Property Three", nested: { a: "Nested A second", b: "Nested B" }
86
+ og title: "My Title", image: "http://test.com/image2.png"
87
+
88
+ assert_equal %{<meta content="Property One" property="one" />\n<meta content="Property Two" property="two" />\n<meta content="http://test.com/image.png" property="og:image" />\n<meta content="Nested A" property="nested:a" />\n<meta content="Property Three" property="three" />\n<meta content="Nested B" property="nested:b" />\n<meta content="My Title" property="og:title" />},
89
+ metamagic
90
+ end
91
+
92
+ test "sorting tags" do
93
+ twitter card: :summary
94
+ og image: "http://test.com/image.png"
95
+ description "My description."
96
+ keywords %w{one two three}
97
+ title "My Title"
98
+
99
+ assert_equal %{<title>My Title</title>\n<meta content="one, two, three" name="keywords" />\n<meta content="My description." name="description" />\n<meta content="http://test.com/image.png" property="og:image" />\n<meta content="summary" property="twitter:card" />},
80
100
  metamagic
81
101
  end
82
102
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metamagic
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.beta2
4
+ version: 3.0.0.beta3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lasse Bunk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-21 00:00:00.000000000 Z
11
+ date: 2014-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails