actionview 4.2.0.beta3 → 4.2.0.beta4

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of actionview might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4f89166df29bb61e4f8303b2209d4575cb5a2fe7
4
- data.tar.gz: 229668858d4f29e93a549795aee8cf97388d84e8
3
+ metadata.gz: d3e0b2b933e53444af04ebe433ac0c35aeb5e709
4
+ data.tar.gz: 6d88a40b83339917fa89ad355d655e7413f0804a
5
5
  SHA512:
6
- metadata.gz: 4c497c45de3aef7a68a8df5e8db3fa7b470f0c1d2d8897f56a99618bb835dfb168d3aa221da920112ff17850c2b8e1c57ab1867f35540e115d36a384d4f041b5
7
- data.tar.gz: 402389d6b45e3cd8b38f69a4dd49496e59e393c144415f353ba38a61d8ce5afc3bdbb1e68e690bb9c03160ed23e4a4ef855f291c8a08fde283a32cf8c62974de
6
+ metadata.gz: 6e264edd52ab507f2b0f8f5e03a55c3e241d09316eaf072671d14d5ebeb60ed3a48d4cd630062adfe04ae9122d61e3291efe40c249eb2ff7d3260d0a5e2b9f78
7
+ data.tar.gz: fe4241fd0423e44d4e4dcd847a05f0780a789744d70d3aa12bd159c464a5fb65d33f5db8d90896b3e53bff7143bbc7c67900e1ac9ef768575a3b1496f29ef95e
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ * Update `select_tag` to work correctly with `:include_blank` option passing a string.
2
+
3
+ Fixes #16483.
4
+
5
+ *Frank Groeneveld*
6
+
1
7
  * Changed the meaning of `render "foo/bar"`.
2
8
 
3
9
  Previously, calling `render "foo/bar"` in a controller action is equivalent
@@ -8,7 +8,7 @@ module ActionView
8
8
  MAJOR = 4
9
9
  MINOR = 2
10
10
  TINY = 0
11
- PRE = "beta3"
11
+ PRE = "beta4"
12
12
 
13
13
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
14
14
  end
@@ -1035,7 +1035,7 @@ module ActionView
1035
1035
  def build_selects_from_types(order)
1036
1036
  select = ''
1037
1037
  first_visible = order.find { |type| !@options[:"discard_#{type}"] }
1038
- order.reverse.each do |type|
1038
+ order.reverse_each do |type|
1039
1039
  separator = separator(type) unless type == first_visible # don't add before first visible field
1040
1040
  select.insert(0, separator.to_s + send("select_#{type}").to_s)
1041
1041
  end
@@ -1231,8 +1231,8 @@ module ActionView
1231
1231
  # end
1232
1232
  #
1233
1233
  # The above code creates a new method +div_radio_button+ which wraps a div
1234
- # around the a new radio button. Note that when options are passed in, you
1235
- # must called +objectify_options+ in order for the model object to get
1234
+ # around the new radio button. Note that when options are passed in, you
1235
+ # must call +objectify_options+ in order for the model object to get
1236
1236
  # correctly passed to the method. If +objectify_options+ is not called,
1237
1237
  # then the newly created helper will not be linked back to the model.
1238
1238
  #
@@ -133,12 +133,18 @@ module ActionView
133
133
  option_tags ||= ""
134
134
  html_name = (options[:multiple] == true && !name.to_s.ends_with?("[]")) ? "#{name}[]" : name
135
135
 
136
- if options.delete(:include_blank)
137
- option_tags = content_tag(:option, '', :value => '').safe_concat(option_tags)
136
+ if options.include?(:include_blank)
137
+ include_blank = options.delete(:include_blank)
138
+
139
+ if include_blank == true
140
+ include_blank = ''
141
+ end
142
+
143
+ option_tags = content_tag(:option, include_blank, value: '').safe_concat(option_tags)
138
144
  end
139
145
 
140
146
  if prompt = options.delete(:prompt)
141
- option_tags = content_tag(:option, prompt, :value => '').safe_concat(option_tags)
147
+ option_tags = content_tag(:option, prompt, value: '').safe_concat(option_tags)
142
148
  end
143
149
 
144
150
  content_tag :select, option_tags, { "name" => html_name, "id" => sanitize_to_id(name) }.update(options.stringify_keys)
