date-casually 0.1.0 → 0.2.0

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.
data/README.rdoc CHANGED
@@ -24,8 +24,8 @@ If you'd like to change what increments of time DateCasually returns you can use
24
24
 
25
25
  You can also pass in multiple options:
26
26
 
27
- (Date.today + 1).casual(:as => :days, :months, :years)
28
- #=> 'less than a month from now'
27
+ (Date.today + 12).casual(:as => :days, :months, :years)
28
+ #=> 'tomorrow'
29
29
 
30
30
  The default :as options for DatCasually are:
31
31
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{date-casually}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Theo Mills"]
12
- s.date = %q{2010-08-26}
12
+ s.date = %q{2010-09-05}
13
13
  s.description = %q{If you've never liked (and always seem to forget) the name of the Rails distance_of_time_in_words_to_now helper method, then it's time to date casually.}
14
14
  s.email = %q{twmills@twmills.com}
15
15
  s.extra_rdoc_files = [
@@ -28,14 +28,13 @@ Gem::Specification.new do |s|
28
28
  "lib/date-casually/calculator.rb",
29
29
  "lib/date-casually/config.rb",
30
30
  "lib/date-casually/translator.rb",
31
- "lib/date-casually/translators/day_of_week.rb",
32
- "lib/date-casually/translators/days.rb",
33
- "lib/date-casually/translators/months.rb",
34
- "lib/date-casually/translators/weeks.rb",
35
- "lib/date-casually/translators/years.rb",
31
+ "lib/date-casually/translator/day_of_week.rb",
32
+ "lib/date-casually/translator/days.rb",
33
+ "lib/date-casually/translator/months.rb",
34
+ "lib/date-casually/translator/weeks.rb",
35
+ "lib/date-casually/translator/years.rb",
36
36
  "lib/extensions/date.rb",
37
37
  "lib/locale/en.yml",
38
- "lib/locale/en.yml.sorted",
39
38
  "lib/util/alphabetize_yaml.rb",
40
39
  "test/helper.rb",
41
40
  "test/test_calculator.rb",
@@ -45,8 +44,7 @@ Gem::Specification.new do |s|
45
44
  "test/test_months.rb",
46
45
  "test/test_translator.rb",
47
46
  "test/test_weeks.rb",
48
- "test/test_years.rb",
49
- "test/timeline.rb"
47
+ "test/test_years.rb"
50
48
  ]
51
49
  s.homepage = %q{http://github.com/twmills/date-casually}
52
50
  s.rdoc_options = ["--charset=UTF-8"]
@@ -62,8 +60,7 @@ Gem::Specification.new do |s|
62
60
  "test/test_months.rb",
63
61
  "test/test_translator.rb",
64
62
  "test/test_weeks.rb",
65
- "test/test_years.rb",
66
- "test/timeline.rb"
63
+ "test/test_years.rb"
67
64
  ]
68
65
 
69
66
  if s.respond_to? :specification_version then
@@ -1,43 +1,137 @@
1
1
  module DateCasually
2
2
 
3
- # Contains short-cut calculations for determing the distance between
4
- # today and a supplied date.
5
- class Calculator
6
-
3
+ # Contains convenience calculations for determing the distance between
4
+ # today and a supplied date. All methods are module methods and should be called
5
+ # on the Calculator module.
6
+ # For example:
7
+ #
8
+ # DateCasually::Calculator.number_of_weeks_from_today(Date.today + 28)
9
+ # #=> 4
10
+ #
11
+ module Calculator
12
+
13
+ # Returns the number of full weeks from the supplied date to today's date.
14
+ #
15
+ # date - The Date used to compare against today's date and determine the number
16
+ # of weeks between the two.
17
+ #
18
+ # Examples (if today is 2010-09-03)
19
+ #
20
+ # DateCasually::Calculator.number_of_weeks_from_today(Date.today + 28)
21
+ # #=> 4
22
+ #
23
+ # DateCasually::Calculator.number_of_weeks_from_today(Date.today)
24
+ # #=> 0
25
+ #
26
+ # Returns the number of weeks between the supplied date and today.
7
27
  def self.number_of_weeks_from_today(date)
8
28
  ((Date.today - date) / 7).to_i.abs
9
29
  end
10
30
 
