motion-support 0.2.4 → 0.2.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.
data/README.md CHANGED
@@ -40,6 +40,22 @@ require 'motion-support'
40
40
 
41
41
  Loads everything.
42
42
 
43
+ ## callbacks
44
+
45
+ ```ruby
46
+ require 'motion-support/callbacks'
47
+ ```
48
+
49
+ Loads the `MotionSupport::Callbacks` module. It allows you to easily add Rails-style callbacks to any class.
50
+
51
+ ## concern
52
+
53
+ ```ruby
54
+ require 'motion-support/concern'
55
+ ```
56
+
57
+ Loads the `MotionSupport::Concern` module. This simplifies separating classes into modules and managing module dependencies.
58
+
43
59
  ## inflector
44
60
 
45
61
  ```ruby
@@ -268,6 +284,7 @@ In general:
268
284
  * All marshalling code was removed
269
285
  * All logging code was removed
270
286
  * All extensions to `Test::Unit` were removed
287
+ * The `ActiveSupport` namespace is called `MotionSupport`
271
288
 
272
289
  Specifically:
273
290
 
@@ -292,6 +309,10 @@ Specifically:
292
309
  * The `rfc822` time format was removed, since it relies on time zone support.
293
310
  * Extensions to `LoadError` and `NameError` were removed
294
311
  * The `ThreadSafe` versions of `Hash` and `Array` are just aliases to the standard classes
312
+ * In `MotionSupport::Callbacks` it is not possible to give a string containing Ruby code as a conditions via `:if`, since RubyMotion doesn't support `eval`.
313
+ * In `MotionSupport::Callbacks`, if a proc is given as a condition to `:if`, the block must take the class instance as a parameter. `self` is not automatically set.
314
+ * In `MotionSupport::Callbacks#define_callbacks`, the `:terminator` argument must take a block of the form `lambda { |result| }` where `result` is the intermediate result from the callback methods.
315
+ * `NumberHelper` and numeric conversions only support phone numbers for now
295
316
 
296
317
  Things to do / to decide:
297
318
 
@@ -314,8 +335,6 @@ Things to do / to decide:
314
335
  * Do we need multibyte string handling extensions? AFAIK, all strings in RubyMotion are UTF-8. Is that true?
315
336
  * Do we need `Struct#to_h`?
316
337
  * Implement extensions to class `Thread` if they make sense.
317
- * Port callbacks.rb
318
- * Port concern.rb
319
338
  * Do we need the `Configurable` module?
320
339
  * Do we need the `OrderedOptions` class?
321
340
  * Some extensions have to be made available for Cocoa classes (`NSArray`, `NSDictionary` etc.), since we want to effectively handle return values from Objective-C methods (they return Cocoa classes). The way to do this is to write a conversion method from Cocoa class to Ruby class and delegate the extension methods in the Cocoa class to the conversion method. See `motion/core_ext/ns_string.rb` for an example.
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env rake
2
2
  $:.unshift("/Library/RubyMotion/lib")
3
- require 'motion/project'
3
+ require 'motion/project/template/ios'
4
4
  require "bundler/gem_tasks"
5
5
  Bundler.setup
6
6
  Bundler.require
@@ -1,14 +1,3 @@
1
- class Formotion::Form
2
- def row(key)
3
- sections.each do |section|
4
- section.rows.each do |row|
5
- return row if row.key == key
6
- end
7
- end
8
- nil
9
- end
10
- end
11
-
12
1
  class InflectorViewController < Formotion::FormController
13
2
  def init
14
3
  initWithForm(build_form)
@@ -1,9 +1,11 @@
1
1
  require 'motion-require'
2
2
 
3
3
  files = [
4
+ "_stdlib/array",
4
5
  "concern",
5
6
  "descendants_tracker",
6
- "callbacks"
7
+ "callbacks",
8
+ "core_ext/kernel/singleton_class"
7
9
  ].map { |file| File.expand_path(File.join(File.dirname(__FILE__), "/../../motion", "#{file}.rb")) }
8
10
 
9
11
  Motion::Require.all(files)
