motion-support 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
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