@@ -224,7 +230,7 @@ module ActionView
224
230
  # # => <input id="collected_input" name="collected_input" onchange="alert('Input collected!')"
225
231
  # # type="hidden" value="" />
226
232
  def hidden_field_tag(name, value = nil, options = {})
227
- text_field_tag(name, value, options.stringify_keys.update("type" => "hidden"))
233
+ text_field_tag(name, value, options.merge(type: :hidden))
228
234
  end
229
235
 
230
236
  # Creates a file upload field. If you are using file uploads then you will also need
@@ -263,7 +269,7 @@ module ActionView
263
269
  # file_field_tag 'file', accept: 'text/html', class: 'upload', value: 'index.html'
264
270
  # # => <input accept="text/html" class="upload" id="file" name="file" type="file" value="index.html" />
265
271
  def file_field_tag(name, options = {})
266
- text_field_tag(name, nil, options.update("type" => "file"))
272
+ text_field_tag(name, nil, options.merge(type: :file))
267
273
  end
268
274
 
269
275
  # Creates a password field, a masked text field that will hide the users input behind a mask character.
@@ -296,7 +302,7 @@ module ActionView
296
302
  # password_field_tag 'pin', '1234', maxlength: 4, size: 6, class: "pin_input"
297
303
  # # => <input class="pin_input" id="pin" maxlength="4" name="pin" size="6" type="password" value="1234" />
298
304
  def password_field_tag(name = "password", value = nil, options = {})
299
- text_field_tag(name, value, options.update("type" => "password"))
305
+ text_field_tag(name, value, options.merge(type: :password))
300
306
  end
301
307
 
302
308
  # Creates a text input area; use a textarea for longer text inputs such as blog posts or descriptions.
@@ -571,7 +577,7 @@ module ActionView
571
577
  # color_field_tag 'color', '#DEF726', class: 'special_input', disabled: true
572
578
  # # => <input disabled="disabled" class="special_input" id="color" name="color" type="color" value="#DEF726" />
573
579
  def color_field_tag(name, value = nil, options = {})
574
- text_field_tag(name, value, options.stringify_keys.update("type" => "color"))
580
+ text_field_tag(name, value, options.merge(type: :color))
575
581
  end
576
582
 
577
583
  # Creates a text field of type "search".
@@ -592,7 +598,7 @@ module ActionView
592
598
  # search_field_tag 'search', 'Enter your search query here', class: 'special_input', disabled: true
593
599
  # # => <input disabled="disabled" class="special_input" id="search" name="search" type="search" value="Enter your search query here" />
594
600
  def search_field_tag(name, value = nil, options = {})
595
- text_field_tag(name, value, options.stringify_keys.update("type" => "search"))
601
+ text_field_tag(name, value, options.merge(type: :search))
596
602
  end
597
603
 
598
604
  # Creates a text field of type "tel".
@@ -613,7 +619,7 @@ module ActionView
613
619
  # telephone_field_tag 'tel', '0123456789', class: 'special_input', disabled: true
614
620
  # # => <input disabled="disabled" class="special_input" id="tel" name="tel" type="tel" value="0123456789" />
615
621
  def telephone_field_tag(name, value = nil, options = {})
616
- text_field_tag(name, value, options.stringify_keys.update("type" => "tel"))
622
+ text_field_tag(name, value, options.merge(type: :tel))
617
623
  end
618
624
  alias phone_field_tag telephone_field_tag
619
625
 
@@ -635,7 +641,7 @@ module ActionView
635
641
  # date_field_tag 'date', '01/01/2014', class: 'special_input', disabled: true
636
642
  # # => <input disabled="disabled" class="special_input" id="date" name="date" type="date" value="01/01/2014" />
637
643
  def date_field_tag(name, value = nil, options = {})
638
- text_field_tag(name, value, options.stringify_keys.update("type" => "date"))
644
+ text_field_tag(name, value, options.merge(type: :date))
639
645
  end
640
646
 
641
647
  # Creates a text field of type "time".
@@ -646,7 +652,7 @@ module ActionView
646
652
  # * <tt>:step</tt> - The acceptable value granularity.
647
653
  # * Otherwise accepts the same options as text_field_tag.
648
654
  def time_field_tag(name, value = nil, options = {})
