opal-activesupport 0.0.4 → 0.0.5

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: 05503ae39c125be204b6e7a30921e5670b75df73
4
- data.tar.gz: 878e851f134727580575071d0a687fbdec13fe7f
3
+ metadata.gz: 1ada2f6b09639af729c6954a460c6863dc05ddba
4
+ data.tar.gz: b89c1416881f3758ad8abde63d0ad8f806348522
5
5
  SHA512:
6
- metadata.gz: eac98e9d6353d62a92f0c4e7f05afc7170fffda43f5143ecdece7d2ba3eaa7dcc0ca0b1d81ec5f80976c4434501bce969046b098408fc7e90b508a206a2c3f51
7
- data.tar.gz: 3e232e993bf00cc56a3f0154a7a604eb0886cd86cdc88b40dc65155c59892f48239773a1a9b2a8723440ece606ba7f3ae278d034a5f3dfe96d1602ce8a5ebd91
6
+ metadata.gz: 203f596c22653e4761384135f68ae4ffb918cbc068986cde6007666ed17f2942bcbba8622e474b11d75614947a73845802f28e6592ae43496bcd8c5833ed2901
7
+ data.tar.gz: 09b672496f995d6a756654425de73b64366b37b9fc50297e3e853402a01785dd537f62fcd3da206384cd4e0c4b7239d02df7b2e8c0f26301a81aeff60feb51f9
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
+
5
+ gem 'opal', '~> 0.5.0'
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'bundler'
2
2
  Bundler.require
3
3
 
4
- require 'opal/spec/rake_task'
5
- Opal::Spec::RakeTask.new(:default)
4
+ require 'opal/rspec/rake_task'
5
+ Opal::RSpec::RakeTask.new(:default)
6
6
 
7
7
  require 'bundler/gem_tasks'
@@ -1,5 +1,5 @@
1
1
  module Opal
2
2
  module Activesupport
3
- VERSION = '0.0.4'
3
+ VERSION = '0.0.5'
4
4
  end
5
5
  end
@@ -20,6 +20,7 @@ Gem::Specification.new do |gem|
20
20
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
21
21
  gem.require_paths = ['lib']
22
22
 
23
- gem.add_dependency 'opal', '~> 0.4.2'
24
- gem.add_development_dependency 'opal-spec', '~> 0.2.17'
23
+ gem.add_dependency 'opal'
24
+ gem.add_development_dependency 'rake'
25
+ gem.add_development_dependency 'opal-rspec'
25
26
  end
@@ -0,0 +1,3 @@
1
+ # require 'active_support/core_ext/integer/multiple'
2
+ # require 'active_support/core_ext/integer/inflections'
3
+ require 'active_support/core_ext/integer/time'
@@ -0,0 +1,47 @@
1
+ # require 'active_support/duration'
2
+ require 'active_support/core_ext/numeric/time'
3
+
4
+ # class Integer
5
+ class Numeric
6
+ # Enables the use of time calculations and declarations, like <tt>45.minutes +
7
+ # 2.hours + 4.years</tt>.
8
+ #
9
+ # These methods use Time#advance for precise date calculations when using
10
+ # <tt>from_now</tt>, +ago+, etc. as well as adding or subtracting their
11
+ # results from a Time object.
12
+ #
13
+ # # equivalent to Time.now.advance(months: 1)
14
+ # 1.month.from_now
15
+ #
16
+ # # equivalent to Time.now.advance(years: 2)
17
+ # 2.years.from_now
18
+ #
19
+ # # equivalent to Time.now.advance(months: 4, years: 5)
20
+ # (4.months + 5.years).from_now
21
+ #
22
+ # While these methods provide precise calculation when used as in the examples
23
+ # above, care should be taken to note that this is not true if the result of
24
+ # +months+, +years+, etc is converted before use:
25
+ #
26
+ # # equivalent to 30.days.to_i.from_now
27
+ # 1.month.to_i.from_now
28
+ #
29
+ # # equivalent to 365.25.days.to_f.from_now
30
+ # 1.year.to_f.from_now
31
+ #
32
+ # In such cases, Ruby's core
33
+ # Date[http://ruby-doc.org/stdlib/libdoc/date/rdoc/Date.html] and
34
+ # Time[http://ruby-doc.org/stdlib/libdoc/time/rdoc/Time.html] should be used for precision
35
+ # date and time arithmetic.
36
+ def months
37
+ # ActiveSupport::Duration.new(self * 30.days, [[:months, self]])
38
+ self * 30.days
39
+ end
40
+ alias :month :months
41
+
42
+ def years
43
+ # ActiveSupport::Duration.new(self * 365.25.days, [[:years, self]])
44
+ self * 365.25.days
45
+ end
46
+ alias :year :years
47
+ end
@@ -0,0 +1,2 @@
1
+ require 'active_support/core_ext/numeric/time'
2
+ require 'active_support/core_ext/numeric/calculations'
@@ -0,0 +1,3 @@
1
+ class << Time
2
+ alias :current :now
3
+ end
@@ -0,0 +1,85 @@
1
+ # require 'active_support/duration'
2
+ # require 'active_support/core_ext/time/calculations'
3
+ # require 'active_support/core_ext/time/acts_like'
4
+
5
+ class Numeric
6
+ # Enables the use of time calculations and declarations, like 45.minutes + 2.hours + 4.years.
7
+ #
8
+ # These methods use Time#advance for precise date calculations when using from_now, ago, etc.
9
+ # as well as adding or subtracting their results from a Time object. For example:
10
+ #
11
+ # # equivalent to Time.current.advance(months: 1)
12
+ # 1.month.from_now
13
+ #
14
+ # # equivalent to Time.current.advance(years: 2)
15
+ # 2.years.from_now
16
+ #
17
+ # # equivalent to Time.current.advance(months: 4, years: 5)
18
+ # (4.months + 5.years).from_now
19
+ #
20
+ # While these methods provide precise calculation when used as in the examples above, care
21
+ # should be taken to note that this is not true if the result of `months', `years', etc is
22
+ # converted before use:
23
+ #
24
+ # # equivalent to 30.days.to_i.from_now
25
+ # 1.month.to_i.from_now
26
+ #
27
+ # # equivalent to 365.25.days.to_f.from_now
28
+ # 1.year.to_f.from_now
29
+ #
30
+ # In such cases, Ruby's core
31
+ # Date[http://ruby-doc.org/stdlib/libdoc/date/rdoc/Date.html] and
32
+ # Time[http://ruby-doc.org/stdlib/libdoc/time/rdoc/Time.html] should be used for precision
33
+ # date and time arithmetic.
34
+ def seconds
35
+ # ActiveSupport::Duration.new(self, [[:seconds, self]])
36
+ self
37
+ end
38
+ alias :second :seconds
39
+
40
+ def minutes
41
+ # ActiveSupport::Duration.new(self * 60, [[:seconds, self * 60]])
42
+ self * 60
43
+ end
44
+ alias :minute :minutes
45
+
46
+ def hours
47
+ # ActiveSupport::Duration.new(self * 3600, [[:seconds, self * 3600]])
48
+ self * 3600
49
+ end
50
+ alias :hour :hours
51
+
52
+ def days
53
+ # ActiveSupport::Duration.new(self * 24.hours, [[:days, self]])
54
+ self * 24.hours
55
+ end
56
+ alias :day :days
57
+
58
+ def weeks
59
+ # ActiveSupport::Duration.new(self * 7.days, [[:days, self * 7]])
60
+ self * 7.days
61
+ end
62
+ alias :week :weeks
63
+
64
+ def fortnights
65
+ # ActiveSupport::Duration.new(self * 2.weeks, [[:days, self * 14]])
66
+ self * 2.weeks
67
+ end
68
+ alias :fortnight :fortnights
69
+
70
+ # Reads best without arguments: 10.minutes.ago
71
+ def ago(time = ::Time.current)
72
+ time - self
73
+ end
74
+
75
+ # Reads best with argument: 10.minutes.until(time)
76
+ alias :until :ago
77
+
78
+ # Reads best with argument: 10.minutes.since(time)
79
+ def since(time = ::Time.current)
80
+ time + self
81
+ end
82
+
83
+ # Reads best without arguments: 10.minutes.from_now
84
+ alias :from_now :since
85
+ end
@@ -26,6 +26,16 @@ class String
26
26
  `#{self}.replace(/[-\\s]+/g, '_')
27
27
  .replace(/([A-Z\\d]+)([A-Z][a-z])/g, '$1_$2')
28
28
  .replace(/([a-z\\d])([A-Z])/g, '$1_$2')
29
+ .replace(/-/g, '_')
29
30
  .toLowerCase()`