@@ -2,6 +2,7 @@ require 'motion-require'
2
2
 
3
3
  files = [
4
4
  'core_ext/numeric/bytes',
5
+ 'core_ext/numeric/conversions',
5
6
  'core_ext/numeric/time'
6
7
  ].map { |file| File.expand_path(File.join(File.dirname(__FILE__), "/../../../motion", "#{file}.rb")) }
7
8
 
@@ -1,6 +1,7 @@
1
1
  require 'motion-require'
2
2
 
3
3
  files = [
4
+ '_stdlib/cgi',
4
5
  'core_ext/object/acts_like',
5
6
  'core_ext/object/blank',
6
7
  'core_ext/object/deep_dup',
@@ -74,4 +74,8 @@ class Date
74
74
  def to_time
75
75
  @value
76
76
  end
77
+
78
+ def succ
79
+ self + 1
80
+ end
77
81
  end
@@ -7,5 +7,5 @@ class NSDictionary
7
7
  end
8
8
  end
9
9
 
10
- delegate :symbolize_keys, :to => :to_hash
10
+ delegate :symbolize_keys, :with_indifferent_access, :nested_under_indifferent_access, :to => :to_hash
11
11
  end
@@ -1,4 +1,46 @@
1
1
  class Numeric
2
+ # Provides options for converting numbers into formatted strings.
3
+ # Right now, options are only provided for phone numbers.
4
+ #
5
+ # ==== Options
6
+ #
7
+ # For details on which formats use which options, see MotionSupport::NumberHelper
8
+ #
9
+ # ==== Examples
10
+ #
11
+ # Phone Numbers:
12
+ # 5551234.to_s(:phone) # => 555-1234
13
+ # 1235551234.to_s(:phone) # => 123-555-1234
14
+ # 1235551234.to_s(:phone, area_code: true) # => (123) 555-1234
15
+ # 1235551234.to_s(:phone, delimiter: ' ') # => 123 555 1234
16
+ # 1235551234.to_s(:phone, area_code: true, extension: 555) # => (123) 555-1234 x 555
17
+ # 1235551234.to_s(:phone, country_code: 1) # => +1-123-555-1234
18
+ # 1235551234.to_s(:phone, country_code: 1, extension: 1343, delimiter: '.')
19
+ # # => +1.123.555.1234 x 1343
20
+ def to_formatted_s(format = :default, options = {})
21
+ case format
22
+ when :phone
23
+ return MotionSupport::NumberHelper.number_to_phone(self, options)
24
+ else
25
+ self.to_default_s
26
+ end
27
+ end
28
+
29
+ [Float, Fixnum, Bignum].each do |klass|
30
+ klass.send(:alias_method, :to_default_s, :to_s)
31
+
32
+ klass.send(:define_method, :to_s) do |*args|
33
+ if args[0].is_a?(Symbol)
34
+ format = args[0]
35
+ options = args[1] || {}
36
+
37
+ self.to_formatted_s(format, options)
38
+ else
39
+ to_default_s(*args)
40
+ end
41
+ end
42
+ end
43
+
2
44
  # Stub method to return a pseudo-JSON value from a number. It just returns a string by calling to_s.
3
45
  # This should work most of the time.
4
46
  def to_json
@@ -1,7 +1,6 @@
1
1
  class Object
2
2
  # Returns true if this object is included in the argument(s). Argument must be
3
- # any object which responds to +#include?+ or optionally, multiple arguments
4
- # can be passed in. Usage:
3
+ # any object which responds to +#include?+. Usage:
5
4
  #
6
5
  # characters = ['Konata', 'Kagami', 'Tsukasa']
7
6
  # 'Konata'.in?(characters) # => true
data/motion/logger.rb CHANGED
@@ -1,12 +1,22 @@
1
+ module Kernel
2
+ def log(*args)
3
+ MotionSupport.logger.log(*args)
4
+ end
5
+
6
+ def l(*args)
7
+ MotionSupport.logger.log(args.map { |a| a.inspect })
8
+ end
9
+ end
10
+
1
11
  module MotionSupport
2
12
  class NullLogger
3
- def log(string)
13
+ def log(*args)
4
14
  end
5
15
  end
6
16
 
7
17
  class StdoutLogger
8
- def log(string)
9
- puts string
18
+ def log(*args)
19
+ puts args
10
20
  end
11
21
  end
12
22
 
@@ -21,9 +31,17 @@ module MotionSupport
21
31
  @output_stream.open
22
32
  end
23
33
 
24
- def log(string)
25
- data = NSData.alloc.initWithData("#{string}\n".dataUsingEncoding(NSASCIIStringEncoding))
26
- @output_stream.write(data.bytes, maxLength:data.length);
34
+ def log(*args)
35
+ args.each do |string|
36
+ data = NSData.alloc.initWithData("#{string}\n".dataUsingEncoding(NSASCIIStringEncoding))
37
+ @output_stream.write(data.bytes, maxLength:data.length)
38
+ end
27
39
  end
28
40
  end
41
+
42
+ mattr_writer :logger
43
+
44
+ def self.logger
45
+ @logger ||= StdoutLogger.new
46
+ end
29
47
  end
@@ -0,0 +1,54 @@
1
+ module MotionSupport
2
+ module NumberHelper
3
+ extend self
4
+
5
+ # Formats a +number+ into a US phone number (e.g., (555)
6
+ # 123-9876). You can customize the format in the +options+ hash.
7
+ #
8
+ # ==== Options
9
+ #
10
+ # * <tt>:area_code</tt> - Adds parentheses around the area code.
11
+ # * <tt>:delimiter</tt> - Specifies the delimiter to use
12
+ # (defaults to "-").
13
+ # * <tt>:extension</tt> - Specifies an extension to add to the
14
+ # end of the generated number.
15
+ # * <tt>:country_code</tt> - Sets the country code for the phone
16
+ # number.
17
+ # ==== Examples
18
+ #
19
+ # number_to_phone(5551234) # => 555-1234
20
+ # number_to_phone('5551234') # => 555-1234
21
+ # number_to_phone(1235551234) # => 123-555-1234
22
+ # number_to_phone(1235551234, area_code: true) # => (123) 555-1234
23
+ # number_to_phone(1235551234, delimiter: ' ') # => 123 555 1234
24
+ # number_to_phone(1235551234, area_code: true, extension: 555) # => (123) 555-1234 x 555
25
+ # number_to_phone(1235551234, country_code: 1) # => +1-123-555-1234
26
+ # number_to_phone('123a456') # => 123a456
27
+ #
28
+ # number_to_phone(1235551234, country_code: 1, extension: 1343, delimiter: '.')
29
+ # # => +1.123.555.1234 x 1343
30
+ def number_to_phone(number, options = {})
31
+ return unless number
32
+ options = options.symbolize_keys
33
+
34
+ number = number.to_s.strip
35
+ area_code = options[:area_code]
36
+ delimiter = options[:delimiter] || "-"
37
+ extension = options[:extension]
38
+ country_code = options[:country_code]
39
+
40
+ if area_code
41
+ number.gsub!(/(\d{1,3})(\d{3})(\d{4}$)/,"(\\1) \\2#{delimiter}\\3")
42
+ else
43
+ number.gsub!(/(\d{0,3})(\d{3})(\d{4})$/,"\\1#{delimiter}\\2#{delimiter}\\3")
44
+ number.slice!(0, 1) if number.start_with?(delimiter) && !delimiter.blank?
45
+ end
46
+
47
+ str = ''
48
+ str << "+#{country_code}#{delimiter}" unless country_code.blank?
49
+ str << number
50
+ str << " x #{extension}" unless extension.blank?
51
+ str
52
+ end
53
+ end
54
+ end
data/motion/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module MotionSupport
2
- VERSION = "0.2.4"
2
+ VERSION = "0.2.5"
3
3
  end
@@ -0,0 +1,40 @@
1
+ describe "Numeric" do
2
+ describe "conversions" do
3
+ describe "phone" do
4
+ it "should format phone number without area code" do
5
+ 5551234.to_s(:phone).should == "555-1234"
6
+ end
7
+
8
+ it "should format long number without area code" do
9
+ 225551212.to_s(:phone).should == "22-555-1212"
10
+ 8005551212.to_s(:phone).should == "800-555-1212"
11
+ end
12
+
13
+ it "should format phone number with area code" do
14
+ 8005551212.to_s(:phone, :area_code => true).should == "(800) 555-1212"
15
+ end
16
+
17
+ it "should format phone number with custom delimiter" do
18
+ 8005551212.to_s(:phone, :delimiter => " ").should == "800 555 1212"
19
+ 5551212.to_s(:phone, :delimiter => '.').should == "555.1212"
20
+ end
21
+
22
+ it "should append extension to phone number" do
23
+ 8005551212.to_s(:phone, :area_code => true, :extension => 123).should == "(800) 555-1212 x 123"
24
+ end
25
+
26
+ it "should not append whitespace as extension to the phone number" do
27
+ 8005551212.to_s(:phone, :extension => " ").should == "800-555-1212"
28
+ end
29
+
30
+ it "should format phone number with country code" do
31
+ 8005551212.to_s(:phone, :country_code => 1).should == "+1-800-555-1212"
32
+ 225551212.to_s(:phone, :country_code => 45).should == "+45-22-555-1212"
33
+ end
34
+
35
+ it "should format phone number with country code and empty delimiter" do
36
+ 8005551212.to_s(:phone, :country_code => 1, :delimiter => '').should == "+18005551212"
37
+ end
38
+ end
39
+ end
40
+ end
@@ -30,7 +30,7 @@ describe "Time" do
30
30
  end
31
31
 
32
32
  it "should convert to nsec format" do
33
- @time.to_s(:nsec).should == "200502211744309N"
33
+ @time.to_s(:nsec).should == "20050221174430123451232"
34
34
  # Hmm. Looks like RubyMotion has an issue with nanosecs in string time formatting. It should actually be "20050221174430123456789"
35
35
  end
36
36
 
@@ -26,4 +26,28 @@ describe "NSDictionary" do
26
26
  dict.symbolize_keys.should == { :foo => 'bar' }
27
27
  end
28
28
  end
29
+
30
+ describe "with_indifferent_access" do
31
+ it "should work for NSDictionary instances" do
32
+ dict = NSMutableDictionary.alloc.init
33
+ dict.setValue('bar', forKey:'foo')
34
+ dict_indifferent = dict.with_indifferent_access
35
+ dict_indifferent['foo'].should == 'bar'
36
+ dict_indifferent[:foo].should == dict_indifferent['foo']
37
+ end
38
+
39
+ it "should work with nested NSDictionary instances" do
40
+ dict = NSMutableDictionary.alloc.init
41
+ dict_inner = NSMutableDictionary.alloc.init
42
+ dict_inner.setValue('value', forKey: 'key')
43
+ dict.setValue('bar', forKey:'foo')
44
+ dict.setValue(dict_inner, forKey: 'inner')
45
+
46
+ dict_indifferent = dict.with_indifferent_access
47
+ inner_indifferent = dict_indifferent['inner']
48
+ dict_indifferent[:inner].should == inner_indifferent
49
+ inner_indifferent['key'].should == dict_inner['key']
50
+ inner_indifferent[:key].should == inner_indifferent['key']
51
+ end
52
+ end
29
53
  end
@@ -0,0 +1,55 @@
1
+ describe "NumberHelper" do
2
+ class TestClassWithInstanceNumberHelpers
3
+ include MotionSupport::NumberHelper
4
+ end
5
+
6
+ class TestClassWithClassNumberHelpers
7
+ extend MotionSupport::NumberHelper
8
+ end
9
+
10
+ before do
11
+ @instance_with_helpers = TestClassWithInstanceNumberHelpers.new
12
+ end
13
+
14
+ describe "number_to_phone" do
15
+ it "should convert number to phone" do
16
+ [@instance_with_helpers, TestClassWithClassNumberHelpers, MotionSupport::NumberHelper].each do |number_helper|
17
+ number_helper.number_to_phone(5551234).should == "555-1234"
18
+ number_helper.number_to_phone(8005551212).should == "800-555-1212"
19
+ number_helper.number_to_phone(8005551212, {:area_code => true}).should == "(800) 555-1212"
20
+ number_helper.number_to_phone("", {:area_code => true}).should == ""
21
+ number_helper.number_to_phone(8005551212, {:delimiter => " "}).should == "800 555 1212"
22
+ number_helper.number_to_phone(8005551212, {:area_code => true, :extension => 123}).should == "(800) 555-1212 x 123"
23
+ number_helper.number_to_phone(8005551212, :extension => " ").should == "800-555-1212"
24
+ number_helper.number_to_phone(5551212, :delimiter => '.').should == "555.1212"
25
+ number_helper.number_to_phone("8005551212").should == "800-555-1212"
26
+ number_helper.number_to_phone(8005551212, :country_code => 1).should == "+1-800-555-1212"
27
+ number_helper.number_to_phone(8005551212, :country_code => 1, :delimiter => '').should == "+18005551212"
28
+ number_helper.number_to_phone(225551212).should == "22-555-1212"
29
+ number_helper.number_to_phone(225551212, :country_code => 45).should == "+45-22-555-1212"
30
+ end
31
+ end
32
+
33
+ it "should return nil when given nil" do
34
+ [@instance_with_helpers, TestClassWithClassNumberHelpers, MotionSupport::NumberHelper].each do |number_helper|
35
+ number_helper.number_to_phone(nil).should.be.nil
36
+ end
37
+ end
38
+
39
+ it "should not mutate options hash" do
40
+ [@instance_with_helpers, TestClassWithClassNumberHelpers, MotionSupport::NumberHelper].each do |number_helper|
41
+ options = { 'raise' => true }
42
+
43
+ number_helper.number_to_phone(1, options)
44
+ options.should == { 'raise' => true }
45
+ end
46
+ end
47
+
48
+ it "should return non-numeric parameter unchanged" do
49
+ [@instance_with_helpers, TestClassWithClassNumberHelpers, MotionSupport::NumberHelper].each do |number_helper|
50
+ number_helper.number_to_phone("x", :country_code => 1, :extension => 123).should == "+1-x x 123"
51
+ number_helper.number_to_phone("x").should == "x"
52
+ end
53
+ end
54
+ end
55
+ end
metadata CHANGED
@@ -1,56 +1,49 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: motion-support
3
- version: !ruby/object:Gem::Version
4
- version: 0.2.4
3
+ version: !ruby/object:Gem::Version
5
4
  prerelease:
5
+ version: 0.2.5
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Thomas Kadauke
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-12 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
12
+
13
+ date: 2013-10-02 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
15
16
  name: motion-require
16
- requirement: !ruby/object:Gem::Requirement
17
+ requirement: &id001 !ruby/object:Gem::Requirement
17
18
  none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
21
22
  version: 0.0.6
22
23
  type: :runtime
23
24
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: 0.0.6
30
- - !ruby/object:Gem::Dependency
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
31
27
  name: rake
32
- requirement: !ruby/object:Gem::Requirement
28
+ requirement: &id002 !ruby/object:Gem::Requirement
33
29
  none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
38
34
  type: :development
39
35
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- description: Commonly useful extensions to the standard library for RubyMotion. Ported
47
- from ActiveSupport.
48
- email:
36
+ version_requirements: *id002
37
+ description: Commonly useful extensions to the standard library for RubyMotion. Ported from ActiveSupport.
38
+ email:
49
39
  - thomas.kadauke@googlemail.com
50
40
  executables: []
41
+
51
42
  extensions: []
43
+
52
44
  extra_rdoc_files: []
53
- files:
45
+
46
+ files:
54
47
  - .gitignore
55
48
  - .yardopts
56
49
  - Gemfile
@@ -159,6 +152,7 @@ files:
159
152
  - motion/inflector/inflections.rb
160
153
  - motion/inflector/methods.rb
161
154
  - motion/logger.rb
155
+ - motion/number_helper.rb
162
156
  - motion/version.rb
163
157
  - spec/motion-support/_helpers/constantize_test_cases.rb
164
158
  - spec/motion-support/_helpers/inflector_test_cases.rb
@@ -196,6 +190,7 @@ files:
196
190
  - spec/motion-support/core_ext/module/reachable_spec.rb
197
191
  - spec/motion-support/core_ext/module/remove_method_spec.rb
198
192
  - spec/motion-support/core_ext/numeric/bytes_spec.rb
193
+ - spec/motion-support/core_ext/numeric/conversions_spec.rb
199
194
  - spec/motion-support/core_ext/object/acts_like_spec.rb
200
195
  - spec/motion-support/core_ext/object/blank_spec.rb
201
196
  - spec/motion-support/core_ext/object/deep_dup_spec.rb
@@ -226,37 +221,41 @@ files:
226
221
  - spec/motion-support/inflector_spec.rb
227
222
  - spec/motion-support/ns_dictionary_spec.rb
228
223
  - spec/motion-support/ns_string_spec.rb
224
+ - spec/motion-support/number_helper_spec.rb
229
225
  homepage: https://github.com/tkadauke/motion-support
230
226
  licenses: []
227
+
231
228
  post_install_message:
232
229
  rdoc_options: []
233
- require_paths:
230
+
231
+ require_paths:
234
232
  - lib
235
- required_ruby_version: !ruby/object:Gem::Requirement
233
+ required_ruby_version: !ruby/object:Gem::Requirement
236
234
  none: false
237
- requirements:
238
- - - ! '>='
239
- - !ruby/object:Gem::Version
240
- version: '0'
241
- segments:
235
+ requirements:
236
+ - - ">="
237
+ - !ruby/object:Gem::Version
238
+ hash: 3988570019635634202
239
+ segments:
242
240
  - 0
243
- hash: 1534794484317908353
244
- required_rubygems_version: !ruby/object:Gem::Requirement
241
+ version: "0"
242
+ required_rubygems_version: !ruby/object:Gem::Requirement
245
243
  none: false
246
- requirements:
247
- - - ! '>='
248
- - !ruby/object:Gem::Version
249
- version: '0'
250
- segments:
244
+ requirements:
245
+ - - ">="
246
+ - !ruby/object:Gem::Version
247
+ hash: 3988570019635634202
248
+ segments:
251
249
  - 0
252
- hash: 1534794484317908353
250
+ version: "0"
253
251
  requirements: []
252
+
254
253
  rubyforge_project:
255
- rubygems_version: 1.8.25
254
+ rubygems_version: 1.8.19
256
255
  signing_key:
257
256
  specification_version: 3
258
257
  summary: Commonly useful extensions to the standard library for RubyMotion
259
- test_files:
258
+ test_files:
260
259
  - spec/motion-support/_helpers/constantize_test_cases.rb
261
260
  - spec/motion-support/_helpers/inflector_test_cases.rb
262
261
  - spec/motion-support/callback_spec.rb
@@ -293,6 +292,7 @@ test_files:
293
292
  - spec/motion-support/core_ext/module/reachable_spec.rb
294
293
  - spec/motion-support/core_ext/module/remove_method_spec.rb
295
294
  - spec/motion-support/core_ext/numeric/bytes_spec.rb
295
+ - spec/motion-support/core_ext/numeric/conversions_spec.rb
296
296
  - spec/motion-support/core_ext/object/acts_like_spec.rb
297
297
  - spec/motion-support/core_ext/object/blank_spec.rb
298
298
  - spec/motion-support/core_ext/object/deep_dup_spec.rb
@@ -323,3 +323,4 @@ test_files:
323
323
  - spec/motion-support/inflector_spec.rb
324
324
  - spec/motion-support/ns_dictionary_spec.rb
325
325
  - spec/motion-support/ns_string_spec.rb
326
+ - spec/motion-support/number_helper_spec.rb