yymmdd 0.0.1
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 +7 -0
- data/README.md +111 -0
- data/lib/yymmdd.rb +104 -0
- metadata +61 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 696bd0a2bba0616dd2ff927d26a761f7735d97d0
|
4
|
+
data.tar.gz: 74c7a0ae9df8974c85baf80cb5f783571f095bc5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 595d8186269bd5d7b5ad799de0fe260e9b38a68fe5c8bc2c94d97a7946a4fea6dc6cc6568d767448d0f483287f7efc0510cd620040ad1bd6183271fd4bf5eee7
|
7
|
+
data.tar.gz: c30dee3c333a7912c872aa2aebe1ec62cac621eb40fb325049657bb5648c2a21ff3d9d51fc787c0ca72d9afc13e904eb3ced4d45a5aa302a67e4f002b8c1f7f1
|
data/README.md
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
# YYMMDD
|
2
|
+
|
3
|
+
[](https://travis-ci.org/sshaw/yymmdd)
|
4
|
+
|
5
|
+
Tiny DSL for idiomatic date parsing and formatting.
|
6
|
+
|
7
|
+
## Overview
|
8
|
+
|
9
|
+
require "yymmdd"
|
10
|
+
|
11
|
+
include YYMMDD
|
12
|
+
|
13
|
+
puts yy/mm # 14/08 (i.e., today's date)
|
14
|
+
puts yyyy/mm # 2014/08
|
15
|
+
date = ymd(411207) # Date.new(1941, 12, 7)
|
16
|
+
|
17
|
+
date = Date.today
|
18
|
+
puts yyyy.mm.dd(date) # 2014.08.09
|
19
|
+
puts dd/mm/yy(date) # 08/09/14
|
20
|
+
puts ymd(date) # 1489
|
21
|
+
puts yymmdd(date) # 140809
|
22
|
+
|
23
|
+
date = yyyy.mm.dd("1941.12.07") # Date.new(1941, 12, 7)
|
24
|
+
date = mm.dd.yy("11.22.63") # Date.new(1963, 11, 22)
|
25
|
+
date = mm/dd/yy("11/21/99") # ...
|
26
|
+
date = mm/dd/yyyy("11/21/1999")
|
27
|
+
date = mm-dd-yyyy("11-21-1999")
|
28
|
+
date = m-d-y("11-21-99")
|
29
|
+
|
30
|
+
## Installation
|
31
|
+
|
32
|
+
### Rubygems:
|
33
|
+
|
34
|
+
gem install yymmdd
|
35
|
+
|
36
|
+
### Bundler:
|
37
|
+
|
38
|
+
gem "yymmdd"
|
39
|
+
|
40
|
+
## Usage
|
41
|
+
|
42
|
+
All functions are [`module_function`s](http://www.ruby-doc.org/core-2.1.2/Module.html#method-i-module_function)
|
43
|
+
so you must `include YYMMDD` to use them.
|
44
|
+
|
45
|
+
When given a `String` it will attempt to parse it as the specified format and return a `Date`.
|
46
|
+
|
47
|
+
When given a `Date` it will return a `String` in the specified format.
|
48
|
+
|
49
|
+
An `ArgumentError` is raised if the date can't be parsed or formatted.
|
50
|
+
|
51
|
+
With no arguments it will return an instance of a `String`-like object (it overrides `to_s` and `to_str`) representing
|
52
|
+
today's date in the specified format. In the most common cases you can treat it like a `String`:
|
53
|
+
|
54
|
+
date = yyyy/mm/dd
|
55
|
+
puts "Today's date: #{date}"
|
56
|
+
text = ["Dates: ", yy/mm, yyyy/mm].join(", ")
|
57
|
+
text = "A great date: " << date
|
58
|
+
|
59
|
+
But in some instances you'll have to expilictly call `to_s`:
|
60
|
+
|
61
|
+
printf "Today's date: %s\n", date.to_s
|
62
|
+
|
63
|
+
All the heavy lifting is done by `Date#strftime` and `Date.strptime`.
|
64
|
+
|
65
|
+
### Format Specifiers
|
66
|
+
|
67
|
+
The table below lists the available format specifiers. All of these can be separated by one of the supported
|
68
|
+
delimiters: `"/"`, `"."`, or `"-"`.
|
69
|
+
|
70
|
+
<table>
|
71
|
+
<thead>
|
72
|
+
<th>Name</th><th>Format</th>
|
73
|
+
</thead>
|
74
|
+
<tbody>
|
75
|
+
<tr>
|
76
|
+
<td><code>d</code></td><td>day of the year, no 0 padding</td>
|
77
|
+
</tr>
|
78
|
+
<tr>
|
79
|
+
<td><code>dd</code></td><td>day of the year</td>
|
80
|
+
</tr>
|
81
|
+
<tr>
|
82
|
+
<td><code>m</code></td><td>day of the month, no 0 padding</td>
|
83
|
+
</tr>
|
84
|
+
<tr>
|
85
|
+
<td><code>mm</code></td><td>day of the month</td>
|
86
|
+
</tr>
|
87
|
+
<tr>
|
88
|
+
<td><code>y</code></td><td>2 digit year</td>
|
89
|
+
</tr>
|
90
|
+
<tr>
|
91
|
+
<td><code>yy</code></td><td>2 digit year</td>
|
92
|
+
</tr>
|
93
|
+
<tr>
|
94
|
+
<td><code>yyyy</code></td><td>4 digit year</td>
|
95
|
+
</tr>
|
96
|
+
</tbody>
|
97
|
+
</table>
|
98
|
+
|
99
|
+
There are also combined, delimiterless functions for all combinations of the above, e.g., `ymd`, `mdy`, `yymmdd`, etc...
|
100
|
+
|
101
|
+
## Caveats
|
102
|
+
|
103
|
+
Due to operator precedence you can't mix delimiters.
|
104
|
+
|
105
|
+
## Author
|
106
|
+
|
107
|
+
Skye Shaw [sshaw AT gmail.com]
|
108
|
+
|
109
|
+
## License
|
110
|
+
|
111
|
+
Released under the MIT License: www.opensource.org/licenses/MIT
|
data/lib/yymmdd.rb
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
require "date"
|
2
|
+
|
3
|
+
module YYMMDD
|
4
|
+
VERSION = "0.0.1"
|
5
|
+
|
6
|
+
FORMATS = %w[yyyy yy y mm m dd d]
|
7
|
+
FORMATS.each do |abbr|
|
8
|
+
define_method(abbr) { |date = nil| DatePart.new(abbr, date) }
|
9
|
+
module_function abbr
|
10
|
+
end
|
11
|
+
|
12
|
+
groups = FORMATS.group_by { |fmt| fmt[0] }
|
13
|
+
groups["y"].each do |y|
|
14
|
+
groups["m"].each do |m|
|
15
|
+
groups["d"].each do |d|
|
16
|
+
[y, m, d].permutation.each do |set|
|
17
|
+
name = set.join("")
|
18
|
+
module_eval(<<-YMD, __FILE__, __LINE__)
|
19
|
+
def #{name}(date = nil)
|
20
|
+
#{set[0]} << #{set[1]} << #{set[2]}(date)
|
21
|
+
end
|
22
|
+
YMD
|
23
|
+
|
24
|
+
module_function name
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class DatePart # :nodoc:
|
31
|
+
# Output formats
|
32
|
+
STRFTIME = {
|
33
|
+
"y" => "%y",
|
34
|
+
"yy" => "%y",
|
35
|
+
"yyyy" => "%Y",
|
36
|
+
"m" => "%-m",
|
37
|
+
"mm" => "%m",
|
38
|
+
"d" => "%-d",
|
39
|
+
"dd" => "%d"
|
40
|
+
}.freeze
|
41
|
+
|
42
|
+
# Input formats, strptime() doesn't support "%-X" formats
|
43
|
+
STRPTIME = STRFTIME.merge("d" => "%d", "m" => "%m").freeze
|
44
|
+
|
45
|
+
attr :format
|
46
|
+
attr :date
|
47
|
+
|
48
|
+
def initialize(format, date)
|
49
|
+
@format = format
|
50
|
+
@date = date
|
51
|
+
@parts = [[self, ""]]
|
52
|
+
end
|
53
|
+
|
54
|
+
def /(date = nil)
|
55
|
+
process("/", date)
|
56
|
+
end
|
57
|
+
|
58
|
+
def -(date = nil)
|
59
|
+
process("-", date)
|
60
|
+
end
|
61
|
+
|
62
|
+
def << (date = nil)
|
63
|
+
process("", date)
|
64
|
+
end
|
65
|
+
|
66
|
+
FORMATS.each do |abbr|
|
67
|
+
define_method(abbr) { |date = nil| process(".", DatePart.new(abbr, date)) }
|
68
|
+
end
|
69
|
+
|
70
|
+
def to_s
|
71
|
+
build_date.to_s
|
72
|
+
end
|
73
|
+
|
74
|
+
def to_str
|
75
|
+
to_s
|
76
|
+
end
|
77
|
+
|
78
|
+
def inspect
|
79
|
+
to_s
|
80
|
+
end
|
81
|
+
|
82
|
+
private
|
83
|
+
def process(tok, part)
|
84
|
+
raise ArgumentError, "invalid format" unless part.is_a?(DatePart)
|
85
|
+
|
86
|
+
@parts << [part, tok]
|
87
|
+
return build_date if part.date
|
88
|
+
self
|
89
|
+
end
|
90
|
+
|
91
|
+
def build_date
|
92
|
+
date = @parts[-1][0].date || Date.today
|
93
|
+
|
94
|
+
if date.is_a?(Date)
|
95
|
+
fmt = @parts.map { |part, tok| sprintf("%s%s", tok, STRFTIME[part.format]) }.join("")
|
96
|
+
date.strftime(fmt)
|
97
|
+
else
|
98
|
+
fmt = @parts.map { |part, tok| sprintf("%s%s", tok, STRPTIME[part.format]) }.join("")
|
99
|
+
date = date.to_s if date.is_a?(Fixnum)
|
100
|
+
Date.strptime(date, fmt)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
metadata
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: yymmdd
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Skye Shaw
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-08-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.9'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.9'
|
27
|
+
description: |2
|
28
|
+
Tiny DSL for idiomatic parsing and formatting of numeric date components.
|
29
|
+
email: skye.shaw@gmail.com
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files:
|
33
|
+
- README.md
|
34
|
+
files:
|
35
|
+
- README.md
|
36
|
+
- lib/yymmdd.rb
|
37
|
+
homepage: http://github.com/sshaw/yymmdd
|
38
|
+
licenses:
|
39
|
+
- MIT
|
40
|
+
metadata: {}
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options: []
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
requirements: []
|
56
|
+
rubyforge_project:
|
57
|
+
rubygems_version: 2.2.2
|
58
|
+
signing_key:
|
59
|
+
specification_version: 4
|
60
|
+
summary: Tiny DSL for idiomatic date parsing and formatting
|
61
|
+
test_files: []
|