30
31
  end
32
+
33
+ def camelize(first_letter = :upper)
34
+ `#{underscore}.replace(/(^|_)([^_]+)/g, function(match, pre, word, index) {
35
+ var capitalize = #{first_letter} === #{:upper} || index > 0;
36
+ return capitalize ? word.substr(0,1).toUpperCase()+word.substr(1) : word;
37
+ })`
38
+ end
39
+ alias_method :camelcase, :camelize
40
+
31
41
  end
@@ -0,0 +1,4 @@
1
+ require 'date'
2
+ require 'time'
3
+ require 'active_support/core_ext/integer/time'
4
+ require 'active_support/core_ext/numeric/time'
@@ -1 +1 @@
1
- require 'opal/activesupport'
1
+ require 'active_support'
@@ -0,0 +1,512 @@
1
+ require 'spec_helper'
2
+ # require 'active_support/time'
3
+ require 'active_support/core_ext/numeric'
4
+ require 'active_support/core_ext/integer'
5
+
6
+ describe 'Numeric' do
7
+ before do
8
+ # @now = Time.local(2005,2,10,15,30,45)
9
+ @now = Time.mktime(2005,2,10,15,30,45)
10
+ # @dtnow = DateTime.civil(2005,2,10,15,30,45)
11
+ @seconds = {
12
+ 1.minute => 60,
13
+ 10.minutes => 600,
14
+ 1.hour + 15.minutes => 4500,
15
+ 2.days + 4.hours + 30.minutes => 189000,
16
+ 5.years + 1.month + 1.fortnight => 161589600
17
+ }
18
+ end
19
+
20
+ it 'has time units' do
21
+ @seconds.each do |actual, expected|
22
+ actual.should == expected
23
+ end
24
+ end
25
+
26
+ it 'has intervals' do
27
+ @seconds.values.each do |seconds|
28
+ assert_equal seconds.since(@now), @now + seconds
29
+ assert_equal seconds.until(@now), @now - seconds
30
+ end
31
+ end
32
+ end
33
+
34
+ # def test_intervals
35
+ # @seconds.values.each do |seconds|
36
+ # assert_equal seconds.since(@now), @now + seconds
37
+ # assert_equal seconds.until(@now), @now - seconds
38
+ # end
39
+ # end
40
+ #
41
+ # # Test intervals based from Time.now
42
+ # def test_now
43
+ # @seconds.values.each do |seconds|
44
+ # now = Time.now
45
+ # assert seconds.ago >= now - seconds
46
+ # now = Time.now
47
+ # assert seconds.from_now >= now + seconds
48
+ # end
49
+ # end
50
+ #
51
+ # def test_irregular_durations
52
+ # assert_equal @now.advance(:days => 3000), 3000.days.since(@now)
53
+ # assert_equal @now.advance(:months => 1), 1.month.since(@now)
54
+ # assert_equal @now.advance(:months => -1), 1.month.until(@now)
55
+ # assert_equal @now.advance(:years => 20), 20.years.since(@now)
56
+ # assert_equal @dtnow.advance(:days => 3000), 3000.days.since(@dtnow)
57
+ # assert_equal @dtnow.advance(:months => 1), 1.month.since(@dtnow)
58
+ # assert_equal @dtnow.advance(:months => -1), 1.month.until(@dtnow)
59
+ # assert_equal @dtnow.advance(:years => 20), 20.years.since(@dtnow)
60
+ # end
61
+ #
62
+ # def test_duration_addition
63
+ # assert_equal @now.advance(:days => 1).advance(:months => 1), (1.day + 1.month).since(@now)
64
+ # assert_equal @now.advance(:days => 7), (1.week + 5.seconds - 5.seconds).since(@now)
65
+ # assert_equal @now.advance(:years => 2), (4.years - 2.years).since(@now)
66
+ # assert_equal @dtnow.advance(:days => 1).advance(:months => 1), (1.day + 1.month).since(@dtnow)
67
+ # assert_equal @dtnow.advance(:days => 7), (1.week + 5.seconds - 5.seconds).since(@dtnow)
68
+ # assert_equal @dtnow.advance(:years => 2), (4.years - 2.years).since(@dtnow)
69
+ # end
70
+ #
71
+ # def test_time_plus_duration
72
+ # assert_equal @now + 8, @now + 8.seconds
73
+ # assert_equal @now + 22.9, @now + 22.9.seconds
74
+ # assert_equal @now.advance(:days => 15), @now + 15.days
75
+ # assert_equal @now.advance(:months => 1), @now + 1.month
76
+ # assert_equal @dtnow.since(8), @dtnow + 8.seconds
77
+ # assert_equal @dtnow.since(22.9), @dtnow + 22.9.seconds
78
+ # assert_equal @dtnow.advance(:days => 15), @dtnow + 15.days
79
+ # assert_equal @dtnow.advance(:months => 1), @dtnow + 1.month
80
+ # end
81
+ #
82
+ # def test_chaining_duration_operations
83
+ # assert_equal @now.advance(:days => 2).advance(:months => -3), @now + 2.days - 3.months
84
+ # assert_equal @now.advance(:days => 1).advance(:months => 2), @now + 1.day + 2.months
85
+ # assert_equal @dtnow.advance(:days => 2).advance(:months => -3), @dtnow + 2.days - 3.months
86
+ # assert_equal @dtnow.advance(:days => 1).advance(:months => 2), @dtnow + 1.day + 2.months
87
+ # end
88
+ #
89
+ # def test_duration_after_convertion_is_no_longer_accurate
90
+ # assert_equal 30.days.to_i.since(@now), 1.month.to_i.since(@now)
91
+ # assert_equal 365.25.days.to_f.since(@now), 1.year.to_f.since(@now)
92
+ # assert_equal 30.days.to_i.since(@dtnow), 1.month.to_i.since(@dtnow)
93
+ # assert_equal 365.25.days.to_f.since(@dtnow), 1.year.to_f.since(@dtnow)
94
+ # end
95
+ #
96
+ # def test_add_one_year_to_leap_day
97
+ # assert_equal Time.utc(2005,2,28,15,15,10), Time.utc(2004,2,29,15,15,10) + 1.year
98
+ # assert_equal DateTime.civil(2005,2,28,15,15,10), DateTime.civil(2004,2,29,15,15,10) + 1.year
99
+ # end
100
+ #
101
+ # def test_since_and_ago_anchored_to_time_now_when_time_zone_is_not_set
102
+ # Time.zone = nil
103
+ # with_env_tz 'US/Eastern' do
104
+ # Time.stubs(:now).returns Time.local(2000)
105
+ # # since
106
+ # assert_equal false, 5.since.is_a?(ActiveSupport::TimeWithZone)
107
+ # assert_equal Time.local(2000,1,1,0,0,5), 5.since
108
+ # # ago
109
+ # assert_equal false, 5.ago.is_a?(ActiveSupport::TimeWithZone)
110
+ # assert_equal Time.local(1999,12,31,23,59,55), 5.ago
111
+ # end
112
+ # end
113
+ #
114
+ # def test_since_and_ago_anchored_to_time_zone_now_when_time_zone_is_set
115
+ # Time.zone = ActiveSupport::TimeZone['Eastern Time (US & Canada)']
116
+ # with_env_tz 'US/Eastern' do
117
+ # Time.stubs(:now).returns Time.local(2000)
118
+ # # since
119
+ # assert_equal true, 5.since.is_a?(ActiveSupport::TimeWithZone)
120
+ # assert_equal Time.utc(2000,1,1,0,0,5), 5.since.time
121
+ # assert_equal 'Eastern Time (US & Canada)', 5.since.time_zone.name
122
+ # # ago
123
+ # assert_equal true, 5.ago.is_a?(ActiveSupport::TimeWithZone)
124
+ # assert_equal Time.utc(1999,12,31,23,59,55), 5.ago.time
125
+ # assert_equal 'Eastern Time (US & Canada)', 5.ago.time_zone.name
126
+ # end
127
+ # ensure
128
+ # Time.zone = nil
129
+ # end
130
+ #
131
+ # protected
132
+ # def with_env_tz(new_tz = 'US/Eastern')
133
+ # old_tz, ENV['TZ'] = ENV['TZ'], new_tz
134
+ # yield
135
+ # ensure
136
+ # old_tz ? ENV['TZ'] = old_tz : ENV.delete('TZ')
137
+ # end
138
+ # end
139
+ #
140
+ # class NumericExtDateTest < ActiveSupport::TestCase
141
+ # def setup
142
+ # @today = Date.today
143
+ # end
144
+ #
145
+ # def test_date_plus_duration
146
+ # assert_equal @today + 1, @today + 1.day
147
+ # assert_equal @today >> 1, @today + 1.month
148
+ # assert_equal @today.to_time.since(1), @today + 1.second
149
+ # assert_equal @today.to_time.since(60), @today + 1.minute
150
+ # assert_equal @today.to_time.since(60*60), @today + 1.hour
151
+ # end
152
+ #
153
+ # def test_chaining_duration_operations
154
+ # assert_equal @today.advance(:days => 2).advance(:months => -3), @today + 2.days - 3.months
155
+ # assert_equal @today.advance(:days => 1).advance(:months => 2), @today + 1.day + 2.months
156
+ # end
157
+ #
158
+ # def test_add_one_year_to_leap_day
159
+ # assert_equal Date.new(2005,2,28), Date.new(2004,2,29) + 1.year
160
+ # end
161
+ # end
162
+ #
163
+ # class NumericExtSizeTest < ActiveSupport::TestCase
164
+ # def test_unit_in_terms_of_another
165
+ # relationships = {
166
+ # 1024.bytes => 1.kilobyte,
167
+ # 1024.kilobytes => 1.megabyte,
168
+ # 3584.0.kilobytes => 3.5.megabytes,
169
+ # 3584.0.megabytes => 3.5.gigabytes,
170
+ # 1.kilobyte ** 4 => 1.terabyte,
171
+ # 1024.kilobytes + 2.megabytes => 3.megabytes,
172
+ # 2.gigabytes / 4 => 512.megabytes,
173
+ # 256.megabytes * 20 + 5.gigabytes => 10.gigabytes,
174
+ # 1.kilobyte ** 5 => 1.petabyte,
175
+ # 1.kilobyte ** 6 => 1.exabyte
176
+ # }
177
+ #
178
+ # relationships.each do |left, right|
179
+ # assert_equal right, left
180
+ # end
181
+ # end
182
+ #
183
+ # def test_units_as_bytes_independently
184
+ # assert_equal 3145728, 3.megabytes
185
+ # assert_equal 3145728, 3.megabyte
186
+ # assert_equal 3072, 3.kilobytes
187
+ # assert_equal 3072, 3.kilobyte
188
+ # assert_equal 3221225472, 3.gigabytes
189
+ # assert_equal 3221225472, 3.gigabyte
190
+ # assert_equal 3298534883328, 3.terabytes
191
+ # assert_equal 3298534883328, 3.terabyte
192
+ # assert_equal 3377699720527872, 3.petabytes
193
+ # assert_equal 3377699720527872, 3.petabyte
194
+ # assert_equal 3458764513820540928, 3.exabytes
195
+ # assert_equal 3458764513820540928, 3.exabyte
196
+ # end
197
+ # end
198
+ #
199
+ # class NumericExtFormattingTest < ActiveSupport::TestCase
200
+ # def kilobytes(number)
201
+ # number * 1024
202
+ # end
203
+ #
204
+ # def megabytes(number)
205
+ # kilobytes(number) * 1024
206
+ # end
207
+ #
208
+ # def gigabytes(number)
209
+ # megabytes(number) * 1024
210
+ # end
211
+ #
212
+ # def terabytes(number)
213
+ # gigabytes(number) * 1024
214
+ # end
215
+ #
216
+ # def test_to_s__phone
217
+ # assert_equal("555-1234", 5551234.to_s(:phone))
218
+ # assert_equal("800-555-1212", 8005551212.to_s(:phone))
219
+ # assert_equal("(800) 555-1212", 8005551212.to_s(:phone, :area_code => true))
220
+ # assert_equal("800 555 1212", 8005551212.to_s(:phone, :delimiter => " "))
221
+ # assert_equal("(800) 555-1212 x 123", 8005551212.to_s(:phone, :area_code => true, :extension => 123))
222
+ # assert_equal("800-555-1212", 8005551212.to_s(:phone, :extension => " "))
223
+ # assert_equal("555.1212", 5551212.to_s(:phone, :delimiter => '.'))
224
+ # assert_equal("+1-800-555-1212", 8005551212.to_s(:phone, :country_code => 1))
225
+ # assert_equal("+18005551212", 8005551212.to_s(:phone, :country_code => 1, :delimiter => ''))
226
+ # assert_equal("22-555-1212", 225551212.to_s(:phone))
227
+ # assert_equal("+45-22-555-1212", 225551212.to_s(:phone, :country_code => 45))
228
+ # end
229
+ #
230
+ # def test_to_s__currency
231
+ # assert_equal("$1,234,567,890.50", 1234567890.50.to_s(:currency))
232
+ # assert_equal("$1,234,567,890.51", 1234567890.506.to_s(:currency))
233
+ # assert_equal("-$1,234,567,890.50", -1234567890.50.to_s(:currency))
234
+ # assert_equal("-$ 1,234,567,890.50", -1234567890.50.to_s(:currency, :format => "%u %n"))
235
+ # assert_equal("($1,234,567,890.50)", -1234567890.50.to_s(:currency, :negative_format => "(%u%n)"))
236
+ # assert_equal("$1,234,567,892", 1234567891.50.to_s(:currency, :precision => 0))
237
+ # assert_equal("$1,234,567,890.5", 1234567890.50.to_s(:currency, :precision => 1))
238
+ # assert_equal("&pound;1234567890,50", 1234567890.50.to_s(:currency, :unit => "&pound;", :separator => ",", :delimiter => ""))
239
+ # end
240
+ #
241
+ #
242
+ # def test_to_s__rounded
243
+ # assert_equal("-111.235", -111.2346.to_s(:rounded))
244
+ # assert_equal("111.235", 111.2346.to_s(:rounded))
245
+ # assert_equal("31.83", 31.825.to_s(:rounded, :precision => 2))
246
+ # assert_equal("111.23", 111.2346.to_s(:rounded, :precision => 2))
247
+ # assert_equal("111.00", 111.to_s(:rounded, :precision => 2))
248
+ # assert_equal("3268", (32.6751 * 100.00).to_s(:rounded, :precision => 0))
249
+ # assert_equal("112", 111.50.to_s(:rounded, :precision => 0))
250
+ # assert_equal("1234567892", 1234567891.50.to_s(:rounded, :precision => 0))
251
+ # assert_equal("0", 0.to_s(:rounded, :precision => 0))
252
+ # assert_equal("0.00100", 0.001.to_s(:rounded, :precision => 5))
253
+ # assert_equal("0.001", 0.00111.to_s(:rounded, :precision => 3))
254
+ # assert_equal("10.00", 9.995.to_s(:rounded, :precision => 2))
255
+ # assert_equal("11.00", 10.995.to_s(:rounded, :precision => 2))
256
+ # assert_equal("0.00", -0.001.to_s(:rounded, :precision => 2))
257
+ # end
258
+ #
259
+ # def test_to_s__percentage
260
+ # assert_equal("100.000%", 100.to_s(:percentage))
261
+ # assert_equal("100%", 100.to_s(:percentage, :precision => 0))
262
+ # assert_equal("302.06%", 302.0574.to_s(:percentage, :precision => 2))
263
+ # assert_equal("123.4%", 123.400.to_s(:percentage, :precision => 3, :strip_insignificant_zeros => true))
264
+ # assert_equal("1.000,000%", 1000.to_s(:percentage, :delimiter => '.', :separator => ','))
265
+ # assert_equal("1000.000 %", 1000.to_s(:percentage, :format => "%n %"))
266
+ # end
267
+ #
268
+ # def test_to_s__delimited
269
+ # assert_equal("12,345,678", 12345678.to_s(:delimited))
270
+ # assert_equal("0", 0.to_s(:delimited))
271
+ # assert_equal("123", 123.to_s(:delimited))
272
+ # assert_equal("123,456", 123456.to_s(:delimited))
273
+ # assert_equal("123,456.78", 123456.78.to_s(:delimited))
274
+ # assert_equal("123,456.789", 123456.789.to_s(:delimited))
275
+ # assert_equal("123,456.78901", 123456.78901.to_s(:delimited))
276
+ # assert_equal("123,456,789.78901", 123456789.78901.to_s(:delimited))
277
+ # assert_equal("0.78901", 0.78901.to_s(:delimited))
278
+ # end
279
+ #
280
+ # def test_to_s__delimited__with_options_hash
281
+ # assert_equal '12 345 678', 12345678.to_s(:delimited, :delimiter => ' ')
282
+ # assert_equal '12,345,678-05', 12345678.05.to_s(:delimited, :separator => '-')
283
+ # assert_equal '12.345.678,05', 12345678.05.to_s(:delimited, :separator => ',', :delimiter => '.')
284
+ # assert_equal '12.345.678,05', 12345678.05.to_s(:delimited, :delimiter => '.', :separator => ',')
285
+ # end
286
+ #
287
+ #
288
+ # def test_to_s__rounded_with_custom_delimiter_and_separator
289
+ # assert_equal '31,83', 31.825.to_s(:rounded, :precision => 2, :separator => ',')
290
+ # assert_equal '1.231,83', 1231.825.to_s(:rounded, :precision => 2, :separator => ',', :delimiter => '.')
291
+ # end
292
+ #
293
+ # def test_to_s__rounded__with_significant_digits
294
+ # assert_equal "124000", 123987.to_s(:rounded, :precision => 3, :significant => true)
295
+ # assert_equal "120000000", 123987876.to_s(:rounded, :precision => 2, :significant => true )
296
+ # assert_equal "9775", 9775.to_s(:rounded, :precision => 4, :significant => true )
297
+ # assert_equal "5.4", 5.3923.to_s(:rounded, :precision => 2, :significant => true )
298
+ # assert_equal "5", 5.3923.to_s(:rounded, :precision => 1, :significant => true )
299
+ # assert_equal "1", 1.232.to_s(:rounded, :precision => 1, :significant => true )
300
+ # assert_equal "7", 7.to_s(:rounded, :precision => 1, :significant => true )
301
+ # assert_equal "1", 1.to_s(:rounded, :precision => 1, :significant => true )
302
+ # assert_equal "53", 52.7923.to_s(:rounded, :precision => 2, :significant => true )
303
+ # assert_equal "9775.00", 9775.to_s(:rounded, :precision => 6, :significant => true )
304
+ # assert_equal "5.392900", 5.3929.to_s(:rounded, :precision => 7, :significant => true )
305
+ # assert_equal "0.0", 0.to_s(:rounded, :precision => 2, :significant => true )
306
+ # assert_equal "0", 0.to_s(:rounded, :precision => 1, :significant => true )
307
+ # assert_equal "0.0001", 0.0001.to_s(:rounded, :precision => 1, :significant => true )
308
+ # assert_equal "0.000100", 0.0001.to_s(:rounded, :precision => 3, :significant => true )
309
+ # assert_equal "0.0001", 0.0001111.to_s(:rounded, :precision => 1, :significant => true )
310
+ # assert_equal "10.0", 9.995.to_s(:rounded, :precision => 3, :significant => true)
311
+ # assert_equal "9.99", 9.994.to_s(:rounded, :precision => 3, :significant => true)
312
+ # assert_equal "11.0", 10.995.to_s(:rounded, :precision => 3, :significant => true)
313
+ # end
314
+ #
315
+ # def test_to_s__rounded__with_strip_insignificant_zeros
316
+ # assert_equal "9775.43", 9775.43.to_s(:rounded, :precision => 4, :strip_insignificant_zeros => true )
317
+ # assert_equal "9775.2", 9775.2.to_s(:rounded, :precision => 6, :significant => true, :strip_insignificant_zeros => true )
318
+ # assert_equal "0", 0.to_s(:rounded, :precision => 6, :significant => true, :strip_insignificant_zeros => true )
319
+ # end
320
+ #
321
+ # def test_to_s__rounded__with_significant_true_and_zero_precision
322
+ # # Zero precision with significant is a mistake (would always return zero),
323
+ # # so we treat it as if significant was false (increases backwards compatibility for number_to_human_size)
324
+ # assert_equal "124", 123.987.to_s(:rounded, :precision => 0, :significant => true)
325
+ # assert_equal "12", 12.to_s(:rounded, :precision => 0, :significant => true )
326
+ # end
327
+ #
328
+ # def test_to_s__human_size
329
+ # assert_equal '0 Bytes', 0.to_s(:human_size)
330
+ # assert_equal '1 Byte', 1.to_s(:human_size)
331
+ # assert_equal '3 Bytes', 3.14159265.to_s(:human_size)
332
+ # assert_equal '123 Bytes', 123.0.to_s(:human_size)
333
+ # assert_equal '123 Bytes', 123.to_s(:human_size)
334
+ # assert_equal '1.21 KB', 1234.to_s(:human_size)
335
+ # assert_equal '12.1 KB', 12345.to_s(:human_size)
336
+ # assert_equal '1.18 MB', 1234567.to_s(:human_size)
337
+ # assert_equal '1.15 GB', 1234567890.to_s(:human_size)
338
+ # assert_equal '1.12 TB', 1234567890123.to_s(:human_size)
339
+ # assert_equal '1030 TB', terabytes(1026).to_s(:human_size)
340
+ # assert_equal '444 KB', kilobytes(444).to_s(:human_size)
341
+ # assert_equal '1020 MB', megabytes(1023).to_s(:human_size)
342
+ # assert_equal '3 TB', terabytes(3).to_s(:human_size)
343
+ # assert_equal '1.2 MB', 1234567.to_s(:human_size, :precision => 2)
344
+ # assert_equal '3 Bytes', 3.14159265.to_s(:human_size, :precision => 4)
345
+ # assert_equal '1 KB', kilobytes(1.0123).to_s(:human_size, :precision => 2)
346
+ # assert_equal '1.01 KB', kilobytes(1.0100).to_s(:human_size, :precision => 4)
347
+ # assert_equal '10 KB', kilobytes(10.000).to_s(:human_size, :precision => 4)
348
+ # assert_equal '1 Byte', 1.1.to_s(:human_size)
349
+ # assert_equal '10 Bytes', 10.to_s(:human_size)
350
+ # end
351
+ #
352
+ # def test_to_s__human_size_with_si_prefix
353
+ # assert_equal '3 Bytes', 3.14159265.to_s(:human_size, :prefix => :si)
354
+ # assert_equal '123 Bytes', 123.0.to_s(:human_size, :prefix => :si)
355
+ # assert_equal '123 Bytes', 123.to_s(:human_size, :prefix => :si)
356
+ # assert_equal '1.23 KB', 1234.to_s(:human_size, :prefix => :si)
357
+ # assert_equal '12.3 KB', 12345.to_s(:human_size, :prefix => :si)
358
+ # assert_equal '1.23 MB', 1234567.to_s(:human_size, :prefix => :si)
359
+ # assert_equal '1.23 GB', 1234567890.to_s(:human_size, :prefix => :si)
360
+ # assert_equal '1.23 TB', 1234567890123.to_s(:human_size, :prefix => :si)
361
+ # end
362
+ #
363
+ # def test_to_s__human_size_with_options_hash
364
+ # assert_equal '1.2 MB', 1234567.to_s(:human_size, :precision => 2)
365
+ # assert_equal '3 Bytes', 3.14159265.to_s(:human_size, :precision => 4)
366
+ # assert_equal '1 KB', kilobytes(1.0123).to_s(:human_size, :precision => 2)
367
+ # assert_equal '1.01 KB', kilobytes(1.0100).to_s(:human_size, :precision => 4)
368
+ # assert_equal '10 KB', kilobytes(10.000).to_s(:human_size, :precision => 4)
369
+ # assert_equal '1 TB', 1234567890123.to_s(:human_size, :precision => 1)
370
+ # assert_equal '500 MB', 524288000.to_s(:human_size, :precision=>3)
371
+ # assert_equal '10 MB', 9961472.to_s(:human_size, :precision=>0)
372
+ # assert_equal '40 KB', 41010.to_s(:human_size, :precision => 1)
373
+ # assert_equal '40 KB', 41100.to_s(:human_size, :precision => 2)
374
+ # assert_equal '1.0 KB', kilobytes(1.0123).to_s(:human_size, :precision => 2, :strip_insignificant_zeros => false)
375
+ # assert_equal '1.012 KB', kilobytes(1.0123).to_s(:human_size, :precision => 3, :significant => false)
376
+ # assert_equal '1 KB', kilobytes(1.0123).to_s(:human_size, :precision => 0, :significant => true) #ignores significant it precision is 0
377
+ # end
378
+ #
379
+ # def test_to_s__human_size_with_custom_delimiter_and_separator
380
+ # assert_equal '1,01 KB', kilobytes(1.0123).to_s(:human_size, :precision => 3, :separator => ',')
381
+ # assert_equal '1,01 KB', kilobytes(1.0100).to_s(:human_size, :precision => 4, :separator => ',')
382
+ # assert_equal '1.000,1 TB', terabytes(1000.1).to_s(:human_size, :precision => 5, :delimiter => '.', :separator => ',')
383
+ # end
384
+ #
385
+ # def test_number_to_human
386
+ # assert_equal '-123', -123.to_s(:human)
387
+ # assert_equal '-0.5', -0.5.to_s(:human)
388
+ # assert_equal '0', 0.to_s(:human)
389
+ # assert_equal '0.5', 0.5.to_s(:human)
390
+ # assert_equal '123', 123.to_s(:human)
391
+ # assert_equal '1.23 Thousand', 1234.to_s(:human)
392
+ # assert_equal '12.3 Thousand', 12345.to_s(:human)
393
+ # assert_equal '1.23 Million', 1234567.to_s(:human)
394
+ # assert_equal '1.23 Billion', 1234567890.to_s(:human)
395
+ # assert_equal '1.23 Trillion', 1234567890123.to_s(:human)
396
+ # assert_equal '1.23 Quadrillion', 1234567890123456.to_s(:human)
397
+ # assert_equal '1230 Quadrillion', 1234567890123456789.to_s(:human)
398
+ # assert_equal '490 Thousand', 489939.to_s(:human, :precision => 2)
399
+ # assert_equal '489.9 Thousand', 489939.to_s(:human, :precision => 4)
400
+ # assert_equal '489 Thousand', 489000.to_s(:human, :precision => 4)
401
+ # assert_equal '489.0 Thousand', 489000.to_s(:human, :precision => 4, :strip_insignificant_zeros => false)
402
+ # assert_equal '1.2346 Million', 1234567.to_s(:human, :precision => 4, :significant => false)
403
+ # assert_equal '1,2 Million', 1234567.to_s(:human, :precision => 1, :significant => false, :separator => ',')
404
+ # assert_equal '1 Million', 1234567.to_s(:human, :precision => 0, :significant => true, :separator => ',') #significant forced to false
405
+ # end
406
+ #
407
+ # def test_number_to_human_with_custom_units
408
+ # #Only integers
409
+ # volume = {:unit => "ml", :thousand => "lt", :million => "m3"}
410
+ # assert_equal '123 lt', 123456.to_s(:human, :units => volume)
411
+ # assert_equal '12 ml', 12.to_s(:human, :units => volume)
412
+ # assert_equal '1.23 m3', 1234567.to_s(:human, :units => volume)
413
+ #
414
+ # #Including fractionals
415
+ # distance = {:mili => "mm", :centi => "cm", :deci => "dm", :unit => "m", :ten => "dam", :hundred => "hm", :thousand => "km"}
416
+ # assert_equal '1.23 mm', 0.00123.to_s(:human, :units => distance)
417
+ # assert_equal '1.23 cm', 0.0123.to_s(:human, :units => distance)
418
+ # assert_equal '1.23 dm', 0.123.to_s(:human, :units => distance)
419
+ # assert_equal '1.23 m', 1.23.to_s(:human, :units => distance)
420
+ # assert_equal '1.23 dam', 12.3.to_s(:human, :units => distance)
421
+ # assert_equal '1.23 hm', 123.to_s(:human, :units => distance)
422
+ # assert_equal '1.23 km', 1230.to_s(:human, :units => distance)
423
+ # assert_equal '1.23 km', 1230.to_s(:human, :units => distance)
424
+ # assert_equal '1.23 km', 1230.to_s(:human, :units => distance)
425
+ # assert_equal '12.3 km', 12300.to_s(:human, :units => distance)
426
+ #
427
+ # #The quantifiers don't need to be a continuous sequence
428
+ # gangster = {:hundred => "hundred bucks", :million => "thousand quids"}
429
+ # assert_equal '1 hundred bucks', 100.to_s(:human, :units => gangster)
430
+ # assert_equal '25 hundred bucks', 2500.to_s(:human, :units => gangster)
431
+ # assert_equal '25 thousand quids', 25000000.to_s(:human, :units => gangster)
432
+ # assert_equal '12300 thousand quids', 12345000000.to_s(:human, :units => gangster)
433
+ #
434
+ # #Spaces are stripped from the resulting string
435
+ # assert_equal '4', 4.to_s(:human, :units => {:unit => "", :ten => 'tens '})
436
+ # assert_equal '4.5 tens', 45.to_s(:human, :units => {:unit => "", :ten => ' tens '})
437
+ # end
438
+ #
439
+ # def test_number_to_human_with_custom_format
440
+ # assert_equal '123 times Thousand', 123456.to_s(:human, :format => "%n times %u")
441
+ # volume = {:unit => "ml", :thousand => "lt", :million => "m3"}
442
+ # assert_equal '123.lt', 123456.to_s(:human, :units => volume, :format => "%n.%u")
443
+ # end
444
+ #
445
+ # def test_to_s__injected_on_proper_types
446
+ # assert_equal Fixnum, 1230.class
447
+ # assert_equal '1.23 Thousand', 1230.to_s(:human)
448
+ #
449
+ # assert_equal Float, Float(1230).class
450
+ # assert_equal '1.23 Thousand', Float(1230).to_s(:human)
451
+ #
452
+ # assert_equal Bignum, (100**10).class
453
+ # assert_equal '100000 Quadrillion', (100**10).to_s(:human)
454
+ #
455
+ # assert_equal BigDecimal, BigDecimal("1000010").class
456
+ # assert_equal '1 Million', BigDecimal("1000010").to_s(:human)
457
+ # end
458
+ # end
459
+ #
460
+ # class NumericExtBehaviorTest < ActiveSupport::TestCase
461
+ # def setup
462
+ # @inf = BigDecimal.new('Infinity')
463
+ # end
464
+ #
465
+ # def test_compare_infinity_with_date
466
+ # assert_equal(-1, -Float::INFINITY <=> Date.today)
467
+ # assert_equal(1, Float::INFINITY <=> Date.today)
468
+ # assert_equal(-1, -@inf <=> Date.today)
469
+ # assert_equal(1, @inf <=> Date.today)
470
+ # end
471
+ #
472
+ # def test_compare_infinty_with_infinty
473
+ # assert_equal(-1, -Float::INFINITY <=> Float::INFINITY)
474
+ # assert_equal(1, Float::INFINITY <=> -Float::INFINITY)
475
+ # assert_equal(0, Float::INFINITY <=> Float::INFINITY)
476
+ # assert_equal(0, -Float::INFINITY <=> -Float::INFINITY)
477
+ #
478
+ # assert_equal(-1, -Float::INFINITY <=> BigDecimal::INFINITY)
479
+ # assert_equal(1, Float::INFINITY <=> -BigDecimal::INFINITY)
480
+ # assert_equal(0, Float::INFINITY <=> BigDecimal::INFINITY)
481
+ # assert_equal(0, -Float::INFINITY <=> -BigDecimal::INFINITY)
482
+ #
483
+ # assert_equal(-1, -BigDecimal::INFINITY <=> Float::INFINITY)
484
+ # assert_equal(1, BigDecimal::INFINITY <=> -Float::INFINITY)
485
+ # assert_equal(0, BigDecimal::INFINITY <=> Float::INFINITY)
486
+ # assert_equal(0, -BigDecimal::INFINITY <=> -Float::INFINITY)
487
+ # end
488
+ #
489
+ # def test_compare_infinity_with_time
490
+ # assert_equal(-1, -Float::INFINITY <=> Time.now)
491
+ # assert_equal(1, Float::INFINITY <=> Time.now)
492
+ # assert_equal(-1, -@inf <=> Time.now)
493
+ # assert_equal(1, @inf <=> Time.now)
494
+ # end
495
+ #
496
+ # def test_compare_infinity_with_datetime
497
+ # assert_equal(-1, -Float::INFINITY <=> DateTime.now)
498
+ # assert_equal(1, Float::INFINITY <=> DateTime.now)
499
+ # assert_equal(-1, -@inf <=> DateTime.now)
500
+ # assert_equal(1, @inf <=> DateTime.now)
501
+ # end
502
+ #
503
+ # def test_compare_infinity_with_twz
504
+ # time_zone = ActiveSupport::TimeZone['Eastern Time (US & Canada)']
505
+ # twz = ActiveSupport::TimeWithZone.new(Time.now, time_zone)
506
+ #
507
+ # assert_equal(-1, -Float::INFINITY <=> twz)
508
+ # assert_equal(1, Float::INFINITY <=> twz)
509
+ # assert_equal(-1, -@inf <=> twz)
510
+ # assert_equal(1, @inf <=> twz)
511
+ # end
512
+ # end
@@ -2,7 +2,10 @@ require 'spec_helper'
2
2
  require 'active_support/core_ext/string'
