getclicky 0.1.0 → 0.1.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.
@@ -0,0 +1,84 @@
1
+ # Getclicky API Analytics Library
2
+
3
+ A swiss knife ruby wrapper for Getclicky API Analytics. For more information see: http://getclicky.com/help/api.
4
+
5
+ ## Installation
6
+
7
+ ``` ruby
8
+ ## Gemfile for Rails 3, Sinatra, and Merb
9
+ gem 'getclicky', '~> 0.1'
10
+ ```
11
+
12
+ ## Usage
13
+
14
+ ### Ruby wrapper
15
+
16
+ First, you'll need to set up your site_id and sitekey. You can discover this information by accessing settings in your account at http://getclicky.com.
17
+
18
+ ``` ruby
19
+ Getclicky.configure do |config|
20
+ config.site_id = "your site id here"
21
+ config.sitekey = "your site key here"
22
+ config.admin_sitekey = "your admin site key, if applicable"
23
+ end
24
+ ```
25
+
26
+ Then you can simply instantiate a new Getclicky::Client object.
27
+
28
+ ``` ruby
29
+ getclicky = Getclicky::Client.new
30
+ ```
31
+
32
+ All types in API are methods here looks, you can find all types http://getclicky.com/help/api:
33
+
34
+ ``` ruby
35
+ getclicky.pages()
36
+ getclicky.tweets()
37
+ getclicky.visitors()
38
+ ```
39
+
40
+ In each method you can pass optional parameters as a hash looks:
41
+
42
+ ``` ruby
43
+ getclicky.visitors(:date => "last-7-days", :daily => 1)
44
+ getclicky.item(:date => "last-7-days", :item => "google.com")
45
+ getclicky.visitors_list(:domain => "google.com")
46
+ ```
47
+
48
+ You can also request more than one data type in a single request:
49
+
50
+ ``` ruby
51
+ getclicky.multiple([:pages, :downloads], {:date => "last-7-days"})
52
+ ```
53
+
54
+ By default getclicky API returns an array of [Hashies](https://github.com/intridea/hashie) as data, but you can change by providing an :output parameter like:
55
+
56
+ ##### JSON
57
+
58
+ ``` ruby
59
+ getclicky.visitors(:output => :json, :date => "last-7-days", :daily => 1)
60
+ ```
61
+
62
+ ##### CSV
63
+
64
+ ``` ruby
65
+ getclicky.visitors(:output => :csv, :date => "last-7-days", :daily => 1)
66
+ ```
67
+
68
+ ##### PHP
69
+
70
+ ``` ruby
71
+ getclicky.visitors(:output => :php, :date => "last-7-days", :daily => 1)
72
+ ```
73
+
74
+ Enjoy!
75
+
76
+ ## Roadmap
77
+
78
+ * Improve the tests
79
+
80
+ ## Author
81
+ * Peterson Ferreira ([refactoringever.com](refactoringever.com))
82
+
83
+ ## Collaborators
84
+ * Bobby Uhlenbrock ([github.com/uhlenbrock](github.com/uhlenbrock))
@@ -11,7 +11,8 @@ Gem::Specification.new do |s|
11
11
  s.summary = %q{Ruby Wrapper for GetClicky API Analytics}
12
12
  s.description = s.summary
13
13
 
14
- s.add_dependency "httparty" , "~> 0.7.8"
14
+ s.add_dependency "httparty" , "~> 0.8.0"
15
+ s.add_dependency "hashie" , "~> 1.1.0"
15
16
  s.add_development_dependency "rspec" , "~> 2.6"
16
17
  s.add_development_dependency "test_notifier", "~> 0.3"
17
18
  s.add_development_dependency "fakeweb" , "~> 1.3"
@@ -24,6 +24,11 @@ module Getclicky
24
24
  # Will be required in every request.
25
25
  #
26
26
  attr_accessor :sitekey
27
+
28
+ # Set the admin sitekey.
29
+ # Only used for certain requests.
30
+ #
31
+ attr_accessor :admin_sitekey
27
32
  end
28
33
 
29
34
  # API endpoint of Getclicky
@@ -11,5 +11,11 @@ module Getclicky
11
11
  end # end
12
12
  RUBY
13
13
  end
14
+
15
+ def multiple(types = [], params = {})
16
+ valid_types = types.reject { |t| !Getclicky::Types::ALL.include?(t.intern) }
17
+ response = Getclicky::Request.new(valid_types.join(','), params).get
18
+ response.data
19
+ end
14
20
  end
15
21
  end
@@ -18,14 +18,14 @@ module Getclicky
18
18
  when "404"
19
19
  raise Getclicky::NotFoundError
20
20
  else
21
- Getclicky::Response.new(response)
21
+ Getclicky::Response.new(response.parsed_response, @params[:output])
22
22
  end
23
23
  end
24
24
 
25
25
  # Build the hash of options for make resquest to API
26
26
  #
27
27
  def build_params(type, params = {})
28
- query = { :site_id => Getclicky.site_id, :sitekey => Getclicky.sitekey, :type => type }
28
+ query = { :site_id => Getclicky.site_id, :sitekey => Getclicky.sitekey, :type => type, :output => :json }
29
29
  query.merge(params) if params
30
30
  end
31
31
  end
@@ -1,13 +1,45 @@
1
+ require "hashie"
2
+
1
3
  module Getclicky
2
- class Response
3
- attr_accessor :item
4
+ class Response
5
+ attr_accessor :item, :format
4
6
 
5
- def initialize(item)
7
+ class << self
8
+ attr_accessor :mash_class
9
+ end
10
+
11
+ self.mash_class = ::Hashie::Mash
12
+
13
+ def initialize(item, format = nil)
6
14
  @item = item
15
+ @format = format
7
16
  end
8
17
 
9
18
  def data
10
- @item.body
19
+ @format.nil? ? mashify_data : @item
20
+ end
21
+
22
+ def mashify_data
23
+ if @item.size.eql?(1)
24
+ parse(@item.first['dates'])
25
+ elsif @item.size > 1
26
+ {}.tap do |results|
27
+ @item.collect { |r| results[r['type'].intern] = parse(r['dates']) }
28
+ end
29
+ else
30
+ @item
31
+ end
32
+ end
33
+
34
+ def parse(body)
35
+ case body
36
+ when Hash
37
+ self.class.mash_class.new(body)
38
+ when Array
39
+ body.map { |item| item.is_a?(Hash) ? self.class.mash_class.new(item) : item }
40
+ else
41
+ body
42
+ end
11
43
  end
12
44
  end
13
45
  end
@@ -2,7 +2,7 @@ module Getclicky
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- PATCH = 0
5
+ PATCH = 1
6
6
  STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
8
8
  end
@@ -1,7 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe Getclicky::Request do
4
-
5
4
  subject {
6
5
  Getclicky::Request.new(:pages, :limit => 10, :hourly => 1)
7
6
  }
@@ -12,12 +11,22 @@ describe Getclicky::Request do
12
11
  context "method build_params" do
13
12
  it "should be set the right parameters" do
14
13
  params = subject.build_params(:pages, :limit => 10, :hourly => 1)
15
- params.should == { :site_id => Getclicky.site_id, :sitekey => Getclicky.sitekey, :type => :pages, :limit => 10, :hourly => 1}
14
+ params.should == { :site_id => Getclicky.site_id, :sitekey => Getclicky.sitekey, :type => :pages, :limit => 10, :hourly => 1, :output => :json}
16
15
  end
17
16
 
18
17
  it "should be leave hash parameters blank" do
19
18
  params = subject.build_params(:pages)
20
- params.should == { :site_id => Getclicky.site_id, :sitekey => Getclicky.sitekey, :type => :pages}
19
+ params.should == { :site_id => Getclicky.site_id, :sitekey => Getclicky.sitekey, :type => :pages, :output => :json}
20
+ end
21
+
22
+ it "should default to an output format of json" do
23
+ params = subject.build_params(:pages)
24
+ params.should == { :site_id => Getclicky.site_id, :sitekey => Getclicky.sitekey, :type => :pages, :output => :json}
25
+ end
26
+
27
+ it "should allow overriding the output format" do
28
+ params = subject.build_params(:pages, :output => :xml)
29
+ params.should == { :site_id => Getclicky.site_id, :sitekey => Getclicky.sitekey, :type => :pages, :output => :xml}
21
30
  end
22
31
  end
23
32
  end
@@ -0,0 +1,36 @@
1
+ require "spec_helper"
2
+
3
+ describe Getclicky::Response do
4
+ subject {
5
+ Getclicky::Response.new([{
6
+ "type"=>"pages",
7
+ "dates"=>
8
+ [{"date"=>"2011-09-27",
9
+ "items"=>
10
+ [{"value"=>"6",
11
+ "value_percent"=>"66.7",
12
+ "title"=>"Test Page",
13
+ "stats_url"=>"http://getclicky.com/stats/visitors",
14
+ "url"=>"http://blackbookemg.dev/posts"},
15
+ {"value"=>"1",
16
+ "value_percent"=>"11.1",
17
+ "title"=>"Test Page 2",
18
+ "stats_url"=>
19
+ "http://getclicky.com/stats/visitors",
20
+ "url"=>"http://blackbookemg.dev/requests/1"}
21
+ ]}
22
+ ]
23
+ }])
24
+ }
25
+
26
+ its(:item) { should be_an_instance_of Array }
27
+ its(:data) { should be_an_instance_of Array }
28
+
29
+ context "when using" do
30
+ it "should return an array of Hashie objects" do
31
+ subject.data.each do |d|
32
+ d.should be_an_instance_of Hashie::Mash
33
+ end
34
+ end
35
+ end
36
+ end
@@ -11,6 +11,11 @@ describe Getclicky do
11
11
  Getclicky.configure { |c| c.sitekey = "123" }
12
12
  Getclicky.sitekey.should == "123"
13
13
  end
14
+
15
+ it "should be set admin_sitekey" do
16
+ Getclicky.configure { |c| c.admin_sitekey = "123" }
17
+ Getclicky.admin_sitekey.should == "123"
18
+ end
14
19
  end
15
20
 
16
21
  describe "endpoint" do
@@ -20,8 +25,8 @@ describe Getclicky do
20
25
  end
21
26
 
22
27
  it "should be changes the url" do
23
- ENV["GETCLICKY_ENDPOINT"] = "http://getclicky.com"
24
- Getclicky.endpoint.should == "http://getclicky.com"
28
+ ENV["GETCLICKY_ENDPOINT"] = "http://api.getclicky.com/api/stats/4"
29
+ Getclicky.endpoint.should == "http://api.getclicky.com/api/stats/4"
25
30
  end
26
31
  end
27
32
  end
@@ -13,7 +13,13 @@ Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|file| require file}
13
13
  RSpec.configure do |config|