649
- text_field_tag(name, value, options.stringify_keys.update("type" => "time"))
655
+ text_field_tag(name, value, options.merge(type: :time))
650
656
  end
651
657
 
652
658
  # Creates a text field of type "datetime".
@@ -657,7 +663,7 @@ module ActionView
657
663
  # * <tt>:step</tt> - The acceptable value granularity.
658
664
  # * Otherwise accepts the same options as text_field_tag.
659
665
  def datetime_field_tag(name, value = nil, options = {})
660
- text_field_tag(name, value, options.stringify_keys.update("type" => "datetime"))
666
+ text_field_tag(name, value, options.merge(type: :datetime))
661
667
  end
662
668
 
663
669
  # Creates a text field of type "datetime-local".
@@ -668,7 +674,7 @@ module ActionView
668
674
  # * <tt>:step</tt> - The acceptable value granularity.
669
675
  # * Otherwise accepts the same options as text_field_tag.
670
676
  def datetime_local_field_tag(name, value = nil, options = {})
671
- text_field_tag(name, value, options.stringify_keys.update("type" => "datetime-local"))
677
+ text_field_tag(name, value, options.merge(type: 'datetime-local'))
672
678
  end
673
679
 
674
680
  # Creates a text field of type "month".
@@ -679,7 +685,7 @@ module ActionView
679
685
  # * <tt>:step</tt> - The acceptable value granularity.
680
686
  # * Otherwise accepts the same options as text_field_tag.
681
687
  def month_field_tag(name, value = nil, options = {})
682
- text_field_tag(name, value, options.stringify_keys.update("type" => "month"))
688
+ text_field_tag(name, value, options.merge(type: :month))
683
689
  end
684
690
 
685
691
  # Creates a text field of type "week".
@@ -690,7 +696,7 @@ module ActionView
690
696
  # * <tt>:step</tt> - The acceptable value granularity.
691
697
  # * Otherwise accepts the same options as text_field_tag.
692
698
  def week_field_tag(name, value = nil, options = {})
693
- text_field_tag(name, value, options.stringify_keys.update("type" => "week"))
699
+ text_field_tag(name, value, options.merge(type: :week))
694
700
  end
695
701
 
696
702
  # Creates a text field of type "url".
@@ -711,7 +717,7 @@ module ActionView
711
717
  # url_field_tag 'url', 'http://rubyonrails.org', class: 'special_input', disabled: true
712
718
  # # => <input disabled="disabled" class="special_input" id="url" name="url" type="url" value="http://rubyonrails.org" />
713
719
  def url_field_tag(name, value = nil, options = {})
714
- text_field_tag(name, value, options.stringify_keys.update("type" => "url"))
720
+ text_field_tag(name, value, options.merge(type: :url))
715
721
  end
716
722
 
717
723
  # Creates a text field of type "email".
@@ -732,7 +738,7 @@ module ActionView
732
738
  # email_field_tag 'email', 'email@example.com', class: 'special_input', disabled: true
733
739
  # # => <input disabled="disabled" class="special_input" id="email" name="email" type="email" value="email@example.com" />
734
740
  def email_field_tag(name, value = nil, options = {})
735
- text_field_tag(name, value, options.stringify_keys.update("type" => "email"))
741
+ text_field_tag(name, value, options.merge(type: :email))
736
742
  end
737
743
 
738
744
  # Creates a number field.
@@ -790,7 +796,7 @@ module ActionView
790
796
  # ==== Options
791
797
  # * Accepts the same options as number_field_tag.
792
798
  def range_field_tag(name, value = nil, options = {})
793
- number_field_tag(name, value, options.stringify_keys.update("type" => "range"))
799
+ number_field_tag(name, value, options.merge(type: :range))
794
800
  end
795
801
 
796
802
  # Creates the hidden UTF8 enforcer tag. Override this method in a helper
@@ -862,7 +868,7 @@ module ActionView
862
868
 
863
869
  # see http://www.w3.org/TR/html4/types.html#type-name
864
870
  def sanitize_to_id(name)
865
- name.to_s.delete(']').gsub(/[^-a-zA-Z0-9:.]/, "_")
871
+ name.to_s.delete(']').tr('^-a-zA-Z0-9:.', "_")
866
872
  end