31
+ # Returns the number of months from to today's date to the supplied date.
32
+ #
33
+ # date - The Date used to compare against today's date and determine the number
34
+ # of months between the two.
35
+ #
36
+ # Examples (if today is 2010-09-03)
37
+ #
38
+ # DateCasually::Calculator.number_of_months_from_today(Date.today + 28)
39
+ # #=> 1
40
+ #
41
+ # Returns the number of months between the supplied date and today.
11
42
  def self.number_of_months_from_today(date)
12
43
  ((Date.today.month - date.month) + 12 * (Date.today.year - date.year)).abs
13
44
  end
14
45
 
46
+ # Returns the number of years from to today's date to the supplied date.
47
+ #
48
+ # date - The Date used to compare against today's date and determine the number
49
+ # of years between the two.
50
+ #
51
+ # Examples (if today is 2010-09-03)
52
+ #
53
+ # DateCasually::Calculator.number_of_months_from_today(Date.today + 365)
54
+ # #=> 1
55
+ #
56
+ # Returns the number of years between the supplied date and today.
15
57
  def self.number_of_years_from_today(date)
16
58
  years_diff = (Date.today.year - date.year).abs
17
59
  end
18
60
 
61
+ # Returns a range of dates for the current week. Starts with Sunday and ends
62
+ # on Saturday.
63
+ #
64
+ # Examples (if today is 2010-09-03)
65
+ #
66
+ # DateCasually::Calculator.this_week_range.to_s #to_s used for clarity
67
+ # #=> "2010-08-29..2010-09-04"
68
+ #
69
+ # Returns a range of dates for the current week.
19
70
  def self.this_week_range
20
71
  self.this_past_sunday..(self.this_past_sunday + 6)
21
72
  end
22
73
 
74
+ # Returns a range of dates for the coming week. Starts with Sunday and ends
75
+ # on Saturday.
76
+ #
77
+ # Examples (if today is 2010-09-03)
78
+ #
79
+ # DateCasually::Calculator.next_week_range.to_s #to_s used for clarity
80
+ # #=> "2010-09-05..2010-09-11"
81
+ #
82
+ # Returns a range of dates for the coming week.
23
83
  def self.next_week_range
24
84
  self.next_sunday..(self.next_sunday + 6)
25
85
  end
26
-
86
+
87
+ # Returns a range of dates for the previous week. Starts with Sunday and ends
88
+ # on Saturday.
89
+ #
90
+ # Examples (if today is 2010-09-03)
91
+ #
92
+ # DateCasually::Calculator.last_week_range.to_s #to_s used for clarity
93
+ # #=> "2010-08-22..2010-08-28"
94
+ #
95
+ # Returns a range of dates for the previous week.
27
96
  def self.last_week_range
28
97
  self.last_sunday..(self.last_sunday + 6)
29
98
  end
30
99
 
100
+ # Returns a range of dates for the coming week. Starts with Sunday and ends
101
+ # on Saturday.
102
+ #
103
+ # Examples (if today is 2010-09-03)
104
+ #
105
+ # DateCasually::Calculator.next_week_range.to_s #to_s used for clarity
106
+ # #=> "2010-09-05..2010-09-11"
107
+ #
108
+ # Returns a range of dates for the coming week.
31
109
  def self.next_sunday
32
110
  date = Date.today
33
111
  (date.wday == 0) ? (date += 7) : (date += 1 until (date.wday == 0))
34
112
  date
35
113
  end
36
114
 
115
+ # Returns the date of last week's Sunday.
116
+ #
117
+ # Examples (if today is 2010-09-03)
118
+ #
119
+ # DateCasually::Calculator.last_sunday.to_s #to_s used for clarity
120
+ # #=> "2010-08-22"
121
+ #
122
+ # Returns the Date of last week's Sunday.
37
123
  def self.last_sunday
38
124
  self.this_past_sunday - 7
39
125
  end
40
126
 
127
+ # Returns the date of the most recent Sunday in the past.
128
+ #
129
+ # Examples (if today is 2010-09-03)
130
+ #
131
+ # DateCasually::Calculator.this_past_sunday.to_s #to_s used for clarity
132
+ # #=> "2010-08-29"
133
+ #
134
+ # Returns the Date of the most recent Sunday in the past.
41
135
  def self.this_past_sunday
42
136
  date = Date.today
43
137
  (date.wday == 0) ? date : (date -= 1 until (date.wday == 0))
@@ -1,14 +1,55 @@
1
1
  module DateCasually
2
- class Config
2
+
3
+ # Contains global configuration options for DateCasually. These options
4
+ # may be changed globally at runtime by using the designated class method.
5
+ # For example:
6
+ #
7
+ # DateCasually::Config.as :years
8
+ # (Date.today + 2).casual
9
+ # #=> "less than a year from now"
10
+ #
11
+ module Config
12
+
3
13
  class << self