14
14
  config.include Helpers
15
15
 
16
- # config.before do
17
- # ENV.delete("GETCLICKY_ENDPOINT")
18
- # end
16
+ config.before do
17
+ ENV.delete("GETCLICKY_ENDPOINT")
18
+ end
19
+
20
+ Getclicky.configure do |config|
21
+ config.site_id = nil
22
+ config.sitekey = nil
23
+ config.admin_sitekey = nil
24
+ end
19
25
  end
@@ -1,10 +1,8 @@
1
1
  module Helpers
2
-
3
2
  def default_credentials!
4
3
  Getclicky.configure do |config|
5
- config.username = "john"
6
- config.api_key = "abc"
4
+ config.site_id = "32020"
5
+ config.site_key = "2e05fe2778b6"
7
6
  end
8
7
  end
9
-
10
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: getclicky
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,22 +9,33 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-19 00:00:00.000000000Z
12
+ date: 2011-09-30 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httparty
16
- requirement: &70246881759080 !ruby/object:Gem::Requirement
16
+ requirement: &70195420885440 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 0.7.8
21
+ version: 0.8.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70246881759080
24
+ version_requirements: *70195420885440
25
+ - !ruby/object:Gem::Dependency
26
+ name: hashie
27
+ requirement: &70195420884800 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 1.1.0
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70195420884800
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: rspec
27
- requirement: &70246881758560 !ruby/object:Gem::Requirement
38
+ requirement: &70195420884180 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ~>
@@ -32,10 +43,10 @@ dependencies:
32
43
  version: '2.6'
