stamp 0.1.6 → 0.2.0

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