14
+
15
+ # Gets and sets a map that tells DateCasually which translation options to use
16
+ # when translating the current date. Values should be passed as an array of symbols.
17
+ # Possible values are :day, :week, :month, :year, :day_of_week.
18
+ #
19
+ # Examples:
20
+ #
21
+ # date = Date.new(2010, 8, 30)
22
+ #
23
+ # (date + 6).casual(:day_of_week)
24
+ # #=> 'next week'
25
+ #
26
+ # (date + 1).casual(:months)
27
+ # #=> 'less than a month from now'
28
+ #
29
+ # (date + 660).casual(:months)
30
+ # #=> '21 months from now'
31
+ #
32
+ # (date + 660).casual(:months, :years)
33
+ # #=> 'a couple of years from now'
34
+ #
4
35
  attr_accessor :as
5
36
  end
6
37
 
38
+ # Resets the classes configuration options back to their defaults. Used
39
+ # primarily to reset the class configuration options when the module
40
+ # gets loaded.
41
+ #
42
+ # Example:
43
+ #
44
+ # self.reset
45
+ #
46
+ # Returns nothing.
7
47
  def self.reset
8
48
  self.as = [:days, :weeks, :months, :years]
9
49
  end
10
50
 
11
- #reset the first time we are loaded.
51
+ # Reset the first time we are loaded.
12
52
  self.reset
53
+
13
54
  end
14
55
  end
@@ -1,6 +1,6 @@
1
1
  module DateCasually
2
- module Translators
3
- class DayOfWeek
2
+ module Translator
3
+ module DayOfWeek
4
4
 
5
5
  # Scopes for translation into day of week
6
6
  def self.translate(date)
@@ -1,6 +1,6 @@
1
1
  module DateCasually
2
- module Translators
3
- class Days
2
+ module Translator
3
+ module Days
4
4
 
5
5
  # Scopes for translation into days
6
6
  def self.translate(date)
@@ -1,7 +1,6 @@
1
1
  module DateCasually
2
- module Translators
3
-
4
- class Months
2
+ module Translator
3
+ module Months
5
4
 
6
5
  # Scopes for translation into months
7
6
  def self.translate(date)
@@ -1,6 +1,6 @@
1
1
  module DateCasually
2
- module Translators
3
- class Weeks
2
+ module Translator
3
+ module Weeks
4
4
 
5
5
  # Scopes for translation into weeks
6
6
  def self.translate(date)
@@ -1,6 +1,6 @@
1
1
  module DateCasually
2
- module Translators
3
- class Years
2
+ module Translator
3
+ module Years
4
4
 
5
5
  # Scopes for translation into years
6
6
  def self.translate(date)
@@ -1,14 +1,20 @@
1
1
  module DateCasually
2
2
 
3
- # The Translator class is the core of the date-casually functionality,
4
- # translating the supplied date to its casual equivalent.
5
- class Translator
3
+ # The core of the date-casually functionality, translating the supplied date to
4
+ # its casual equivalent. This module is primarily intended to be used from the
5
+ # DateCasually Date extension class. All methods are module methods and should be called
6
+ # on the Translator module.
7
+ # For example:
8
+ #
9
+ # DateCasually::Translator.number_of_weeks_from_today(Date.today + 28)
10
+ # #=> 4
11
+ #
12
+ module Translator
6
13
 
7
14
  # The possible options and order of the :as toggle
8
15
  AS_OPTIONS = [:days, :day_of_week, :weeks, :months, :years]
9
16
 
10
- #
11
- # This method takes the supplied date and determines how it should be translated
17
+ # Public: Takes the supplied date and determines how it should be translated
12
18
  # into its casual equivalent. If the :as option is passed with a valid value,
13
19
  # then the date is evaluated against that scope, e.g. :as=>:day_of_week.
14
20
  # Otherwise, the Translator iterates through all the available scopes until a
@@ -20,37 +26,72 @@ module DateCasually
20
26
  #
21
27
  def self.casual(date, options = {})
22
28
 
23
- # Process in order until we hit a condition that matches
24
- # the supplied date.
29
+ # Loop through the :as options and try to translate the date
30
+ # for the given options.
25
31
  translator = nil
26
32
  self.as_options(options).each do |option|
27
- translator = self.get_translator(option)
33
+ translator = self.get_module(option)
28
34
  translation = translator.translate(date)