3
3
  require 'inflector_test_cases'
4
4
 
5
+ module InflectorTestCases
5
6
  describe 'String' do
7
+ # include InflectorTestCases
8
+
6
9
  describe "#demodulize" do
7
10
  it "removes any preceding module name from the string" do
8
11
  "Foo::Bar".demodulize.should == "Bar"
@@ -52,4 +55,17 @@ describe 'String' do
52
55
  end
53
56
  end
54
57
  end
58
+
59
+ describe '#camelize' do
60
+ it 'camelizes' do
61
+ CamelToUnderscore.each do |camel, underscore|
62
+ underscore.camelize.should == camel
63
+ end
64
+ end
65
+
66
+ it 'accepts :lower to keep the first letter lowercase' do
67
+ 'Capital'.camelize(:lower).should == 'capital'
68
+ end
69
+ end
70
+ end
55
71
  end
@@ -1,13 +1,315 @@
1
- CamelToUnderscore = {
2
- "Product" => "product",
3
- "SpecialGuest" => "special_guest",
4
- "ApplicationController" => "application_controller",
5
- "Area51Controller" => "area51_controller"
6
- }
7
-
8
- UnderscoreToLowerCamel = {
9
- "product" => "product",
10
- "special_guest" => "specialGuest",
11
- "application_controller" => "applicationController",
12
- "area51_controller" => "area51Controller"
13
- }
1
+ # encoding: utf-8
2
+
3
+ module InflectorTestCases
4
+ SingularToPlural = {
5
+ "search" => "searches",
6
+ "switch" => "switches",
7
+ "fix" => "fixes",
8
+ "box" => "boxes",
9
+ "process" => "processes",
10
+ "address" => "addresses",
11
+ "case" => "cases",
12
+ "stack" => "stacks",
13
+ "wish" => "wishes",
14
+ "fish" => "fish",
15
+ "jeans" => "jeans",
16
+ "funky jeans" => "funky jeans",
17
+ "my money" => "my money",
18
+
19
+ "category" => "categories",
20
+ "query" => "queries",
21
+ "ability" => "abilities",
22
+ "agency" => "agencies",
23
+ "movie" => "movies",
24
+
25
+ "archive" => "archives",
26
+
27
+ "index" => "indices",
28
+
29
+ "wife" => "wives",
30
+ "safe" => "saves",
31
+ "half" => "halves",
32
+
33
+ "move" => "moves",
34
+
35
+ "salesperson" => "salespeople",
36
+ "person" => "people",
37
+
38
+ "spokesman" => "spokesmen",
39
+ "man" => "men",
40
+ "woman" => "women",
41
+
42
+ "basis" => "bases",
43
+ "diagnosis" => "diagnoses",
44
+ "diagnosis_a" => "diagnosis_as",
45
+
46
+ "datum" => "data",
47
+ "medium" => "media",
48
+ "stadium" => "stadia",
49
+ "analysis" => "analyses",
50
+ "my_analysis" => "my_analyses",
51
+
52
+ "node_child" => "node_children",
53
+ "child" => "children",
54
+
55
+ "experience" => "experiences",
56
+ "day" => "days",
57
+
58
+ "comment" => "comments",
59
+ "foobar" => "foobars",
60
+ "newsletter" => "newsletters",
61
+
62
+ "old_news" => "old_news",
63
+ "news" => "news",
64
+
65
+ "series" => "series",
66
+ "species" => "species",
67
+
68
+ "quiz" => "quizzes",
69
+
70
+ "perspective" => "perspectives",
71
+
72
+ "ox" => "oxen",
73
+ "photo" => "photos",
74
+ "buffalo" => "buffaloes",
75
+ "tomato" => "tomatoes",
76
+ "dwarf" => "dwarves",
77
+ "elf" => "elves",
78
+ "information" => "information",
79
+ "equipment" => "equipment",
80
+ "bus" => "buses",
81
+ "status" => "statuses",
82
+ "status_code" => "status_codes",
83
+ "mouse" => "mice",
84
+
85
+ "louse" => "lice",
86
+ "house" => "houses",
87
+ "octopus" => "octopi",
88
+ "virus" => "viri",
89
+ "alias" => "aliases",
90
+ "portfolio" => "portfolios",
91
+
92
+ "vertex" => "vertices",
93
+ "matrix" => "matrices",
94
+ "matrix_fu" => "matrix_fus",
95
+
96
+ "axis" => "axes",
97
+ "taxi" => "taxis", # prevents regression
98
+ "testis" => "testes",
99
+ "crisis" => "crises",
100
+
101
+ "rice" => "rice",
102
+ "shoe" => "shoes",
103
+
104
+ "horse" => "horses",
105
+ "prize" => "prizes",
106
+ "edge" => "edges",
107
+
108
+ "cow" => "kine",
109
+ "database" => "databases",
110
+
111
+ # regression tests against improper inflection regexes
112
+ "|ice" => "|ices",
113
+ "|ouse" => "|ouses",
114
+ "slice" => "slices",
115
+ "police" => "police"
116
+ }
117
+
118
+ CamelToUnderscore = {
119
+ "Product" => "product",
120
+ "SpecialGuest" => "special_guest",
121
+ "ApplicationController" => "application_controller",
122
+ "Area51Controller" => "area51_controller"
123
+ }
124
+
125
+ UnderscoreToLowerCamel = {
126
+ "product" => "product",
127
+ "special_guest" => "specialGuest",
128
+ "application_controller" => "applicationController",
129
+ "area51_controller" => "area51Controller"
130
+ }
131
+
132
+ SymbolToLowerCamel = {
133
+ :product => 'product',
134
+ :special_guest => 'specialGuest',
135
+ :application_controller => 'applicationController',
136
+ :area51_controller => 'area51Controller'
137
+ }
138
+
139
+ CamelToUnderscoreWithoutReverse = {
140
+ "HTMLTidy" => "html_tidy",
141
+ "HTMLTidyGenerator" => "html_tidy_generator",
142
+ "FreeBSD" => "free_bsd",
143
+ "HTML" => "html",
144
+ }
145
+
146
+ CamelWithModuleToUnderscoreWithSlash = {
147
+ "Admin::Product" => "admin/product",
148
+ "Users::Commission::Department" => "users/commission/department",
149
+ "UsersSection::CommissionDepartment" => "users_section/commission_department",
150
+ }
151
+
152
+ ClassNameToForeignKeyWithUnderscore = {
153
+ "Person" => "person_id",
154
+ "MyApplication::Billing::Account" => "account_id"
155
+ }
156
+
157
+ ClassNameToForeignKeyWithoutUnderscore = {
158
+ "Person" => "personid",
159
+ "MyApplication::Billing::Account" => "accountid"
160
+ }
161
+
162
+ ClassNameToTableName = {
163
+ "PrimarySpokesman" => "primary_spokesmen",
164
+ "NodeChild" => "node_children"
165
+ }
166
+
167
+ StringToParameterized = {
168
+ "Donald E. Knuth" => "donald-e-knuth",
169
+ "Random text with *(bad)* characters" => "random-text-with-bad-characters",
170
+ "Allow_Under_Scores" => "allow_under_scores",
171
+ "Trailing bad characters!@#" => "trailing-bad-characters",
172
+ "!@#Leading bad characters" => "leading-bad-characters",
173
+ "Squeeze separators" => "squeeze-separators",
174
+ "Test with + sign" => "test-with-sign",
175
+ "Test with malformed utf8 \251" => "test-with-malformed-utf8"
176
+ }
177
+
178
+ StringToParameterizeWithNoSeparator = {
179
+ "Donald E. Knuth" => "donaldeknuth",
180
+ "With-some-dashes" => "with-some-dashes",
181
+ "Random text with *(bad)* characters" => "randomtextwithbadcharacters",
182
+ "Trailing bad characters!@#" => "trailingbadcharacters",
183
+ "!@#Leading bad characters" => "leadingbadcharacters",
184
+ "Squeeze separators" => "squeezeseparators",
185
+ "Test with + sign" => "testwithsign",
186
+ "Test with malformed utf8 \251" => "testwithmalformedutf8"
187
+ }
188
+
189
+ StringToParameterizeWithUnderscore = {
190
+ "Donald E. Knuth" => "donald_e_knuth",
191
+ "Random text with *(bad)* characters" => "random_text_with_bad_characters",
192
+ "With-some-dashes" => "with-some-dashes",
193
+ "Retain_underscore" => "retain_underscore",
194
+ "Trailing bad characters!@#" => "trailing_bad_characters",
195
+ "!@#Leading bad characters" => "leading_bad_characters",
196
+ "Squeeze separators" => "squeeze_separators",
197
+ "Test with + sign" => "test_with_sign",
198
+ "Test with malformed utf8 \251" => "test_with_malformed_utf8"
199
+ }
200
+
201
+ StringToParameterizedAndNormalized = {
202
+ "Malmö" => "malmo",
203
+ "Garçons" => "garcons",
204
+ "Ops\331" => "opsu",
205
+ "Ærøskøbing" => "aeroskobing",
206
+ "Aßlar" => "asslar",
207
+ "Japanese: 日本語" => "japanese"
208
+ }
209
+
210
+ UnderscoreToHuman = {
211
+ "employee_salary" => "Employee salary",
212
+ "employee_id" => "Employee",
213
+ "underground" => "Underground"
214
+ }
215
+
216
+ MixtureToTitleCase = {
217
+ 'active_record' => 'Active Record',
218
+ 'ActiveRecord' => 'Active Record',
219
+ 'action web service' => 'Action Web Service',
220
+ 'Action Web Service' => 'Action Web Service',
221
+ 'Action web service' => 'Action Web Service',
222
+ 'actionwebservice' => 'Actionwebservice',
223
+ 'Actionwebservice' => 'Actionwebservice',
224
+ "david's code" => "David's Code",
225
+ "David's code" => "David's Code",
226
+ "david's Code" => "David's Code",
227
+ "sgt. pepper's" => "Sgt. Pepper's",
228
+ "i've just seen a face" => "I've Just Seen A Face",
229
+ "maybe you'll be there" => "Maybe You'll Be There",
230
+ "¿por qué?" => '¿Por Qué?',
231
+ "Fred’s" => "Fred’s",
232
+ "Fred`s" => "Fred`s"
233
+ }
234
+
235
+ OrdinalNumbers = {
236
+ "-1" => "-1st",
237
+ "-2" => "-2nd",
238
+ "-3" => "-3rd",
239
+ "-4" => "-4th",
240
+ "-5" => "-5th",
241
+ "-6" => "-6th",
242
+ "-7" => "-7th",
243
+ "-8" => "-8th",
244
+ "-9" => "-9th",
245
+ "-10" => "-10th",
246
+ "-11" => "-11th",
247
+ "-12" => "-12th",
248
+ "-13" => "-13th",
249
+ "-14" => "-14th",
250
+ "-20" => "-20th",
251
+ "-21" => "-21st",
252
+ "-22" => "-22nd",
253
+ "-23" => "-23rd",
254
+ "-24" => "-24th",
255
+ "-100" => "-100th",
256
+ "-101" => "-101st",
257
+ "-102" => "-102nd",
258
+ "-103" => "-103rd",
259
+ "-104" => "-104th",
260
+ "-110" => "-110th",
261
+ "-111" => "-111th",
262
+ "-112" => "-112th",
263
+ "-113" => "-113th",
264
+ "-1000" => "-1000th",
265
+ "-1001" => "-1001st",
266
+ "0" => "0th",
267
+ "1" => "1st",
268
+ "2" => "2nd",
269
+ "3" => "3rd",
270
+ "4" => "4th",
271
+ "5" => "5th",
272
+ "6" => "6th",
273
+ "7" => "7th",
274
+ "8" => "8th",
275
+ "9" => "9th",
276
+ "10" => "10th",
277
+ "11" => "11th",
278
+ "12" => "12th",
279
+ "13" => "13th",
280
+ "14" => "14th",
281
+ "20" => "20th",
282
+ "21" => "21st",
283
+ "22" => "22nd",
284
+ "23" => "23rd",
285
+ "24" => "24th",
286
+ "100" => "100th",
287
+ "101" => "101st",
288
+ "102" => "102nd",
289
+ "103" => "103rd",
290
+ "104" => "104th",
291
+ "110" => "110th",
292
+ "111" => "111th",
293
+ "112" => "112th",
294
+ "113" => "113th",
295
+ "1000" => "1000th",
296
+ "1001" => "1001st"
297
+ }
298
+
299
+ UnderscoresToDashes = {
300
+ "street" => "street",
301
+ "street_address" => "street-address",
302
+ "person_street_address" => "person-street-address"
303
+ }
304
+
305
+ Irregularities = {
306
+ 'person' => 'people',
307
+ 'man' => 'men',
308
+ 'child' => 'children',
309
+ 'sex' => 'sexes',
310
+ 'move' => 'moves',
311
+ 'cow' => 'kine',
312
+ 'zombie' => 'zombies',
313
+ 'genus' => 'genera'
314
+ }
315
+ end
data/spec/spec_helper.rb CHANGED
@@ -1 +1,13 @@
1
- require 'opal-spec'
1
+ require 'opal-rspec'
2
+ require 'opal-activesupport'
3
+
4
+ module TestUnitHelpers
5
+ def assert_equal actual, expected
6
+ actual.should == expected
7
+ end
8
+ end
9
+
10
+ RSpec.configure do |config|
11
+ config.include TestUnitHelpers
12
+ end
13
+
metadata CHANGED
@@ -1,43 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opal-activesupport
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elia Schito
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-04 00:00:00.000000000 Z
11
+ date: 2013-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.4.2
19
+ version: '0'
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: 0.4.2
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: opal-spec
28
+ name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.2.17
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.2.17
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: opal-rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  description: The port of the glorious ActiveSupport for Opal
42
56
  email:
