stamp 0.1.6 → 0.2.0

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.
@@ -1,8 +1,8 @@
1
1
  rvm:
2
2
  - 1.8.7
3
3
  - 1.9.2
4
+ - 1.9.3
4
5
  - ree
5
6
  - rbx
6
- - rbx-2.0
7
7
  - jruby
8
8
  - ruby-head
@@ -1,24 +1,22 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- stamp (0.1.6)
4
+ stamp (0.2.0)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
8
8
  specs:
9
9
  builder (3.0.0)
10
- cucumber (1.0.0)
10
+ cucumber (1.2.1)
11
11
  builder (>= 2.1.2)
12
- diff-lcs (>= 1.1.2)
13
- gherkin (~> 2.4.1)
12
+ diff-lcs (>= 1.1.3)
13
+ gherkin (~> 2.11.0)
14
14
  json (>= 1.4.6)
15
- term-ansicolor (>= 1.0.5)
16
- diff-lcs (1.1.2)
17
- gherkin (2.4.1)
15
+ diff-lcs (1.1.3)
16
+ gherkin (2.11.2)
18
17
  json (>= 1.4.6)
19
- json (1.5.3)
20
- rake (0.9.2)
21
- term-ansicolor (1.0.5)
18
+ json (1.7.5)
19
+ rake (0.9.2.2)
22
20
 
23
21
  PLATFORMS
24
22
  ruby
data/README.md CHANGED
@@ -29,6 +29,13 @@ date.stamp("12/31/99") #=> "06/09/11"
29
29
  date.stamp("DOB: 12/31/2000") #=> "DOB: 06/09/2011"
30
30
  ```
31
31
 
32
+ It even formats ordinal days!
33
+
34
+ ```ruby
35
+ date.stamp("November 5th") #=> "June 9th"
36
+ date.stamp("1st of Jan") #=> "9th of Jun"
37
+ ```
38
+
32
39
  ### Times
33
40
 
34
41
  `Time#stamp` supports the same kinds of examples as `Date`, but also formats
@@ -85,7 +92,7 @@ Time::DATE_FORMATS[:military] = Stamp.strftime_format("23:59")
85
92
  To use your formats:
86
93
 
87
94
  ```ruby
88
- Date.today.to_s_(:short) #=> "Sat Jul 16"
95
+ Date.today.to_s(:short) #=> "Sat Jul 16"
89
96
  Time.now.to_s(:military) #=> "15:35"
90
97
  ```
91
98
 
@@ -102,7 +109,7 @@ just be passed along:
102
109
 
103
110
  ```ruby
104
111
  Date.today.stamp("Week #%U, 1999") #=> "Week #23, 2011"
105
- ````
112
+ ```
106
113
 