29
35
  return translation unless translation.nil?
30
36
  end
31
37
 
32
- # If no conditions are caught, use our last :as option to create
38
+ # If no translations are found, use our last translator to create
33
39
  # explicit counts. I.e. 470 days ago, 46 months from now, 4 years from now, etc.
34
40
  unless translator.nil?
35
41
  translation = translator.translate_count(date)
36
42
  return translation unless translation.nil?
37
43
  end
38
44
 
45
+ # This should never be encountered. If it is, we've got a bug and want to
46
+ # be vocal about it.
39
47
  raise "[date-casually] No ruleset defined for this date: #{date}"
40
48
  end
41
49
 
50
+ # Determines which :as options to use during translation. If no :as option is passed
51
+ # at runtime, use the definition in the Config module. Since the :as values must occur
52
+ # in a chronological order (e.g. :days, :weeks, :months), this method ensures the values
53
+ # are correctly ordered before returning them. It also parses out any values that aren't
54
+ # found in the AS_OPTIONS constant.
55
+ #
56
+ # options - Hashmap of DateCasually options.
42
57
  #
43
- # Process :as option if passed, otherwise use global config
58
+ # Example:
59
+ # options[:as] = :weeks, :days, :years, :months, :foobar
60
+ # DateCasually::Translator.as_options(options)
61
+ # # => :days, :weeks, :days, :months, :years
62
+ #
63
+ # Returns Array of :as configuration options, sorted like the AS_OPTIONS array.
44
64
  def self.as_options(options)
45
65
  as = []
46
66
  as << (!options.nil? && options.has_key?(:as) ? options[:as] : DateCasually::Config.as)
47
67
  self::AS_OPTIONS & as.flatten
48
68
  end
49
69
 
50
- def self.get_translator(sym)
51
- DateCasually::Translators.const_get(self.camelcase(sym.to_s))
70
+ # Dynamically returns the translator module that corresponds to the
71
+ # supplied symbol. The symbol should correspond to one of those found
72
+ # in the AS_OPTIONS array, though this is not enforced.
73
+ #
74
+ # sym - Symbol that corresponds to the supplied symbol.
75
+ #
76
+ # Example:
77
+ # DateCasually::Translator.get_module(:days)
78
+ # # => Days
79
+ #
80
+ # Returns Module that corresponds to the supplied symbol
81
+ def self.get_module(sym)
82
+ const_get(self.camelcase(sym.to_s))
52
83
  end
53
84
 
85
+ # Converts a string to the camel case format, removing any underscores and upcasing
86
+ # the character that immediately follow them.
87
+ #
88
+ # string - String to be converted to camel case.
89
+ #
90
+ # Example:
91
+ # DateCasually::Translator.camelcase("day_of_week")
92
+ # # => "DayOfWeek"
93
+ #
94
+ # Returns String in the camelcase format
54
95
  def self.camelcase(string)
55
96
  string.downcase.gsub(/\b[a-z]|_+[a-z]/) { |a| a.upcase }.gsub(/\s|_/,'')
56
97
  end
data/lib/date-casually.rb CHANGED
@@ -3,14 +3,15 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
3
  require 'rubygems'
4
4
  require 'date'
5
5
  require 'i18n'
6
+
6
7
  require "date-casually/config"
7
8
  require "date-casually/calculator"
8
9
  require "date-casually/translator"
9
- require "date-casually/translators/days"
10
- require "date-casually/translators/weeks"
11
- require "date-casually/translators/months"
12
- require "date-casually/translators/day_of_week"
13
- require "date-casually/translators/years"
10
+ require "date-casually/translator/days"
11
+ require "date-casually/translator/weeks"
12
+ require "date-casually/translator/months"
13
+ require "date-casually/translator/day_of_week"
14
+ require "date-casually/translator/years"
14
15
  require "extensions/date"
15
16
 
16
17
  # load up translations
@@ -1,4 +1,40 @@
1
+ # The Date class gets monkey-patched (gasp!) to activate DateCasually features
2
+ # via the 'casual' method.
1
3
  class Date
