mdemare-like_time 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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
+