twelve 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. data/.gitignore +5 -0
  2. data/Gemfile +2 -0
  3. data/LICENSE +21 -0
  4. data/README.md +220 -0
  5. data/Rakefile +8 -0
  6. data/lib/twelve.rb +32 -0
  7. data/lib/twelve/api/clients.rb +55 -0
  8. data/lib/twelve/api/gauges.rb +67 -0
  9. data/lib/twelve/api/gauges/content.rb +36 -0
  10. data/lib/twelve/api/gauges/engines.rb +32 -0
  11. data/lib/twelve/api/gauges/locations.rb +32 -0
  12. data/lib/twelve/api/gauges/referrers.rb +36 -0
  13. data/lib/twelve/api/gauges/resolutions.rb +32 -0
  14. data/lib/twelve/api/gauges/shares.rb +45 -0
  15. data/lib/twelve/api/gauges/technology.rb +32 -0
  16. data/lib/twelve/api/gauges/terms.rb +36 -0
  17. data/lib/twelve/api/gauges/traffic.rb +32 -0
  18. data/lib/twelve/api/me.rb +28 -0
  19. data/lib/twelve/connection.rb +26 -0
  20. data/lib/twelve/resource_proxy.rb +46 -0
  21. data/lib/twelve/version.rb +4 -0
  22. data/spec/spec_helper.rb +17 -0
  23. data/spec/twelve/api/clients_spec.rb +43 -0
  24. data/spec/twelve/api/gauges/content_spec.rb +54 -0
  25. data/spec/twelve/api/gauges/engines_spec.rb +32 -0
  26. data/spec/twelve/api/gauges/locations_spec.rb +32 -0
  27. data/spec/twelve/api/gauges/referrers_spec.rb +54 -0
  28. data/spec/twelve/api/gauges/resolutions_spec.rb +36 -0
  29. data/spec/twelve/api/gauges/shares_spec.rb +74 -0
  30. data/spec/twelve/api/gauges/technology_spec.rb +36 -0
  31. data/spec/twelve/api/gauges/terms_spec.rb +52 -0
  32. data/spec/twelve/api/gauges/traffic_spec.rb +34 -0
  33. data/spec/twelve/api/gauges_spec.rb +119 -0
  34. data/spec/twelve/api/me_spec.rb +34 -0
  35. data/spec/twelve/connection_spec.rb +11 -0
  36. data/spec/twelve/resource_proxy_spec.rb +34 -0
  37. data/spec/twelve_spec.rb +16 -0
  38. data/twelve.gemspec +29 -0
  39. metadata +230 -0
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twelve::API::Gauges::Content do
4
+ subject { Twelve.new(ACCESS_TOKEN) }
5
+
6
+ describe "#content" do
7
+ context "with no args" do
8
+ it "should return top content" do
9
+ VCR.use_cassette('content') do
10
+ response = subject.gauges(GAUGE_ID).content
11
+ response['date'].should_not be_nil
12
+ response['page'].should == 1
13
+ response['per_page'].should == 50
14
+ response.should have_key('urls')
15
+
16
+ content = response['content']
17
+ content.size.should > 0
18
+ content.first['title'].should_not be_nil
19
+ content.first['views'].should be_instance_of(Fixnum)
20
+ content.first['path'].should_not be_nil
21
+ content.first['host'].should_not be_nil
22
+ end
23
+ end
24
+ end
25
+
26
+ context "with page number" do
27
+ it "should return content for page" do
28
+ VCR.use_cassette('content(:page => 2)') do
29
+ response = subject.gauges(GAUGE_ID).content(:page => 2)
30
+ response['page'].should == 2
31
+ end
32
+ end
33
+ end
34
+
35
+ context "with a date" do
36
+ it "should return content for that date" do
37
+ VCR.use_cassette('content("2011-12-8")') do
38
+ response = subject.gauges(GAUGE_ID).content('2011-12-8')
39
+ response['date'].should == '2011-12-08'
40
+ end
41
+ end
42
+ end
43
+
44
+ context "with a date and page" do
45
+ it "should return content for that date" do
46
+ VCR.use_cassette('content("2011-12-8", :page => 2)') do
47
+ response = subject.gauges(GAUGE_ID).content('2011-12-8', :page => 2)
48
+ response['date'].should == '2011-12-08'
49
+ response['page'].should == 2
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twelve::API::Gauges::Engines do
4
+ subject { Twelve.new(ACCESS_TOKEN) }
5
+
6
+ describe "#engines" do
7
+ context "with no args" do
8
+ it "should return search engines" do
9
+ VCR.use_cassette('engines') do
10
+ response = subject.gauges(GAUGE_ID).engines
11
+ response['date'].should_not be_nil
12
+ response.should have_key('urls')
13
+
14
+ engines = response['engines']
15
+ engines.size.should > 0
16
+ engines.first['title'].should_not be_nil
17
+ engines.first['views'].should be_instance_of(Fixnum)
18
+ engines.first['key'].should_not be_nil
19
+ end
20
+ end
21
+ end
22
+
23
+ context "with a date" do
24
+ it "should return engines for that date" do
25
+ VCR.use_cassette('engines("2011-12-8")') do
26
+ response = subject.gauges(GAUGE_ID).engines('2011-12-8')
27
+ response['date'].should == '2011-12-08'
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twelve::API::Gauges::Locations do
4
+ subject { Twelve.new(ACCESS_TOKEN) }
5
+
6
+ describe "#locations" do
7
+ context "with no args" do
8
+ it "should return locations" do
9
+ VCR.use_cassette('locations') do
10
+ response = subject.gauges(GAUGE_ID).locations
11
+ response['date'].should_not be_nil
12
+ response.should have_key('urls')
13
+
14
+ locations = response['locations']
15
+ locations.size.should > 0
16
+ locations.first['title'].should_not be_nil
17
+ locations.first['views'].should be_instance_of(Fixnum)
18
+ locations.first['key'].should_not be_nil
19
+ end
20
+ end
21
+ end
22
+
23
+ context "with a date" do
24
+ it "should return locations for that date" do
25
+ VCR.use_cassette('locations("2011-12-8")') do
26
+ response = subject.gauges(GAUGE_ID).locations('2011-12-8')
27
+ response['date'].should == '2011-12-08'
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twelve::API::Gauges::Referrers do
4
+ subject { Twelve.new(ACCESS_TOKEN) }
5
+
6
+ describe "#referrers" do
7
+ context "with no args" do
8
+ it "should return todays referrers" do
9
+ VCR.use_cassette('referrers') do
10
+ response = subject.gauges(GAUGE_ID).referrers
11
+ response['date'].should_not be_nil
12
+ response['page'].should == 1
13
+ response['per_page'].should == 50
14
+ response.should have_key('urls')
15
+
16
+ referrers = response['referrers']
17
+ referrers.size.should > 0
18
+ referrers.first['url'].should_not be_nil
19
+ referrers.first['views'].should be_instance_of(Fixnum)
20
+ referrers.first['path'].should_not be_nil
21
+ referrers.first['host'].should_not be_nil
22
+ end
23
+ end
24
+ end
25
+
26
+ context "with page number" do
27
+ it "should return content for page" do
28
+ VCR.use_cassette('referrers(:page => 2)') do
29
+ response = subject.gauges(GAUGE_ID).referrers(:page => 2)
30
+ response['page'].should == 2
31
+ end
32
+ end
33
+ end
34
+
35
+ context "with a date" do
36
+ it "should return content for that date" do
37
+ VCR.use_cassette('referrers("2011-12-8")') do
38
+ response = subject.gauges(GAUGE_ID).referrers('2011-12-8')
39
+ response['date'].should == '2011-12-08'
40
+ end
41
+ end
42
+ end
43
+
44
+ context "with a date and page" do
45
+ it "should return content for that date" do
46
+ VCR.use_cassette('referrers("2011-12-8", :page => 2)') do
47
+ response = subject.gauges(GAUGE_ID).referrers('2011-12-8', :page => 2)
48
+ response['date'].should == '2011-12-08'
49
+ response['page'].should == 2
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twelve::API::Gauges::Resolutions do
4
+ subject { Twelve.new(ACCESS_TOKEN) }
5
+
6
+ describe "#resolutions" do
7
+ context "with no args" do
8
+ it "should return top resolutions" do
9
+ VCR.use_cassette('resolutions') do
10
+ response = subject.gauges(GAUGE_ID).resolutions
11
+ response['date'].should_not be_nil
12
+ response.should have_key('urls')
13
+
14
+ browser_heights = response['browser_heights']
15
+ browser_heights.first['title'].should_not be_nil
16
+ browser_heights.first['views'].should be_instance_of(Fixnum)
17
+ browser_widths = response['browser_widths']
18
+ browser_widths.first['title'].should_not be_nil
19
+ browser_widths.first['views'].should be_instance_of(Fixnum)
20
+ screen_widths = response['screen_widths']
21
+ screen_widths.first['title'].should_not be_nil
22
+ screen_widths.first['views'].should be_instance_of(Fixnum)
23
+ end
24
+ end
25
+ end
26
+
27
+ context "with a date" do
28
+ it "should return resolutions for that date" do
29
+ VCR.use_cassette('resolutions("2011-12-8")') do
30
+ response = subject.gauges(GAUGE_ID).resolutions('2011-12-8')
31
+ response['date'].should == '2011-12-08'
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,74 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twelve::API::Gauges::Shares do
4
+ subject { Twelve.new(ACCESS_TOKEN) }
5
+
6
+ def should_be_a_share(gauge, share)
7
+ share['name'].should_not be_nil
8
+ share['id'].should_not be_nil
9
+ ['user', 'invite'].should include(share['type'])
10
+ share['email'].should_not be_nil
11
+ share['urls']['remove'].should == "https://secure.gaug.es/gauges/#{gauge['id']}/shares/#{share['id']}"
12
+ end
13
+
14
+ describe "#shares" do
15
+ it "returns list of users gauge is shared with" do
16
+ VCR.use_cassette('shares') do
17
+ # setup
18
+ temp = subject.gauges.create({
19
+ :title => 'Twelve Gauge',
20
+ :tz => 'Eastern Time (US & Canada)'
21
+ })
22
+ subject.gauges(temp['id']).share({:email => 'john@doe.com'})
23
+
24
+ # the meat of the test
25
+ shares = subject.gauges(temp['id']).shares
26
+ shares.size.should > 0
27
+ should_be_a_share(temp, shares.first)
28
+
29
+ # teardown
30
+ subject.gauges(temp['id']).destroy
31
+ end
32
+ end
33
+ end
34
+
35
+ describe "#share" do
36
+ it "shares gauge" do
37
+ VCR.use_cassette('share') do
38
+ # setup
39
+ temp = subject.gauges.create({
40
+ :title => 'Twelve Gauge',
41
+ :tz => 'Eastern Time (US & Canada)'
42
+ })
43
+
44
+ # the meat of the test
45
+ share = subject.gauges(temp['id']).share({:email => 'john@doe.com'})
46
+ should_be_a_share(temp, share)
47
+ share['email'].should == 'john@doe.com'
48
+
49
+ # teardown
50
+ subject.gauges(temp['id']).destroy
51
+ end
52
+ end
53
+ end
54
+
55
+ describe "#unshare" do
56
+ it "un-shares a gauge" do
57
+ VCR.use_cassette('unshare') do
58
+ # setup
59
+ temp = subject.gauges.create({
60
+ :title => 'Twelve Gauge',
61
+ :tz => 'Eastern Time (US & Canada)'
62
+ })
63
+ temp_share = subject.gauges(temp['id']).share({:email => 'john@doe.com'})
64
+
65
+ # the meat of the test
66
+ share = subject.gauges(temp['id']).unshare(temp_share['id'])
67
+ share['id'].should == temp_share['id']
68
+
69
+ # teardown
70
+ subject.gauges(temp['id']).destroy
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twelve::API::Gauges::Technology do
4
+ subject { Twelve.new(ACCESS_TOKEN) }
5
+
6
+ describe "#technology" do
7
+ context "with no args" do
8
+ it "should return top technology" do
9
+ VCR.use_cassette('technology') do
10
+ response = subject.gauges(GAUGE_ID).technology
11
+ response['date'].should_not be_nil
12
+ response.should have_key('urls')
13
+
14
+ browsers = response['browsers']
15
+ browsers.first['title'].should_not be_nil
16
+ browsers.first['views'].should be_instance_of(Fixnum)
17
+ browsers.first['versions'].size.should > 0
18
+ browsers.first['key'].should_not be_nil
19
+ platforms = response['platforms']
20
+ platforms.first['title'].should_not be_nil
21
+ platforms.first['views'].should be_instance_of(Fixnum)
22
+ platforms.first['key'].should_not be_nil
23
+ end
24
+ end
25
+ end
26
+
27
+ context "with a date" do
28
+ it "should return technology for that date" do
29
+ VCR.use_cassette('technology("2011-12-8")') do
30
+ response = subject.gauges(GAUGE_ID).technology('2011-12-8')
31
+ response['date'].should == '2011-12-08'
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twelve::API::Gauges::Terms do
4
+ subject { Twelve.new(ACCESS_TOKEN) }
5
+
6
+ describe "#terms" do
7
+ context "with no args" do
8
+ it "should return search terms" do
9
+ VCR.use_cassette('terms') do
10
+ response = subject.gauges(GAUGE_ID).terms
11
+ response['date'].should_not be_nil
12
+ response['page'].should == 1
13
+ response['per_page'].should == 50
14
+ response.should have_key('urls')
15
+
16
+ terms = response['terms']
17
+ terms.size.should > 0
18
+ terms.first['term'].should_not be_nil
19
+ terms.first['views'].should be_instance_of(Fixnum)
20
+ end
21
+ end
22
+ end
23
+
24
+ context "with page number" do
25
+ it "should return terms for page" do
26
+ VCR.use_cassette('terms(:page => 2)') do
27
+ response = subject.gauges(GAUGE_ID).terms(:page => 2)
28
+ response['page'].should == 2
29
+ end
30
+ end
31
+ end
32
+
33
+ context "with a date" do
34
+ it "should return terms for that date" do
35
+ VCR.use_cassette('terms("2011-12-8")') do
36
+ response = subject.gauges(GAUGE_ID).terms('2011-12-8')
37
+ response['date'].should == '2011-12-08'
38
+ end
39
+ end
40
+ end
41
+
42
+ context "with a date and page" do
43
+ it "should return terms for that date" do
44
+ VCR.use_cassette('terms("2011-12-8", :page => 2)') do
45
+ response = subject.gauges(GAUGE_ID).terms('2011-12-8', :page => 2)
46
+ response['date'].should == '2011-12-08'
47
+ response['page'].should == 2
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twelve::API::Gauges::Traffic do
4
+ subject { Twelve.new(ACCESS_TOKEN) }
5
+
6
+ describe "#traffic" do
7
+ context "with no args" do
8
+ it "should return top traffic" do
9
+ VCR.use_cassette('traffic') do
10
+ response = subject.gauges(GAUGE_ID).traffic
11
+ response['date'].should_not be_nil
12
+ response.should have_key('urls')
13
+ response['views'].should be_instance_of(Fixnum)
14
+ response['people'].should be_instance_of(Fixnum)
15
+
16
+ traffic = response['traffic']
17
+ traffic.size.should > 0
18
+ traffic.first['date'].should_not be_nil
19
+ traffic.first['views'].should be_instance_of(Fixnum)
20
+ traffic.first['people'].should be_instance_of(Fixnum)
21
+ end
22
+ end
23
+ end
24
+
25
+ context "with a date" do
26
+ it "should return traffic for that date" do
27
+ VCR.use_cassette('traffic("2011-12-8")') do
28
+ response = subject.gauges(GAUGE_ID).traffic('2011-12-8')
29
+ response['date'].should == '2011-12-08'
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,119 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twelve::API::Gauges do
4
+ subject { Twelve.new(ACCESS_TOKEN) }
5
+
6
+ def should_be_a_gauge(gauge)
7
+ gauge['id'].should_not be_nil
8
+ gauge['title'].should_not be_nil
9
+ gauge['tz'].should_not be_nil
10
+ gauge['urls']['self'].should == "https://secure.gaug.es/gauges/#{gauge['id']}"
11
+ gauge['urls']['referrers'].should == "https://secure.gaug.es/gauges/#{gauge['id']}/referrers"
12
+ gauge['urls']['technology'].should == "https://secure.gaug.es/gauges/#{gauge['id']}/technology"
13
+ gauge.should have_key('all_time')
14
+ gauge.should have_key('today')
15
+ gauge.should have_key('yesterday')
16
+ gauge.should have_key('recent_hours')
17
+ gauge.should have_key('recent_days')
18
+ gauge.should have_key('recent_months')
19
+ end
20
+
21
+ describe "#gauges" do
22
+ # will only pass if you already have a gauge created on your account
23
+ context "without an id" do
24
+ it "returns your gauges" do
25
+ VCR.use_cassette('gauges') do
26
+ # setup
27
+ temp = subject.gauges.create({
28
+ :title => 'Twelve Gauge',
29
+ :tz => 'Eastern Time (US & Canada)'
30
+ })
31
+
32
+ # actually run the request and tests
33
+ gauges = subject.gauges
34
+ gauges.should be_instance_of(Array)
35
+ gauges.size.should > 0
36
+ should_be_a_gauge(gauges.first)
37
+
38
+ # teardown
39
+ subject.gauges(temp['id']).destroy
40
+ end
41
+ end
42
+
43
+ describe "#create" do
44
+ it "creates and returns gauge" do
45
+ VCR.use_cassette('gauges_create') do
46
+ gauge = subject.gauges.create({
47
+ :title => 'Twelve Gauge',
48
+ :tz => 'Eastern Time (US & Canada)'
49
+ })
50
+ should_be_a_gauge(gauge)
51
+ gauge['title'].should == 'Twelve Gauge'
52
+
53
+ # teardown
54
+ subject.gauges(gauge['id']).destroy
55
+ end
56
+ end
57
+ end
58
+ end
59
+ #
60
+ context "with an id" do
61
+ context "with attributes" do
62
+ it "updates and returns the gauge" do
63
+ VCR.use_cassette('gauges(id, attributes)') do
64
+ # setup
65
+ temp = subject.gauges.create({
66
+ :title => 'Twelve Gauge',
67
+ :tz => 'Eastern Time (US & Canada)'
68
+ })
69
+
70
+ gauge = subject.gauges(temp['id'], {
71
+ :title => '12 Gauge'
72
+ })
73
+ should_be_a_gauge(gauge)
74
+ gauge['title'].should == '12 Gauge'
75
+
76
+ # teardown
77
+ subject.gauges(temp['id']).destroy
78
+ end
79
+ end
80
+ end
81
+
82
+ context "without attributes" do
83
+ it "returns a gauge" do
84
+ VCR.use_cassette('gauges(id)') do
85
+ # setup
86
+ temp = subject.gauges.create({
87
+ :title => 'Twelve Gauge',
88
+ :tz => 'Eastern Time (US & Canada)'
89
+ })
90
+
91
+ # actually run the request and tests
92
+ gauge = subject.gauges(temp['id'])
93
+ should_be_a_gauge(gauge)
94
+ gauge['title'].should == 'Twelve Gauge'
95
+
96
+ # teardown
97
+ subject.gauges(temp['id']).destroy
98
+ end
99
+ end
100
+
101
+ describe "#delete" do
102
+ it "deletes and returns gauge" do
103
+ VCR.use_cassette('gauges_delete') do
104
+ # setup
105
+ delete = subject.gauges.create({
106
+ :title => 'Twelve Gauge',
107
+ :tz => 'Eastern Time (US & Canada)'
108
+ })
109
+
110
+ gauge = subject.gauges(delete['id']).destroy
111
+ should_be_a_gauge(gauge)
112
+ gauge['id'].should == delete['id']
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end