4
+
5
+ # Public: Translates the current date object (self) into its language-based
6
+ # equivalent.
7
+ #
8
+ # options - List of options to control what the casual method outputs.
9
+ # :as - Tells DateCasually which date ranges to use when translating
10
+ # the current date. Values should be passed an array of symbols.
11
+ # Possible values are :day, :week, :month, :year, :day_of_week.
12
+ #
13
+ # Examples
14
+ # date = Date.new(2010, 8, 30)
15
+ #
16
+ # (date + 1).casual
17
+ # #=> 'tomorrow'
18
+ #
19
+ # (date - 1).casual
20
+ # #=> 'yesterday'
21
+ #
22
+ # (date + 6).casual
23
+ # #=> 'next week'
24
+ #
25
+ # (date + 6).casual(:day_of_week)
26
+ # #=> 'next week'
27
+ #
28
+ # (date + 1).casual(:months)
29
+ # #=> 'less than a month from now'
30
+ #
31
+ # (date + 660).casual(:months)
32
+ # #=> '21 months from now'
33
+ #
34
+ # (date + 660).casual(:months, :years)
35
+ # #=> 'a couple of years from now'
36
+ #
37
+ # Returns language translation of the current date.
2
38
  def casual(options = {})
3
39
  DateCasually::Translator.casual(self, options)
4
40
  end
