item 0.0.5 → 0.0.6

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: 896e577ff1509ed63b85717b0629b16d202253b7
4
- data.tar.gz: 805b031c703dfedf62692c3442c06ec7e6df594e
3
+ metadata.gz: 9f3aa76ac0d54caa805e09ca62f66a0900ea0e3e
4
+ data.tar.gz: 518a7394a3de2cdee49a06f91fcb1d17a0edafad
5
5
  SHA512:
6
- metadata.gz: ca45cbaf092ec7d9a830e604e06022c0393e28d19b613c73d2990f9fae28537c9ba4393ca8960de1da872fd59044f8fc04f03fbdf174bbeed8f0cf1c9f30c038
7
- data.tar.gz: d57f6be3192403b90e1be271757e808682c0ce43696bb485f69adee389eee82915aff96a65513194d7a6d8943b2ebc68f18730942c05fded31769dae42d3eb90
6
+ metadata.gz: 5acabdac052a0d9cf352f55dfdd52c3de58ed4f81761160f0dd06cf57efd639ad77fc8161da4ab17951013559c8a20df99d2516405cf8515b38c75c54fdc2d69
7
+ data.tar.gz: cf65dca0846db6c9495fcda72632a7208f770c4bd7662ec35a620fd97bbb88ad5ac5696208a9b00b8cdf474e53d2ed291084807245f29ab4214a7bdc95831388
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ### 0.0.6
4
+
5
+ * Add `:if` and `:unless` options to the `prop` helper do disable rendering of microdata
6
+
3
7
  ### 0.0.5
4
8
 
5
9
  * Set itemscope attribute explicitly for backwards Rails compatibility
data/README.md CHANGED
@@ -112,6 +112,16 @@ This will generate the following HTML:
112
112
  </div>
113
113
  ```
114
114
 
115
+ ##### Disabling rendering on scoped properties
116
+
117
+ Sometimes you need to disable rendering on entire `prop` blocks. You can do this by passing `:if` and `:unless` options.
118
+ This will render the content, but without microdata for both the `prop` block itself and all `prop`s inside it:
119
+
120
+ ```erb
121
+ <%= prop :review_rating, type: :rating, if: @product.rating? do %>
122
+ ...
123
+ <% end %>
124
+ ```
115
125
 
116
126
  #### Meta properties
117
127
 
@@ -135,6 +145,12 @@ To define a link to an enumeration member, e.g. [ItemAvailability](http://schema
135
145
  <%= prop :availability, :in_stock %>
136
146
  ```
137
147
 
148
+ You can also do this by passing symbols as hash values:
149
+
150
+ ```erb
151
+ <%= prop availability: :in_stock %>
152
+ ```
153
+
138
154
  This will generate the following HTML:
139
155
 
140
156
  ```html
@@ -182,6 +198,27 @@ The following is based on the [Product example](http://schema.org/Product) on [S
182
198
  <% end %>
183
199
  ```
184
200
 
