partial-date 1.1.10 → 1.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.
@@ -1,4 +1,9 @@
1
- ### 1.1.9 / 2012-05-31
1
+ ### 1.2.0 / 2012-06-03
2
+
3
+ * Documentation and comment clean-up
4
+ * Implemented guard on to_s for unknown % tokens.
5
+
6
+ ### 1.1.10 / 2012-06-01
2
7
 
3
8
  * Implemented faster Date#.to_s method.
4
9
 
@@ -39,7 +39,14 @@ module PartialDate
39
39
  # end
40
40
  # end
41
41
 
42
- FORMATS = { :default => "%Y-%m-%d", :short => "%d %m %Y", :medium => "%d %b %Y", :long => "%d %B %Y", :number => "%Y%m%d", }
42
+ FORMATS = {
43
+ :default => "%Y-%m-%d",
44
+ :short => "%d %m %Y",
45
+ :medium => "%d %b %Y",
46
+ :long => "%d %B %Y",
47
+ :number => "%Y%m%d"
48
+ }
49
+
43
50
  FORMAT_METHODS = {
44
51
  "%Y" => lambda { |d| (d.year != 0) ? d.year.to_s.rjust(4, '0') : ""},
45
52
  "%m" => lambda { |d| (d.month != 0) ? d.month.to_s.rjust(2, '0') : "" },
@@ -53,12 +60,28 @@ module PartialDate
53
60
  MONTH_NAMES = %w[January, February, March, April, May, June, July, August, September, October, November, December]
54
61
  ABBR_MONTH_NAMES = %w[Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
55
62
 
56
- # Public: A class for handling partial date storage. Partial dates are stored
57
- # as an 8 digit integer with optional month and day values.
63
+ # Public: A class for handling partial dates. Year (including negative
64
+ # values), month and day are optional although month must be set before
65
+ # day. Partial dates are stored internally in a single integer bit store
66
+ # using bitmask and bitwise operations to set and get year, month, and
67
+ # day values.
68
+ #
69
+ # A numerical (human readable) date value can be retrieved via
70
+ # the d.value accessor.
71
+ #
72
+ # Use d.value to get and set the numerical date value as well as for storing
73
+ # dates as a single value in a persistence store.
58
74
  #
59
75
  # Examples
60
76
  #
61
77
  # date = PartialDate::Date.new
78
+ # date.value = 20121201
79
+ # # => 2012-12-01
80
+ #
81
+ # date = PartialDate::Date.load 20121201
82
+ # # => 2012-12-01
83
+ #
84
+ # date = PartialDate::Date.new
62
85
  # date.year = 2012
63
86
  # date.month = 12
64
87
  # date.day = 1
@@ -71,9 +94,6 @@ module PartialDate
71
94
  include Comparable
72
95
 
73
96
  # Public: Readonly accessor for the raw bit integer date value.
74
- # This allows us to perform our <=> comparions against this
75
- # value instead of comparing year, month and day, or date.value
76
- # which requires multiplication to calculate.
77
97
  #
78
98
  # Returns the single Integer backing store with 'bits' flipped
79
99
  # for year, month and day.
@@ -109,7 +129,7 @@ module PartialDate
109
129
  #
110
130
  # date = PartialDate::Date.load 201212201
111
131
  # date.value
112
- # # => 20120000
132
+ # # => 20121200
113
133
  # date.year
114
134
  # # => 2012
115
135
  # date.month
@@ -243,9 +263,10 @@ module PartialDate
243
263
  self.class.get_day(@bits)
244
264
  end
245
265
 
246
- # Public: Returns a formatted string representation of the partial date.
247
- # A subset of date formatters have been implementes incuding:
248
- # %Y - Year with century (can be negative, 4 digits at least)
266
+ # Public: Returns a formatted string representation of date. A subset of
267
+ # date formatters have been implemented including:
268
+ # %Y - Year with century
269
+ # (can be negative, and will be padded to 4 digits at least)
249
270
  # -0001, 0000, 1995, 2009, 14292, etc.
250
271
  # %m - Month of the year, zero-padded (01..12)
251
272
  # %B - The full month name ('January')
@@ -262,14 +283,12 @@ module PartialDate
262
283
  # Returns string representation of date.
263
284
  def to_s(format = :default)
264
285
  format = FORMATS[format] if format.is_a?(Symbol)
265
-
266
286
  s = format.dup
267
-
268
287
  n = b = 0
269
288
  a = 1
270
289
  while n < s.length
271
- if s[n] == "%"
272
- t = FORMAT_METHODS[s[n..n+1]].call( self )
290
+ if s[n] == "%" && FORMAT_METHODS.include?(s[n..n+1])
291
+ t = FORMAT_METHODS[s[n..n+1]].call( self )
273
292
  if t.length == 0
274
293
  if n >= 0 && n < s.length - 2
275
294
  a = a + 1 if s[n+2] =~ REMOVALS
@@ -287,7 +306,7 @@ module PartialDate
287
306
  end
288
307
  s
289
308
  end
290
-
309
+
291
310
  # Here for the moment for benchmark comparisons
292
311
  def old_to_s(format = :default)
293
312
  format = FORMATS[format] if format.is_a?(Symbol)
@@ -305,12 +324,11 @@ module PartialDate
305
324
  lead_trim = (year != 0 && format.lstrip.start_with?("%Y")) ? /\A[\/\,\s]+/ : /\A[\/\,\-\s]+/
306
325
  result = result.gsub(lead_trim, '').gsub(/\s\s/, ' ').gsub(/[\/\-\,]([\/\-\,])/, '\1').gsub(/[\/\,\-\s]+\z/, '')
307
326
  end
308
-
309
- # Public: Spaceship operator for date comparisons. Comparisons
310
- # are made by cascading down from year, to month to day. This
311
- # should be faster than passing to self.value <=> other_date.value
312
- # since the integer value attribute requires multiplication to
313
- # calculate.
327
+
328
+ # Public: Spaceship operator for date comparisons. Comparisons are made
329
+ # by cascading down from year, to month to day. This should be faster
330
+ # than passing to self.value <=> other_date.value since the integer value
331
+ # attribute requires multiplication to calculate.
314
332
  #
315
333
  # Returns -1, 1, or 0
316
334
  def <=>(other_date)
@@ -1,4 +1,4 @@
1
1
  module PartialDate
2
2
  # partial-date version
3
- VERSION = "1.1.10"
3
+ VERSION = "1.2.0"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: partial-date
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.10
4
+ version: 1.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-31 00:00:00.000000000 Z
12
+ date: 2012-06-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rubygems-tasks