mdemare-like_time 0.1.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.
Files changed (5) hide show
  1. data/Rakefile +13 -0
  2. data/VERSION +1 -0
  3. data/lib/time.rb +77 -0
  4. data/like_time.gemspec +34 -0
  5. metadata +56 -0
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ begin
2
+ require 'jeweler'
3
+ Jeweler::Tasks.new do |gemspec|
4
+ gemspec.name = "like_time"
5
+ gemspec.authors = ["Michiel de Mare"]
6
+ gemspec.homepage = %q{http://github.com/mdemare/like_time}
7
+ gemspec.summary = %q{Allows you to specify time and date formats close to your own language.}
8
+ gemspec.description = %q{A human alternative to Time#strftime.}
9
+ gemspec.email = %q{michieldemare@gmail.com}
10
+ end
11
+ rescue LoadError
12
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
13
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.1
data/lib/time.rb ADDED
@@ -0,0 +1,77 @@
1
+ class Time
2
+ def Time.default_template_language(lang)
3
+ @lang = lang
4
+ end
5
+
6
+ def Time.default_template_language
7
+ @lang
8
+ end
9
+
10
+ LANG_DATA = {
11
+ :en => {
12
+ :conversion => {"31" => "%d", "23" => "%H", "59" => "%M", "12" => "%m", "pm" => "%p",
13
+ "99" => "%y", "1999" => "%Y",
14
+ "su" => :sday, "sun" => :day, "sunday" => :lday, "dec" => :month, "december" => :lmonth },
15
+ :sday => %w(Su Mo Tu We Th Fr Sa),
16
+ :day => %w(Sun Mon Tue Wed Thu Fri Sat),
17
+ :lday => %w(Sunday Monday Tuesday Wednesday Thursday Friday Saturday),
18
+ :month => %w(X jan feb mar apr may jun jul aug sep oct nov dec),
19
+ :lmonth => %w(X january february march april may june july august september october november december)},
20
+ :nl => {
21
+ :conversion => {"31" => "%d", "23" => "%H", "59" => "%M", "12" => "%m", "pm" => "%p",
22
+ "99" => "%y", "1999" => "%Y",
23
+ "zo" => :day, "zondag" => :lday, "dec" => :month, "december" => :lmonth },
24
+ :day => %w(Zo Ma Di Wo Do Vr Za),
25
+ :lday => %w(Zondag Maandag Dinsdag Woensdag Donderdag Vrijdag Zaterdag),
26
+ :month => %w(X jan feb mrt apr mei jun jul aug sep okt nov dec),
27
+ :lmonth => %w(X januari februari maart april mei juni juli augustus september oktober november december)}}
28
+
29
+ # +template+ Uses a natural format to specify a date/time format, by using a reference date/time.
30
+ # This time is Sunday, December 31, 23:59.
31
+ # Capitalization of months/weekdays will match that in template.
32
+ # The following subset of strftime is supported:
33
+ # - Year long (1999)
34
+ # - Year short (99)
35
+ # - Month long (december)
36
+ # - Month short (dec)
37
+ # - Month numeric (12)
38
+ # - Date (31)
39
+ # - Weekday long (Sunday)
40
+ # - Weekday short (Sun)
41
+ # - Weekday very short (Su)
42
+ # - 24-Hours (23)
43
+ # - AM/PM (pm)
44
+ # - Minutes (59)
45
+
46
+ # +lang+ A two-letter string or symbol. (e.g. "en")
47
+ # Currently, only English and Dutch are supported. The default language can
48
+ # be set using the Time.default_template_language= accessor.
49
+ # Examples for Dutch:
50
+ # Time.now.like("Zondag 31 DECEMBER 23:59")
51
+ # Time.now.like("Zo 31 dec")
52
+ # Time.now.like("31-12-99")
53
+ # Time.now.like("Zondag om 23 uur 59")
54
+ # Time.now.like("December, 1999")
55
+ def like(template, lang = nil)
56
+ lang_data = LANG_DATA[(lang || Time.default_template_language).to_sym]
57
+ raise "Language #{lang} not supported." unless lang_data
58
+ s = template.dup
59
+ match_capitalization = lambda {|t,z| z == z.downcase ? t.downcase : z == z.upcase ? t.upcase : t.capitalize }
60
+ s.scan(/\d+|\w+/).each do |x|
61
+ if y = lang_data[:conversion][x.downcase]
62
+ if String === y
63
+ s.gsub! /\b#{x}\b/, y
64
+ elsif y == :day or y == :lday
65
+ s.gsub! /\b#{x}\b/, match_capitalization[lang_data[y][wday], x]
66
+ else
67
+ s.gsub! /\b#{x}\b/, match_capitalization[lang_data[y][month], x]
68
+ end
69
+ end
70
+ end
71
+ strftime s
72
+ end
73
+ end
74
+
75
+
76
+
77
+
data/like_time.gemspec ADDED
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{like_time}
5
+ s.version = "0.1.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Michiel de Mare"]
9
+ s.date = %q{2009-06-07}
10
+ s.description = %q{A human alternative to Time#strftime.}
11
+ s.email = %q{michieldemare@gmail.com}
12
+ s.files = [
13
+ "Rakefile",
14
+ "VERSION",
15
+ "lib/time.rb",
16
+ "like_time.gemspec"
17
+ ]
18
+ s.has_rdoc = true
19
+ s.homepage = %q{http://github.com/mdemare/like_time}
20
+ s.rdoc_options = ["--charset=UTF-8"]
21
+ s.require_paths = ["lib"]
22
+ s.rubygems_version = %q{1.3.1}
23
+ s.summary = %q{Allows you to specify time and date formats close to your own language.}
24
+
25
+ if s.respond_to? :specification_version then
26
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
27
+ s.specification_version = 2
28
+
29
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
30
+ else
31
+ end
32
+ else
33
+ end
34
+ end
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mdemare-like_time
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Michiel de Mare
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-06-07 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: A human alternative to Time#strftime.
17
+ email: michieldemare@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - Rakefile
26
+ - VERSION
27
+ - lib/time.rb
28
+ - like_time.gemspec
29
+ has_rdoc: true
30
+ homepage: http://github.com/mdemare/like_time
31
+ post_install_message:
32
+ rdoc_options:
33
+ - --charset=UTF-8
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: "0"
41
+ version:
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ version:
48
+ requirements: []
49
+
50
+ rubyforge_project:
51
+ rubygems_version: 1.2.0
52
+ signing_key:
53
+ specification_version: 2
54
+ summary: Allows you to specify time and date formats close to your own language.
55
+ test_files: []
56
+