interpreted_date 0.0.3 → 0.0.4
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/lib/interpreted_date/version.rb +1 -1
- data/lib/interpreted_date.rb +34 -5
- data/spec/interpreted_date_spec.rb +27 -0
- metadata +1 -1
data/lib/interpreted_date.rb
CHANGED
@@ -17,6 +17,32 @@ class InterpretedDate
|
|
17
17
|
new(year: date.year, month: date.month, day: date.day)
|
18
18
|
end
|
19
19
|
|
20
|
+
def decade=(value)
|
21
|
+
@decade = value.to_i if value
|
22
|
+
end
|
23
|
+
|
24
|
+
def year=(value)
|
25
|
+
@year = value.to_i if value
|
26
|
+
end
|
27
|
+
|
28
|
+
def month=(value)
|
29
|
+
if value.nil?
|
30
|
+
@month = nil
|
31
|
+
elsif value.to_i == 0
|
32
|
+
if Date::ABBR_MONTHNAMES.index(value) && Date::ABBR_MONTHNAMES.index(value) > 0
|
33
|
+
@month = Date::ABBR_MONTHNAMES.index(value)
|
34
|
+
elsif Date::MONTHNAMES.index(value) && Date::MONTHNAMES.index(value) > 0
|
35
|
+
@month = Date::MONTHNAMES.index(value)
|
36
|
+
end
|
37
|
+
else
|
38
|
+
@month = value.to_i
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def day=(value)
|
43
|
+
@day = value.to_i if value
|
44
|
+
end
|
45
|
+
|
20
46
|
def interpreted_year
|
21
47
|
@interpreted_year ||= year || (decade && (decade + 5)) || DEFAULT_YEAR
|
22
48
|
end
|
@@ -42,22 +68,25 @@ class InterpretedDate
|
|
42
68
|
|
43
69
|
def to_s(options = {})
|
44
70
|
preposition = options.fetch(:preposition) { false }
|
71
|
+
output = nil
|
45
72
|
if day && month && year && date
|
46
|
-
|
73
|
+
output = preposition ? "on " : ""
|
74
|
+
output << date.strftime("%B %-d, %Y")
|
47
75
|
elsif month && year && date
|
48
|
-
|
76
|
+
output = preposition ? "in " : ""
|
77
|
+
output << date.strftime("%B %Y")
|
49
78
|
elsif year && date
|
50
79
|
output = preposition ? "in " : ""
|
51
80
|
output << date.strftime("%Y")
|
52
|
-
output
|
53
81
|
elsif decade
|
54
82
|
output = preposition ? "in the " : ""
|
55
83
|
output << decade.to_s
|
56
84
|
output << "s"
|
57
|
-
output
|
58
85
|
elsif day && month && date
|
59
|
-
|
86
|
+
output = preposition ? "on " : ""
|
87
|
+
output << date.strftime("%B %-d")
|
60
88
|
end
|
89
|
+
output
|
61
90
|
end
|
62
91
|
|
63
92
|
def self.from_json(json)
|
@@ -56,6 +56,11 @@ describe InterpretedDate do
|
|
56
56
|
it "returns the right integer" do
|
57
57
|
subject.to_i.should eq(Date.new(1955, 3).to_time.to_i)
|
58
58
|
end
|
59
|
+
|
60
|
+
it "returns the right string with a preposition" do
|
61
|
+
subject.to_s(preposition: true).should eq("in March 1955")
|
62
|
+
end
|
63
|
+
|
59
64
|
end
|
60
65
|
|
61
66
|
describe "with decade, year, month and day" do
|
@@ -68,6 +73,11 @@ describe InterpretedDate do
|
|
68
73
|
it "returns the right integer" do
|
69
74
|
subject.to_i.should eq(Date.new(1955, 3, 1).to_time.to_i)
|
70
75
|
end
|
76
|
+
|
77
|
+
it "returns the right string with a preposition" do
|
78
|
+
subject.to_s(preposition: true).should eq("on March 1, 1955")
|
79
|
+
end
|
80
|
+
|
71
81
|
end
|
72
82
|
|
73
83
|
describe "with month and day" do
|
@@ -80,6 +90,11 @@ describe InterpretedDate do
|
|
80
90
|
it "returns nil integer" do
|
81
91
|
subject.to_i.should be_nil
|
82
92
|
end
|
93
|
+
|
94
|
+
it "returns the right string with a preposition" do
|
95
|
+
subject.to_s(preposition: true).should eq("on October 31")
|
96
|
+
end
|
97
|
+
|
83
98
|
end
|
84
99
|
|
85
100
|
describe "with invalid date" do
|
@@ -100,6 +115,18 @@ describe InterpretedDate do
|
|
100
115
|
it "correctly parses the json" do
|
101
116
|
subject.should == InterpretedDate.from_json('year' => 2012, 'month' => 2, 'day' => 31)
|
102
117
|
end
|
118
|
+
|
119
|
+
it "correctly parses dates where values are strings" do
|
120
|
+
subject.should == InterpretedDate.from_json('year' => 2012, 'month' => '2', 'day' => 31)
|
121
|
+
end
|
122
|
+
|
123
|
+
it "correctly parses date where the month is given by name" do
|
124
|
+
subject.should == InterpretedDate.from_json('year' => 2012, 'month' => 'February', 'day' => 31)
|
125
|
+
end
|
126
|
+
|
127
|
+
it "correctly parses date where the month is given by abbreviated name" do
|
128
|
+
subject.should == InterpretedDate.from_json('year' => 2012, 'month' => 'Feb', 'day' => 31)
|
129
|
+
end
|
103
130
|
end
|
104
131
|
|
105
132
|
end
|