data/lib/locale/en.yml CHANGED
@@ -1,93 +1,92 @@
1
- en:
2
- date:
3
- casual:
4
- today: "today"
5
- tomorrow: "tomorrow"
6
- yesterday: "yesterday"
7
- next_week: "next week"
8
- last_week: "last week"
9
- this_wday_0: "this Sunday"
10
- this_wday_1: "this Monday"
11
- this_wday_2: "this Tuesday"
12
- this_wday_3: "this Wednesday"
13
- this_wday_4: "this Thursday"
14
- this_wday_5: "this Friday"
15
- this_wday_6: "this Saturday"
16
- this_past_wday_0: "this past Sunday"
17
- this_past_wday_1: "this past Monday"
18
- this_past_wday_2: "this past Tuesday"
19
- this_past_wday_3: "this past Wednesday"
20
- this_past_wday_4: "this past Thursday"
21
- this_past_wday_5: "this past Friday"
22
- this_past_wday_6: "this past Saturday"
23
- next_wday_0: "next Sunday"
24
- next_wday_1: "next Monday"
25
- next_wday_2: "next Tuesday"
26
- next_wday_3: "next Wednesday"
27
- next_wday_4: "next Thursday"
28
- next_wday_5: "next Friday"
29
- next_wday_6: "next Saturday"
30
- last_wday_0: "last Sunday"
31
- last_wday_1: "last Monday"
32
- last_wday_2: "last Tuesday"
33
- last_wday_3: "last Wednesday"
34
- last_wday_4: "last Thursday"
35
- last_wday_5: "last Friday"
36
- last_wday_6: "last Saturday"
37
- wdays_from_now_0: "%{number} Sundays from now"
38
- wdays_from_now_1: "%{number} Mondays from now"
39
- wdays_from_now_2: "%{number} Tuesdays from now"
40
- wdays_from_now_3: "%{number} Wednesdays from now"
41
- wdays_from_now_4: "%{number} Thursdays from now"
42
- wdays_from_now_5: "%{number} Fridays from now"
43
- wdays_from_now_6: "%{number} Saturdays from now"
44
- wdays_ago_0: "%{number} Sundays ago"
45
- wdays_ago_1: "%{number} Mondays ago"
46
- wdays_ago_2: "%{number} Tuesdays ago"
47
- wdays_ago_3: "%{number} Wednesdays ago"
48
- wdays_ago_4: "%{number} Thursdays ago"
49
- wdays_ago_5: "%{number} Fridays ago"
50
- wdays_ago_6: "%{number} Saturdays ago"
51
- one_day_ago: "one day ago"
52
- days_ago: "%{number} days ago"
53
- a_week_ago: "a week ago"
54
- more_than_a_week_ago: "more than a week ago"
55
- weeks_ago: "%{number} weeks ago"
56
- exactly_one_month_ago: "exactly one month ago"
57
- exactly_one_month_from_now: "exactly one month from now"
58
- more_than_a_month_ago: "more than a month ago"
59
- less_than_a_month_ago: "less than a month ago"
60
- more_than_a_month_from_now: "more than a month from now"
61
- less_than_a_month_from_now: "less than a month from now"
62
- more_than_a_week_ago: "more than a week ago"
63
- less_than_a_week_ago: "less than a week ago"
64
- more_than_a_week_from_now: "more than a week from now"
65
- less_than_a_week_from_now: "less than a week from now"
66
- about_a_week_from_now: "about a week from now"
67
- about_a_week_ago: "about a week ago"
68
- more_than_a_year_ago: "more than a year ago"
69
- less_than_a_year_ago: "less than a year ago"
70
- more_than_a_year_from_now: "more than a year from now"
71
- less_than_a_year_from_now: "less than a year from now"
72
- months_ago: "%{number} months ago"
73
- next_month: "next month"
74
- last_month: "last month"
75
- a_year_ago: "a year ago"
76
- a_year_from_now: "a year from now"
77
- years_ago: "%{number} years ago"
78
- next_year: "next year"
79
- last_year: "last year"
80
- days_from_now: "%{number} days from now"
81
- weeks_from_now: "%{number} weeks from now"
82
- months_from_now: "%{number} months from now"
83
- years_from_now: "%{number} years from now"
84
- in_a_couple_of_days: "in a couple of days"
85
- in_a_couple_of_weeks: "in a couple of weeks"
86
- couple_of_months_ago: "a couple of months ago"
87
- couple_of_months_from_now: "a couple of months from now"
88
- couple_of_days_from_now: "a couple of days from now"
89
- couple_of_days_ago: "a couple of days ago"
90
- couple_of_weeks_ago: "a couple of weeks ago"
91
- couple_of_weeks_from_now: "a couple of weeks from now"
92
- couple_of_years_ago: "a couple of years ago"
93
- couple_of_years_from_now: "a couple of years from now"
1
+ en:
2
+ date:
3
+ casual:
4
+ a_week_ago: a week ago
5
+ a_year_ago: a year ago
6
+ a_year_from_now: a year from now
7
+ about_a_week_ago: about a week ago
8
+ about_a_week_from_now: about a week from now
9
+ couple_of_days_ago: a couple of days ago
10
+ couple_of_days_from_now: a couple of days from now
11
+ couple_of_months_ago: a couple of months ago
12
+ couple_of_months_from_now: a couple of months from now
13
+ couple_of_weeks_ago: a couple of weeks ago
14
+ couple_of_weeks_from_now: a couple of weeks from now
15
+ couple_of_years_ago: a couple of years ago
16
+ couple_of_years_from_now: a couple of years from now
17
+ days_ago: %{number} days ago
18
+ days_from_now: %{number} days from now
19
+ exactly_one_month_ago: exactly one month ago
20
+ exactly_one_month_from_now: exactly one month from now
21
+ in_a_couple_of_days: in a couple of days
22
+ in_a_couple_of_weeks: in a couple of weeks
23
+ last_month: last month
24
+ last_wday_0: last Sunday
25
+ last_wday_1: last Monday
26
+ last_wday_2: last Tuesday
27
+ last_wday_3: last Wednesday
28
+ last_wday_4: last Thursday
29
+ last_wday_5: last Friday
30
+ last_wday_6: last Saturday
31
+ last_week: last week
32
+ last_year: last year
33
+ less_than_a_month_ago: less than a month ago
34
+ less_than_a_month_from_now: less than a month from now
35
+ less_than_a_week_ago: less than a week ago
36
+ less_than_a_week_from_now: less than a week from now
37
+ less_than_a_year_ago: less than a year ago
38
+ less_than_a_year_from_now: less than a year from now
39
+ months_ago: %{number} months ago
40
+ months_from_now: %{number} months from now
41
+ more_than_a_month_ago: more than a month ago
42
+ more_than_a_month_from_now: more than a month from now
43
+ more_than_a_week_ago: more than a week ago
44
+ more_than_a_week_from_now: more than a week from now
45
+ more_than_a_year_ago: more than a year ago
46
+ more_than_a_year_from_now: more than a year from now
47
+ next_month: next month
48
+ next_wday_0: next Sunday
49
+ next_wday_1: next Monday
50
+ next_wday_2: next Tuesday
51
+ next_wday_3: next Wednesday
52
+ next_wday_4: next Thursday
53
+ next_wday_5: next Friday
54
+ next_wday_6: next Saturday
55
+ next_week: next week
56
+ next_year: next year
57
+ one_day_ago: one day ago
58
+ this_past_wday_0: this past Sunday
59
+ this_past_wday_1: this past Monday
60
+ this_past_wday_2: this past Tuesday
61
+ this_past_wday_3: this past Wednesday
62
+ this_past_wday_4: this past Thursday
63
+ this_past_wday_5: this past Friday
64
+ this_past_wday_6: this past Saturday
65
+ this_wday_0: this Sunday
66
+ this_wday_1: this Monday
67
+ this_wday_2: this Tuesday
68
+ this_wday_3: this Wednesday
69
+ this_wday_4: this Thursday
70
+ this_wday_5: this Friday
71
+ this_wday_6: this Saturday
72
+ today: today
73
+ tomorrow: tomorrow
74
+ wdays_ago_0: %{number} Sundays ago
75
+ wdays_ago_1: %{number} Mondays ago
76
+ wdays_ago_2: %{number} Tuesdays ago
77
+ wdays_ago_3: %{number} Wednesdays ago
78
+ wdays_ago_4: %{number} Thursdays ago
79
+ wdays_ago_5: %{number} Fridays ago
80
+ wdays_ago_6: %{number} Saturdays ago
81
+ wdays_from_now_0: %{number} Sundays from now
82
+ wdays_from_now_1: %{number} Mondays from now
83
+ wdays_from_now_2: %{number} Tuesdays from now
84
+ wdays_from_now_3: %{number} Wednesdays from now
85
+ wdays_from_now_4: %{number} Thursdays from now
86
+ wdays_from_now_5: %{number} Fridays from now
87
+ wdays_from_now_6: %{number} Saturdays from now
88
+ weeks_ago: %{number} weeks ago
89
+ weeks_from_now: %{number} weeks from now
90
+ years_ago: %{number} years ago
91
+ years_from_now: %{number} years from now
92
+ yesterday: yesterday
@@ -1,3 +1,7 @@
1
+ # This file is used to alphabetize the locale YAML files. It doesn't
2
+ # overwrite them, but instead creates sorted copies of them with a
3
+ # ".sorted" file # extension.
4
+
1
5
  require 'yaml'
