to_cardinal 0.0.1 → 0.0.2

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: a409fff797b3bf3831c98f88117243c4ddf6d69f
4
- data.tar.gz: e8899ed38425c12db26896b70c0ec491b8d86f09
3
+ metadata.gz: 25caab36cc87fd2583617c4d1fd2a7aed431646f
4
+ data.tar.gz: d1f5eb949841efb33065650a94b86298f405af04
5
5
  SHA512:
6
- metadata.gz: 9d1ba97dd38e12aeb605229487b62b8bc255edb69d855751ef20f60c31cc3e36220e509b56ea2ace720db2c8895be66d8af75436feb82c329e26a8e1a03635f7
7
- data.tar.gz: 4c8a591b9bc177296174b79551128e00f10558f3e15c9295d1784991707267d113c043e86d0d69e63b7f35e7ce637d1fe7372ac2b63eb191ad6286b87f992fdc
6
+ metadata.gz: 72f239da2537de7160f90fba0d1621c86107fa1c01e0556035feb7c5a0717507aa8e3644d9bfac4ae7235a7200e9909a4b9d12d996fad3872297f426ca849c04
7
+ data.tar.gz: cb7867b578188f6274f84bdfe2f0e5fd584fcb47ecf9557e96421114e605957981715d93ac00bf27ad2838e3e81bd61b3ff190e6466d59522f72fa924ca3f922
@@ -0,0 +1,12 @@
1
+ # 0.0.2
2
+
3
+ * added CHANGELOG
4
+ * [ENHANCEMENT] returns default value nil
5
+ * [ENHANCEMENT] added more tests
6
+ * [ENHANCEMENT] supports conversions from 1 to 100
7
+ * [ENHANCEMENT] changes super case-when by more programmatic way
8
+ * [ENHANCEMENT] supports different kind of uses
9
+
10
+ # 0.0.1
11
+
12
+ * initial version
data/README.md CHANGED
@@ -2,10 +2,11 @@
2
2
 