867
873
  end
868
874
  end
@@ -306,12 +306,12 @@ module ActionView
306
306
  # string containing an i18n scope where to find this hash. It
307
307
  # might have the following keys:
308
308
  # * *integers*: <tt>:unit</tt>, <tt>:ten</tt>,
309
- # *<tt>:hundred</tt>, <tt>:thousand</tt>, <tt>:million</tt>,
310
- # *<tt>:billion</tt>, <tt>:trillion</tt>,
311
- # *<tt>:quadrillion</tt>
309
+ # <tt>:hundred</tt>, <tt>:thousand</tt>, <tt>:million</tt>,
310
+ # <tt>:billion</tt>, <tt>:trillion</tt>,
311
+ # <tt>:quadrillion</tt>
312
312
  # * *fractionals*: <tt>:deci</tt>, <tt>:centi</tt>,
313
- # *<tt>:mili</tt>, <tt>:micro</tt>, <tt>:nano</tt>,
314
- # *<tt>:pico</tt>, <tt>:femto</tt>
313
+ # <tt>:mili</tt>, <tt>:micro</tt>, <tt>:nano</tt>,
314
+ # <tt>:pico</tt>, <tt>:femto</tt>
315
315
  # * <tt>:format</tt> - Sets the format of the output string
316
316
  # (defaults to "%n %u"). The field types are:
317
317
  # * %u - The quantifier (ex.: 'thousand')
@@ -57,7 +57,7 @@ module ActionView
57
57
  # Add table tags to the default allowed tags
58
58
  #
59
59
  # class Application < Rails::Application
60
- # config.action_view.sanitized_allowed_tags = 'table', 'tr', 'td'
60
+ # config.action_view.sanitized_allowed_tags = ['table', 'tr', 'td']
61
61
  # end
62
62
  #
63
63
  # Remove tags to the default allowed tags
@@ -176,7 +176,7 @@ module ActionView
176
176
  # Replaces the allowed tags for the +sanitize+ helper.
177
177
  #
178
178
  # class Application < Rails::Application
179
- # config.action_view.sanitized_allowed_tags = 'table', 'tr', 'td'
179
+ # config.action_view.sanitized_allowed_tags = ['table', 'tr', 'td']
180
180
  # end
181
181
  #
182
182
 
@@ -160,7 +160,7 @@ module ActionView
160
160
  attrs << tag_option(key, value, escape)
161
161
  end
162
162
  end
163
- " #{attrs.sort! * ' '}" unless attrs.empty?
163
+ " #{attrs * ' '}" unless attrs.empty?
164
164
  end
165
165
 
166
166
  def prefix_tag_option(prefix, key, value, escape)
@@ -126,7 +126,7 @@ module ActionView
126
126
  text = sanitize(text) if options.fetch(:sanitize, true)
127
127
 
128
128
  if text.blank? || phrases.blank?
129
- text
129
+ text || ""
130
130
  else
131
131
  match = Array(phrases).map do |p|
132
132
  Regexp === p ? p.to_s : Regexp.escape(p)
@@ -18,7 +18,7 @@ module ActionView
18
18
 
19
19
  # Determine the template to be rendered using the given options.
20
20
  def determine_template(options)
21
- keys = options.fetch(:locals, {}).keys
21
+ keys = options.has_key?(:locals) ? options[:locals].keys : []
22
22
 
23
23
  if options.key?(:body)
24
24
  Template::Text.new(options[:body])
@@ -313,15 +313,19 @@ module ActionView
313
313
 
314
314
  def locals_code #:nodoc:
315
315
  # Double assign to suppress the dreaded 'assigned but unused variable' warning
316
- @locals.map { |key| "#{key} = #{key} = local_assigns[:#{key}];" }.join
316
+ @locals.each_with_object('') { |key, code| code << "#{key} = #{key} = local_assigns[:#{key}];" }
317
317
  end
318
318
 
319
319
  def method_name #:nodoc:
320
- @method_name ||= "_#{identifier_method_name}__#{@identifier.hash}_#{__id__}".gsub('-', "_")
320
+ @method_name ||= begin
321
+ m = "_#{identifier_method_name}__#{@identifier.hash}_#{__id__}"
322
+ m.tr!('-', '_')
323
+ m
324
+ end
321
325
  end
322
326
 
323
327
  def identifier_method_name #:nodoc:
324
- inspect.gsub(/[^a-z_]/, '_')
328
+ inspect.tr('^a-z_', '_')
325
329
  end
326
330
 
327
331
  def instrument(action, &block)
@@ -1,6 +1,7 @@
1
1
  require "pathname"
2
2
  require "active_support/core_ext/class"
3
3
  require "active_support/core_ext/module/attribute_accessors"
4
+ require 'active_support/core_ext/string/filters'
4
5
  require "action_view/template"
5
6
  require "thread"
6
7
  require "thread_safe"
@@ -251,9 +252,10 @@ module ActionView
251
252
 
252
253
  extension = pieces.pop
253
254
  unless extension
254
- message = "The file #{path} did not specify a template handler. The default is currently ERB, " \
255
- "but will change to RAW in the future."
256
- ActiveSupport::Deprecation.warn message
255
+ ActiveSupport::Deprecation.warn(<<-MSG.squish)
256
+ The file #{path} did not specify a template handler. The default is
257
+ currently ERB, but will change to RAW in the future.
258
+ MSG
257
259
  end
258
260
 
259
261
  handler = Template.handler_for_extension(extension)
@@ -272,13 +274,13 @@ module ActionView
272
274
  # Default pattern, loads views the same way as previous versions of rails, eg. when you're
273
275
  # looking for `users/new` it will produce query glob: `users/new{.{en},}{.{html,js},}{.{erb,haml},}`
274
276
  #
275
- # FileSystemResolver.new("/path/to/views", ":prefix/:action{.:locale,}{.:formats,}{.:handlers,}")
277
+ # FileSystemResolver.new("/path/to/views", ":prefix/:action{.:locale,}{.:formats,}{+:variants,}{.:handlers,}")
276
278
  #
277
279
  # This one allows you to keep files with different formats in separate subdirectories,
278
280
  # eg. `users/new.html` will be loaded from `users/html/new.erb` or `users/new.html.erb`,
279
281
  # `users/new.js` from `users/js/new.erb` or `users/new.js.erb`, etc.
280
282
  #
281
- # FileSystemResolver.new("/path/to/views", ":prefix/{:formats/,}:action{.:locale,}{.:formats,}{.:handlers,}")
283
+ # FileSystemResolver.new("/path/to/views", ":prefix/{:formats/,}:action{.:locale,}{.:formats,}{+:variants,}{.:handlers,}")
282
284
  #
283
285
  # If you don't specify a pattern then the default will be used.
284
286
  #
@@ -287,7 +289,7 @@ module ActionView
287
289
  #
288
290
  # ActionController::Base.view_paths = FileSystemResolver.new(
289
291
  # Rails.root.join("app/views"),
290
- # ":prefix{/:locale}/:action{.:formats,}{.:handlers,}"
292
+ # ":prefix{/:locale}/:action{.:formats,}{+:variants,}{.:handlers,}"
291
293
  # )
292
294
  #
293
295
  # ==== Pattern format and variables
@@ -299,6 +301,7 @@ module ActionView
299
301
  # * <tt>:action</tt> - name of the action
300
302
  # * <tt>:locale</tt> - possible locale versions
301
303
  # * <tt>:formats</tt> - possible request formats (for example html, json, xml...)
304
+ # * <tt>:variants</tt> - possible request variants (for example phone, tablet...)
302
305
  # * <tt>:handlers</tt> - possible handlers (for example erb, haml, builder...)
303
306
  #
304
307
  class FileSystemResolver < PathResolver
@@ -158,7 +158,7 @@ module ActionView
158
158
 
159
159
  # Need to experiment if this priority is the best one: rendered => output_buffer
160
160
  def document_root_element
161
- Nokogiri::HTML::Document.parse(@rendered.blank? ? @output_buffer : @rendered).root
161
+ Nokogiri::HTML::DocumentFragment.parse(@rendered.blank? ? @output_buffer : @rendered)
162
162
  end
163
163
 
164
164
  def say_no_to_protect_against_forgery!
@@ -38,7 +38,11 @@ module ActionView
38
38
  def handle_deprecated_parent_prefixes # TODO: remove in 4.3/5.0.
