appstats 0.11.7 → 0.12.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/db/migrations/20110223212232_add_appstats_entries_week_and_quarter.rb +15 -0
- data/db/schema.rb +5 -1
- data/lib/appstats/date_range.rb +7 -12
- data/lib/appstats/entry.rb +4 -0
- data/lib/appstats/entry_date.rb +39 -14
- data/lib/appstats/result.rb +20 -4
- data/lib/appstats/version.rb +1 -1
- data/spec/date_range_spec.rb +36 -17
- data/spec/entry_date_spec.rb +153 -28
- data/spec/entry_spec.rb +10 -5
- data/spec/logger_spec.rb +18 -18
- data/spec/query_spec.rb +39 -0
- data/spec/result_spec.rb +5 -0
- metadata +5 -4
data/Gemfile.lock
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
class AddAppstatsEntriesWeekAndQuarter < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
add_column :appstats_entries, :week, :integer
|
4
|
+
add_column :appstats_entries, :quarter, :integer
|
5
|
+
add_index :appstats_entries, [:year,:week], :name => "index_entries_by_week"
|
6
|
+
add_index :appstats_entries, [:year,:quarter], :name => "index_entries_by_quarter"
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.down
|
10
|
+
remove_column :appstats_entries, :week
|
11
|
+
remove_column :appstats_entries, :quarter
|
12
|
+
remove_index :appstats_entries, :name => "index_entries_by_week"
|
13
|
+
remove_index :appstats_entries, :name => "index_entries_by_quarter"
|
14
|
+
end
|
15
|
+
end
|
data/db/schema.rb
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
#
|
11
11
|
# It's strongly recommended to check this file into your version control system.
|
12
12
|
|
13
|
-
ActiveRecord::Schema.define(:version =>
|
13
|
+
ActiveRecord::Schema.define(:version => 20110223212232) do
|
14
14
|
|
15
15
|
create_table "appstats_actions", :force => true do |t|
|
16
16
|
t.string "name"
|
@@ -63,6 +63,8 @@ ActiveRecord::Schema.define(:version => 20110222215437) do
|
|
63
63
|
t.integer "hour"
|
64
64
|
t.integer "min"
|
65
65
|
t.integer "sec"
|
66
|
+
t.integer "week"
|
67
|
+
t.integer "quarter"
|
66
68
|
end
|
67
69
|
|
68
70
|
add_index "appstats_entries", ["action"], :name => "index_appstats_entries_on_action"
|
@@ -70,6 +72,8 @@ ActiveRecord::Schema.define(:version => 20110222215437) do
|
|
70
72
|
add_index "appstats_entries", ["year", "month", "day", "hour"], :name => "index_entries_by_hour"
|
71
73
|
add_index "appstats_entries", ["year", "month", "day"], :name => "index_entries_by_day"
|
72
74
|
add_index "appstats_entries", ["year", "month"], :name => "index_entries_by_month"
|
75
|
+
add_index "appstats_entries", ["year", "quarter"], :name => "index_entries_by_quarter"
|
76
|
+
add_index "appstats_entries", ["year", "week"], :name => "index_entries_by_week"
|
73
77
|
add_index "appstats_entries", ["year"], :name => "index_entries_by_year"
|
74
78
|
|
75
79
|
create_table "appstats_hosts", :force => true do |t|
|
data/lib/appstats/date_range.rb
CHANGED
@@ -12,13 +12,16 @@ module Appstats
|
|
12
12
|
|
13
13
|
def from_date
|
14
14
|
return nil if @from.nil?
|
15
|
-
mode = @format == :
|
15
|
+
mode = @format == :exclusive ? :end : :beginning
|
16
16
|
@from.to_time(mode)
|
17
17
|
end
|
18
18
|
|
19
19
|
def to_date
|
20
|
+
if @format == :fixed_point && !@from.nil?
|
21
|
+
return @from.to_time(:end)
|
22
|
+
end
|
20
23
|
return nil if @to.nil?
|
21
|
-
mode = @format == :exclusive ? :
|
24
|
+
mode = @format == :exclusive ? :beginning : :end
|
22
25
|
@to.to_time(mode)
|
23
26
|
end
|
24
27
|
|
@@ -118,22 +121,14 @@ module Appstats
|
|
118
121
|
m = input.match(/^this\s*(year|quarter|month|week|day)$/)
|
119
122
|
unless m.nil?
|
120
123
|
range.from = EntryDate.parse(input)
|
121
|
-
range.format =
|
124
|
+
range.format = :fixed_point
|
122
125
|
return range
|
123
126
|
end
|
124
127
|
|
125
128
|
m = input.match(/^(last|previous)\s*(year|quarter|month|week|day)$/)
|
126
129
|
unless m.nil?
|
127
130
|
range.from = EntryDate.parse(input)
|
128
|
-
|
129
|
-
range.to = range.from.end_of_week
|
130
|
-
range.format = :inclusive
|
131
|
-
elsif m[2] == "quarter"
|
132
|
-
range.to = range.from.end_of_quarter
|
133
|
-
range.format = :inclusive
|
134
|
-
else
|
135
|
-
range.format = :fixed_point
|
136
|
-
end
|
131
|
+
range.format = :fixed_point
|
137
132
|
return range
|
138
133
|
end
|
139
134
|
|
data/lib/appstats/entry.rb
CHANGED
@@ -19,6 +19,8 @@ module Appstats
|
|
19
19
|
self[:hour] = nil
|
20
20
|
self[:min] = nil
|
21
21
|
self[:sec] = nil
|
22
|
+
self[:week] = nil
|
23
|
+
self[:quarter] = nil
|
22
24
|
else
|
23
25
|
self[:year] = value.year
|
24
26
|
self[:month] = value.month
|
@@ -26,6 +28,8 @@ module Appstats
|
|
26
28
|
self[:hour] = value.hour
|
27
29
|
self[:min] = value.min
|
28
30
|
self[:sec] = value.sec
|
31
|
+
self[:week] = EntryDate.calculate_week_of(value)
|
32
|
+
self[:quarter] = EntryDate.calculate_quarter_of(value)
|
29
33
|
end
|
30
34
|
end
|
31
35
|
|
data/lib/appstats/entry_date.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
module Appstats
|
3
3
|
class EntryDate
|
4
4
|
|
5
|
-
attr_accessor :year, :month, :day, :hour, :min, :sec
|
5
|
+
attr_accessor :year, :month, :day, :hour, :min, :sec, :week, :quarter
|
6
6
|
|
7
7
|
def initialize(data = {})
|
8
8
|
@year = data[:year]
|
@@ -11,6 +11,8 @@ module Appstats
|
|
11
11
|
@hour = data[:hour]
|
12
12
|
@min = data[:min]
|
13
13
|
@sec = data[:sec]
|
14
|
+
@week = data[:week]
|
15
|
+
@quarter = data[:quarter]
|
14
16
|
end
|
15
17
|
|
16
18
|
def end_of_week
|
@@ -19,24 +21,32 @@ module Appstats
|
|
19
21
|
week.year = t.year
|
20
22
|
week.month = t.month
|
21
23
|
week.day = t.day
|
24
|
+
week.week = EntryDate.calculate_week_of(t)
|
22
25
|
week
|
23
26
|
end
|
24
27
|
|
25
28
|
def end_of_quarter
|
26
29
|
t = to_time.end_of_quarter
|
27
|
-
EntryDate.new(:year => t.year, :month => t.month)
|
30
|
+
EntryDate.new(:year => t.year, :month => t.month, :quarter => EntryDate.calculate_quarter_of(t))
|
28
31
|
end
|
29
32
|
|
30
|
-
def to_time(mode = :
|
33
|
+
def to_time(mode = :beginning)
|
31
34
|
return Time.now if @year.nil?
|
32
35
|
t = Time.parse("#{@year}-#{@month||'01'}-#{@day||'01'} #{@hour||'00'}:#{@min||'00'}:#{@sec||'00'}")
|
33
36
|
|
34
|
-
if
|
35
|
-
|
36
|
-
|
37
|
-
|
37
|
+
if @month.nil?
|
38
|
+
method = "_of_year"
|
39
|
+
elsif !@quarter.nil?
|
40
|
+
method = "_of_quarter"
|
41
|
+
elsif !@week.nil?
|
42
|
+
method = "_of_week"
|
43
|
+
elsif @day.nil?
|
44
|
+
method = "_of_month"
|
45
|
+
elsif @hour.nil?
|
46
|
+
method = "_of_day"
|
38
47
|
end
|
39
|
-
t
|
48
|
+
return t if method.nil?
|
49
|
+
t.send("#{mode}#{method}")
|
40
50
|
end
|
41
51
|
|
42
52
|
def to_s
|
@@ -62,6 +72,17 @@ module Appstats
|
|
62
72
|
s
|
63
73
|
end
|
64
74
|
|
75
|
+
def self.calculate_quarter_of(time)
|
76
|
+
return nil if time.nil?
|
77
|
+
(time.month - 1) / 3 + 1
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.calculate_week_of(time)
|
81
|
+
return nil if time.nil?
|
82
|
+
return -1 if time.beginning_of_week.year != time.year
|
83
|
+
time.strftime("%W").to_i
|
84
|
+
end
|
85
|
+
|
65
86
|
def self.parse(raw_input)
|
66
87
|
date = EntryDate.new
|
67
88
|
return date if raw_input.nil? || raw_input == ''
|
@@ -86,12 +107,12 @@ module Appstats
|
|
86
107
|
t_parts = [:year]
|
87
108
|
elsif input.match(/^this quarter$/)
|
88
109
|
t = t.beginning_of_quarter
|
89
|
-
t_parts = [:year,:month]
|
110
|
+
t_parts = [:year,:month, :quarter]
|
90
111
|
elsif input.match(/^this month$/)
|
91
112
|
t_parts = [:year,:month]
|
92
113
|
elsif input.match(/^this week$/)
|
93
114
|
t = t.beginning_of_week
|
94
|
-
t_parts = [:year,:month,:day]
|
115
|
+
t_parts = [:year,:month,:day, :week]
|
95
116
|
elsif input.match(/^this day$/)
|
96
117
|
t_parts = [:year,:month,:day]
|
97
118
|
elsif input.match(/^(.*),[^\d]*(\d*)$/) # month, year
|
@@ -112,7 +133,7 @@ module Appstats
|
|
112
133
|
if m
|
113
134
|
t = t.beginning_of_quarter
|
114
135
|
last_date_offset(m).times { t = (t - 1.day).beginning_of_quarter }
|
115
|
-
t_parts = [:year,:month]
|
136
|
+
t_parts = [:year,:month,:quarter]
|
116
137
|
end
|
117
138
|
|
118
139
|
m = input.match(/^(last|previous)\s*(\d*)\s*months?$/)
|
@@ -124,7 +145,7 @@ module Appstats
|
|
124
145
|
m = input.match(/^(last|previous)\s*(\d*)\s*weeks?$/)
|
125
146
|
if m
|
126
147
|
t = (t - last_date_offset(m).week).beginning_of_week
|
127
|
-
t_parts = [:year,:month,:day]
|
148
|
+
t_parts = [:year,:month,:day,:week]
|
128
149
|
end
|
129
150
|
|
130
151
|
m = input.match(/^(last|previous)\s*(\d*)\s*days?$/)
|
@@ -135,7 +156,11 @@ module Appstats
|
|
135
156
|
|
136
157
|
unless t_parts.nil?
|
137
158
|
t_parts.each do |label|
|
138
|
-
|
159
|
+
if [:quarter,:week].include?(label)
|
160
|
+
date.send("#{label}=",EntryDate.send("calculate_#{label}_of",t))
|
161
|
+
else
|
162
|
+
date.send("#{label}=",t.send(label))
|
163
|
+
end
|
139
164
|
end
|
140
165
|
return date
|
141
166
|
end
|
@@ -157,7 +182,7 @@ module Appstats
|
|
157
182
|
private
|
158
183
|
|
159
184
|
def state
|
160
|
-
[@year, @month, @day, @hour, @min, @sec]
|
185
|
+
[@year, @month, @day, @hour, @min, @sec, @week, @quarter]
|
161
186
|
end
|
162
187
|
|
163
188
|
# (last|previous) (\d*)
|
data/lib/appstats/result.rb
CHANGED
@@ -6,10 +6,26 @@ module Appstats
|
|
6
6
|
|
7
7
|
def date_to_s
|
8
8
|
return "" if from_date.nil? && to_date.nil?
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
|
10
|
+
from_s = nil
|
11
|
+
to_s = nil
|
12
|
+
|
13
|
+
if !from_date.nil? && to_date.nil? && created_at.nil?
|
14
|
+
from_s = from_date_to_s
|
15
|
+
to_s = "present"
|
16
|
+
elsif !from_date.nil? && to_date.nil? && !created_at.nil?
|
17
|
+
from_s = from_date_to_s
|
18
|
+
to_s = created_at.strftime('%Y-%m-%d')
|
19
|
+
elsif from_date.nil? && !to_date.nil?
|
20
|
+
from_s = "up"
|
21
|
+
to_s = to_date_to_s
|
22
|
+
else
|
23
|
+
from_s = from_date_to_s
|
24
|
+
to_s = to_date_to_s
|
25
|
+
end
|
26
|
+
|
27
|
+
return from_s if from_s == to_s
|
28
|
+
"#{from_s} to #{to_s}"
|
13
29
|
end
|
14
30
|
|
15
31
|
def from_date_to_s
|
data/lib/appstats/version.rb
CHANGED
data/spec/date_range_spec.rb
CHANGED
@@ -32,6 +32,7 @@ module Appstats
|
|
32
32
|
date_range.should == same_date_range
|
33
33
|
date_range.should_not == another_date_range
|
34
34
|
end
|
35
|
+
|
35
36
|
end
|
36
37
|
|
37
38
|
describe "#parse" do
|
@@ -89,7 +90,7 @@ module Appstats
|
|
89
90
|
end
|
90
91
|
|
91
92
|
it "should understand this quarter" do
|
92
|
-
DateRange.parse(" this quarter ").should == DateRange.new(:from => EntryDate.new(:year => 2010, :month => 1), :to => nil, :format => :
|
93
|
+
DateRange.parse(" this quarter ").should == DateRange.new(:from => EntryDate.new(:year => 2010, :month => 1, :quarter => 1), :to => nil, :format => :fixed_point )
|
93
94
|
end
|
94
95
|
|
95
96
|
it "should understand this month" do
|
@@ -97,7 +98,7 @@ module Appstats
|
|
97
98
|
end
|
98
99
|
|
99
100
|
it "should understand this week" do
|
100
|
-
DateRange.parse(" this week ").should == DateRange.new(:from => EntryDate.new(:year => 2010, :month => 1, :day => 11), :to => nil, :format => :
|
101
|
+
DateRange.parse(" this week ").should == DateRange.new(:from => EntryDate.new(:year => 2010, :month => 1, :day => 11, :week => 2), :to => nil, :format => :fixed_point )
|
101
102
|
end
|
102
103
|
|
103
104
|
it "should understand this day" do
|
@@ -113,7 +114,7 @@ module Appstats
|
|
113
114
|
end
|
114
115
|
|
115
116
|
it "should understand last quarter" do
|
116
|
-
DateRange.parse(" last quarter ").should == DateRange.new(:from => EntryDate.new(:year => 2009, :month => 10
|
117
|
+
DateRange.parse(" last quarter ").should == DateRange.new(:from => EntryDate.new(:year => 2009, :month => 10, :quarter => 4), :to => nil, :format => :fixed_point )
|
117
118
|
end
|
118
119
|
|
119
120
|
it "should understand last month" do
|
@@ -121,7 +122,7 @@ module Appstats
|
|
121
122
|
end
|
122
123
|
|
123
124
|
it "should understand last week" do
|
124
|
-
DateRange.parse(" last week ").should == DateRange.new(:from => EntryDate.new(:year => 2010, :month => 1, :day => 4
|
125
|
+
DateRange.parse(" last week ").should == DateRange.new(:from => EntryDate.new(:year => 2010, :month => 1, :day => 4, :week => 1), :to => nil, :format => :fixed_point )
|
125
126
|
end
|
126
127
|
|
127
128
|
it "should understand last day" do
|
@@ -137,7 +138,7 @@ module Appstats
|
|
137
138
|
end
|
138
139
|
|
139
140
|
it "should understand previous week" do
|
140
|
-
DateRange.parse(" previous week ").should == DateRange.new(:from => EntryDate.new(:year => 2010, :month => 1, :day => 4
|
141
|
+
DateRange.parse(" previous week ").should == DateRange.new(:from => EntryDate.new(:year => 2010, :month => 1, :day => 4, :week => 1), :to => nil, :format => :fixed_point )
|
141
142
|
end
|
142
143
|
|
143
144
|
it "should understand previous day" do
|
@@ -155,9 +156,9 @@ module Appstats
|
|
155
156
|
end
|
156
157
|
|
157
158
|
it "should understand last X quarters" do
|
158
|
-
DateRange.parse(" last 1 quarter ").should == DateRange.new(:from => EntryDate.new(:year => 2010, :month => 1), :to => nil, :format => :inclusive )
|
159
|
-
DateRange.parse(" last 2 quarters ").should == DateRange.new(:from => EntryDate.new(:year => 2009, :month => 10), :to => nil, :format => :inclusive )
|
160
|
-
DateRange.parse(" last 3 quarters ").should == DateRange.new(:from => EntryDate.new(:year => 2009, :month => 7), :to => nil, :format => :inclusive )
|
159
|
+
DateRange.parse(" last 1 quarter ").should == DateRange.new(:from => EntryDate.new(:year => 2010, :month => 1, :quarter => 1), :to => nil, :format => :inclusive )
|
160
|
+
DateRange.parse(" last 2 quarters ").should == DateRange.new(:from => EntryDate.new(:year => 2009, :month => 10, :quarter => 4), :to => nil, :format => :inclusive )
|
161
|
+
DateRange.parse(" last 3 quarters ").should == DateRange.new(:from => EntryDate.new(:year => 2009, :month => 7, :quarter => 3), :to => nil, :format => :inclusive )
|
161
162
|
end
|
162
163
|
|
163
164
|
it "should understand last X months" do
|
@@ -167,9 +168,9 @@ module Appstats
|
|
167
168
|
end
|
168
169
|
|
169
170
|
it "should understand last X weeks" do
|
170
|
-
DateRange.parse(" last 1 week ").should == DateRange.new(:from => EntryDate.new(:year => 2010, :month => 1, :day => 11), :to => nil, :format => :inclusive )
|
171
|
-
DateRange.parse(" last 2 weeks ").should == DateRange.new(:from => EntryDate.new(:year => 2010, :month => 1, :day => 4), :to => nil, :format => :inclusive )
|
172
|
-
DateRange.parse(" last 3 weeks ").should == DateRange.new(:from => EntryDate.new(:year => 2009, :month => 12, :day => 28), :to => nil, :format => :inclusive )
|
171
|
+
DateRange.parse(" last 1 week ").should == DateRange.new(:from => EntryDate.new(:year => 2010, :month => 1, :day => 11, :week => 2), :to => nil, :format => :inclusive )
|
172
|
+
DateRange.parse(" last 2 weeks ").should == DateRange.new(:from => EntryDate.new(:year => 2010, :month => 1, :day => 4, :week => 1), :to => nil, :format => :inclusive )
|
173
|
+
DateRange.parse(" last 3 weeks ").should == DateRange.new(:from => EntryDate.new(:year => 2009, :month => 12, :day => 28, :week => 52), :to => nil, :format => :inclusive )
|
173
174
|
end
|
174
175
|
|
175
176
|
it "should understand last X days" do
|
@@ -189,9 +190,9 @@ module Appstats
|
|
189
190
|
end
|
190
191
|
|
191
192
|
it "should understand previous Y quarters" do
|
192
|
-
DateRange.parse(" previous 1 quarter ").should == DateRange.new(:from => EntryDate.new(:year => 2009, :month => 10), :to => EntryDate.new(:year => 2009, :month => 12), :format => :inclusive )
|
193
|
-
DateRange.parse(" previous 2 quarters ").should == DateRange.new(:from => EntryDate.new(:year => 2009, :month => 7), :to => EntryDate.new(:year => 2009, :month => 12), :format => :inclusive )
|
194
|
-
DateRange.parse(" previous 3 quarters ").should == DateRange.new(:from => EntryDate.new(:year => 2009, :month => 4), :to => EntryDate.new(:year => 2009, :month => 12), :format => :inclusive )
|
193
|
+
DateRange.parse(" previous 1 quarter ").should == DateRange.new(:from => EntryDate.new(:year => 2009, :month => 10, :quarter => 4), :to => EntryDate.new(:year => 2009, :month => 12, :quarter => 4), :format => :inclusive )
|
194
|
+
DateRange.parse(" previous 2 quarters ").should == DateRange.new(:from => EntryDate.new(:year => 2009, :month => 7, :quarter => 3), :to => EntryDate.new(:year => 2009, :month => 12, :quarter => 4), :format => :inclusive )
|
195
|
+
DateRange.parse(" previous 3 quarters ").should == DateRange.new(:from => EntryDate.new(:year => 2009, :month => 4, :quarter => 2), :to => EntryDate.new(:year => 2009, :month => 12, :quarter => 4), :format => :inclusive )
|
195
196
|
end
|
196
197
|
|
197
198
|
it "should understand previous Y months" do
|
@@ -201,9 +202,9 @@ module Appstats
|
|
201
202
|
end
|
202
203
|
|
203
204
|
it "should understand previous 2 weeks" do
|
204
|
-
DateRange.parse(" previous 1 week ").should == DateRange.new(:from => EntryDate.new(:year => 2010, :month => 1, :day => 4), :to => EntryDate.new(:year => 2010, :month => 1, :day => 10), :format => :inclusive )
|
205
|
-
DateRange.parse(" previous 2 weeks ").should == DateRange.new(:from => EntryDate.new(:year => 2009, :month => 12, :day => 28), :to => EntryDate.new(:year => 2010, :month => 1, :day => 10), :format => :inclusive )
|
206
|
-
DateRange.parse(" previous 3 weeks ").should == DateRange.new(:from => EntryDate.new(:year => 2009, :month => 12, :day => 21), :to => EntryDate.new(:year => 2010, :month => 1, :day => 10), :format => :inclusive )
|
205
|
+
DateRange.parse(" previous 1 week ").should == DateRange.new(:from => EntryDate.new(:year => 2010, :month => 1, :day => 4, :week => 1), :to => EntryDate.new(:year => 2010, :month => 1, :day => 10, :week => 1), :format => :inclusive )
|
206
|
+
DateRange.parse(" previous 2 weeks ").should == DateRange.new(:from => EntryDate.new(:year => 2009, :month => 12, :day => 28, :week => 52), :to => EntryDate.new(:year => 2010, :month => 1, :day => 10, :week => 1), :format => :inclusive )
|
207
|
+
DateRange.parse(" previous 3 weeks ").should == DateRange.new(:from => EntryDate.new(:year => 2009, :month => 12, :day => 21, :week => 51), :to => EntryDate.new(:year => 2010, :month => 1, :day => 10, :week => 1), :format => :inclusive )
|
207
208
|
end
|
208
209
|
|
209
210
|
it "should understand previous 2 days" do
|
@@ -266,6 +267,15 @@ module Appstats
|
|
266
267
|
DateRange.new(:from => EntryDate.new(:year => 2009, :month => 2), :format => :exclusive).from_date.to_s.should == Time.parse("2009-02-28 23:59:59").to_s
|
267
268
|
DateRange.new(:from => EntryDate.new(:year => 2009, :month => 2, :day => 15), :format => :exclusive).from_date.to_s.should == Time.parse("2009-02-15 23:59:59").to_s
|
268
269
|
end
|
270
|
+
|
271
|
+
it "should handle fixed points" do
|
272
|
+
DateRange.new(:from => EntryDate.new(:year => 2009), :to => nil, :format => :fixed_point ).from_date.to_s.should == Time.parse("2009-01-01 00:00:00").to_s
|
273
|
+
DateRange.new(:from => EntryDate.new(:year => 2009, :month => 10, :quarter => 4), :to => nil, :format => :fixed_point ).from_date.to_s.should == Time.parse("2009-10-01 00:00:00").to_s
|
274
|
+
DateRange.new(:from => EntryDate.new(:year => 2009, :month => 10, :day => 2, :week => 39), :to => nil, :format => :fixed_point ).from_date.to_s.should == Time.parse("2009-09-28 00:00:00").to_s
|
275
|
+
DateRange.new(:from => EntryDate.new(:year => 2009, :month => 10), :to => nil, :format => :fixed_point ).from_date.to_s.should == Time.parse("2009-10-01 00:00:00").to_s
|
276
|
+
DateRange.new(:from => EntryDate.new(:year => 2009, :month => 10, :day => 3), :to => nil, :format => :fixed_point ).from_date.to_s.should == Time.parse("2009-10-03 00:00:00").to_s
|
277
|
+
DateRange.new(:from => nil, :to => nil, :format => :fixed_point ).from_date.should == nil
|
278
|
+
end
|
269
279
|
|
270
280
|
end
|
271
281
|
|
@@ -284,6 +294,15 @@ module Appstats
|
|
284
294
|
DateRange.new(:to => EntryDate.new(:year => 2009, :month => 2, :day => 15), :format => :inclusive).to_date.to_s.should == Time.parse("2009-02-15 23:59:59").to_s
|
285
295
|
end
|
286
296
|
|
297
|
+
it "should handle fixed points" do
|
298
|
+
DateRange.new(:from => EntryDate.new(:year => 2009), :to => nil, :format => :fixed_point ).to_date.to_s.should == Time.parse("2009-12-31 23:59:59").to_s
|
299
|
+
DateRange.new(:from => EntryDate.new(:year => 2009, :month => 10), :to => nil, :format => :fixed_point ).to_date.to_s.should == Time.parse("2009-10-31 23:59:59").to_s
|
300
|
+
DateRange.new(:from => EntryDate.new(:year => 2009, :month => 10, :quarter => 4), :to => nil, :format => :fixed_point ).to_date.to_s.should == Time.parse("2009-12-31 23:59:59").to_s
|
301
|
+
DateRange.new(:from => EntryDate.new(:year => 2009, :month => 10, :day => 2, :week => 39), :to => nil, :format => :fixed_point ).to_date.to_s.should == Time.parse("2009-10-04 23:59:59").to_s
|
302
|
+
DateRange.new(:from => EntryDate.new(:year => 2009, :month => 10, :day => 3), :to => nil, :format => :fixed_point ).to_date.to_s.should == Time.parse("2009-10-03 23:59:59").to_s
|
303
|
+
|
304
|
+
DateRange.new(:from => nil, :to => nil, :format => :fixed_point ).to_date.should == nil
|
305
|
+
end
|
287
306
|
|
288
307
|
end
|
289
308
|
|
data/spec/entry_date_spec.rb
CHANGED
@@ -11,26 +11,38 @@ module Appstats
|
|
11
11
|
describe "#initialize" do
|
12
12
|
|
13
13
|
it "should understand year, month, day, hour, min, sec" do
|
14
|
-
date = EntryDate.new(:year => 2010, :month => 1, :day => 2, :hour => 3, :min => 4, :sec => 5)
|
14
|
+
date = EntryDate.new(:year => 2010, :month => 1, :day => 2, :hour => 3, :min => 4, :sec => 5, :week => 6, :quarter => 7)
|
15
15
|
date.year.should == 2010
|
16
16
|
date.month.should == 1
|
17
17
|
date.day.should == 2
|
18
18
|
date.hour.should == 3
|
19
19
|
date.min.should == 4
|
20
20
|
date.sec.should == 5
|
21
|
+
date.week.should == 6
|
22
|
+
date.quarter.should == 7
|
21
23
|
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "#==" do
|
22
28
|
|
23
|
-
it "should
|
24
|
-
date = EntryDate.new(:year => 2010, :month => 1, :day => 2, :hour => 3, :min => 4, :sec => 5)
|
25
|
-
same_date = EntryDate.new(:year => 2010, :month => 1, :day => 2, :hour => 3, :min => 4, :sec => 5)
|
26
|
-
another_date = EntryDate.new(:year => 2011, :month => 1, :day => 2, :hour => 3, :min => 4, :sec => 5)
|
27
|
-
|
29
|
+
it "should be equal on all attributes" do
|
30
|
+
date = EntryDate.new(:year => 2010, :month => 1, :day => 2, :hour => 3, :min => 4, :sec => 5, :week => 6, :quarter => 7)
|
31
|
+
same_date = EntryDate.new(:year => 2010, :month => 1, :day => 2, :hour => 3, :min => 4, :sec => 5, :week => 6, :quarter => 7)
|
28
32
|
date.should == date
|
29
33
|
date.should == same_date
|
30
|
-
date.should_not == another_date
|
31
34
|
end
|
32
35
|
|
33
|
-
|
36
|
+
it "should be not equal if diferent attributes" do
|
37
|
+
date = EntryDate.new(:year => 2010, :month => 1, :day => 2, :hour => 3, :min => 4, :sec => 5, :week => 6, :quarter => 7)
|
38
|
+
|
39
|
+
[:year,:month,:day,:hour,:min,:sec,:week,:quarter].each do |attr|
|
40
|
+
different_date = EntryDate.new(:year => 2010, :month => 1, :day => 2, :hour => 3, :min => 4, :sec => 5, :week => 6, :quarter => 7)
|
41
|
+
different_date.send("#{attr}=",99)
|
42
|
+
different_date.should_not == date
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
34
46
|
end
|
35
47
|
|
36
48
|
describe "#to_time" do
|
@@ -43,6 +55,18 @@ module Appstats
|
|
43
55
|
EntryDate.new(:year => 2010, :month => 2).to_time.should == Time.parse("2010-02-01 00:00:00")
|
44
56
|
end
|
45
57
|
|
58
|
+
it "should handle quarter" do
|
59
|
+
EntryDate.new(:year => 2010, :month => 2, :quarter => 1).to_time(:beginning).should == Time.parse("2010-01-01 00:00:00")
|
60
|
+
EntryDate.new(:year => 2010, :month => 2, :quarter => 1).to_time(:end).to_s.should == Time.parse("2010-03-31 23:59:59").to_s
|
61
|
+
EntryDate.new(:year => 2010, :month => 2, :quarter => 1).to_time.should == Time.parse("2010-01-01 00:00:00")
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should handle week" do
|
65
|
+
EntryDate.new(:year => 2010, :month => 2, :day => 16, :week => 7).to_time(:beginning).should == Time.parse("2010-02-15 00:00:00")
|
66
|
+
EntryDate.new(:year => 2010, :month => 2, :day => 16, :week => 7).to_time(:end).to_s.should == Time.parse("2010-02-21 23:59:59").to_s
|
67
|
+
EntryDate.new(:year => 2010, :month => 2, :day => 16, :week => 7).to_time.should == Time.parse("2010-02-15 00:00:00")
|
68
|
+
end
|
69
|
+
|
46
70
|
it "should handle now" do
|
47
71
|
EntryDate.new.to_time.should == Time.now
|
48
72
|
end
|
@@ -70,7 +94,7 @@ module Appstats
|
|
70
94
|
describe "#end_of_week" do
|
71
95
|
it "should return the same 'level' data points" do
|
72
96
|
now = EntryDate.new(:year => 2010, :month => 1, :day => 5, :hour => 10) # tuesday
|
73
|
-
expected = EntryDate.new(:year => 2010, :month => 1, :day => 10, :hour => 10)
|
97
|
+
expected = EntryDate.new(:year => 2010, :month => 1, :day => 10, :hour => 10, :week => 1)
|
74
98
|
now.end_of_week.should == expected
|
75
99
|
end
|
76
100
|
end
|
@@ -78,11 +102,112 @@ module Appstats
|
|
78
102
|
describe "#end_of_quarter" do
|
79
103
|
it "should return the same 'level' data points" do
|
80
104
|
now = EntryDate.new(:year => 2010, :month => 1, :day => 5, :hour => 10)
|
81
|
-
expected = EntryDate.new(:year => 2010, :month => 3)
|
105
|
+
expected = EntryDate.new(:year => 2010, :month => 3, :quarter => 1)
|
82
106
|
now.end_of_quarter.should == expected
|
83
107
|
end
|
108
|
+
|
109
|
+
it "should return quarter" do
|
110
|
+
now = EntryDate.new(:year => 2010, :month => 1, :quarter => 1)
|
111
|
+
expected = EntryDate.new(:year => 2010, :month => 3, :quarter => 1)
|
112
|
+
now.end_of_quarter.should == expected
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
describe "#calculate_quarter_of" do
|
118
|
+
|
119
|
+
it "should handle nil" do
|
120
|
+
EntryDate.calculate_quarter_of(nil).should == nil
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should be 1 for jan/feb/mar" do
|
124
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-01-01")).should == 1
|
125
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-02-15")).should == 1
|
126
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-03-31")).should == 1
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should be 2 for apr/may/jun" do
|
130
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-04-01")).should == 2
|
131
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-05-15")).should == 2
|
132
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-06-30")).should == 2
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should be 3 for jul/aug/sep" do
|
136
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-07-01")).should == 3
|
137
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-08-15")).should == 3
|
138
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-09-30")).should == 3
|
139
|
+
end
|
140
|
+
|
141
|
+
it "should be 4 for oct/nov/dec" do
|
142
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-10-01")).should == 4
|
143
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-11-15")).should == 4
|
144
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-12-31")).should == 4
|
145
|
+
end
|
146
|
+
|
147
|
+
|
148
|
+
end
|
149
|
+
|
150
|
+
describe "#calculate_quarter_of" do
|
151
|
+
|
152
|
+
it "should handle nil" do
|
153
|
+
EntryDate.calculate_quarter_of(nil).should == nil
|
154
|
+
end
|
155
|
+
|
156
|
+
it "should be 1 for jan/feb/mar" do
|
157
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-01-01")).should == 1
|
158
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-02-15")).should == 1
|
159
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-03-31")).should == 1
|
160
|
+
end
|
161
|
+
|
162
|
+
it "should be 2 for apr/may/jun" do
|
163
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-04-01")).should == 2
|
164
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-05-15")).should == 2
|
165
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-06-30")).should == 2
|
166
|
+
end
|
167
|
+
|
168
|
+
it "should be 3 for jul/aug/sep" do
|
169
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-07-01")).should == 3
|
170
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-08-15")).should == 3
|
171
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-09-30")).should == 3
|
172
|
+
end
|
173
|
+
|
174
|
+
it "should be 4 for oct/nov/dec" do
|
175
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-10-01")).should == 4
|
176
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-11-15")).should == 4
|
177
|
+
EntryDate.calculate_quarter_of(Time.parse("2011-12-31")).should == 4
|
178
|
+
end
|
179
|
+
|
180
|
+
|
84
181
|
end
|
85
182
|
|
183
|
+
describe "#calculate_week_of" do
|
184
|
+
|
185
|
+
it "should handle nil" do
|
186
|
+
EntryDate.calculate_week_of(nil).should == nil
|
187
|
+
end
|
188
|
+
|
189
|
+
it "should be -1 if jan 1 is not start of week" do
|
190
|
+
EntryDate.calculate_week_of(Time.parse("2011-01-01")).should == -1
|
191
|
+
EntryDate.calculate_week_of(Time.parse("2011-01-02")).should == -1
|
192
|
+
end
|
193
|
+
|
194
|
+
it "should be 1 for the first monday of the year" do
|
195
|
+
EntryDate.calculate_week_of(Time.parse("2011-01-03")).should == 1
|
196
|
+
end
|
197
|
+
|
198
|
+
it "should be 1 if the first day is on a monday" do
|
199
|
+
EntryDate.calculate_week_of(Time.parse("2018-01-01")).should == 1
|
200
|
+
end
|
201
|
+
|
202
|
+
it "should be X for the Xth monday of the year" do
|
203
|
+
time = Time.parse("2011-01-03")
|
204
|
+
1.upto(52).each do |offset|
|
205
|
+
EntryDate.calculate_week_of(time).should == offset
|
206
|
+
time = time.next_week
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
end
|
86
211
|
|
87
212
|
describe "#parse" do
|
88
213
|
|
@@ -128,7 +253,7 @@ module Appstats
|
|
128
253
|
end
|
129
254
|
|
130
255
|
it "should understand last quarter" do
|
131
|
-
EntryDate.parse("last quarter").should == EntryDate.new(:year => 2009, :month => 10)
|
256
|
+
EntryDate.parse("last quarter").should == EntryDate.new(:year => 2009, :month => 10, :quarter => 4)
|
132
257
|
end
|
133
258
|
|
134
259
|
it "should understand last month" do
|
@@ -136,7 +261,7 @@ module Appstats
|
|
136
261
|
end
|
137
262
|
|
138
263
|
it "should understand last week" do
|
139
|
-
EntryDate.parse("last week").should == EntryDate.new(:year => 2010, :month => 1, :day => 4)
|
264
|
+
EntryDate.parse("last week").should == EntryDate.new(:year => 2010, :month => 1, :day => 4, :week => 1)
|
140
265
|
end
|
141
266
|
|
142
267
|
it "should understand last day" do
|
@@ -148,7 +273,7 @@ module Appstats
|
|
148
273
|
end
|
149
274
|
|
150
275
|
it "should understand previous quarter" do
|
151
|
-
EntryDate.parse("previous quarter").should == EntryDate.new(:year => 2009, :month => 10)
|
276
|
+
EntryDate.parse("previous quarter").should == EntryDate.new(:year => 2009, :month => 10, :quarter => 4)
|
152
277
|
end
|
153
278
|
|
154
279
|
it "should understand previous month" do
|
@@ -156,7 +281,7 @@ module Appstats
|
|
156
281
|
end
|
157
282
|
|
158
283
|
it "should understand previous week" do
|
159
|
-
EntryDate.parse("previous week").should == EntryDate.new(:year => 2010, :month => 1, :day => 4)
|
284
|
+
EntryDate.parse("previous week").should == EntryDate.new(:year => 2010, :month => 1, :day => 4, :week => 1)
|
160
285
|
end
|
161
286
|
|
162
287
|
it "should understand previous day" do
|
@@ -168,7 +293,7 @@ module Appstats
|
|
168
293
|
end
|
169
294
|
|
170
295
|
it "should understand this quarter" do
|
171
|
-
EntryDate.parse("this quarter").should == EntryDate.new(:year => 2010, :month => 1)
|
296
|
+
EntryDate.parse("this quarter").should == EntryDate.new(:year => 2010, :month => 1, :quarter => 1)
|
172
297
|
end
|
173
298
|
|
174
299
|
it "should understand this month" do
|
@@ -176,7 +301,7 @@ module Appstats
|
|
176
301
|
end
|
177
302
|
|
178
303
|
it "should understand this week" do
|
179
|
-
EntryDate.parse("this week").should == EntryDate.new(:year => 2010, :month => 1, :day => 11)
|
304
|
+
EntryDate.parse("this week").should == EntryDate.new(:year => 2010, :month => 1, :day => 11, :week => 2)
|
180
305
|
end
|
181
306
|
|
182
307
|
it "should understand this day" do
|
@@ -190,9 +315,9 @@ module Appstats
|
|
190
315
|
end
|
191
316
|
|
192
317
|
it "should understand last X quarters" do
|
193
|
-
EntryDate.parse("last 1 quarter").should == EntryDate.new(:year => 2010, :month => 1)
|
194
|
-
EntryDate.parse("last 2 quarters").should == EntryDate.new(:year => 2009, :month => 10)
|
195
|
-
EntryDate.parse("last 3 quarters").should == EntryDate.new(:year => 2009, :month => 7)
|
318
|
+
EntryDate.parse("last 1 quarter").should == EntryDate.new(:year => 2010, :month => 1, :quarter => 1 )
|
319
|
+
EntryDate.parse("last 2 quarters").should == EntryDate.new(:year => 2009, :month => 10, :quarter => 4)
|
320
|
+
EntryDate.parse("last 3 quarters").should == EntryDate.new(:year => 2009, :month => 7, :quarter => 3)
|
196
321
|
end
|
197
322
|
|
198
323
|
|
@@ -203,9 +328,9 @@ module Appstats
|
|
203
328
|
end
|
204
329
|
|
205
330
|
it "should understand last X weeks" do
|
206
|
-
EntryDate.parse("last 1 week").should == EntryDate.new(:year => 2010, :month => 1, :day => 11)
|
207
|
-
EntryDate.parse("last 2 weeks").should == EntryDate.new(:year => 2010, :month => 1, :day => 4)
|
208
|
-
EntryDate.parse("last 3 weeks").should == EntryDate.new(:year => 2009, :month => 12, :day => 28)
|
331
|
+
EntryDate.parse("last 1 week").should == EntryDate.new(:year => 2010, :month => 1, :day => 11, :week => 2)
|
332
|
+
EntryDate.parse("last 2 weeks").should == EntryDate.new(:year => 2010, :month => 1, :day => 4, :week => 1)
|
333
|
+
EntryDate.parse("last 3 weeks").should == EntryDate.new(:year => 2009, :month => 12, :day => 28, :week => 52)
|
209
334
|
end
|
210
335
|
|
211
336
|
it "should understand last X days" do
|
@@ -221,9 +346,9 @@ module Appstats
|
|
221
346
|
end
|
222
347
|
|
223
348
|
it "should understand previous X quarters" do
|
224
|
-
EntryDate.parse("previous 1 quarter").should == EntryDate.new(:year => 2009, :month => 10)
|
225
|
-
EntryDate.parse("previous 2 quarters").should == EntryDate.new(:year => 2009, :month => 7)
|
226
|
-
EntryDate.parse("previous 3 quarters").should == EntryDate.new(:year => 2009, :month => 4)
|
349
|
+
EntryDate.parse("previous 1 quarter").should == EntryDate.new(:year => 2009, :month => 10, :quarter => 4)
|
350
|
+
EntryDate.parse("previous 2 quarters").should == EntryDate.new(:year => 2009, :month => 7, :quarter => 3)
|
351
|
+
EntryDate.parse("previous 3 quarters").should == EntryDate.new(:year => 2009, :month => 4, :quarter => 2)
|
227
352
|
end
|
228
353
|
|
229
354
|
it "should understand previous X months" do
|
@@ -233,9 +358,9 @@ module Appstats
|
|
233
358
|
end
|
234
359
|
|
235
360
|
it "should understand previous X weeks" do
|
236
|
-
EntryDate.parse("previous 1 week").should == EntryDate.new(:year => 2010, :month => 1, :day => 4)
|
237
|
-
EntryDate.parse("previous 2 weeks").should == EntryDate.new(:year => 2009, :month => 12, :day => 28)
|
238
|
-
EntryDate.parse("previous 3 weeks").should == EntryDate.new(:year => 2009, :month => 12, :day => 21)
|
361
|
+
EntryDate.parse("previous 1 week").should == EntryDate.new(:year => 2010, :month => 1, :day => 4, :week => 1)
|
362
|
+
EntryDate.parse("previous 2 weeks").should == EntryDate.new(:year => 2009, :month => 12, :day => 28, :week => 52)
|
363
|
+
EntryDate.parse("previous 3 weeks").should == EntryDate.new(:year => 2009, :month => 12, :day => 21, :week => 51)
|
239
364
|
end
|
240
365
|
|
241
366
|
it "should understand previous X days" do
|
data/spec/entry_spec.rb
CHANGED
@@ -72,6 +72,8 @@ module Appstats
|
|
72
72
|
entry.hour.should == 10
|
73
73
|
entry.min.should == 11
|
74
74
|
entry.sec.should == 12
|
75
|
+
entry.week.should == 2
|
76
|
+
entry.quarter.should == 1
|
75
77
|
|
76
78
|
entry.occurred_at = Time.parse("2011-02-16 17:18:19")
|
77
79
|
entry.year.should == 2011
|
@@ -80,6 +82,8 @@ module Appstats
|
|
80
82
|
entry.hour.should == 17
|
81
83
|
entry.min.should == 18
|
82
84
|
entry.sec.should == 19
|
85
|
+
entry.week.should == 7
|
86
|
+
entry.quarter.should == 1
|
83
87
|
|
84
88
|
entry.occurred_at = nil
|
85
89
|
entry.year.should == nil
|
@@ -88,7 +92,8 @@ module Appstats
|
|
88
92
|
entry.hour.should == nil
|
89
93
|
entry.min.should == nil
|
90
94
|
entry.sec.should == nil
|
91
|
-
|
95
|
+
entry.week.should == nil
|
96
|
+
entry.quarter.should == nil
|
92
97
|
end
|
93
98
|
|
94
99
|
end
|
@@ -188,18 +193,18 @@ module Appstats
|
|
188
193
|
end
|
189
194
|
|
190
195
|
it "should understand an entry without contexts" do
|
191
|
-
entry = Entry.create_from_logger_string("0.
|
196
|
+
entry = Entry.create_from_logger_string("0.12.1 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search")
|
192
197
|
Entry.count.should == @before_count + 1
|
193
198
|
entry.action.should == "address_search"
|
194
|
-
entry.raw_entry.should == "0.
|
199
|
+
entry.raw_entry.should == "0.12.1 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search"
|
195
200
|
entry.occurred_at.should == Time.parse("2010-09-21 23:15:20")
|
196
201
|
end
|
197
202
|
|
198
203
|
it "should understand contexts" do
|
199
|
-
entry = Entry.create_from_logger_string("0.
|
204
|
+
entry = Entry.create_from_logger_string("0.12.1 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Market : server=Live")
|
200
205
|
Entry.count.should == @before_count + 1
|
201
206
|
entry.action.should == "address_filter"
|
202
|
-
entry.raw_entry.should == "0.
|
207
|
+
entry.raw_entry.should == "0.12.1 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Market : server=Live"
|
203
208
|
entry.occurred_at.should == Time.parse("2010-09-21 23:15:20")
|
204
209
|
entry.contexts.size.should == 2
|
205
210
|
entry.contexts[0].context_key = "app_name"
|
data/spec/logger_spec.rb
CHANGED
@@ -115,7 +115,7 @@ module Appstats
|
|
115
115
|
|
116
116
|
it "should accept numbers" do
|
117
117
|
Appstats::Logger.entry(5, :blah => 6)
|
118
|
-
Appstats::Logger.raw_read.should == ["0.
|
118
|
+
Appstats::Logger.raw_read.should == ["0.12.1 setup[:,=,-n] 2010-09-21 23:15:20 action=5 : blah=6"]
|
119
119
|
end
|
120
120
|
|
121
121
|
end
|
@@ -124,7 +124,7 @@ module Appstats
|
|
124
124
|
|
125
125
|
it "should look similar to regular entry" do
|
126
126
|
Appstats::Logger.exception_entry(RuntimeError.new("blah"),:on => "login")
|
127
|
-
Appstats::Logger.raw_read.should == ["0.
|
127
|
+
Appstats::Logger.raw_read.should == ["0.12.1 setup[:,=,-n] 2010-09-21 23:15:20 action=appstats-exception : error=blah : on=login"]
|
128
128
|
end
|
129
129
|
|
130
130
|
end
|
@@ -141,29 +141,29 @@ module Appstats
|
|
141
141
|
|
142
142
|
it "should handle a statistics entry" do
|
143
143
|
expected = { :action => "address_search", :timestamp => "2010-09-21 23:15:20" }
|
144
|
-
actual = Appstats::Logger.entry_to_hash("0.
|
144
|
+
actual = Appstats::Logger.entry_to_hash("0.12.1 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search")
|
145
145
|
actual.should == expected
|
146
146
|
end
|
147
147
|
|
148
148
|
it "should handle contexts" do
|
149
149
|
expected = { :action => "address_filter", :timestamp => "2010-09-21 23:15:20", :server => "Live", :app_name => 'Market' }
|
150
|
-
actual = Appstats::Logger.entry_to_hash("0.
|
150
|
+
actual = Appstats::Logger.entry_to_hash("0.12.1 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Market : server=Live")
|
151
151
|
actual.should == expected
|
152
152
|
end
|
153
153
|
|
154
154
|
it "should handle actions with the delimiter (and change the delimiter)" do
|
155
155
|
expected = { :action => "address:=search-n", :timestamp => "2010-09-21 23:15:20" }
|
156
|
-
actual = Appstats::Logger.entry_to_hash("0.
|
156
|
+
actual = Appstats::Logger.entry_to_hash("0.12.1 setup[::,==,--n] 2010-09-21 23:15:20 action==address:=search-n")
|
157
157
|
actual.should == expected
|
158
158
|
|
159
159
|
expected = { :action => "address::search==--n", :timestamp => "2010-09-21 23:15:20" }
|
160
|
-
actual = Appstats::Logger.entry_to_hash("0.
|
160
|
+
actual = Appstats::Logger.entry_to_hash("0.12.1 setup[:::,===,---n] 2010-09-21 23:15:20 action===address::search==--n")
|
161
161
|
actual.should == expected
|
162
162
|
end
|
163
163
|
|
164
164
|
it "should handle contexts with the delimiter (and change the delimiter)" do
|
165
165
|
expected = { :action => "address", :timestamp => "2010-09-21 23:15:20", :server => "market:eval=-n" }
|
166
|
-
actual = Appstats::Logger.entry_to_hash("0.
|
166
|
+
actual = Appstats::Logger.entry_to_hash("0.12.1 setup[::,==,--n] 2010-09-21 23:15:20 action==address :: server==market:eval=-n")
|
167
167
|
actual.should == expected
|
168
168
|
end
|
169
169
|
|
@@ -172,66 +172,66 @@ module Appstats
|
|
172
172
|
describe "#entry_to_s" do
|
173
173
|
|
174
174
|
it "should handle a statistics entry" do
|
175
|
-
expected = "0.
|
175
|
+
expected = "0.12.1 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search"
|
176
176
|
actual = Appstats::Logger.entry_to_s("address_search")
|
177
177
|
actual.should == expected
|
178
178
|
end
|
179
179
|
|
180
180
|
it "should handle numbers" do
|
181
|
-
expected = "0.
|
181
|
+
expected = "0.12.1 setup[:,=,-n] 2010-09-21 23:15:20 action=1 : note=2.2"
|
182
182
|
actual = Appstats::Logger.entry_to_s(1,:note => 2.2)
|
183
183
|
actual.should == expected
|
184
184
|
end
|
185
185
|
|
186
186
|
it "should handle default contexts" do
|
187
187
|
Appstats::Logger.default_contexts[:app_name] = "market"
|
188
|
-
expected = "0.
|
188
|
+
expected = "0.12.1 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search : app_name=market"
|
189
189
|
actual = Appstats::Logger.entry_to_s("address_search")
|
190
190
|
actual.should == expected
|
191
191
|
end
|
192
192
|
|
193
193
|
it "should handle contexts (and sort them by symbol)" do
|
194
|
-
expected = "0.
|
194
|
+
expected = "0.12.1 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Market : server=Live"
|
195
195
|
actual = Appstats::Logger.entry_to_s("address_filter", { :server => "Live", :app_name => 'Market' })
|
196
196
|
actual.should == expected
|
197
197
|
end
|
198
198
|
|
199
199
|
it "should handle actions with the delimiter (and change the delimiter)" do
|
200
|
-
expected = "0.
|
200
|
+
expected = "0.12.1 setup[::,==,--n] 2010-09-21 23:15:20 action==address:=search-n"
|
201
201
|
actual = Appstats::Logger.entry_to_s("address:=search-n")
|
202
202
|
actual.should == expected
|
203
203
|
|
204
|
-
expected = "0.
|
204
|
+
expected = "0.12.1 setup[:::,===,---n] 2010-09-21 23:15:20 action===address::search==--n"
|
205
205
|
actual = Appstats::Logger.entry_to_s("address::search==--n")
|
206
206
|
actual.should == expected
|
207
207
|
end
|
208
208
|
|
209
209
|
it "should handle contexts with the delimiter (and change the delimiter)" do
|
210
|
-
expected = "0.
|
210
|
+
expected = "0.12.1 setup[::,==,--n] 2010-09-21 23:15:20 action==address :: server==market:eval=-n"
|
211
211
|
actual = Appstats::Logger.entry_to_s("address", :server => 'market:eval=-n')
|
212
212
|
actual.should == expected
|
213
213
|
end
|
214
214
|
|
215
215
|
it "should ignore spaces" do
|
216
|
-
expected = "0.
|
216
|
+
expected = "0.12.1 setup[:,=,-n] 2010-09-21 23:15:20 action=address search"
|
217
217
|
actual = Appstats::Logger.entry_to_s("address search")
|
218
218
|
actual.should == expected
|
219
219
|
end
|
220
220
|
|
221
221
|
it "should convert newlines in action" do
|
222
|
-
expected = "0.
|
222
|
+
expected = "0.12.1 setup[:,=,-n] 2010-09-21 23:15:20 action=address_-nsearch"
|
223
223
|
actual = Appstats::Logger.entry_to_s("address_\nsearch")
|
224
224
|
actual.should == expected
|
225
225
|
end
|
226
226
|
|
227
227
|
it "should convert newlines in context" do
|
228
|
-
expected = "0.
|
228
|
+
expected = "0.12.1 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search : blah=some-nlong-nstatement"
|
229
229
|
actual = Appstats::Logger.entry_to_s("address_search",:blah => "some\nlong\nstatement")
|
230
230
|
actual.should == expected
|
231
231
|
end
|
232
232
|
|
233
233
|
it "should convert newlines based on the delimiter" do
|
234
|
-
expected = "0.
|
234
|
+
expected = "0.12.1 setup[::,==,--n] 2010-09-21 23:15:20 action==address:=--nsearch-n"
|
235
235
|
actual = Appstats::Logger.entry_to_s("address:=\nsearch-n")
|
236
236
|
actual.should == expected
|
237
237
|
end
|
data/spec/query_spec.rb
CHANGED
@@ -3,6 +3,10 @@ require 'spec_helper'
|
|
3
3
|
module Appstats
|
4
4
|
describe Query do
|
5
5
|
|
6
|
+
before(:each) do
|
7
|
+
Time.stub!(:now).and_return(Time.parse('2010-09-21 23:15:20'))
|
8
|
+
end
|
9
|
+
|
6
10
|
describe "#initialize" do
|
7
11
|
|
8
12
|
before(:each) do
|
@@ -108,6 +112,41 @@ module Appstats
|
|
108
112
|
query.run.count.should == 2
|
109
113
|
end
|
110
114
|
|
115
|
+
describe "fixed_points searches" do
|
116
|
+
|
117
|
+
it "should handle year" do
|
118
|
+
query = Appstats::Query.new(:query => "# myblahs last year")
|
119
|
+
result = query.run
|
120
|
+
result.date_to_s.should == "2009-01-01 to 2009-12-31"
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should handle quarter" do
|
124
|
+
query = Appstats::Query.new(:query => "# myblahs last quarter")
|
125
|
+
result = query.run
|
126
|
+
result.date_to_s.should == "2010-04-01 to 2010-06-30"
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should handle month" do
|
130
|
+
query = Appstats::Query.new(:query => "# myblahs last month")
|
131
|
+
result = query.run
|
132
|
+
result.date_to_s.should == "2010-08-01 to 2010-08-31"
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should handle week" do
|
136
|
+
query = Appstats::Query.new(:query => "# myblahs last week")
|
137
|
+
result = query.run
|
138
|
+
result.date_to_s.should == "2010-09-13 to 2010-09-19"
|
139
|
+
end
|
140
|
+
|
141
|
+
it "should handle day" do
|
142
|
+
query = Appstats::Query.new(:query => "# myblahs last day")
|
143
|
+
result = query.run
|
144
|
+
result.date_to_s.should == "2010-09-20"
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
148
|
+
|
149
|
+
|
111
150
|
end
|
112
151
|
|
113
152
|
|
data/spec/result_spec.rb
CHANGED
@@ -75,6 +75,11 @@ module Appstats
|
|
75
75
|
@result.date_to_s.should == "2010-01-02 to present"
|
76
76
|
end
|
77
77
|
|
78
|
+
it "should return one date if 'today'" do
|
79
|
+
@result.from_date = Time.parse("2010-01-02 03:04:05")
|
80
|
+
@result.to_date = Time.parse("2010-01-02 04:05:06")
|
81
|
+
@result.date_to_s.should == "2010-01-02"
|
82
|
+
end
|
78
83
|
|
79
84
|
it "should handle a from date only" do
|
80
85
|
@result.from_date = Time.parse("2010-01-02 03:04:05")
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appstats
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 45
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 12
|
9
|
+
- 1
|
10
|
+
version: 0.12.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andrew Forward
|
@@ -157,6 +157,7 @@ files:
|
|
157
157
|
- db/migrations/20110217220357_add_additional_contexts_indexes.rb
|
158
158
|
- db/migrations/20110217234136_add_appstats_results_contexts.rb
|
159
159
|
- db/migrations/20110222215437_create_appstats_jobs.rb
|
160
|
+
- db/migrations/20110223212232_add_appstats_entries_week_and_quarter.rb
|
160
161
|
- db/schema.rb
|
161
162
|
- lib/appstats.rb
|
162
163
|
- lib/appstats/action.rb
|