43
57
  - elia@schito.me
@@ -56,10 +70,17 @@ files:
56
70
  - opal-activesupport.gemspec
57
71
  - opal/active_support.rb
58
72
  - opal/active_support/core_ext.rb
73
+ - opal/active_support/core_ext/integer.rb
74
+ - opal/active_support/core_ext/integer/time.rb
75
+ - opal/active_support/core_ext/numeric.rb
76
+ - opal/active_support/core_ext/numeric/calculations.rb
77
+ - opal/active_support/core_ext/numeric/time.rb
59
78
  - opal/active_support/core_ext/object.rb
60
79
  - opal/active_support/core_ext/object/blank.rb
61
80
  - opal/active_support/core_ext/string.rb
81
+ - opal/active_support/time.rb
62
82
  - opal/opal-activesupport.rb
83
+ - spec/core_ext/numeric_spec.rb
63
84
  - spec/core_ext/object/blank_spec.rb
64
85
  - spec/core_ext/string_spec.rb
65
86
  - spec/empty_bool.rb
@@ -89,11 +110,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
89
110
  version: '0'
90
111
  requirements: []
91
112
  rubyforge_project:
92
- rubygems_version: 2.0.3
113
+ rubygems_version: 2.1.2
93
114
  signing_key:
94
115
  specification_version: 4
95
116
  summary: The port of the glorious ActiveSupport for Opal
96
117
  test_files:
118
+ - spec/core_ext/numeric_spec.rb
97
119
  - spec/core_ext/object/blank_spec.rb
98
120
  - spec/core_ext/string_spec.rb
99
121
  - spec/empty_bool.rb