stamp 0.1.4 → 0.1.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/.gitignore +2 -0
- data/.yardopts +1 -0
- data/Gemfile.lock +1 -1
- data/features/stamp.feature +37 -25
- data/lib/stamp.rb +16 -5
- data/lib/stamp/version.rb +1 -1
- data/stamp.gemspec +1 -1
- metadata +7 -11
data/.yardopts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--markup markdown
|
data/Gemfile.lock
CHANGED
data/features/stamp.feature
CHANGED
@@ -9,37 +9,37 @@ 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
|
-
|
12
|
+
And I like turtles
|
13
13
|
|
14
14
|
Examples:
|
15
|
-
| example | output
|
16
|
-
| January | September
|
17
|
-
| Jan | Sep
|
18
|
-
| Jan 1 | Sep 8
|
19
|
-
| Jan 01 | Sep 08
|
20
|
-
| Jan 10 | Sep 08
|
21
|
-
| Jan 1, 1999 | Sep 8, 2011
|
22
|
-
| Monday | Thursday
|
23
|
-
| Tue, Jan 1 | Thu, Sep 8
|
15
|
+
| example | output |
|
16
|
+
| January | September |
|
17
|
+
| Jan | Sep |
|
18
|
+
| Jan 1 | Sep 8 |
|
19
|
+
| Jan 01 | Sep 08 |
|
20
|
+
| Jan 10 | Sep 08 |
|
21
|
+
| Jan 1, 1999 | Sep 8, 2011 |
|
22
|
+
| Monday | Thursday |
|
23
|
+
| Tue, Jan 1 | Thu, Sep 8 |
|
24
24
|
| Tuesday, January 1, 1999 | Thursday, September 8, 2011 |
|
25
|
-
| 01/1999 | 09/2011
|
26
|
-
| 01/01 | 09/08
|
27
|
-
| 01/31 | 09/08
|
28
|
-
| 01/99 | 09/11
|
29
|
-
| 01/01/1999 | 09/08/2011
|
30
|
-
| 12/31/99 | 09/08/11
|
31
|
-
| 31/12 | 08/09
|
32
|
-
| 31/12/99 | 08/09/11
|
33
|
-
| 31-Jan-1999 | 08-Sep-2011
|
34
|
-
| 1999-12-31 | 2011-09-08
|
35
|
-
| DOB: 12-31-1999 | DOB: 09-08-2011
|
25
|
+
| 01/1999 | 09/2011 |
|
26
|
+
| 01/01 | 09/08 |
|
27
|
+
| 01/31 | 09/08 |
|
28
|
+
| 01/99 | 09/11 |
|
29
|
+
| 01/01/1999 | 09/08/2011 |
|
30
|
+
| 12/31/99 | 09/08/11 |
|
31
|
+
| 31/12 | 08/09 |
|
32
|
+
| 31/12/99 | 08/09/11 |
|
33
|
+
| 31-Jan-1999 | 08-Sep-2011 |
|
34
|
+
| 1999-12-31 | 2011-09-08 |
|
35
|
+
| DOB: 12-31-1999 | DOB: 09-08-2011 |
|
36
36
|
|
37
37
|
@time
|
38
38
|
Scenario Outline: Formatting times by example
|
39
|
-
Given the time
|
39
|
+
Given the time September 8, 2011 at 13:31:27
|
40
40
|
When I stamp the example "<example>"
|
41
41
|
Then I produce "<output>"
|
42
|
-
|
42
|
+
And I like turtles
|
43
43
|
|
44
44
|
Examples:
|
45
45
|
| example | output |
|
@@ -53,13 +53,25 @@ Feature: Stamping a date
|
|
53
53
|
| 08:59:59 PM | 01:31:27 PM |
|
54
54
|
| 23:59:59 | 13:31:27 |
|
55
55
|
|
56
|
+
@date
|
57
|
+
@time
|
58
|
+
Scenario Outline: Formatting dates and times by example
|
59
|
+
Given the time September 8, 2011 at 13:31:27
|
60
|
+
When I stamp the example "<example>"
|
61
|
+
Then I produce "<output>"
|
62
|
+
And I like turtles
|
63
|
+
|
64
|
+
Examples:
|
65
|
+
| example | output |
|
66
|
+
| Jan 1, 1999 8:59 am | Sep 8, 2011 1:31 pm |
|
67
|
+
| 08:59 AM 1999-12-31 | 01:31 PM 2011-09-08 |
|
68
|
+
| Date: Jan 1, 1999 Time: 8:59 am | Date: Sep 8, 2011 Time: 1:31 pm |
|
56
69
|
|
57
70
|
Scenario: strftime directives just get passed through
|
58
71
|
Given the date December 21, 2012
|
59
72
|
When I stamp the example "John Cusack was in a movie about %b %d, %Y, but it wasn't very good."
|
60
73
|
Then I produce "John Cusack was in a movie about Dec 21, 2012, but it wasn't very good."
|
61
74
|
|
62
|
-
|
63
75
|
Scenario: Plain text just gets passed through
|
64
76
|
Given the date June 1, 1926
|
65
77
|
When I stamp the example "Marilyn Monroe was born on January 1, 1999."
|
@@ -77,7 +89,7 @@ Feature: Stamping a date
|
|
77
89
|
|
78
90
|
@wip
|
79
91
|
Scenario Outline: Examples that aren't supported yet
|
80
|
-
Given the
|
92
|
+
Given the time September 8, 2011 at 13:31:27
|
81
93
|
When I stamp the example "<example>"
|
82
94
|
Then I produce "<output>"
|
83
95
|
|
data/lib/stamp.rb
CHANGED
@@ -12,7 +12,7 @@ module Stamp
|
|
12
12
|
TWO_DIGIT_REGEXP = /^\d{2}$/
|
13
13
|
FOUR_DIGIT_REGEXP = /^\d{4}$/
|
14
14
|
|
15
|
-
TIME_REGEXP =
|
15
|
+
TIME_REGEXP = /(\d{1,2})(:)(\d{2})(\s*)(:)?(\d{2})?(\s*)?([ap]m)?/i
|
16
16
|
|
17
17
|
MERIDIAN_LOWER_REGEXP = /^(a|p)m$/
|
18
18
|
MERIDIAN_UPPER_REGEXP = /^(A|P)M$/
|
@@ -38,18 +38,27 @@ module Stamp
|
|
38
38
|
'%M' => '%S'
|
39
39
|
}
|
40
40
|
|
41
|
-
|
41
|
+
# Formats a date/time using a human-friendly example as a template.
|
42
|
+
#
|
43
|
+
# @param [String] example a human-friendly date/time example
|
44
|
+
# @return [String] the formatted date or time
|
45
|
+
#
|
46
|
+
# @example
|
47
|
+
# Date.new(2012, 12, 21).stamp("Jan 1, 1999") #=> "Dec 21, 2012"
|
42
48
|
def stamp(example)
|
43
49
|
strftime(strftime_format(example))
|
44
50
|
end
|
45
|
-
|
46
51
|
alias :stamp_like :stamp
|
47
52
|
alias :format_like :stamp
|
48
53
|
|
49
|
-
private
|
50
|
-
|
51
54
|
# Transforms the given string with example dates/times to a format string
|
52
55
|
# suitable for strftime.
|
56
|
+
#
|
57
|
+
# @param [String] example a human-friendly date/time example
|
58
|
+
# @return [String] a strftime-friendly format
|
59
|
+
#
|
60
|
+
# @example
|
61
|
+
# Date.today.strftime_format("Jan 1, 1999") #=> "%b %e, %Y"
|
53
62
|
def strftime_format(example)
|
54
63
|
# extract any substrings that look like times, like "23:59" or "8:37 am"
|
55
64
|
before, time_example, after = example.partition(TIME_REGEXP)
|
@@ -72,6 +81,8 @@ module Stamp
|
|
72
81
|
words.join
|
73
82
|
end
|
74
83
|
|
84
|
+
private
|
85
|
+
|
75
86
|
# Transforms tokens that look like date/time parts to strftime directives.
|
76
87
|
def strftime_directives(tokens)
|
77
88
|
previous_directive = nil
|
data/lib/stamp/version.rb
CHANGED
data/stamp.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.email = ["jeremy@weiskotten.com"]
|
10
10
|
s.homepage = "https://github.com/jeremyw/stamp"
|
11
11
|
s.summary = %Q{Date and time formatting for humans.}
|
12
|
-
s.description = %Q{Format dates and times based on examples, not arcane strftime directives.}
|
12
|
+
s.description = %Q{Format dates and times based on human-friendly examples, not arcane strftime directives.}
|
13
13
|
|
14
14
|
s.files = `git ls-files`.split("\n")
|
15
15
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stamp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
4
|
+
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
8
|
+
- 5
|
9
|
+
version: 0.1.5
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Jeremy Weiskotten
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2011-07-
|
17
|
+
date: 2011-07-16 00:00:00 -04:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -26,7 +25,6 @@ dependencies:
|
|
26
25
|
requirements:
|
27
26
|
- - ">="
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
28
|
segments:
|
31
29
|
- 0
|
32
30
|
version: "0"
|
@@ -40,13 +38,12 @@ dependencies:
|
|
40
38
|
requirements:
|
41
39
|
- - ">="
|
42
40
|
- !ruby/object:Gem::Version
|
43
|
-
hash: 3
|
44
41
|
segments:
|
45
42
|
- 0
|
46
43
|
version: "0"
|
47
44
|
type: :development
|
48
45
|
version_requirements: *id002
|
49
|
-
description: Format dates and times based on examples, not arcane strftime directives.
|
46
|
+
description: Format dates and times based on human-friendly examples, not arcane strftime directives.
|
50
47
|
email:
|
51
48
|
- jeremy@weiskotten.com
|
52
49
|
executables: []
|
@@ -59,6 +56,7 @@ files:
|
|
59
56
|
- .gitignore
|
60
57
|
- .rvmrc
|
61
58
|
- .travis.yml
|
59
|
+
- .yardopts
|
62
60
|
- Gemfile
|
63
61
|
- Gemfile.lock
|
64
62
|
- LICENSE.txt
|
@@ -86,7 +84,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
86
84
|
requirements:
|
87
85
|
- - ">="
|
88
86
|
- !ruby/object:Gem::Version
|
89
|
-
hash: 3
|
90
87
|
segments:
|
91
88
|
- 0
|
92
89
|
version: "0"
|
@@ -95,14 +92,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
95
92
|
requirements:
|
96
93
|
- - ">="
|
97
94
|
- !ruby/object:Gem::Version
|
98
|
-
hash: 3
|
99
95
|
segments:
|
100
96
|
- 0
|
101
97
|
version: "0"
|
102
98
|
requirements: []
|
103
99
|
|
104
100
|
rubyforge_project:
|
105
|
-
rubygems_version: 1.
|
101
|
+
rubygems_version: 1.3.7
|
106
102
|
signing_key:
|
107
103
|
specification_version: 3
|
108
104
|
summary: Date and time formatting for humans.
|