date-formatter 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c390fc86284148fbbd76384d5e0a2a81aa92db33
4
+ data.tar.gz: b0a78b8d0d1b342d99125b7b7b64a5cecc2265f3
5
+ SHA512:
6
+ metadata.gz: 4b470f1e3b04ec4146175e488c1b210129799b3083188f9e21e1cc44c94b12303e5a47a535d740e187334026a38cfe8852cfe44774e125b1ad9cf46f4d8f370f
7
+ data.tar.gz: b751629fdfb1be81962c61a00d1ae28cb5754a4112b59a06c0861d2c763bd4b8a0dbceea14e9be61834e8977a8ac048e672308bc21f685e1675a529501977790
@@ -0,0 +1,4 @@
1
+
2
+ ### 0.0.1 / 2020-02-16
3
+
4
+ * Everything is new. First release
@@ -0,0 +1,9 @@
1
+ CHANGELOG.md
2
+ Manifest.txt
3
+ README.md
4
+ Rakefile
5
+ lib/date-formatter.rb
6
+ lib/date-formatter/version.rb
7
+ lib/date/formatter.rb
8
+ test/helper.rb
9
+ test/test_format.rb
@@ -0,0 +1,42 @@
1
+ # date-formatter - date formatter by example; auto-builds the strftime format string from a example date
2
+
3
+
4
+ * home :: [github.com/feedreader/pluto](https://github.com/feedreader/pluto)
5
+ * bugs :: [github.com/feedreader/pluto/issues](https://github.com/feedreader/pluto/issues)
6
+ * gem :: [rubygems.org/gems/date-formatter](https://rubygems.org/gems/date-formatter)
7
+ * rdoc :: [rubydoc.info/gems/date-formatter](http://rubydoc.info/gems/date-formatter)
8
+ * forum :: [groups.google.com/group/wwwmake](http://groups.google.com/group/wwwmake)
9
+
10
+
11
+
12
+
13
+ ## Usage
14
+
15
+
16
+
17
+ Examples:
18
+
19
+ | Date by Example | => `strftime` Format |
20
+ |-------------------------|----------------|
21
+ | January 04, 2020 | => `%B %d, %Y` |
22
+ | Fri, Jan 04 | => `%a, %b %d` |
23
+ | 4 Jan 2020 | => `%-d %b %Y` |
24
+ | Friday, January 4, 2020 | => `%A, %B %-d, %Y` |
25
+ | Fri, Jan 04 8:00 | => `%a, %b %d %-H:%M` |
26
+ | 4 Jan 2020 08:00 | => `%-d %b %Y %H:%M` |
27
+
28
+
29
+
30
+
31
+
32
+ ## License
33
+
34
+ ![](https://publicdomainworks.github.io/buttons/zero88x31.png)
35
+
36
+ The `date-formatter` scripts are dedicated to the public domain.
37
+ Use it as you please with no restrictions whatsoever.
38
+
39
+ ## Questions? Comments?
40
+
41
+ Send them along to the [wwwmake Forum/Mailing List](http://groups.google.com/group/wwwmake).
42
+ Thanks!
@@ -0,0 +1,28 @@
1
+ require 'hoe'
2
+ require './lib/date-formatter/version.rb'
3
+
4
+ Hoe.spec 'date-formatter' do
5
+
6
+ self.version = DateByExample::VERSION
7
+
8
+ self.summary = "date-formatter - date formatter by example; auto-builds the strftime format string from a example date"
9
+ self.description = summary
10
+
11
+ self.urls = ['https://github.com/feedreader/pluto']
12
+
13
+ self.author = 'Gerald Bauer'
14
+ self.email = 'wwwmake@googlegroups.com'
15
+
16
+ # switch extension to .markdown for gihub formatting
17
+ self.readme_file = 'README.md'
18
+ self.history_file = 'CHANGELOG.md'
19
+
20
+ self.extra_deps = []
21
+
22
+ self.licenses = ['Public Domain']
23
+
24
+ self.spec_extras = {
25
+ required_ruby_version: '>= 2.2.2'
26
+ }
27
+
28
+ end
@@ -0,0 +1,138 @@
1
+ require 'pp'
2
+ require 'time'
3
+ require 'date'
4
+
5
+
6
+
7
+ ###
8
+ # our own code
9
+ require 'date-formatter/version' # let version always go first
10
+
11
+
12
+
13
+ module DateByExample
14
+
15
+ ##
16
+ ## todo/fix: improve end of MONTH_RE
17
+ ## do NOT use \b - also break on everything but a-z incl. numbers/digits - (double) check!!!
18
+
19
+ MONTH_NAME_ABBREV_RE = %r<
20
+ \b(
21
+ Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec
22
+ )\b
23
+ >x
24
+
25
+
26
+ ## note: May is turned into an abbreviated month name (%b)
27
+ MONTH_NAME_RE = %r<
28
+ \b(
29
+ January|February|March|
30
+ April|June| ## note: May is "ambigious" and, thus, NOT included
31
+ July|August|September|
32
+ October|November|December
33
+ )\b
34
+ >x
35
+
36
+ DAY_NAME_ABBREV_RE = %r<
37
+ \b(
38
+ Mon|Tue|Wed|Thu|Fri|Sat|Sun
39
+ )\b
40
+ >x
41
+
42
+ DAY_NAME_RE = %r<
43
+ \b(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)\b
44
+ >x
45
+
46
+ YEAR_RE = %r<
47
+ \b([12][0-9][0-9][0-9])\b
48
+ >x
49
+
50
+ DAY_WITH_ZERO_RE = %r<
51
+ \b(0[1-9])\b
52
+ >x
53
+
54
+ DAY_RE = %r<
55
+ \b([1-9]|[123][0-9])\b
56
+ >x
57
+
58
+ TIME_WITH_ZERO_RE = %r<
59
+ \b(0[0-9]:[0-9][0-9])\b
60
+ >x
61
+
62
+ TIME_RE = %r<
63
+ \b(([1-9]|[12][0-9]):[0-9][0-9])\b
64
+ >x
65
+
66
+
67
+ def self.to_strftime( spec )
68
+ spec = spec.gsub( MONTH_NAME_RE, '%B' ) # %B - The full month name ("January")
69
+ spec = spec.gsub( MONTH_NAME_ABBREV_RE, '%b') # %b - The abbreviated month name ("Jan")
70
+ spec = spec.gsub( DAY_NAME_RE, '%A' ) # %A - The full weekday name ("Sunday")
71
+ spec = spec.gsub( DAY_NAME_ABBREV_RE, '%a') # %a - The abbreviated weekday name ("Sun")
72
+
73
+ spec = spec.gsub( TIME_WITH_ZERO_RE, '%H:%M' ) # %H - Hour of the day, 24-hour clock (00..23)
74
+ # %M - Minute of the hour (00..59)
75
+ spec = spec.gsub( TIME_RE, '%-H:%M' )
76
+
77
+ spec = spec.gsub( YEAR_RE, '%Y' ) # %Y - Year with century
78
+ spec = spec.gsub( DAY_WITH_ZERO_RE, '%d' ) # %d - Day of the month (01..31)
79
+ spec = spec.gsub( DAY_RE, '%-d' ) # %d - Day of the month without a leading zero (1..31)
80
+
81
+ ## add some "higher-level" symbolic format shortcuts too
82
+ spec = spec.gsub( 'YYYY', '%Y' )
83
+ spec = spec.gsub( 'YY', '%y' )
84
+ spec = spec.gsub( 'MM', '%m' )
85
+ spec = spec.gsub( 'DD', '%d' )
86
+ spec = spec.gsub( 'D', '%-d')
87
+
88
+ spec
89
+ end
90
+ end
91
+
92
+
93
+ ###
94
+ # String#to_strfime
95
+ #
96
+
97
+ # Date#format
98
+ # Time#format
99
+ # DateTime#format
100
+
101
+
102
+ ## test with
103
+ # January 04, 2010
104
+ # Fri, Jan 04
105
+ # 4 Jan 2010
106
+ # Friday, January 4, 2010
107
+ # ...
108
+
109
+
110
+
111
+
112
+ class String
113
+ def to_strftime() DateByExample.to_strftime( self ); end
114
+ end
115
+
116
+ class Date
117
+ def format( spec ) self.strftime( spec.to_strftime ); end
118
+ end
119
+
120
+ class DateTime
121
+ def format( spec ) self.strftime( spec.to_strftime ); end
122
+ end
123
+
124
+ class Time
125
+ def format( spec ) self.strftime( spec.to_strftime ); end
126
+ end
127
+
128
+
129
+ class NilClass
130
+ def format( spec ) ''; end
131
+ end
132
+
133
+
134
+
135
+
136
+ # say hello
137
+ puts DateByExample.banner if $DEBUG || (defined?($RUBYLIBS_DEBUG) && $RUBYLIBS_DEBUG)
138
+
@@ -0,0 +1,20 @@
1
+
2
+ module DateByExample
3
+ MAJOR = 0 ## todo: namespace inside version or something - why? why not??
4
+ MINOR = 0
5
+ PATCH = 1
6
+ VERSION = [MAJOR,MINOR,PATCH].join('.')
7
+
8
+ def self.version
9
+ VERSION
10
+ end
11
+
12
+ def self.banner
13
+ "date-formatter/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
14
+ end
15
+
16
+ def self.root
17
+ File.expand_path( File.dirname(File.dirname(File.dirname(__FILE__))) )
18
+ end
19
+ end # module DateByExample
20
+
@@ -0,0 +1 @@
1
+ require_relative '../date-formatter' ## note: allow require 'date/formatter' too (in addition to require 'date-formatter')
@@ -0,0 +1,7 @@
1
+ ## minitest setup
2
+ require 'minitest/autorun'
3
+
4
+ ## our own code
5
+ require 'date/formatter' ## or require 'date-formatter'
6
+
7
+
@@ -0,0 +1,55 @@
1
+ ###
2
+ # to run use
3
+ # ruby -I ./lib -I ./test test/test_format.rb
4
+
5
+
6
+ require 'helper'
7
+
8
+ class TestFormat < MiniTest::Test
9
+
10
+ def test_format
11
+ dates = { 'January 02, 2006' => '%B %d, %Y',
12
+ 'Mon, Jan 02' => '%a, %b %d',
13
+ '2 Jan 2006' => '%-d %b %Y',
14
+ 'Monday, January 2, 2006' => '%A, %B %-d, %Y',
15
+
16
+ 'Mon, Jan 02 3:00' => '%a, %b %d %-H:%M',
17
+ '2 Jan 2006 03:00' => '%-d %b %Y %H:%M',
18
+ '2006' => '%Y',
19
+
20
+ 'YYYY-MM-DD' => ['%Y-%m-%d', '2006-01-02'],
21
+ 'YY-MM-DD' => ['%y-%m-%d', '06-01-02'],
22
+ 'YY-MM-D' => ['%y-%m-%-d', '06-01-2'],
23
+
24
+ 'YYYYMMDD' => ['%Y%m%d', '20060102'],
25
+ 'YYMMDD' => ['%y%m%d', '060102'],
26
+ 'YYMMD' => ['%y%m%-d', '06012'],
27
+ 'YYYY' => ['%Y', '2006'],
28
+ }
29
+
30
+ dates.each do |date, exp|
31
+ assert_format( date, exp )
32
+ end
33
+ end
34
+
35
+
36
+ def assert_format( spec, exp )
37
+ strf = DateByExample.to_strftime( spec )
38
+ now = Time.new( 2006, 1, 2, 3 ) ## Mon, Jan 2, 3:00 2006
39
+ str = now.strftime( strf )
40
+
41
+ puts "#{spec} => #{strf} => #{str}"
42
+
43
+ if exp.is_a?( Array )
44
+ exp_strf = exp[0]
45
+ exp_str = exp[1]
46
+ else
47
+ exp_strf = exp
48
+ exp_str = spec ## same as passed in format specifier/string
49
+ end
50
+
51
+ assert_equal exp_strf, strf
52
+ assert_equal exp_str, str
53
+ end
54
+
55
+ end # class TestFormat
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: date-formatter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Gerald Bauer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-02-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rdoc
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: hoe
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.16'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.16'
41
+ description: date-formatter - date formatter by example; auto-builds the strftime
42
+ format string from a example date
43
+ email: wwwmake@googlegroups.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files:
47
+ - CHANGELOG.md
48
+ - Manifest.txt
49
+ - README.md
50
+ files:
51
+ - CHANGELOG.md
52
+ - Manifest.txt
53
+ - README.md
54
+ - Rakefile
55
+ - lib/date-formatter.rb
56
+ - lib/date-formatter/version.rb
57
+ - lib/date/formatter.rb
58
+ - test/helper.rb
59
+ - test/test_format.rb
60
+ homepage: https://github.com/feedreader/pluto
61
+ licenses:
62
+ - Public Domain
63
+ metadata: {}
64
+ post_install_message:
65
+ rdoc_options:
66
+ - "--main"
67
+ - README.md
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 2.2.2
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ requirements: []
81
+ rubyforge_project:
82
+ rubygems_version: 2.5.2
83
+ signing_key:
84
+ specification_version: 4
85
+ summary: date-formatter - date formatter by example; auto-builds the strftime format
86
+ string from a example date
87
+ test_files: []