appstats 0.11.7 → 0.12.1

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,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- appstats (0.11.7)
4
+ appstats (0.12.1)
5
5
  daemons
6
6
  net-scp
7
7
  rails (>= 2.3.0)
@@ -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
@@ -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 => 20110222215437) do
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|
@@ -12,13 +12,16 @@ module Appstats
12
12
 
13
13
  def from_date
14
14
  return nil if @from.nil?
15
- mode = @format == :inclusive ? :start : :end
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 ? :start : :end
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 = ["week","quarter"].include?(m[1]) ? :inclusive : :fixed_point
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
- if m[2] == "week"
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
 
@@ -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
 
@@ -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 = :start)
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 mode == :end
35
- t = t.end_of_year if @month.nil?
36
- t = t.end_of_month if @day.nil?
37
- t = t.end_of_day if @hour.nil?
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
- date.send("#{label}=",t.send(label))
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*)
@@ -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
- return "#{from_date_to_s} to present" if !from_date.nil? && to_date.nil? && created_at.nil?
10
- return "#{from_date_to_s} to #{created_at.strftime('%Y-%m-%d')}" if !from_date.nil? && to_date.nil? && !created_at.nil?
11
- return "up to #{to_date_to_s}" if from_date.nil? && !to_date.nil?
12
- "#{from_date_to_s} to #{to_date_to_s}"
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
@@ -1,3 +1,3 @@
1
1
  module Appstats
2
- VERSION = "0.11.7"
2
+ VERSION = "0.12.1"
3
3
  end
@@ -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 => :inclusive )
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 => :inclusive )
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), :to => EntryDate.new(:year => 2009, :month => 12), :format => :inclusive )
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), :to => EntryDate.new(:year => 2010, :month => 1, :day => 10), :format => :inclusive )
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), :to => EntryDate.new(:year => 2010, :month => 1, :day => 10), :format => :inclusive )
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
 
@@ -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 understand equality" do
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
@@ -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.11.7 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search")
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.11.7 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search"
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.11.7 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Market : server=Live")
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.11.7 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Market : server=Live"
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"
@@ -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.11.7 setup[:,=,-n] 2010-09-21 23:15:20 action=5 : blah=6"]
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.11.7 setup[:,=,-n] 2010-09-21 23:15:20 action=appstats-exception : error=blah : on=login"]
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.11.7 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search")
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.11.7 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Market : server=Live")
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.11.7 setup[::,==,--n] 2010-09-21 23:15:20 action==address:=search-n")
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.11.7 setup[:::,===,---n] 2010-09-21 23:15:20 action===address::search==--n")
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.11.7 setup[::,==,--n] 2010-09-21 23:15:20 action==address :: server==market:eval=-n")
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.11.7 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search"
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.11.7 setup[:,=,-n] 2010-09-21 23:15:20 action=1 : note=2.2"
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.11.7 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search : app_name=market"
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.11.7 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Market : server=Live"
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.11.7 setup[::,==,--n] 2010-09-21 23:15:20 action==address:=search-n"
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.11.7 setup[:::,===,---n] 2010-09-21 23:15:20 action===address::search==--n"
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.11.7 setup[::,==,--n] 2010-09-21 23:15:20 action==address :: server==market:eval=-n"
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.11.7 setup[:,=,-n] 2010-09-21 23:15:20 action=address search"
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.11.7 setup[:,=,-n] 2010-09-21 23:15:20 action=address_-nsearch"
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.11.7 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search : blah=some-nlong-nstatement"
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.11.7 setup[::,==,--n] 2010-09-21 23:15:20 action==address:=--nsearch-n"
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
@@ -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
 
@@ -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: 61
4
+ hash: 45
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 11
9
- - 7
10
- version: 0.11.7
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