autometal-piwik 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -46,6 +46,8 @@ RubyGems and the following gems (installed automatically if necessary):
46
46
  sudo gem install autometal-piwik --source=http://gemcutter.org
47
47
 
48
48
  == CHANGELOG:
49
+ * 0.4.2
50
+ Final fix for inconsistent API outputs caused by Rails using its own version of XmlSimple.
49
51
  * 0.4.1
50
52
  Quick fixed api result parsing in site creation. The API's responses are inconsistent, but I am not sure why.
51
53
  * 0.4.0
@@ -2,16 +2,16 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{autometal-piwik}
5
- s.version = "0.4.0"
5
+ s.version = "0.4.2"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Achillefs Charmpilas"]
9
9
  s.date = %q{2011-01-18}
10
10
  s.description = %q{A simple Ruby client for the Piwik API. This gem is based on Rodrigo Tassinari de Oliveira's piwik gem (https://github.com/riopro/piwik). Since it hasn't been updated since 2008, I took the liberty to fork it, and finish it up.}
11
11
  s.email = ["ac@humbuckercode.co.uk"]
12
- s.extra_rdoc_files = ["History.txt", "License.txt", "Manifest.txt", "PostInstall.txt", "Todo.txt"]
13
- s.files = ["History.txt", "License.txt", "Manifest.txt", "PostInstall.txt", "README.rdoc", "Rakefile", "Todo.txt", "autometal-piwik.gemspec", "lib/piwik.rb", "lib/piwik/base.rb", "lib/piwik/site.rb", "lib/piwik/user.rb", "script/console", "script/destroy", "script/generate", "script/txt2html", "setup.rb", "test/files/config/piwik.yml", "test/piwik_test.rb", "test/test_helper.rb"]
14
- s.homepage = %q{http://github.com/riopro/Achillefs/tree/master}
12
+ s.extra_rdoc_files = ["License.txt", "Manifest.txt", "PostInstall.txt", "Todo.txt"]
13
+ s.files = ["License.txt", "Manifest.txt", "PostInstall.txt", "README.rdoc", "Rakefile", "Todo.txt", "autometal-piwik.gemspec", "lib/piwik.rb", "lib/piwik/base.rb", "lib/piwik/site.rb", "lib/piwik/trackable.rb", "lib/piwik/user.rb", "script/console", "script/destroy", "script/generate", "script/txt2html", "setup.rb", "test/files/config/piwik.yml", "test/piwik_test.rb", "test/test_helper.rb"]
14
+ s.homepage = %q{http://github.com/Achillefs/tree/master}
15
15
  s.post_install_message = %q{
16
16
  For more information on piwik, see http://piwik.rubyforge.org or
17
17
  http://github.com/Achillefs/piwik/
@@ -30,20 +30,20 @@ http://github.com/Achillefs/piwik/
30
30
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
31
31
  s.add_runtime_dependency(%q<activesupport>, [">= 2.3.8"])
32
32
  s.add_runtime_dependency(%q<xml-simple>, [">= 1.0.11"])
33
- s.add_runtime_dependency(%q<rest-client>, [">= 0.5.1"])
33
+ s.add_runtime_dependency(%q<rest-client>, [">= 1.6.1"])
34
34
  s.add_development_dependency(%q<rubyforge>, [">= 2.0.4"])
35
35
  s.add_development_dependency(%q<hoe>, [">= 2.6.2"])
36
36
  else
37
37
  s.add_dependency(%q<activesupport>, [">= 2.3.8"])
38
38
  s.add_dependency(%q<xml-simple>, [">= 1.0.11"])
39
- s.add_dependency(%q<rest-client>, [">= 0.5.1"])
39
+ s.add_dependency(%q<rest-client>, [">= 1.6.1"])
40
40
  s.add_dependency(%q<rubyforge>, [">= 2.0.4"])
41
41
  s.add_dependency(%q<hoe>, [">= 2.6.2"])
42
42
  end
43
43
  else
44
44
  s.add_dependency(%q<activesupport>, [">= 2.3.8"])
45
45
  s.add_dependency(%q<xml-simple>, [">= 1.0.11"])
46
- s.add_dependency(%q<rest-client>, [">= 0.5.1"])
46
+ s.add_dependency(%q<rest-client>, [">= 1.6.1"])
47
47
  s.add_dependency(%q<rubyforge>, [">= 2.0.4"])
48
48
  s.add_dependency(%q<hoe>, [">= 2.6.2"])
49
49
  end
@@ -6,5 +6,5 @@ require 'piwik/site.rb'
6
6
  require 'piwik/user.rb'
7
7
  require 'piwik/trackable.rb'
8
8
  module Piwik
9
- VERSION = "0.4.1"
9
+ VERSION = "0.4.2"
10
10
  end
@@ -22,7 +22,16 @@ module Piwik
22
22
  piwik_url:
23
23
  auth_token:
24
24
  EOF
25
-
25
+ =begin rdoc
26
+ This is required to normalize the API responses when the Rails XmlSimple version is used
27
+ =end
28
+ def self.parse_xml xml
29
+ result = XmlSimple.xml_in(xml, {'ForceArray' => false})
30
+ result = result['result'] if result['result']
31
+ result
32
+ end
33
+ def parse_xml xml; self.class.parse_xml xml; end
34
+
26
35
  private
27
36
  # Calls the supplied Piwik API method, with the supplied parameters.
28
37
  #
@@ -63,13 +63,8 @@ module Piwik
63
63
  raise ArgumentError, "Name can not be blank" if name.blank?
64
64
  raise ArgumentError, "Main URL can not be blank" if main_url.blank?
65
65
  xml = call('SitesManager.addSite', :siteName => name, :urls => main_url)
66
- result = XmlSimple.xml_in(xml, {'ForceArray' => false})
67
- case result.class.to_s
68
- when "Hash"
69
- @id = result["result"].to_i
70
- else
71
- @id = result.to_i
72
- end
66
+ result = parse_xml(xml)
67
+ @id = result.to_i
73
68
  @created_at = Time.current
74
69
  id && id > 0 ? true : false
75
70
  end
@@ -82,7 +77,7 @@ module Piwik
82
77
  raise ArgumentError, "Name can not be blank" if name.blank?
83
78
  raise ArgumentError, "Main URL can not be blank" if main_url.blank?
84
79
  xml = call('SitesManager.updateSite', :idSite => id, :siteName => name, :urls => main_url)
85
- result = XmlSimple.xml_in(xml, {'ForceArray' => false})
80
+ result = parse_xml(xml)
86
81
  result['success'] ? true : false
87
82
  end
88
83
 
@@ -96,7 +91,7 @@ module Piwik
96
91
  def destroy
97
92
  raise UnknownSite, "Site not existent in Piwik yet, call 'save' first" if new?
98
93
  xml = call('SitesManager.deleteSite', :idSite => id)
99
- result = XmlSimple.xml_in(xml, {'ForceArray' => false})
94
+ result = parse_xml(xml)
100
95
  freeze
101
96
  result['success'] ? true : false
102
97
  end
@@ -132,7 +127,7 @@ module Piwik
132
127
  def summary(period=:day, date=Date.today)
133
128
  raise UnknownSite, "Site not existent in Piwik yet, call 'save' first" if new?
134
129
  xml = call('VisitsSummary.get', :idSite => id, :period => period, :date => date)
135
- result = XmlSimple.xml_in(xml, {'ForceArray' => false})
130
+ result = parse_xml(xml)
136
131
  {
137
132
  :visits => result['nb_visits'].to_i,
138
133
  :unique_visitors => result['nb_uniq_visitors'].to_i,
@@ -153,7 +148,7 @@ module Piwik
153
148
  def visits(period=:day, date=Date.today)
154
149
  raise UnknownSite, "Site not existent in Piwik yet, call 'save' first" if new?
155
150
  xml = call('VisitsSummary.getVisits', :idSite => id, :period => period, :date => date)
156
- result = XmlSimple.xml_in(xml, {'ForceArray' => false})
151
+ result = parse_xml(xml)
157
152
  result.to_i
158
153
  end
159
154
 
@@ -167,7 +162,7 @@ module Piwik
167
162
  def unique_visitors(period=:day, date=Date.today)
168
163
  raise UnknownSite, "Site not existent in Piwik yet, call 'save' first" if new?
169
164
  xml = call('VisitsSummary.getUniqueVisitors', :idSite => id, :period => period, :date => date)
170
- result = XmlSimple.xml_in(xml, {'ForceArray' => false})
165
+ result = parse_xml(xml)
171
166
  result.to_i
172
167
  end
173
168
 
@@ -181,7 +176,7 @@ module Piwik
181
176
  def actions(period=:day, date=Date.today)
182
177
  raise UnknownSite, "Site not existent in Piwik yet, call 'save' first" if new?
183
178
  xml = call('VisitsSummary.getActions', :idSite => id, :period => period, :date => date)
184
- result = XmlSimple.xml_in(xml, {'ForceArray' => false})
179
+ result = parse_xml(xml)
185
180
  result.to_i
186
181
  end
187
182
  alias_method :pageviews, :actions
@@ -204,7 +199,7 @@ module Piwik
204
199
  def give_access_to(access, login)
205
200
  raise UnknownSite, "Site not existent in Piwik yet, call 'save' first" if new?
206
201
  xml = call('UsersManager.setUserAccess', :idSites => id, :access => access.to_s, :userLogin => login.to_s)
207
- result = XmlSimple.xml_in(xml, {'ForceArray' => false})
202
+ result = parse_xml(xml)
208
203
  result['success'] ? true : false
209
204
  end
210
205
 
@@ -214,12 +209,12 @@ module Piwik
214
209
  # Equivalent Piwik API call: SitesManager.getSiteFromId (idSite)
215
210
  def self.get_site_attributes_by_id(site_id, piwik_url, auth_token)
216
211
  xml = call('SitesManager.getSiteFromId', {:idSite => site_id}, piwik_url, auth_token)
217
- result = XmlSimple.xml_in(xml, {'ForceArray' => false})
212
+ result = parse_xml(xml)
218
213
  attributes = {
219
214
  :id => result['row']['idsite'].to_i,
220
215
  :name => result['row']['name'],
221
216
  :main_url => result['row']['main_url'],
222
- :created_at => Time.parse(result['row']['ts_created']),
217
+ :created_at => Time.parse(result['row']['ts_created'])
223
218
  }
224
219
  attributes
225
220
  end
@@ -48,7 +48,7 @@ module Piwik
48
48
  user_alias = login if user_alias.blank?
49
49
 
50
50
  xml = call('UsersManager.addUser', :userLogin => login, :password => password, :email => email, :alias => user_alias)
51
- result = XmlSimple.xml_in(xml, {'ForceArray' => false})
51
+ result = parse_xml(xml)
52
52
  @created_at = Time.current
53
53
  if result["success"]
54
54
  result["success"]["message"] == "ok" ? true : false
@@ -68,7 +68,7 @@ module Piwik
68
68
  user_alias = login if user_alias.blank?
69
69
 
70
70
  xml = call('UsersManager.updateUser', :userLogin => login, :password => password, :email => email, :alias => user_alias)
71
- result = XmlSimple.xml_in(xml, {'ForceArray' => false})
71
+ result = parse_xml(xml)
72
72
  result['success'] ? true : false
73
73
  end
74
74
 
@@ -78,7 +78,7 @@ module Piwik
78
78
  def destroy
79
79
  raise UnknownUser, "User not existent in Piwik yet, call 'save' first" if new?
80
80
  xml = call('UsersManager.deleteUser', :userLogin => login)
81
- result = XmlSimple.xml_in(xml, {'ForceArray' => false})
81
+ result = parse_xml(xml)
82
82
  freeze
83
83
  result['success'] ? true : false
84
84
  end
@@ -119,15 +119,12 @@ module Piwik
119
119
  # Equivalent Piwik API call: UsersManager.getUser (userLogin)
120
120
  def self.get_user_attributes_by_login(user_login, piwik_url, auth_token)
121
121
  xml = call('UsersManager.getUser', {:userLogin => user_login}, piwik_url, auth_token)
122
- result = XmlSimple.xml_in(xml, {'ForceArray' => false})
123
-
124
- puts result.inspect
125
-
122
+ result = parse_xml(xml)
126
123
  attributes = {
127
124
  :login => result['row']['login'],
128
125
  :user_alias => result['row']['alias'],
129
126
  :email => result['row']['email'],
130
- :created_at => Time.parse(result['row']['date_registered']),
127
+ :created_at => Time.parse(result['row']['date_registered'])
131
128
  }
132
129
  attributes
133
130
  end
@@ -17,12 +17,18 @@ class PiwikTest < Test::Unit::TestCase
17
17
  assert_equal @domain, @site.main_url
18
18
  end
19
19
 
20
- def test_can_save_and_destroy_site
20
+ def test_can_save_load_update_and_destroy_site
21
21
  assert_equal nil, @site.id
22
22
  @site.save
23
23
  assert_not_equal 0, @site.id
24
24
  assert_not_equal nil, @site.id
25
- assert_equal true, @site.destroy
25
+ reloaded = Piwik::Site.load(@site.id)
26
+ assert_equal reloaded.id, @site.id
27
+ reloaded.name = "Changed Name"
28
+ reloaded.update
29
+ reloaded = Piwik::Site.load(@site.id)
30
+ assert_equal "Changed Name", reloaded.name
31
+ assert_equal true, reloaded.destroy
26
32
  end
27
33
 
28
34
  def test_can_instantiate_user
@@ -32,8 +38,15 @@ class PiwikTest < Test::Unit::TestCase
32
38
  assert_equal @user_alias, @user.user_alias
33
39
  end
34
40
 
35
- def test_can_save_and_destroy_user
41
+ def test_can_save_load_update_and_destroy_user
36
42
  @user.save
43
+ reloaded = Piwik::User.load(@user.login)
44
+ assert_equal reloaded.login, @user.login
45
+ reloaded.email = "changed@mail.com"
46
+ reloaded.password = "changeme"
47
+ reloaded.update
48
+ reloaded = Piwik::User.load(@user.login)
49
+ assert_equal"changed@mail.com", reloaded.email
37
50
  assert_equal true, @user.destroy
38
51
  end
39
52
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: autometal-piwik
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 1
10
- version: 0.4.1
9
+ - 2
10
+ version: 0.4.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Achillefs Charmpilas