like_1999 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc ADDED
@@ -0,0 +1,58 @@
1
+ = like_1999
2
+
3
+ * http://github.com/mdemare/like_1999
4
+
5
+ == DESCRIPTION:
6
+
7
+ Uses natural language to format time and dates.
8
+
9
+ == SYNOPSIS:
10
+
11
+ The canonical, easy-to-remember point in time that this gem uses, is 23:59:00 on Sunday 31 december 1999.
12
+ For the British/American notation, use 11:59:00 PM. The timezone is UTC. The day of the year is 366.
13
+
14
+ To set the default language, use:
15
+ Time.set_default_template_language(lang)
16
+
17
+ Supported languages are: :en (english), :nl (Dutch), :fr (French), :de (German).
18
+ Spanish, Italian and Swedish are not yet fully supported.
19
+
20
+ require 'like_1999'
21
+
22
+ Time.now.like("The current time is 23:59:00; the date is Dec 31 1999, or 12/31/99. It is a Sunday")
23
+ => "The current time is 01:30:48; the date is Dec 20 2012, or 01/20/12. It is a Sunday"
24
+
25
+ `like` takes an optional second language parameter
26
+
27
+ Time.now.like("Vandaag is het zondag", :nl)
28
+ => "Vandaag is het vrijdag"
29
+
30
+ == INSTALL:
31
+
32
+ gem install like_1999
33
+
34
+
35
+ == LICENSE:
36
+
37
+ (The MIT License)
38
+
39
+ Copyright (c) 2012 Michiel de Mare
40
+
41
+ Permission is hereby granted, free of charge, to any person obtaining
42
+ a copy of this software and associated documentation files (the
43
+ 'Software'), to deal in the Software without restriction, including
44
+ without limitation the rights to use, copy, modify, merge, publish,
45
+ distribute, sublicense, and/or sell copies of the Software, and to
46
+ permit persons to whom the Software is furnished to do so, subject to
47
+ the following conditions:
48
+
49
+ The above copyright notice and this permission notice shall be
50
+ included in all copies or substantial portions of the Software.
51
+
52
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
53
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
54
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
55
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
56
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
57
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
58
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/lib/like_1999.rb ADDED
@@ -0,0 +1,95 @@
1
+ # encoding: utf-8
2
+ $:.unshift(File.dirname(__FILE__)) unless
3
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
4
+
5
+ class Date
6
+ def like(s)
7
+ self.to_time.like(s)
8
+ end
9
+ end
10
+
11
+ def Time.set_default_template_language(lang)
12
+ @lang = lang
13
+ end
14
+
15
+ def Time.default_template_language
16
+ @lang
17
+ end
18
+
19
+ class Time
20
+ CONVERSION = { "99" => "%y", "1999" => "%Y", "12" => "%m", "366" => "%j", "31" => "%d",
21
+ "23" => "%H", "11" => "%I", "pm" => "%p", "59" => "%M", "00" => "%S", "utc" => "%Z"
22
+ }
23
+
24
+ # {"th" => :en, "ju" => :es, "do" => [:de, :nl], "je" => :fr, "to" => :se, "gi" => :it, }
25
+ # {"su" => :en, "do" => [:es,:it], "zo" => :nl, "so" => :de, "di" => :fr, "sö" => :se }
26
+ # {"may" => [:en,:es], "mei" => :nl, "mai" => [:de,:fr], "maj" => :se, "mag" => :it, }
27
+
28
+ LANG_DATA = {
29
+ :en => {
30
+ :conversion => {"su" => :sday, "sun" => :day, "sunday" => :lday, "dec" => :month, "december" => :lmonth },
31
+ :sday => %w(su mo tu we th fr sa),
32
+ :day => %w(sun mon tue wed thu fri sat),
33
+ :lday => %w(sunday monday tuesday wednesday thursday friday saturday),
34
+ :month => %w(X jan feb mar apr may jun jul aug sep oct nov dec),
35
+ :lmonth => %w(X january february march april may june july august september october november december)},
36
+ :es => {
37
+ :conversion => {"sun" => :day, "sunday" => :lday, "dec" => :month, "december" => :lmonth },
38
+ :day => %w(lu ma mi ju vi sa do),
39
+ :lday => %w(),
40
+ :month => %w(X ene feb mar abr may jun jul ago sep oct nov dic),
41
+ :lmonth => %w(X )},
42
+ :it => {
43
+ :conversion => {"sun" => :day, "sunday" => :lday, "dec" => :month, "december" => :lmonth },
44
+ :sday => %w(lu ma me gi ve sa do),
45
+ :day => %w(lun mar mer gio ven sab dom),
46
+ :lday => %w(),
47
+ :month => %w(X gen feb mar apr mag giu lug ago set ott nov dic),
48
+ :lmonth => %w(X )},
49
+ :se => {
50
+ :conversion => {"sun" => :day, "sunday" => :lday, "dec" => :month, "december" => :lmonth },
51
+ :sday => %w(må ti on to fr lö sö),
52
+ :day => %w(mån tis ons tor fre lör sön),
53
+ :lday => %w(),
54
+ :month => %w(X jan febr mars april maj juni juli aug sept okt nov dec),
55
+ :lmonth => %w(X )},
56
+ :nl => {
57
+ :conversion => {"zo" => :day, "zondag" => :lday, "dec" => :month, "december" => :lmonth },
58
+ :day => %w(zo ma di wo do vr za),
59
+ :lday => %w(zondag maandag dinsdag woensdag donderdag vrijdag zaterdag),
60
+ :month => %w(X jan feb mrt apr mei jun jul aug sep okt nov dec),
61
+ :lmonth => %w(X januari februari maart april mei juni juli augustus september oktober november december)},
62
+ :de => {
63
+ :conversion => {"so" => :day, "sonntag" => :lday, "dez" => :month, "dezember" => :lmonth },
64
+ :day => %w(so mo di mi do fr sa),
65
+ :lday => %w(sonntag montag dienstag mittwoch donnerstag freitag samstag),
66
+ :month => %w(X jan feb mär apr mai jun jul aug sep okt nov dez),
67
+ :lmonth => %w(X januar februar märz april mai juni juli august september oktober november dezember)},
68
+ :fr => {
69
+ :conversion => {"di" => :day, "dimanche" => :lday, "déc" => :month, "décembre" => :lmonth },
70
+ :day => %w(di lu ma me je ve sa),
71
+ :lday => %w(dimanche lundi mardi mercredi jeudi vendredi samedi),
72
+ :month => %w(x janv févr mars avril mai juin juil août sept oct nov déc),
73
+ :lmonth => %w(X janvier février mars avril mai juin juillet août septembre octobre novembre décembre)},
74
+ }
75
+
76
+ # +s+ Uses a natural format to specify a date/time format, by using a reference date/time.
77
+ # This time is Sunday, December 31 1999, 23:59 UTC, or Sun 12-31-99 11:59 PM.
78
+ # See README for details.
79
+ # +lang+ A two-letter string or symbol. (e.g. "en")
80
+ def like(s, lang = nil)
81
+ l = lang || Time.default_template_language || :en
82
+ lang_data = LANG_DATA[l.to_sym]
83
+ raise "Language #{lang} not supported." unless lang_data
84
+ match_capitalization = lambda {|t,z| z == z.downcase ? t.downcase : z == z.upcase ? t.upcase : t.capitalize }
85
+ t = s.split(/([A-Z]+)|(\d+)/i).map do |x|
86
+ if y = lang_data[:conversion][x.downcase]
87
+ unit = (y == :day || y == :lday) ? wday : month
88
+ match_capitalization[lang_data[y][unit], x]
89
+ else
90
+ CONVERSION[x.downcase] || x
91
+ end
92
+ end
93
+ strftime t.join
94
+ end
95
+ end
@@ -0,0 +1,3 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/like_1999'
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestLike1999 < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert true
10
+ end
11
+ end
metadata ADDED
@@ -0,0 +1,51 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: like_1999
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Michiel de Mare
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-20 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description:
15
+ email: mdemare@me.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files:
19
+ - README.rdoc
20
+ files:
21
+ - README.rdoc
22
+ - test/test_helper.rb
23
+ - test/test_like_1999.rb
24
+ - lib/like_1999.rb
25
+ homepage: http://github.com/mdemare/like_1999
26
+ licenses: []
27
+ post_install_message:
28
+ rdoc_options:
29
+ - --main
30
+ - README.rdoc
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements: []
46
+ rubyforge_project:
47
+ rubygems_version: 1.8.11
48
+ signing_key:
49
+ specification_version: 3
50
+ summary: Use natural language to format time and dates.
51
+ test_files: []