107
114
  Check out [http://strfti.me](http://strfti.me) for more ideas.
108
115
 
@@ -9,7 +9,6 @@ Feature: Stamping a date
9
9
  Given the date September 8, 2011
10
10
  When I stamp the example "<example>"
11
11
  Then I produce "<output>"
12
- And I like turtles
13
12
 
14
13
  Examples:
15
14
  | example | output |
@@ -34,12 +33,41 @@ Feature: Stamping a date
34
33
  | 1999-12-31 | 2011-09-08 |
35
34
  | DOB: 12-31-1999 | DOB: 09-08-2011 |
36
35
 
36
+ @date
37
+ Scenario Outline: Formatting dates with ordinal days
38
+ Given the date <date>
39
+ When I stamp the example "<example>"
40
+ Then I produce "<output>"
41
+
42
+ Examples:
43
+ | date | example | output |
44
+ | Jan 1, 1999 | July 4th | January 1st |
45
+ | Jan 2, 1999 | Dec 3rd | Jan 2nd |
46
+ | Jan 3, 1999 | Dec 2nd | Jan 3rd |
47
+ | Jan 4, 1999 | Jul 1st | Jan 4th |
48
+ | Jan 5, 1999 | Dec 1st | Jan 5th |
49
+ | Jan 6, 1999 | Dec 1st | Jan 6th |
50
+ | Jan 7, 1999 | Dec 1st | Jan 7th |
51
+ | Jan 8, 1999 | Dec 1st | Jan 8th |
52
+ | Jan 9, 1999 | Dec 1st | Jan 9th |
53
+ | Jan 10, 1999 | Dec 1st | Jan 10th |
54
+ | Jan 11, 1999 | Dec 1st | Jan 11th |
55
+ | Jan 12, 1999 | Dec 1st | Jan 12th |
56
+ | Jan 13, 1999 | Dec 1st | Jan 13th |
57
+ | Jan 14, 1999 | Dec 1st | Jan 14th |
58
+ | Jan 20, 1999 | Dec 1st | Jan 20th |
59
+ | Jan 21, 1999 | Dec 1st | Jan 21st |
60
+ | Jan 22, 1999 | Dec 1st | Jan 22nd |
61
+ | Jan 23, 1999 | Dec 1st | Jan 23rd |
62
+ | Jan 24, 1999 | Dec 1st | Jan 24th |
63
+ | Jan 1, 1999 | 4th of July | 1st of January |
64
+ | Jan 1, 1999 | 4th of July, 1999 | 1st of January, 1999 |
65
+
37
66
  @time
38
67
  Scenario Outline: Formatting times by example
39
68
  Given the time September 8, 2011 at 13:31:27
40
69
  When I stamp the example "<example>"
41
70
  Then I produce "<output>"
42
- And I like turtles
43
71
 
44
72
  Examples:
45
73
  | example | output |
@@ -59,7 +87,6 @@ Feature: Stamping a date
59
87
  Given the time September 8, 2011 at 13:31:27
60
88
  When I stamp the example "<example>"
61
89
  Then I produce "<output>"
62
- And I like turtles
63
90
 
64
91
  Examples:
65
92
  | example | output |
@@ -1,8 +1,6 @@
1
1
  module StampStepHelpers
2
2
  def month(month_name)
3
- month = Date::MONTHNAMES.index(month_name) || Date::ABBR_MONTHNAMES.index(month_name)
4
- assert (1..12).include?(month), "Invalid month: #{month_name}"
5
- return month
3
+ Date::MONTHNAMES.index(month_name) || Date::ABBR_MONTHNAMES.index(month_name)
6
4
  end
7
5
  end
8
6
  World(StampStepHelpers)
@@ -14,10 +14,12 @@ module Stamp
14
14
  MERIDIAN_LOWER_REGEXP = /^(a|p)m$/
15
15
  MERIDIAN_UPPER_REGEXP = /^(A|P)M$/
16
16
 
17
+ ORDINAL_DAY_REGEXP = /^(\d{1,2})(st|nd|rd|th)$/
18
+
17
19
  # Disambiguate based on value
18
20
  OBVIOUS_YEARS = 60..99
19
21
  OBVIOUS_MONTHS = 12
20
- OBVIOUS_DAYS = 28..31
22
+ OBVIOUS_DAYS = 24..31
21
23
  OBVIOUS_24_HOUR = 13..23
22
24
 
23
25
  TWO_DIGIT_DATE_SUCCESSION = {
@@ -39,6 +41,20 @@ module Stamp
39
41
  @target = target_date_or_time
40
42
  end
41
43
 
44
+ # Cribbed from ActiveSupport to format ordinal days (1st, 2nd, 23rd etc).
45
+ def ordinalize(number)
46
+ if (11..13).include?(number.to_i % 100)
47
+ "#{number}th"
48
+ else
49
+ case number.to_i % 10
50
+ when 1; "#{number}st"
51
+ when 2; "#{number}nd"
52
+ when 3; "#{number}rd"
53
+ else "#{number}th"
54
+ end
55
+ end
56
+ end
57
+
42
58
  def translate(example)
43
59
  # extract any substrings that look like times, like "23:59" or "8:37 am"
44
60
  before, time_example, after = example.partition(TIME_REGEXP)
@@ -115,6 +131,9 @@ module Stamp
115
131
  when FOUR_DIGIT_REGEXP
116
132
  '%Y'
117
133
 
134
+ when ORDINAL_DAY_REGEXP
135
+ ordinalize(@target.day)
136
+
118
137
  when TWO_DIGIT_REGEXP
119
138
  # try to discern obvious intent based on the example value
120
139
  case token.to_i
@@ -1,3 +1,3 @@
1
1
  module Stamp
2
- VERSION = "0.1.6"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,60 +1,57 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: stamp
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 6
9
- version: 0.1.6
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Jeremy Weiskotten
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2011-07-16 00:00:00 -04:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-09-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: cucumber
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
31
22
  type: :development
32
- version_requirements: *id001
33
- - !ruby/object:Gem::Dependency
34
- name: rake
35
23
  prerelease: false
36
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
37
25
  none: false
38
- requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- segments:
42
- - 0
43
- version: "0"
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
44
38
  type: :development
45
- version_requirements: *id002
46
- description: Format dates and times based on human-friendly examples, not arcane strftime directives.
47
- email:
39
+ 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: Format dates and times based on human-friendly examples, not arcane strftime
47
+ directives.
48
+ email:
48
49
  - jeremy@weiskotten.com
49
50
  executables: []
50
-
51
51
  extensions: []
52
-
53
52
  extra_rdoc_files: []
54
-
55
- files:
53
+ files:
56
54
  - .gitignore
57
- - .rvmrc
58
55
  - .travis.yml
59
56
  - .yardopts
60
57
  - Gemfile
@@ -65,46 +62,37 @@ files:
65
62
  - cucumber.yml
66
63
  - features/stamp.feature
67
64
  - features/step_definitions/stamp_steps.rb
68
- - features/step_definitions/turtle_steps.rb
69
65
  - features/support/env.rb
70
66
  - lib/stamp.rb
71
67
  - lib/stamp/translator.rb
72
68
  - lib/stamp/version.rb
73
69
  - stamp.gemspec
74
- has_rdoc: true
75
70
  homepage: https://github.com/jeremyw/stamp
76
71
  licenses: []
77
-
78
72
  post_install_message:
79
73
  rdoc_options: []
80
-
81
- require_paths:
74
+ require_paths:
82
75
  - lib
83
- required_ruby_version: !ruby/object:Gem::Requirement
76
+ required_ruby_version: !ruby/object:Gem::Requirement
84
77
  none: false
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- segments:
89
- - 0
90
- version: "0"
91
- required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ required_rubygems_version: !ruby/object:Gem::Requirement
92
83
  none: false
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- segments:
97
- - 0
98
- version: "0"
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
99
88
  requirements: []
100
-
101
89
  rubyforge_project:
102
- rubygems_version: 1.3.7
90
+ rubygems_version: 1.8.24
103
91
  signing_key:
104
92
  specification_version: 3
105
93
  summary: Date and time formatting for humans.
106
- test_files:
94
+ test_files:
107
95
  - features/stamp.feature
108
96
  - features/step_definitions/stamp_steps.rb
109
- - features/step_definitions/turtle_steps.rb
110
97
  - features/support/env.rb
98
+ has_rdoc:
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm use 1.9.2@stamp
@@ -1,5 +0,0 @@
1
- # http://www.youtube.com/watch?v=CMNry4PE93Y
2
- Then /^I like turtles$/ do
3
- turtles_are_awesome = true
4
- assert turtles_are_awesome
5
- end