33
44
  type: :development
34
45
  prerelease: false
35
- version_requirements: *70246881758560
46
+ version_requirements: *70195420884180
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: test_notifier
38
- requirement: &70246881758080 !ruby/object:Gem::Requirement
49
+ requirement: &70195420880680 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
52
  - - ~>
@@ -43,10 +54,10 @@ dependencies:
43
54
  version: '0.3'
44
55
  type: :development
45
56
  prerelease: false
46
- version_requirements: *70246881758080
57
+ version_requirements: *70195420880680
47
58
  - !ruby/object:Gem::Dependency
48
59
  name: fakeweb
49
- requirement: &70246881757460 !ruby/object:Gem::Requirement
60
+ requirement: &70195420879980 !ruby/object:Gem::Requirement
50
61
  none: false
51
62
  requirements:
52
63
  - - ~>
@@ -54,10 +65,10 @@ dependencies:
54
65
  version: '1.3'
55
66
  type: :development
56
67
  prerelease: false
57
- version_requirements: *70246881757460
68
+ version_requirements: *70195420879980
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: ruby-debug19
60
- requirement: &70246881756980 !ruby/object:Gem::Requirement
71
+ requirement: &70195420879480 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ~>
@@ -65,7 +76,7 @@ dependencies:
65
76
  version: '0.11'