201
+ ## Tools for validating microdata
202
+
203
+ There are various tools you can use for validating your microdata.
204
+ I recommend using these (especially Google's) before releasing to production, so you are sure that the microdata you implemented works as expected.
205
+
206
+ #### Google Structured Data Testing Tool
207
+
208
+ [Google's Structured Data Testing Tool](http://www.google.com/webmasters/tools/richsnippets) is the tool I recommend using for making sure your microdata will validate.
209
+ If your microdata validates here, it will validate on Google SERPs.
210
+
211
+ You can enter a URL or copy/paste HTML to validate. This means that you can test your development code, too.
212
+
213
+ #### Bing Markup Validator
214
+
215
+ [Bing's Markup Validator](http://www.bing.com/webmaster/diagnostics/markup/validator) appears to be easier to read, but it is not as strict as Google's tool.
216
+
217
+ #### Mida
218
+
219
+ [Mida](https://github.com/LawrenceWoodman/mida) is a great tool for validating your code locally as you implement new microdata.
220
+ It runs locally via the command line and takes a URL to validate, so you can validate code on your local development server.
221
+
185
222
  ## Contributing
186
223
 
187
224
  Changes and improvements are to Item are very welcome and greatly appreciated.
@@ -1,3 +1,3 @@
1
1
  module Item
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -7,33 +7,47 @@ module Item
7
7
  end
8
8
 
9
9
  def prop(key, value = nil, options = {}, &block)
10
+ @_item_enabled = true unless defined?(@_item_enabled)
11
+
10
12
  if key.is_a?(Hash)
11
13
  key.map do |key, value|
12
14
  if value.is_a?(Symbol)
13
- link_prop(key, value)
15
+ link_prop(key, value) if @_item_enabled
14
16
  else
15
- meta_prop(key, value)
17
+ meta_prop(key, value) if @_item_enabled
16
18
  end
17
- end.join("\n").html_safe
19
+ end.compact.join("\n").html_safe
18
20
  elsif value.is_a?(Symbol)
19
- link_prop(key, value)
21
+ link_prop(key, value) if @_item_enabled
20
22
  else
21
23
  options, value = value, nil if value.is_a?(Hash)
22
24
  itemprop = Util.itemprop(key)
23
25
 
24
- if block
26
+ @_item_enabled_old = @_item_enabled
27
+ @_item_enabled = @_item_enabled_old && options.fetch(:if, !options.fetch(:unless, false))
28
+
29
+ options.delete(:if)
30
+ options.delete(:unless)
31
+
32
+ content = if block
25
33
  tag = options.delete(:tag) || :div
26
34
  itemtype = Util.itemtype(options.delete(:type) || key)
27
- tag_options = { itemprop: itemprop, itemscope: "itemscope", itemtype: itemtype }.merge(options)
28
- content_tag(tag, tag_options, &block)
35
+ options = { itemprop: itemprop, itemscope: "itemscope", itemtype: itemtype }.merge(options) if @_item_enabled
36
+ content_tag(tag, options, &block)
29
37
  else
30
38
  tag = options.delete(:tag) || :span
31
- tag_options = { itemprop: itemprop }.merge(options)
32
- content_tag(tag, value, tag_options)
39
+ options = { itemprop: itemprop }.merge(options) if @_item_enabled
40
+ content_tag(tag, value, options)
33
41
  end
42
+
43
+ @_item_enabled = @_item_enabled_old
44
+
45
+ content
34
46
  end
35
47
  end
36
48
 
49
+ private
50
+
37
51
  def link_prop(key, value)
38
52
  tag(:link, itemprop: Util.itemprop(key), href: Util.href(value))
39
53
  end
@@ -78,10 +78,62 @@ class ViewHelpersTest < ActionView::TestCase
78
78
 
79
79
  test "combined" do
80
80
  content = scope :product do
81
- concat prop(:title, "My Title")
81
+ prop(:title, "My Title")
82
82
  end
83
83
 
84
84
  assert_equal %{<div itemscope="itemscope" itemtype="http://schema.org/Product"><span itemprop="title">My Title</span></div>},
85
85
  content
86
86
  end
87
+
88
+ test "prop with trueish if" do
89
+ content = scope :product do
90
+ prop :offers, type: :offer, tag: :custom1, class: "offers-container", if: "trueish" do
91
+ [prop(:price, 123.5, tag: :custom2, class: "price-container"),
92
+ prop(availability: :in_stock, price_currency: "DKK"),
93
+ prop(:other_key, :other_value)].join.html_safe
94
+ end
95
+ end
96
+
97
+ assert_equal %{<div itemscope="itemscope" itemtype="http://schema.org/Product"><custom1 class="offers-container" itemprop="offers" itemscope="itemscope" itemtype="http://schema.org/Offer"><custom2 class="price-container" itemprop="price">123.5</custom2><link href="http://schema.org/InStock" itemprop="availability" />\n<meta content="DKK" itemprop="priceCurrency" /><link href="http://schema.org/OtherValue" itemprop="otherKey" /></custom1></div>},
98
+ content
99
+ end
100
+
101
+ test "prop with falsey if" do
102
+ content = scope :product do
103
+ prop :offers, type: :offer, tag: :custom1, class: "offers-container", if: nil do
104
+ [prop(:price, 123.5, tag: :custom2, class: "price-container"),
105
+ prop(availability: :in_stock, price_currency: "DKK"),
106
+ prop(:other_key, :other_value)].join.html_safe
107
+ end
108
+ end
109
+
110
+ assert_equal %{<div itemscope="itemscope" itemtype="http://schema.org/Product"><custom1 class="offers-container"><custom2 class="price-container">123.5</custom2></custom1></div>},
111
+ content
112
+ end
113
+
114
+ test "prop with falsey unless" do
115
+ content = scope :product do
116
+ prop :offers, type: :offer, tag: :custom1, class: "offers-container", unless: nil do
117
+ [prop(:price, 123.5, tag: :custom2, class: "price-container"),
118
+ prop(availability: :in_stock, price_currency: "DKK"),
119
+ prop(:other_key, :other_value)].join.html_safe
120
+ end
121
+ end
122
+
123
+ assert_equal %{<div itemscope="itemscope" itemtype="http://schema.org/Product"><custom1 class="offers-container" itemprop="offers" itemscope="itemscope" itemtype="http://schema.org/Offer"><custom2 class="price-container" itemprop="price">123.5</custom2><link href="http://schema.org/InStock" itemprop="availability" />\n<meta content="DKK" itemprop="priceCurrency" /><link href="http://schema.org/OtherValue" itemprop="otherKey" /></custom1></div>},
124
+ content
125
+ end
126
+
127
+ test "prop with trueish unless" do
128
+ content = scope :product do
129
+ prop :offers, type: :offer, tag: :custom1, class: "offers-container", unless: "trueish" do
130
+ [prop(:price, 123.5, tag: :custom2, class: "price-container"),
131
+ prop(availability: :in_stock, price_currency: "DKK"),
132
+ prop(:other_key, :other_value)].join.html_safe
133
+ end
134
+ end
135
+
136
+ assert_equal %{<div itemscope="itemscope" itemtype="http://schema.org/Product"><custom1 class="offers-container"><custom2 class="price-container">123.5</custom2></custom1></div>},
137
+ content
138
+ end
87
139
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: item
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
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-07-27 00:00:00.000000000 Z
11
+ date: 2014-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails