activesupport 3.2.3 → 3.2.4.rc1

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

Potentially problematic release.


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

@@ -1,11 +1,19 @@
1
- ## Rails 3.2.3 (unreleased) ##
1
+ ## Rails 3.2.4 (unreleased) ##
2
+
3
+ * Added #beginning_of_hour and #end_of_hour to Time and DateTime core
4
+ extensions. *Mark J. Titorenko*
5
+
6
+
7
+ ## Rails 3.2.3 (March 30, 2012) ##
2
8
 
3
9
  * No changes.
4
10
 
11
+
5
12
  ## Rails 3.2.2 (March 1, 2012) ##
6
13
 
7
14
  * No changes.
8
15
 
16
+
9
17
  ## Rails 3.2.1 (January 26, 2012) ##
10
18
 
11
19
  * Documentation fixes and improvements.
@@ -90,6 +98,36 @@
90
98
  filehandle, or tune your filesystem.
91
99
 
92
100
 
101
+ ## Rails 3.1.4 (March 1, 2012) ##
102
+
103
+ * No changes
104
+
105
+
106
+ ## Rails 3.1.3 (November 20, 2011) ##
107
+
108
+ * No changes
109
+
110
+
111
+ ## Rails 3.1.2 (November 18, 2011) ##
112
+
113
+ * No changes
114
+
115
+
116
+ ## Rails 3.1.1 (October 7, 2011) ##
117
+
118
+ * ruby193: String#prepend is also unsafe *Akira Matsuda*
119
+
120
+ * Fix obviously breakage of Time.=== for Time subclasses *jeremyevans*
121
+
122
+ * Added fix so that file store does not raise an exception when cache dir does
123
+ not exist yet. This can happen if a delete_matched is called before anything
124
+ is saved in the cache. *Philippe Huibonhoa*
125
+
126
+ * Fixed performance issue where TimeZone lookups would require tzinfo each time *Tim Lucas*
127
+
128
+ * ActiveSupport::OrderedHash is now marked as extractable when using Array#extract_options! *Prem Sichanugrist*
129
+
130
+
93
131
  ## Rails 3.1.0 (August 30, 2011) ##
94
132
 
95
133
  * ActiveSupport::Dependencies#load and ActiveSupport::Dependencies#require now
@@ -132,12 +170,38 @@
132
170
  * JSON decoding now uses the multi_json gem which also vendors a json engine called OkJson. The yaml backend has been removed in favor of OkJson as a default engine for 1.8.x, while the built in 1.9.x json implementation will be used by default. *Josh Kalderimis*
133
171
 
134
172
 
173
+ ## Rails 3.0.12 (March 1, 2012) ##
174
+
175
+ * No changes.
176
+
177
+
178
+ ## Rails 3.0.11 (November 18, 2011) ##
179
+
180
+ * No changes.
181
+
182
+
183
+ ## Rails 3.0.10 (August 16, 2011) ##
184
+
185
+ * Delayed backtrace scrubbing in `load_missing_constant` until we actually
186
+ raise the exception
187
+
188
+
189
+ ## Rails 3.0.9 (June 16, 2011) ##
190
+
191
+ * No changes.
192
+
193
+
194
+ ## Rails 3.0.8 (June 7, 2011) ##
195
+
196
+ * No changes.
197
+
198
+
135
199
  ## Rails 3.0.7 (April 18, 2011) ##
136
200
 
137
201
  * Hash.from_xml no longer loses attributes on tags containing only whitespace *André Arko*
138
202
 
139
203
 
140
- * Rails 3.0.6 (April 5, 2011)
204
+ ## Rails 3.0.6 (April 5, 2011)
141
205
 
142
206
  * No changes.
143
207
 
@@ -14,7 +14,7 @@ The latest version of Active Support can be installed with RubyGems:
14
14
 
15
15
  Source code can be downloaded as part of the Rails project on GitHub
16
16
 
17
- * https://github.com/rails/rails/tree/master/activesupport
17
+ * https://github.com/rails/rails/tree/3-2-stable/activesupport
18
18
 
19
19
 
20
20
  == License
@@ -35,7 +35,7 @@ module ActiveSupport
35
35
  options[:level] ||= :info
36
36
 
37
37
  result = nil
38
- ms = Benchmark.ms { result = options[:silence] ? logger.silence { yield } : yield }
38
+ ms = Benchmark.ms { result = options[:silence] ? silence { yield } : yield }
39
39
  logger.send(options[:level], '%s (%.1fms)' % [ message, ms ])
40
40
  result
41
41
  else
@@ -2,30 +2,33 @@ require 'active_support/core_ext/array/extract_options'
2
2
 
3
3
  # Extends the class object with class and instance accessors for class attributes,
4
4
  # just like the native attr* accessors for instance attributes.
5
- #
6
- # Note that unlike +class_attribute+, if a subclass changes the value then that would
7
- # also change the value for parent class. Similarly if parent class changes the value
8
- # then that would change the value of subclasses too.
9
- #
10
- # class Person
11
- # cattr_accessor :hair_colors
12
- # end
13
- #
14
- # Person.hair_colors = [:brown, :black, :blonde, :red]
15
- # Person.hair_colors # => [:brown, :black, :blonde, :red]
16
- # Person.new.hair_colors # => [:brown, :black, :blonde, :red]
17
- #
18
- # To opt out of the instance writer method, pass :instance_writer => false.
19
- # To opt out of the instance reader method, pass :instance_reader => false.
20
- # To opt out of both instance methods, pass :instance_accessor => false.
21
- #
22
- # class Person
23
- # cattr_accessor :hair_colors, :instance_writer => false, :instance_reader => false
24
- # end
25
- #
26
- # Person.new.hair_colors = [:brown] # => NoMethodError
27
- # Person.new.hair_colors # => NoMethodError
28
5
  class Class
6
+ # Defines a class attribute if it's not defined and creates a reader method that
7
+ # returns the attribute value.
8
+ #
9
+ # class Person
10
+ # cattr_reader :hair_colors
11
+ # end
12
+ #
13
+ # Person.class_variable_set("@@hair_colors", [:brown, :black])
14
+ # Person.hair_colors # => [:brown, :black]
15
+ # Person.new.hair_colors # => [:brown, :black]
16
+ #
17
+ # The attribute name must be a valid method name in Ruby.
18
+ #
19
+ # class Person
20
+ # cattr_reader :"1_Badname "
21
+ # end
22
+ # # => NameError: invalid attribute name
23
+ #
24
+ # If you want to opt out the instance reader method, you can pass <tt>:instance_reader => false</tt>
25
+ # or <tt>:instance_accessor => false</tt>.
26
+ #
27
+ # class Person
28
+ # cattr_reader :hair_colors, :instance_reader => false
29
+ # end
30
+ #
31
+ # Person.new.hair_colors # => NoMethodError
29
32
  def cattr_reader(*syms)
30
33
  options = syms.extract_options!
31
34
  syms.each do |sym|
@@ -49,6 +52,43 @@ class Class
49
52
  end
50
53
  end
51
54
 
55
+ # Defines a class attribute if it's not defined and creates a writer method to allow
56
+ # assignment to the attribute.
57
+ #
58
+ # class Person
59
+ # cattr_writer :hair_colors
60
+ # end
61
+ #
62
+ # Person.hair_colors = [:brown, :black]
63
+ # Person.class_variable_get("@@hair_colors") # => [:brown, :black]
64
+ # Person.new.hair_colors = [:blonde, :red]
65
+ # Person.class_variable_get("@@hair_colors") # => [:blonde, :red]
66
+ #
67
+ # The attribute name must be a valid method name in Ruby.
68
+ #
69
+ # class Person
70
+ # cattr_writer :"1_Badname "
71
+ # end
72
+ # # => NameError: invalid attribute name
73
+ #
74
+ # If you want to opt out the instance writer method, pass <tt>:instance_writer => false</tt>
75
+ # or <tt>:instance_accessor => false</tt>.
76
+ #
77
+ # class Person
78
+ # cattr_writer :hair_colors, :instance_writer => false
79
+ # end
80
+ #
81
+ # Person.new.hair_colors = [:blonde, :red] # => NoMethodError
82
+ #
83
+ # Also, you can pass a block to set up the attribute with a default value.
84
+ #
85
+ # class Person
86
+ # cattr_writer :hair_colors do
87
+ # [:brown, :black, :blonde, :red]
88
+ # end
89
+ # end
90
+ #
91
+ # Person.class_variable_get("@@hair_colors") # => [:brown, :black, :blonde, :red]
52
92
  def cattr_writer(*syms)
53
93
  options = syms.extract_options!
54
94
  syms.each do |sym|
@@ -73,6 +113,54 @@ class Class
73
113
  end
74
114
  end
75
115
 
116
+ # Defines both class and instance accessors for class attributes.
117
+ #
118
+ # class Person
119
+ # cattr_accessor :hair_colors
120
+ # end
121
+ #
122
+ # Person.hair_colors = [:brown, :black, :blonde, :red]
123
+ # Person.hair_colors # => [:brown, :black, :blonde, :red]
124
+ # Person.new.hair_colors # => [:brown, :black, :blonde, :red]
125
+ #
126
+ # If a subclass changes the value then that would also change the value for
127
+ # parent class. Similarly if parent class changes the value then that would
128
+ # change the value of subclasses too.
129
+ #
130
+ # class Male < Person
131
+ # end
132
+ #
133
+ # Male.hair_colors << :blue
134
+ # Person.hair_colors # => [:brown, :black, :blonde, :red, :blue]
135
+ #
136
+ # To opt out of the instance writer method, pass <tt>:instance_writer => false</tt>.
137
+ # To opt out of the instance reader method, pass <tt>:instance_reader => false</tt>.
138
+ #
139
+ # class Person
140
+ # cattr_accessor :hair_colors, :instance_writer => false, :instance_reader => false
141
+ # end
142
+ #
143
+ # Person.new.hair_colors = [:brown] # => NoMethodError
144
+ # Person.new.hair_colors # => NoMethodError
145
+ #
146
+ # Or pass <tt>:instance_accessor => false</tt>, to opt out both instance methods.
147
+ #
148
+ # class Person
149
+ # cattr_accessor :hair_colors, :instance_accessor => false
150
+ # end
151
+ #
152
+ # Person.new.hair_colors = [:brown] # => NoMethodError
153
+ # Person.new.hair_colors # => NoMethodError
154
+ #
155
+ # Also you can pass a block to set up the attribute with a default value.
156
+ #
157
+ # class Person
158
+ # cattr_accessor :hair_colors do
159
+ # [:brown, :black, :blonde, :red]
160
+ # end
161
+ # end
162
+ #
163
+ # Person.class_variable_get("@@hair_colors") #=> [:brown, :black, :blonde, :red]
76
164
  def cattr_accessor(*syms, &blk)
77
165
  cattr_reader(*syms)
78
166
  cattr_writer(*syms, &blk)
@@ -81,6 +81,17 @@ class DateTime
81
81
  change(:hour => 23, :min => 59, :sec => 59)
82
82
  end
83
83
 
84
+ # Returns a new DateTime representing the start of the hour (hh:00:00)
85
+ def beginning_of_hour
86
+ change(:min => 0)
87
+ end
88
+ alias :at_beginning_of_hour :beginning_of_hour
89
+
90
+ # Returns a new DateTime representing the end of the hour (hh:59:59)
91
+ def end_of_hour
92
+ change(:min => 59, :sec => 59)
93
+ end
94
+
84
95
  # 1.9.3 defines + and - on DateTime, < 1.9.3 do not.
85
96
  if DateTime.public_instance_methods(false).include?(:+)
86
97
  def plus_with_duration(other) #:nodoc:
@@ -1,5 +1,12 @@
1
1
  class Hash
2
2
  # Returns a deep copy of hash.
3
+ #
4
+ # hash = { :a => { :b => 'b' } }
5
+ # dup = hash.deep_dup
6
+ # dup[:a][:c] = 'c'
7
+ #
8
+ # hash[:a][:c] #=> nil
9
+ # dup[:a][:c] #=> "c"
3
10
  def deep_dup
4
11
  duplicate = self.dup
5
12
  duplicate.each_pair do |k,v|
@@ -1,11 +1,16 @@
1
1
  class Hash
2
2
  # Returns a new hash with +self+ and +other_hash+ merged recursively.
3
+ #
4
+ # h1 = {:x => {:y => [4,5,6]}, :z => [7,8,9]}
5
+ # h2 = {:x => {:y => [7,8,9]}, :z => "xyz"}
6
+ #
7
+ # h1.deep_merge(h2) #=> { :x => {:y => [7, 8, 9]}, :z => "xyz" }
8
+ # h2.deep_merge(h1) #=> { :x => {:y => [4, 5, 6]}, :z => [7, 8, 9] }
3
9
  def deep_merge(other_hash)
4
10
  dup.deep_merge!(other_hash)
5
11
  end
6
12
 
7
- # Returns a new hash with +self+ and +other_hash+ merged recursively.
8
- # Modifies the receiver in place.
13
+ # Same as +deep_merge+, but modifies +self+.
9
14
  def deep_merge!(other_hash)
10
15
  other_hash.each_pair do |k,v|
11
16
  tv = self[k]
@@ -1,10 +1,14 @@
1
1
  class Hash
2
2
  # Return a new hash with all keys converted to strings.
3
+ #
4
+ # { :name => 'Rob', :years => '28' }.stringify_keys
5
+ # #=> { "name" => "Rob", "years" => "28" }
3
6
  def stringify_keys
4
7
  dup.stringify_keys!
5
8
  end
6
9
 
7
- # Destructively convert all keys to strings.
10
+ # Destructively convert all keys to strings. Same as
11
+ # +stringify_keys+, but modifies +self+.
8
12
  def stringify_keys!
9
13
  keys.each do |key|
10
14
  self[key.to_s] = delete(key)
@@ -14,12 +18,15 @@ class Hash
14
18
 
15
19
  # Return a new hash with all keys converted to symbols, as long as
16
20
  # they respond to +to_sym+.
21
+ #
22
+ # { 'name' => 'Rob', 'years' => '28' }.symbolize_keys
23
+ # #=> { :name => "Rob", :years => "28" }
17
24
  def symbolize_keys
18
25
  dup.symbolize_keys!
19
26
  end
20
27
 
21
28
  # Destructively convert all keys to symbols, as long as they respond
22
- # to +to_sym+.
29
+ # to +to_sym+. Same as +symbolize_keys+, but modifies +self+.
23
30
  def symbolize_keys!
24
31
  keys.each do |key|
25
32
  self[(key.to_sym rescue key) || key] = delete(key)
@@ -1,5 +1,9 @@
1
1
  class Integer
2
2
  # Check whether the integer is evenly divisible by the argument.
3
+ #
4
+ # 0.multiple_of?(0) #=> true
5
+ # 6.multiple_of?(5) #=> false
6
+ # 10.multiple_of?(2) #=> true
3
7
  def multiple_of?(number)
4
8
  number != 0 ? self % number == 0 : zero?
5
9
  end
@@ -104,3 +104,16 @@ class Module
104
104
  false
105
105
  end
106
106
  end
107
+
108
+ require 'bigdecimal'
109
+ class BigDecimal
110
+ begin
111
+ BigDecimal.new('4.56').dup
112
+
113
+ def duplicable?
114
+ true
115
+ end
116
+ rescue TypeError
117
+ # can't dup, so use superclass implementation
118
+ end
119
+ end
@@ -7,6 +7,10 @@ class Object
7
7
  #
8
8
  # If try is called without a method to call, it will yield any given block with the object.
9
9
  #
10
+ # Please also note that +try+ is defined on +Object+, therefore it won't work with
11
+ # subclasses of +BasicObject+. For example, using try with +SimpleDelegator+ will
12
+ # delegate +try+ to target instead of calling it on delegator itself.
13
+ #
10
14
  # ==== Examples
11
15
  #
12
16
  # Without +try+
@@ -40,11 +40,23 @@ class String
40
40
  ::Time.send("#{form}_time", *d[0..6]) - d[7]
41
41
  end
42
42
 
43
+ # Converts a string to a Date value.
44
+ #
45
+ # "1-1-2012".to_date #=> Sun, 01 Jan 2012
46
+ # "01/01/2012".to_date #=> Sun, 01 Jan 2012
47
+ # "2012-12-13".to_date #=> Thu, 13 Dec 2012
48
+ # "12/13/2012".to_date #=> ArgumentError: invalid date
43
49
  def to_date
44
50
  return nil if self.blank?
45
51
  ::Date.new(*::Date._parse(self, false).values_at(:year, :mon, :mday))
46
52
  end
47
53
 
54
+ # Converts a string to a DateTime value.
55
+ #
56
+ # "1-1-2012".to_datetime #=> Sun, 01 Jan 2012 00:00:00 +0000
57
+ # "01/01/2012 23:59:59".to_datetime #=> Sun, 01 Jan 2012 23:59:59 +0000
58
+ # "2012-12-13 12:50".to_datetime #=> Thu, 13 Dec 2012 12:50:00 +0000
59
+ # "12/13/2012".to_datetime #=> ArgumentError: invalid date
48
60
  def to_datetime
49
61
  return nil if self.blank?
50
62
  d = ::Date._parse(self, false).values_at(:year, :mon, :mday, :hour, :min, :sec, :zone, :sec_fraction).map { |arg| arg || 0 }
@@ -1,5 +1,10 @@
1
1
  class String
2
- # The inverse of <tt>String#include?</tt>. Returns true if the string does not include the other string.
2
+ # The inverse of <tt>String#include?</tt>. Returns true if the string
3
+ # does not include the other string.
4
+ #
5
+ # "hello".exclude? "lo" #=> false
6
+ # "hello".exclude? "ol" #=> true
7
+ # "hello".exclude? ?h #=> false
3
8
  def exclude?(string)
4
9
  !include?(string)
5
10
  end
@@ -1,5 +1,4 @@
1
1
  require 'active_support/duration'
2
- require 'active_support/core_ext/time/zones'
3
2
  require 'active_support/core_ext/time/conversions'
4
3
 
5
4
  class Time
@@ -219,6 +218,21 @@ class Time
219
218
  change(:hour => 23, :min => 59, :sec => 59, :usec => 999999.999)
220
219
  end
221
220
 
221
+ # Returns a new Time representing the start of the hour (x:00)
222
+ def beginning_of_hour
223
+ change(:min => 0)
224
+ end
225
+ alias :at_beginning_of_hour :beginning_of_hour
226
+
227
+ # Returns a new Time representing the end of the hour, x:59:59.999999 (.999999999 in ruby1.9)
228
+ def end_of_hour
229
+ change(
230
+ :min => 59,
231
+ :sec => 59,
232
+ :usec => 999999.999
233
+ )
234
+ end
235
+
222
236
  # Returns a new Time representing the start of the month (1st of the month, 0:00)
223
237
  def beginning_of_month
224
238
  #self - ((self.mday-1).days + self.seconds_since_midnight)
@@ -1,3 +1,4 @@
1
+ require 'active_support/core_ext/time/calculations'
1
2
  require 'active_support/time_with_zone'
2
3
 
3
4
  class Time
@@ -9,7 +9,13 @@ module ActiveSupport
9
9
  module JSON
10
10
  class << self
11
11
  def decode(json, options ={})
12
- data = MultiJson.decode(json, options)
12
+ # Can't reliably detect whether MultiJson responds to load, since it's
13
+ # a reserved word. Use adapter as a proxy for new features.
14
+ data = if MultiJson.respond_to?(:adapter)
15
+ MultiJson.load(json, options)
16
+ else
17
+ MultiJson.decode(json, options)
18
+ end
13
19
  if ActiveSupport.parse_json_times
14
20
  convert_dates_from(data)
15
21
  else
@@ -18,12 +24,20 @@ module ActiveSupport
18
24
  end
19
25
 
20
26
  def engine
21
- MultiJson.engine
27
+ if MultiJson.respond_to?(:adapter)
28
+ MultiJson.adapter
29
+ else
30
+ MultiJson.engine
31
+ end
22
32
  end
23
33
  alias :backend :engine
24
34
 
25
35
  def engine=(name)
26
- MultiJson.engine = name
36
+ if MultiJson.respond_to?(:use)
37
+ MultiJson.use name
38
+ else
39
+ MultiJson.engine = name
40
+ end
27
41
  end
28
42
  alias :backend= :engine=
29
43
 
@@ -36,7 +36,7 @@ module ActiveSupport
36
36
  RubyProf.pause
37
37
  full_profile_options[:runs].to_i.times { run_test(@metric, :profile) }
38
38
  @data = RubyProf.stop
39
- @total = @data.threads.values.sum(0) { |method_infos| method_infos.max.total_time }
39
+ @total = @data.threads.sum(0) { |thread| thread.methods.max.total_time }
40
40
  end
41
41
 
42
42
  def record
@@ -28,7 +28,7 @@ module ActiveSupport
28
28
  MAPPING = {
29
29
  "International Date Line West" => "Pacific/Midway",
30
30
  "Midway Island" => "Pacific/Midway",
31
- "Samoa" => "Pacific/Pago_Pago",
31
+ "American Samoa" => "Pacific/Pago_Pago",
32
32
  "Hawaii" => "Pacific/Honolulu",
33
33
  "Alaska" => "America/Juneau",
34
34
  "Pacific Time (US & Canada)" => "America/Los_Angeles",
@@ -167,7 +167,9 @@ module ActiveSupport
167
167
  "Marshall Is." => "Pacific/Majuro",
168
168
  "Auckland" => "Pacific/Auckland",
169
169
  "Wellington" => "Pacific/Auckland",
170
- "Nuku'alofa" => "Pacific/Tongatapu"
170
+ "Nuku'alofa" => "Pacific/Tongatapu",
171
+ "Tokelau Is." => "Pacific/Fakaofo",
172
+ "Samoa" => "Pacific/Apia"
171
173
  }.each { |name, zone| name.freeze; zone.freeze }
172
174
  MAPPING.freeze
173
175
 
@@ -2,8 +2,8 @@ module ActiveSupport
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 3
4
4
  MINOR = 2
5
- TINY = 3
6
- PRE = nil
5
+ TINY = 4
6
+ PRE = "rc1"
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
9
9
  end
metadata CHANGED
@@ -1,13 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activesupport
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
5
- prerelease: false
4
+ hash: -2577822930
5
+ prerelease: 6
6
6
  segments:
7
7
  - 3
8
8
  - 2
9
- - 3
10
- version: 3.2.3
9
+ - 4
10
+ - rc
11
+ - 1
12
+ version: 3.2.4.rc1
11
13
  platform: ruby
12
14
  authors:
13
15
  - David Heinemeier Hansson
@@ -15,11 +17,12 @@ autorequire:
15
17
  bindir: bin
16
18
  cert_chain: []
17
19
 
18
- date: 2012-03-30 00:00:00 -03:00
19
- default_executable:
20
+ date: 2012-05-28 00:00:00 Z
20
21
  dependencies:
21
22
  - !ruby/object:Gem::Dependency
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
23
+ name: i18n
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
23
26
  none: false
24
27
  requirements:
25
28
  - - ~>
@@ -29,12 +32,12 @@ dependencies:
29
32
  - 0
30
33
  - 6
31
34
  version: "0.6"
32
- requirement: *id001
33
35
  type: :runtime
34
- name: i18n
35
- prerelease: false
36
+ version_requirements: *id001
36
37
  - !ruby/object:Gem::Dependency
37
- version_requirements: &id002 !ruby/object:Gem::Requirement
38
+ name: multi_json
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
38
41
  none: false
39
42
  requirements:
40
43
  - - ~>
@@ -44,10 +47,8 @@ dependencies:
44
47
  - 1
45
48
  - 0
46
49
  version: "1.0"
47
- requirement: *id002
48
50
  type: :runtime
49
- name: multi_json
50
- prerelease: false
51
+ version_requirements: *id002
51
52
  description: A toolkit of support libraries and Ruby core extensions extracted from the Rails framework. Rich support for multibyte strings, internationalization, time zones, and testing.
52
53
  email: david@loudthinking.com
53
54
  executables: []
@@ -270,7 +271,6 @@ files:
270
271
  - lib/active_support/xml_mini/rexml.rb
271
272
  - lib/active_support/xml_mini.rb
272
273
  - lib/active_support.rb
273
- has_rdoc: true
274
274
  homepage: http://www.rubyonrails.org
275
275
  licenses: []
276
276
 
@@ -294,16 +294,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
294
294
  required_rubygems_version: !ruby/object:Gem::Requirement
295
295
  none: false
296
296
  requirements:
297
- - - ">="
297
+ - - ">"
298
298
  - !ruby/object:Gem::Version
299
- hash: 3
299
+ hash: 25
300
300
  segments:
301
- - 0
302
- version: "0"
301
+ - 1
302
+ - 3
303
+ - 1
304
+ version: 1.3.1
303
305
  requirements: []
304
306
 
305
307
  rubyforge_project:
306
- rubygems_version: 1.3.7
308
+ rubygems_version: 1.8.22
307
309
  signing_key:
308
310
  specification_version: 3
309
311
  summary: A toolkit of support libraries and Ruby core extensions extracted from the Rails framework.