3
3
  [![Build Status](https://travis-ci.org/edudepetris/to_cardinal.svg?branch=master)](https://travis-ci.org/edudepetris/to_cardinal)
4
4
  [![Coverage Status](https://img.shields.io/coveralls/edudepetris/to_cardinal.svg)](https://coveralls.io/r/edudepetris/to_cardinal)
5
+ [![Gem Version](https://badge.fury.io/rb/to_cardinal.svg)](http://badge.fury.io/rb/to_cardinal)
5
6
 
6
7
 
7
8
  Ruby gem which will allow to convert from ordinal numbers to cardinal numbers.
8
-
9
+ It only supports ordinals from 1 to 100.
9
10
 
10
11
 
11
12
  ## Installation
@@ -24,15 +25,62 @@ Or install it yourself as:
24
25
 
25
26
  ## Usage
26
27
 
28
+ Please use which ever is most comfortable:
29
+
30
+ You can use _ToCardinal_ without include it in a class.
31
+ Just require ```to_cardinal``` into your Ruby code and use ```cardinalize``` method from Module
32
+
27
33
  ```ruby
28
34
  require 'to_cardinal'
29
35
 
36
+ # some ordinal numbers to cardinals
37
+ ToCardinal.cardinalize 'first' # => 1
38
+ ToCardinal.cardinalize '1st' # => 1
39
+ ToCardinal.cardinalize 'fourth' # => 4
40
+ ToCardinal.cardinalize '4th' # => 4
41
+ ```
42
+ You can include _ToCardinal_ in String Ruby’s core library.
43
+ Just require ```to_cardinal/core_ext/string``` into your Ruby code and use ```String#to_cardinal``` method.
44
+
45
+ ```ruby
46
+ require 'to_cardinal/core_ext/string'
47
+
30
48
  # some ordinal numbers to cardinals
31
49
  'first'.to_cardinal # => 1
32
50
  '1st'.to_cardinal # => 1
33
51
  'fourth'.to_cardinal # => 4
34
52
  '4th'.to_cardinal # => 4
35
53
 
54
+ ```
55
+ You can include _ToCardinal_ in a String's sub-class.
56
+ Just require ```to_cardinal``` into your Ruby code and then ```include``` it in your _sub-class_
57
+ ```ruby
58
+ require 'to_cardinal'
59
+
60
+ class A < String
61
+ include ToCardinal
62
+ ...
63
+ end
64
+
65
+ # some ordinal numbers to cardinals
66
+ A.new('first').to_cardinal # => 1
67
+ A.new('1st').to_cardinal # => 1
68
+ A.new('fourth').to_cardinal # => 4
69
+ A.new('4th').to_cardinal # => 4
70
+
71
+ ```
72
+
73
+ If you are in **Ruby on Rails** and you want to use _ToCardinal_ like ```String#to_cardinal```. You can create an ```initializer``` file like this:
74
+
75
+ ```ruby
76
+ # your_project/config/initializers/to_cardinal.rb
77
+ require 'to_cardinal/core_ext/string'
78
+
79
+ # And then you use it
80
+ 'first'.to_cardinal # => 1
81
+ '1st'.to_cardinal # => 1
82
+ 'fourth'.to_cardinal # => 4
83
+ '4th'.to_cardinal # => 4
36
84
  ```
37
85
 
38
86
  ## Contributing
@@ -42,3 +90,9 @@ require 'to_cardinal'
42
90
  3. Commit your changes (`git commit -am 'Add some feature'`)
43
91
  4. Push to the branch (`git push origin my-new-feature`)
44
92
  5. Create a new Pull Request
93
+
94
+ ## License
95
+ Distributed under the [MIT license](https://github.com/edudepetris/to_cardinal/blob/master/LICENSE.txt)
96
+
97
+ -------
98
+ First of all, thank ruby community for your help! :punch:
@@ -1,69 +1,2 @@
1
- require "to_cardinal/version"
2
-
3
- module ToCardinal
4
-
5
- class ::String
6
- def to_cardinal
7
- case self.downcase
8
- when 'first', '1st'
9
- 1
10
- when 'second', '2nd'
11
- 2
12
- when 'third', '3rd'
13
- 3
14
- when 'fourth', '4th'
15
- 4
16
- when 'fifth', '5th'
17
- 5
18
- when 'sixth', '6th'
19
- 6
20
- when 'seventh', '7th'
21
- 7
22
- when 'eighth', '8th'
23
- 8
24
- when 'ninth', '9th'
25
- 9
26
- when 'tenth', '10th'
27
- 10
28
- when 'eleventh', '11th'
29
- 11
30
- when 'twelfth', '12th'
31
- 12
32
- when 'thirteenth', '13th'
33
- 13
34
- when 'fourteenth', '14th'
35
- 14
36
- when 'fifteenth', '15th'
37
- 15
38
- when 'sixteenth', '16th'
39
- 16
40
- when 'seventeenth', '17th'
41
- 17
42
- when 'eighteenth', '18th'
43
- 18
44
- when 'nineteenth', '19th'
45
- 19
46
- when 'twentieth', '20th'
47
- 20
48
- when 'thirtieth', '30th'
49
- 30
50
- when 'fortieth', '40th'
51
- 40
52
- when 'fiftieth', '50th'
53
- 50
54
- when 'sixtieth', '60th'
55
- 60
56
- when 'seventieth', '70th'
57
- 70
58
- when 'eightieth', '80th'
59
- 80
60
- when 'ninetieth', '90th'
61
- 90
62
- when 'hundredth', '100th'
63
- 100
64
- else
65
- -1
66
- end
67
- end
68
- end
69
- end
1
+ require 'to_cardinal/version'
2
+ require 'to_cardinal/cardinalize'
@@ -0,0 +1,67 @@
1
+ module ToCardinal
2
+ EXPLICITS = {
3
+ 'first' => 1,
4
+ 'second' => 2,
5
+ 'third' => 3,
6
+ 'ninth' => 9,
7
+ 'eleventh' => 11,
8
+ 'twelfth' => 12,
9
+ 'twentieth' => 20,
10
+ 'thirtieth' => 30,
11
+ 'fortieth' => 40,
12
+ 'fiftieth' => 50,
13
+ 'sixtieth' => 60,
14
+ 'seventieth' => 70,
15
+ 'eightieth' => 80,
16
+ 'ninetieth' => 90,
17
+ 'one hundredth' => 100
18
+ }
19
+
20
+ REGULARS = {
21
+ 'thir' => 3,
22
+ 'four' => 4,
23
+ 'fif' => 5,
24
+ 'six' => 6,
25
+ 'seven' => 7,
26
+ 'eigh' => 8,
27
+ 'nine' => 9,
28
+ 'ten' => 10
29
+ }
30
+
31
+ TENS = {
32
+ 'twenty' => 20,
33
+ 'thirty' => 30,
34
+ 'forty' => 40,
35
+ 'fifty' => 50,
36
+ 'sixty' => 60,
37
+ 'seventy' => 70,
38
+ 'eighty' => 80,
39
+ 'ninety' => 90
40
+ }
41
+
42
+ EXPLICIT_MATCHES = Hash[REGULARS.map {|k, v| [k.to_s + 'th', v] }].merge EXPLICITS
43
+ TENS_MATCH = /(#{TENS.keys.join '|'})-/
44
+ ORDINAL = /^(\d+)(?:st|nd|rd|th)$/
45
+
46
+ def self.cardinalize(str)
47
+ str.downcase!
48
+
49
+ ordinal = str[ORDINAL, 1]
50
+ explicit_matches = EXPLICIT_MATCHES[str]
51
+ regular_match = str[/^(.+)teenth$/, 1]
52
+
53
+ return ordinal.to_i if ordinal
54
+ return explicit_matches if explicit_matches
55
+ return 10 + REGULARS[regular_match] if regular_match
56
+
57
+ if tens = str[TENS_MATCH, 1]
58
+ sum = TENS[tens]
59
+ str.sub! "#{tens}-", ''
60
+ EXPLICIT_MATCHES.has_key?(str) ? sum + EXPLICIT_MATCHES[str] : nil
61
+ end
62
+ end
63
+
64
+ def to_cardinal
65
+ ToCardinal.cardinalize self
66
+ end
67
+ end
@@ -0,0 +1,7 @@
1
+ require 'to_cardinal'
2
+
3
+ if String.method_defined? :to_cardinal
4
+ $stderr.puts " **WARNING: Possible conflict with ToCardinal extension:\ \b
5
+ String#to_cardinal already exits."
6
+ end
7
+ String.send :include, ToCardinal
@@ -1,3 +1,3 @@
1
1
  module ToCardinal
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -1,19 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe ToCardinal do
4
- cardinals = [
5
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
6
- 19, 20, 30, 40, 50, 60, 70, 80, 90, 100]
4
+ Linguistics.use :en
7
5
 
8
- full_ordinals = %w'
9
- first second third fourth fifth sixth seventh eighth ninth
10
- tenth eleventh twelfth thirteenth fourteenth fifteenth sixteenth
11
- seventeenth eighteenth nineteenth twentieth thirtieth fortieth fiftieth
12
- sixtieth seventieth eightieth ninetieth hundredth'
13
-
14
- abbreviation_ordinal = %w'
15
- 1st 2nd 3rd 4th 5th 6th 7th 8th 9th 10th 11th 12th 13th 14th 15th
16
- 16th 17th 18th 19th 20th 30th 40th 50th 60th 70th 80th 90th 100th'
6
+ cardinals = (1..100).to_a
7
+ full_ordinals = cardinals.map { |c| c.en.numwords.en.ordinal }
8
+ abbreviation_ordinal = cardinals.map { |c| c.en.ordinal }
17
9
 
18
10
  full_ordinals.each_with_index do |ordinal, index|
19
11
  cardinal = cardinals[index]
@@ -31,8 +23,7 @@ describe ToCardinal do
31
23
  end
32
24
  end
33
25
 
34
- it 'converts by default to -1' do
35
- expect('anything'.to_cardinal).to eq -1
26
+ it 'converts to nil when it is not an ordinal' do
27
+ expect('anything'.to_cardinal).to be_nil
36
28
  end
37
-
38
29
  end
@@ -1,4 +1,5 @@
1
- require 'to_cardinal'
2
1
  require 'coveralls'
3
2
  Coveralls.wear!
4
-
3
+ require 'to_cardinal'
4
+ require 'to_cardinal/core_ext/string'
5
+ require 'linguistics'
@@ -1,4 +1,5 @@
1
1
  # coding: utf-8
2
+
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'to_cardinal/version'
@@ -18,6 +19,7 @@ Gem::Specification.new do |spec|
18
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
20
  spec.require_paths = ["lib"]
20
21
 
22
+ spec.add_development_dependency "linguistics", "2.0.2"
21
23
  spec.add_development_dependency "bundler", "~> 1.6"
22
24
  spec.add_development_dependency "rake", "~> 10.4"
23
25
  spec.add_development_dependency "rspec", "~> 3.1"
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: to_cardinal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - edu depetris
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-08 00:00:00.000000000 Z
11
+ date: 2014-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: linguistics
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -76,11 +90,14 @@ files:
76
90
  - ".coveralls.yml"
77
91
  - ".gitignore"
78
92
  - ".travis.yml"
93
+ - CHANGELOG.md
79
94
  - Gemfile
80
95
  - LICENSE.txt
81
96
  - README.md
82
97
  - Rakefile
83
98
  - lib/to_cardinal.rb
99
+ - lib/to_cardinal/cardinalize.rb
100
+ - lib/to_cardinal/core_ext/string.rb
84
101
  - lib/to_cardinal/version.rb
85
102
  - spec/lib/to_cardinal_spec.rb
86
103
  - spec/spec_helper.rb