2
6
  class Hash
3
7
  def to_sorted_yaml( opts = {} )
@@ -21,7 +25,7 @@ class Hash
21
25
  end
22
26
 
23
27
  end
24
- files = Dir.glob(File.join(File.dirname(__FILE__),"*.yml"))
28
+ files = Dir.glob(File.join("..","locale","*.yml"))
25
29
 
26
30
  files.each do |file|
27
31
  hash = YAML::load(File.read(file))
data/test/helper.rb CHANGED
@@ -12,10 +12,14 @@ t = Time.local(2008, 9, 1, 10, 5, 0)
12
12
  Timecop.travel(t)
13
13
 
14
14
  class Test::Unit::TestCase
15
+
16
+ # Returns a Date object from Chronic's Time object
15
17
  def parse(string)
16
18
  Date.parse(Chronic.parse(string).strftime('%b %d, %Y'))
17
19
  end
18
-
20
+
21
+ # Convenience method to generate method names for both
22
+ # the test cases that include the :as option, and those that don't.
19
23
  def self.method_name(name, options)
20
24
  if (options != nil) && options.has_key?(:as)
21
25
  "test_#{name}_as_#{options[:as]}"
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: date-casually
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 0.1.0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Theo Mills
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-26 00:00:00 -05:00
18
+ date: 2010-09-05 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -87,14 +87,13 @@ files:
87
87
  - lib/date-casually/calculator.rb
88
88
  - lib/date-casually/config.rb
89
89
  - lib/date-casually/translator.rb
90
- - lib/date-casually/translators/day_of_week.rb
91
- - lib/date-casually/translators/days.rb
92
- - lib/date-casually/translators/months.rb
93
- - lib/date-casually/translators/weeks.rb
94
- - lib/date-casually/translators/years.rb
90
+ - lib/date-casually/translator/day_of_week.rb
91
+ - lib/date-casually/translator/days.rb
92
+ - lib/date-casually/translator/months.rb
93
+ - lib/date-casually/translator/weeks.rb
94
+ - lib/date-casually/translator/years.rb
95
95
  - lib/extensions/date.rb
96
96
  - lib/locale/en.yml
97
- - lib/locale/en.yml.sorted
98
97
  - lib/util/alphabetize_yaml.rb
99
98
  - test/helper.rb
100
99
  - test/test_calculator.rb
@@ -105,7 +104,6 @@ files:
105
104
  - test/test_translator.rb
106
105
  - test/test_weeks.rb
107
106
  - test/test_years.rb
108
- - test/timeline.rb
109
107
  has_rdoc: true
110
108
  homepage: http://github.com/twmills/date-casually
111
109
  licenses: []
@@ -150,4 +148,3 @@ test_files:
150
148
  - test/test_translator.rb
151
149
  - test/test_weeks.rb
152
150
  - test/test_years.rb