66
77
  type: :development
67
78
  prerelease: false
68
- version_requirements: *70246881756980
79
+ version_requirements: *70195420879480
69
80
  description: Ruby Wrapper for GetClicky API Analytics
70
81
  email:
71
82
  - petersonferreiras@gmail.com
@@ -76,7 +87,7 @@ files:
76
87
  - .gitignore
77
88
  - Gemfile
78
89
  - LICENSE
79
- - README.rdoc
90
+ - README.md
80
91
  - Rakefile
81
92
  - getclicky.gemspec
82
93
  - lib/getclicky.rb
@@ -87,6 +98,7 @@ files:
87
98
  - lib/getclicky/version.rb
88
99
  - spec/getclicky/client_spec.rb
89
100
  - spec/getclicky/request_spec.rb
101
+ - spec/getclicky/response_spec.rb
90
102
  - spec/getclicky_spec.rb
91
103
  - spec/spec_helper.rb
92
104
  - spec/support/helpers.rb
@@ -110,13 +122,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
110
122
  version: '0'
111
123
  requirements: []
112
124
  rubyforge_project:
113
- rubygems_version: 1.8.8
125
+ rubygems_version: 1.8.9
114
126
  signing_key:
115
127
  specification_version: 3
116
128
  summary: Ruby Wrapper for GetClicky API Analytics
117
129
  test_files:
118
130
  - spec/getclicky/client_spec.rb
119
131
  - spec/getclicky/request_spec.rb
132
+ - spec/getclicky/response_spec.rb
120
133
  - spec/getclicky_spec.rb
121
134
  - spec/spec_helper.rb
122
135
  - spec/support/helpers.rb
@@ -1,79 +0,0 @@
1
- # Getclicky API Analytics Library
2
-
3
- A swiss knife ruby wrapper for Getclicky API Analytics. For more information see: http://getclicky.com/help/api.
4
-
5
- ## Installation
6
-
7
- ``` ruby
8
- ## Gemfile for Rails 3, Sinatra, and Merb
9
- gem 'will_paginate', '~> 3.0'
10
- ```
11
-
12
-
13
- ## Usage
14
-
15
- ### Ruby wrapper
16
-
17
- First, you'll need to set up your site_id and sitekey. You can discover this information by accessing settings in your account at http://getclicky.com.
18
-
19
- ``` ruby
20
- Getclicky.configure do |config|
21
- config.site_id = "your site id here"
22
- config.sitekey = "your site key here"
23
- end
24
- ```
25
-
26
- Then you can simply instantiate a new Getclicky::Client object.
27
-
28
- ``` ruby
29
- getclicky = Getclicky::Client.new
30
- ```
31
-
32
- ### Usage
33
-
34
- All types in API are methods here looks, you can find all types http://getclicky.com/help/api:
35
-
36
- ``` ruby
37
- getClicky.pages()
38
- getClicky.tweets()
39
- getClicky.visitors()
40
- ```
41
-
42
- In each method you can pass optional parameters as a hash looks:
43
-
44
- ``` ruby
45
- getClicky.visitors(:date => "last-7-days", :daily => 1)
46
- getClicky.item(:date => "last-7-days", :item => "google.com")
47
- getClicky.visitors_list(:domain => "google.com")
48
- ```
49
-
50
- By default getclicky API returns XML as data, but you can change adding :output in parameter like:
51
-
52
- ##### JSON
53
-
54
- ``` ruby
55
- getClicky.visitors(:output => :json, :date => "last-7-days", :daily => 1)
56
- ```
57
-
58
- ##### CSV
59
-
60
- ``` ruby
61
- getClicky.visitors(:output => :csv, :date => "last-7-days", :daily => 1)
62
- ```
63
-
64
- ##### PHP
65
-
66
- ``` ruby
67
- getClicky.visitors(:output => :php, :date => "last-7-days", :daily => 1)
68
- ```
69
-
70
- This library does't support multiple types yet.
71
-
72
- ## Roadmap
73
-
74
- * Multiple types for request
75
- * Improve the tests
76
-
77
- ## Maintainer
78
-
79
- * Peterson Ferreira (petersonferreiras@gmail.com)