gcstats 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +1 -1
- data/bin/gcstats +6 -7
- data/{lib → data}/gcstats/gcstats.css +0 -0
- data/{lib → data}/gcstats/gcstats.js +8 -6
- data/{lib → data}/gcstats/gcstats.rhtml +30 -16
- data/lib/gcstats/{mapping.rb → caches.rb} +0 -0
- data/lib/gcstats/helpers.rb +33 -49
- data/lib/gcstats/server.rb +37 -34
- data/lib/gcstats/version.rb +1 -1
- data/spec/fixtures/3627915.gpx +3321 -0
- data/spec/lib/caches_spec.rb +67 -0
- data/spec/lib/helpers_spec.rb +162 -0
- data/spec/lib/template_spec.rb +15 -0
- data/spec/spec_helper.rb +15 -0
- metadata +23 -15
- data/config.ru +0 -6
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Caches do
|
4
|
+
describe 'caches' do
|
5
|
+
subject { caches }
|
6
|
+
|
7
|
+
it { should have(40).items }
|
8
|
+
|
9
|
+
describe 'first cache' do
|
10
|
+
subject { caches.first }
|
11
|
+
|
12
|
+
it { should be_an_instance_of(Caches::Cache) }
|
13
|
+
|
14
|
+
its(:lat) { should == 39.712683 }
|
15
|
+
it { should respond_to(:latitude) }
|
16
|
+
|
17
|
+
its(:lon) { should == 21.637133 }
|
18
|
+
it { should respond_to(:longitude) }
|
19
|
+
|
20
|
+
its(:published) { should == Time.parse('Fri Jul 18 07:00:00 UTC 2003') }
|
21
|
+
it { should respond_to(:time) }
|
22
|
+
|
23
|
+
its(:code) { should == 'GCGJ59' }
|
24
|
+
|
25
|
+
its(:url) { should == 'http://www.geocaching.com/seek/cache_details.aspx?guid=da011f9e-40fc-4b67-9de4-b56e1836ddbf' }
|
26
|
+
|
27
|
+
its(:available?) { should be_true }
|
28
|
+
|
29
|
+
its(:archived?) { should be_false }
|
30
|
+
|
31
|
+
its(:name) { should == 'Meteora' }
|
32
|
+
|
33
|
+
its(:owner) { should == 'Pick' }
|
34
|
+
|
35
|
+
its(:placed_by) { should == 'Pick' }
|
36
|
+
|
37
|
+
its(:type) { should == 'Traditional Cache' }
|
38
|
+
|
39
|
+
its(:container) { should == 'Small' }
|
40
|
+
it { should respond_to(:size) }
|
41
|
+
|
42
|
+
its(:difficulty) { should == 1.0 }
|
43
|
+
|
44
|
+
its(:terrain) { should == 2.0 }
|
45
|
+
|
46
|
+
its(:country) { should == 'Greece' }
|
47
|
+
|
48
|
+
its(:state) { should be_empty }
|
49
|
+
|
50
|
+
its(:logs) { should have(1).item }
|
51
|
+
|
52
|
+
its(:find_dates) { should == [Date.parse('2009-09-01T19:00:00Z')] }
|
53
|
+
|
54
|
+
describe 'first log' do
|
55
|
+
subject { caches.first.logs.first }
|
56
|
+
|
57
|
+
it { should be_an_instance_of(Caches::Log) }
|
58
|
+
|
59
|
+
its(:date) { should == Date.parse('2009-09-01T19:00:00Z') }
|
60
|
+
|
61
|
+
its(:type) { should == 'Found it' }
|
62
|
+
|
63
|
+
its(:finder) { should == 'agorf' }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,162 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Helpers
|
4
|
+
extend self
|
5
|
+
@caches = caches
|
6
|
+
@start_ts = Time.now
|
7
|
+
end
|
8
|
+
|
9
|
+
describe Helpers do
|
10
|
+
its(:total_finds) { should == 40 }
|
11
|
+
|
12
|
+
its(:total_archived) { should == 1 }
|
13
|
+
|
14
|
+
its(:days_cached) { should == 267 }
|
15
|
+
|
16
|
+
its(:finds_per_day) { should == 0.15 }
|
17
|
+
|
18
|
+
its(:most_finds_in_a_day) { should == 6 }
|
19
|
+
|
20
|
+
its(:most_finds_in_a_day_dates) { should == [Date.parse('2009-09-26')] }
|
21
|
+
|
22
|
+
its(:finds_by_date) do
|
23
|
+
should == Hash[
|
24
|
+
*[
|
25
|
+
'2010-05-17', 1,
|
26
|
+
'2009-10-18', 2,
|
27
|
+
'2009-09-26', 6,
|
28
|
+
'2009-11-01', 3,
|
29
|
+
'2009-10-24', 1,
|
30
|
+
'2010-03-18', 5,
|
31
|
+
'2009-09-01', 3,
|
32
|
+
'2009-10-29', 1,
|
33
|
+
'2010-01-12', 2,
|
34
|
+
'2009-09-02', 1,
|
35
|
+
'2009-08-25', 1,
|
36
|
+
'2009-11-26', 3,
|
37
|
+
'2009-12-27', 1,
|
38
|
+
'2009-08-23', 1,
|
39
|
+
'2009-09-27', 3,
|
40
|
+
'2010-03-14', 1,
|
41
|
+
'2009-10-11', 5
|
42
|
+
].map {|e|
|
43
|
+
e.is_a?(String) ? Date.parse(e) : e
|
44
|
+
}.flatten
|
45
|
+
]
|
46
|
+
end
|
47
|
+
|
48
|
+
its(:finds_by_day_of_week) { should == [1, 6, 1, 9, 0, 7, 16] }
|
49
|
+
|
50
|
+
its(:finds_by_year) { should == {2009 => 31, 2010 => 9} }
|
51
|
+
|
52
|
+
its(:finds_by_size) do
|
53
|
+
should == [
|
54
|
+
['Small', 13],
|
55
|
+
['Regular', 13],
|
56
|
+
['Micro', 12],
|
57
|
+
['Other', 1],
|
58
|
+
['Not chosen', 1]
|
59
|
+
]
|
60
|
+
end
|
61
|
+
|
62
|
+
its(:finds_by_type) do
|
63
|
+
should == [
|
64
|
+
['Traditional Cache', 33],
|
65
|
+
['Unknown Cache', 3],
|
66
|
+
['Multi-cache', 3],
|
67
|
+
['Event Cache', 1]
|
68
|
+
]
|
69
|
+
end
|
70
|
+
|
71
|
+
its(:difficulty_terrain_combinations) do
|
72
|
+
should == [
|
73
|
+
[7, 1, 1, 0, 1, 0, 0, 0, 0],
|
74
|
+
[5, 3, 0, 0, 0, 0, 0, 0, 0],
|
75
|
+
[1, 1, 8, 3, 2, 1, 0, 0, 0],
|
76
|
+
[0, 1, 1, 0, 1, 0, 0, 0, 0],
|
77
|
+
[0, 1, 0, 0, 0, 0, 1, 0, 0],
|
78
|
+
[0, 0, 0, 0, 0, 0, 1, 0, 0],
|
79
|
+
[0, 0, 0, 0, 0, 0, 0, 0, 0],
|
80
|
+
[0, 0, 0, 0, 0, 0, 0, 0, 0],
|
81
|
+
[0, 0, 0, 0, 0, 0, 0, 0, 0]
|
82
|
+
]
|
83
|
+
end
|
84
|
+
|
85
|
+
its(:month_day_combinations) do
|
86
|
+
should == [
|
87
|
+
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
88
|
+
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1],
|
89
|
+
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
90
|
+
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1],
|
91
|
+
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
92
|
+
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1],
|
93
|
+
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
94
|
+
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0],
|
95
|
+
[3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3, 0, 0, 0, -1],
|
96
|
+
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0],
|
97
|
+
[3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, -1],
|
98
|
+
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]
|
99
|
+
]
|
100
|
+
end
|
101
|
+
|
102
|
+
its(:finds_by_country) { should == {'Greece' => 40} }
|
103
|
+
|
104
|
+
its(:finds_by_state) { should be_empty }
|
105
|
+
|
106
|
+
its(:finds_by_owner) do
|
107
|
+
should == [
|
108
|
+
['yiannisp', 9],
|
109
|
+
['teokar', 8],
|
110
|
+
['tetras61', 7],
|
111
|
+
['George & Christina', 4],
|
112
|
+
['YanniG', 3],
|
113
|
+
['GregoryGR', 2],
|
114
|
+
['Mark-X', 1],
|
115
|
+
['Hannera', 1],
|
116
|
+
['MaximillianGraves', 1],
|
117
|
+
['Pick', 1]
|
118
|
+
]
|
119
|
+
end
|
120
|
+
|
121
|
+
its(:geocacher_name) { should == 'agorf' }
|
122
|
+
|
123
|
+
its(:finds_dates) do
|
124
|
+
should == [
|
125
|
+
'2010-05-17',
|
126
|
+
'2010-03-18',
|
127
|
+
'2010-03-14',
|
128
|
+
'2010-01-12',
|
129
|
+
'2009-12-27',
|
130
|
+
'2009-11-26',
|
131
|
+
'2009-11-01',
|
132
|
+
'2009-10-29',
|
133
|
+
'2009-10-24',
|
134
|
+
'2009-10-18',
|
135
|
+
'2009-10-11',
|
136
|
+
'2009-09-27',
|
137
|
+
'2009-09-26',
|
138
|
+
'2009-09-02',
|
139
|
+
'2009-09-01',
|
140
|
+
'2009-08-25',
|
141
|
+
'2009-08-23'
|
142
|
+
].map {|e| Date.parse(e) }
|
143
|
+
end
|
144
|
+
|
145
|
+
it 'should return render time' do
|
146
|
+
start_ts = Helpers.instance_variable_get('@start_ts')
|
147
|
+
Time.should_receive(:now).and_return(start_ts + 10)
|
148
|
+
subject.render_time.should == 10.0
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'should format percent with default precision 1' do
|
152
|
+
subject.format_percent(3, 9).should == '33.3%'
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'should format percent with precision 0' do
|
156
|
+
subject.format_percent(3, 9, 0).should == '33%'
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'should format percent with precision 2 (>1)' do
|
160
|
+
subject.format_percent(3, 9, 2).should == '33.33%'
|
161
|
+
end
|
162
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Template do
|
4
|
+
it 'should convert ERB to HTML' do
|
5
|
+
Template.new('My name is <%= @name %>', :name => 'Aggelos').result.should == 'My name is Aggelos'
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'should not escape HTML by default' do
|
9
|
+
Template.new('Use <%= @tag %> for <%= @desc %>', :tag => '<b>', :desc => 'bold').result.should == 'Use <b> for bold'
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should escape HTML where h() helper is used' do
|
13
|
+
Template.new('Use <%=h @tag %> for <%= @desc %>', :tag => '<b>', :desc => 'bold').result.should == 'Use <b> for bold'
|
14
|
+
end
|
15
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gcstats
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 17
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 3
|
10
|
+
version: 1.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Aggelos Orfanakos
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-05-24 00:00:00 +03:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -42,16 +42,20 @@ extra_rdoc_files: []
|
|
42
42
|
|
43
43
|
files:
|
44
44
|
- README.md
|
45
|
-
- config.ru
|
46
45
|
- bin/gcstats
|
47
|
-
- lib/gcstats/version.rb
|
48
|
-
- lib/gcstats/gcstats.css
|
49
46
|
- lib/gcstats/helpers.rb
|
50
|
-
- lib/gcstats/mapping.rb
|
51
|
-
- lib/gcstats/gcstats.js
|
52
|
-
- lib/gcstats/template.rb
|
53
|
-
- lib/gcstats/gcstats.rhtml
|
54
47
|
- lib/gcstats/server.rb
|
48
|
+
- lib/gcstats/template.rb
|
49
|
+
- lib/gcstats/caches.rb
|
50
|
+
- lib/gcstats/version.rb
|
51
|
+
- data/gcstats/gcstats.rhtml
|
52
|
+
- data/gcstats/gcstats.css
|
53
|
+
- data/gcstats/gcstats.js
|
54
|
+
- spec/fixtures/3627915.gpx
|
55
|
+
- spec/spec_helper.rb
|
56
|
+
- spec/lib/helpers_spec.rb
|
57
|
+
- spec/lib/caches_spec.rb
|
58
|
+
- spec/lib/template_spec.rb
|
55
59
|
has_rdoc: true
|
56
60
|
homepage: http://github.com/agorf/gcstats
|
57
61
|
licenses: []
|
@@ -82,9 +86,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
86
|
requirements: []
|
83
87
|
|
84
88
|
rubyforge_project:
|
85
|
-
rubygems_version: 1.
|
89
|
+
rubygems_version: 1.6.2
|
86
90
|
signing_key:
|
87
91
|
specification_version: 3
|
88
92
|
summary: Simple and clean statistics of your Geocaching activity
|
89
|
-
test_files:
|
90
|
-
|
93
|
+
test_files:
|
94
|
+
- spec/fixtures/3627915.gpx
|
95
|
+
- spec/spec_helper.rb
|
96
|
+
- spec/lib/helpers_spec.rb
|
97
|
+
- spec/lib/caches_spec.rb
|
98
|
+
- spec/lib/template_spec.rb
|