39
39
  return unless respond_to?(:parent_prefixes)
40
40
 
41
- ActiveSupport::Deprecation.warn "Overriding ActionController::Base::parent_prefixes is deprecated, override .local_prefixes instead."
41
+ ActiveSupport::Deprecation.warn(<<-MSG.squish)
42
+ Overriding `ActionController::Base::parent_prefixes` is deprecated,
43
+ override `.local_prefixes` instead.
44
+ MSG
45
+
42
46
  local_prefixes + parent_prefixes
43
47
  end
44
48
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: actionview
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0.beta3
4
+ version: 4.2.0.beta4
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-29 00:00:00.000000000 Z
11
+ date: 2014-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,110 +16,110 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 4.2.0.beta3
19
+ version: 4.2.0.beta4
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 4.2.0.beta3
26
+ version: 4.2.0.beta4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: builder
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: '3.1'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.1'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: erubis
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: 2.7.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: 2.7.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rails-html-sanitizer
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: '1.0'
62
- - - ">="
62
+ - - '>='
63
63
  - !ruby/object:Gem::Version
64
64
  version: 1.0.1
65
65
  type: :runtime
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
- - - "~>"
69
+ - - ~>
70
70
  - !ruby/object:Gem::Version
71
71
  version: '1.0'
72
- - - ">="
72
+ - - '>='
73
73
  - !ruby/object:Gem::Version
74
74
  version: 1.0.1
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: rails-dom-testing
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - "~>"
79
+ - - ~>
80
80
  - !ruby/object:Gem::Version
81
81
  version: '1.0'
82
- - - ">="
82
+ - - '>='
83
83
  - !ruby/object:Gem::Version
84
- version: 1.0.3
84
+ version: 1.0.4
85
85
  type: :runtime
86
86
  prerelease: false
87
87
  version_requirements: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - "~>"
89
+ - - ~>
90
90
  - !ruby/object:Gem::Version
91
91
  version: '1.0'
92
- - - ">="
92
+ - - '>='
93
93
  - !ruby/object:Gem::Version
94
- version: 1.0.3
94
+ version: 1.0.4
95
95
  - !ruby/object:Gem::Dependency
96
96
  name: actionpack
97
97
  requirement: !ruby/object:Gem::Requirement
98
98
  requirements:
99
99
  - - '='
100
100
  - !ruby/object:Gem::Version
101
- version: 4.2.0.beta3
101
+ version: 4.2.0.beta4
102
102
  type: :development
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
105
105
  requirements:
106
106
  - - '='
107
107
  - !ruby/object:Gem::Version
108
- version: 4.2.0.beta3
108
+ version: 4.2.0.beta4
109
109
  - !ruby/object:Gem::Dependency
110
110
  name: activemodel
111
111
  requirement: !ruby/object:Gem::Requirement
112
112
  requirements:
113
113
  - - '='
114
114
  - !ruby/object:Gem::Version
115
- version: 4.2.0.beta3
115
+ version: 4.2.0.beta4
116
116
  type: :development
117
117
  prerelease: false
118
118
  version_requirements: !ruby/object:Gem::Requirement
119
119
  requirements:
120
120
  - - '='
121
121
  - !ruby/object:Gem::Version
122
- version: 4.2.0.beta3
122
+ version: 4.2.0.beta4
123
123
  description: Simple, battle-tested conventions and helpers for building web pages.
124
124
  email: david@loudthinking.com
125
125
  executables: []
@@ -236,18 +236,18 @@ require_paths:
236
236
  - lib
237
237
  required_ruby_version: !ruby/object:Gem::Requirement
238
238
  requirements:
239
- - - ">="
239
+ - - '>='
240
240
  - !ruby/object:Gem::Version
241
241
  version: 1.9.3
242
242
  required_rubygems_version: !ruby/object:Gem::Requirement
243
243
  requirements:
244
- - - ">"
244
+ - - '>'
245
245
  - !ruby/object:Gem::Version
246
246
  version: 1.3.1
247
247
  requirements:
248
248
  - none
249
249
  rubyforge_project:
250
- rubygems_version: 2.2.2
250
+ rubygems_version: 2.2.1
251
251
  signing_key:
252
252
  specification_version: 4
253
253
  summary: Rendering framework putting the V in MVC (part of Rails).