153
- - test/timeline.rb
@@ -1,85 +0,0 @@
1
- en:
2
- date:
3
- casual:
4
- a_week_ago: a week ago
5
- a_year_ago: a year ago
6
- a_year_from_now: a year from now
7
- about_a_week_ago: about a week ago
8
- about_a_week_from_now: about a week from now
9
- couple_of_days_ago: a couple of days ago
10
- couple_of_days_from_now: a couple of days from now
11
- couple_of_months_ago: a couple of months ago
12
- couple_of_months_from_now: a couple of months from now
13
- couple_of_weeks_ago: a couple of weeks ago
14
- couple_of_weeks_from_now: a couple of weeks from now
15
- couple_of_years_ago: a couple of years ago
16
- couple_of_years_from_now: a couple of years from now
17
- days_ago: {{number}} days ago
18
- days_from_now: {{number}} days from now
19
- exactly_one_month_ago: exactly one month ago
20
- exactly_one_month_from_now: exactly one month from now
21
- in_a_couple_of_days: in a couple of days
22
- in_a_couple_of_weeks: in a couple of weeks
23
- last_month: last month
24
- last_wday_0: last Sunday
25
- last_wday_1: last Monday
26
- last_wday_2: last Tuesday
27
- last_wday_3: last Wednesday
28
- last_wday_4: last Thursday
29
- last_wday_5: last Friday
30
- last_wday_6: last Saturday
31
- last_week: last week
32
- last_year: last year
33
- less_than_a_month_ago: less than a month ago
34
- less_than_a_month_from_now: less than a month from now
35
- less_than_a_week_ago: less than a week ago
36
- less_than_a_week_from_now: less than a week from now
37
- less_than_a_year_ago: less than a year ago
38
- less_than_a_year_from_now: less than a year from now
39
- months_ago: {{number}} months ago
40
- months_from_now: {{number}} months from now
41
- more_than_a_month_ago: more than a month ago
42
- more_than_a_month_from_now: more than a month from now
43
- more_than_a_week_ago: more than a week ago
44
- more_than_a_week_from_now: more than a week from now
45
- more_than_a_year_ago: more than a year ago
46
- more_than_a_year_from_now: more than a year from now
47
- next_month: next month
48
- next_wday_0: next Sunday
49
- next_wday_1: next Monday
50
- next_wday_2: next Tuesday
51
- next_wday_3: next Wednesday
52
- next_wday_4: next Thursday
53
- next_wday_5: next Friday
54
- next_wday_6: next Saturday
55
- next_week: next week
56
- next_year: next year
57
- one_day_ago: one day ago
58
- this_past_wday_0: this past Sunday
59
- this_past_wday_1: this past Monday
60
- this_past_wday_2: this past Tuesday
61
- this_past_wday_3: this past Wednesday
62
- this_past_wday_4: this past Thursday
63
- this_past_wday_5: this past Friday
64
- this_past_wday_6: this past Saturday
65
- this_wday_0: this Sunday
66
- this_wday_1: this Monday
67
- this_wday_2: this Tuesday
68
- this_wday_3: this Wednesday
69
- this_wday_4: this Thursday
70
- this_wday_5: this Friday
71
- this_wday_6: this Saturday
72
- today: today
73
- tomorrow: tomorrow
74
- wdays_ago_0: {{number}} Sundays ago
75
- wdays_ago_1: {{number}} Mondays ago
76
- wdays_ago_2: {{number}} Tuesdays ago
77
- wdays_ago_3: {{number}} Wednesdays ago
78
- wdays_ago_4: {{number}} Thursdays ago
79
- wdays_ago_5: {{number}} Fridays ago
80
- wdays_ago_6: {{number}} Saturdays ago
81
- weeks_ago: {{number}} weeks ago
82
- weeks_from_now: {{number}} weeks from now
83
- years_ago: {{number}} years ago
84
- years_from_now: {{number}} years from now
85
- yesterday: yesterday
data/test/timeline.rb DELETED
@@ -1,11 +0,0 @@
1
- require 'helper'
2
- # max = 400
3
- # as = :week
4
- # max.downto(1).each do |x|
5
- # puts "+#{(Date.today + x).to_s} = #{(Date.today + x).casual(:as => as)}"
6
- # end
7
- # 1.upto(max).each do |x|
8
- # puts "-#{(Date.today - x).to_s} = #{(Date.today - x).casual(:as => as)}"
9
- # end
10
- DateCasually::Config.as = :months
11
- puts (Date.today + 1).casual