autometal-piwik 0.6.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (213) hide show
  1. data/.gitignore +8 -0
  2. data/.travis.yml +10 -0
  3. data/Gemfile +4 -0
  4. data/License.txt +22 -0
  5. data/README.md +80 -76
  6. data/Rakefile +1 -33
  7. data/autometal-piwik.gemspec +19 -54
  8. data/bin/piwik-console +31 -0
  9. data/lib/piwik.rb +17 -5
  10. data/lib/piwik/actions.rb +59 -0
  11. data/lib/piwik/annotations.rb +41 -0
  12. data/lib/piwik/api.rb +21 -0
  13. data/lib/piwik/api_module.rb +97 -0
  14. data/lib/piwik/api_response.rb +6 -0
  15. data/lib/piwik/api_scope.rb +32 -0
  16. data/lib/piwik/base.rb +156 -69
  17. data/lib/piwik/custom_variables.rb +8 -0
  18. data/lib/piwik/data_methods.rb +54 -0
  19. data/lib/piwik/example_api.rb +15 -0
  20. data/lib/piwik/goals.rb +40 -0
  21. data/lib/piwik/image_graph.rb +7 -0
  22. data/lib/piwik/languages_manager.rb +13 -0
  23. data/lib/piwik/live.rb +8 -0
  24. data/lib/piwik/metadata_api.rb +21 -0
  25. data/lib/piwik/mobile_messaging.rb +16 -0
  26. data/lib/piwik/multi_sites.rb +8 -0
  27. data/lib/piwik/pdf_reports.rb +12 -0
  28. data/lib/piwik/provider.rb +7 -0
  29. data/lib/piwik/referers.rb +62 -0
  30. data/lib/piwik/seo.rb +7 -0
  31. data/lib/piwik/site.rb +50 -250
  32. data/lib/piwik/sites_manager.rb +70 -0
  33. data/lib/piwik/transitions.rb +28 -0
  34. data/lib/piwik/typecast.rb +19 -0
  35. data/lib/piwik/user.rb +7 -126
  36. data/lib/piwik/user_country.rb +12 -0
  37. data/lib/piwik/user_settings.rb +16 -0
  38. data/lib/piwik/users_manager.rb +52 -0
  39. data/lib/piwik/version.rb +3 -0
  40. data/lib/piwik/visit_frequency.rb +7 -0
  41. data/lib/piwik/visit_time.rb +9 -0
  42. data/lib/piwik/visitor_interest.rb +10 -0
  43. data/lib/piwik/visits_summary.rb +53 -0
  44. data/lib/string.rb +11 -0
  45. data/spec/actions_spec.rb +19 -0
  46. data/spec/api_spec.rb +12 -0
  47. data/spec/custom_variables_spec.rb +11 -0
  48. data/spec/files/API.get.xml +28 -0
  49. data/spec/files/API.getDefaultMetricTranslations.xml +39 -0
  50. data/spec/files/API.getDefaultMetrics.xml +8 -0
  51. data/spec/files/API.getDefaultMetricsDocumentation.xml +15 -0
  52. data/spec/files/API.getDefaultProcessedMetrics.xml +9 -0
  53. data/spec/files/API.getHeaderLogoUrl.xml +2 -0
  54. data/spec/files/API.getLogoUrl.xml +2 -0
  55. data/spec/files/API.getMetadata.xml +42 -0
  56. data/spec/files/API.getPiwikVersion.xml +2 -0
  57. data/spec/files/API.getProcessedReport.xml +1227 -0
  58. data/spec/files/API.getReportMetadata.xml +1347 -0
  59. data/spec/files/API.getRowEvolution.xml +4 -0
  60. data/spec/files/API.getSegmentsMetadata.xml +365 -0
  61. data/spec/files/API.getSettings.xml +7 -0
  62. data/spec/files/Actions.GetPageUrl.xml +20 -0
  63. data/spec/files/Actions.get.xml +11 -0
  64. data/spec/files/Actions.getDownloads.xml +19 -0
  65. data/spec/files/Actions.getEntryPageTitles.xml +88 -0
  66. data/spec/files/Actions.getEntryPageUrls.xml +93 -0
  67. data/spec/files/Actions.getExitPageTitles.xml +88 -0
  68. data/spec/files/Actions.getExitPageUrls.xml +93 -0
  69. data/spec/files/Actions.getOutlink.xml +12 -0
  70. data/spec/files/Actions.getOutlinks.xml +100 -0
  71. data/spec/files/Actions.getPageTitles.xml +134 -0
  72. data/spec/files/Actions.getPageUrls.xml +129 -0
  73. data/spec/files/Annotations.add.xml +11 -0
  74. data/spec/files/Annotations.getAll.xml +34 -0
  75. data/spec/files/Annotations.getAnnotationCountForDates.xml +12 -0
  76. data/spec/files/CustomVariables.getCustomVariables.xml +32 -0
  77. data/spec/files/ExampleAPI.getAnswerToLife.xml +2 -0
  78. data/spec/files/ExampleAPI.getCompetitionDatatable.xml +12 -0
  79. data/spec/files/ExampleAPI.getDescriptionArray.xml +8 -0
  80. data/spec/files/ExampleAPI.getMoreInformationAnswerToLife.xml +2 -0
  81. data/spec/files/ExampleAPI.getMultiArray.xml +22 -0
  82. data/spec/files/ExampleAPI.getNull.xml +4 -0
  83. data/spec/files/ExampleAPI.getObject.xml +4 -0
  84. data/spec/files/ExampleAPI.getPiwikVersion.xml +2 -0
  85. data/spec/files/ExampleAPI.getSum.xml +2 -0
  86. data/spec/files/Goals.get.xml +7 -0
  87. data/spec/files/Goals.getDaysToConversion.xml +59 -0
  88. data/spec/files/Goals.getGoals.xml +39 -0
  89. data/spec/files/Goals.getVisitsUntilConversion.xml +55 -0
  90. data/spec/files/ImageGraph.get.xml +0 -0
  91. data/spec/files/LanguagesManager.getAvailableLanguageNames.xml +233 -0
  92. data/spec/files/LanguagesManager.getAvailableLanguages.xml +49 -0
  93. data/spec/files/LanguagesManager.isLanguageAvailable.xml +2 -0
  94. data/spec/files/Live.getCounters.xml +8 -0
  95. data/spec/files/Live.getLastVisitsDetails.xml +768 -0
  96. data/spec/files/MultiSites.getAll.xml +2 -0
  97. data/spec/files/MultiSites.getOne.xml +11 -0
  98. data/spec/files/PDFReports.getReports.xml +35 -0
  99. data/spec/files/Provider.getProvider.xml +113 -0
  100. data/spec/files/Referers.getCampaigns.xml +2 -0
  101. data/spec/files/Referers.getKeywords.xml +145 -0
  102. data/spec/files/Referers.getKeywordsForPageUrl.xml +8 -0
  103. data/spec/files/Referers.getNumberOfDistinctCampaigns.xml +2 -0
  104. data/spec/files/Referers.getNumberOfDistinctKeywords.xml +2 -0
  105. data/spec/files/Referers.getNumberOfDistinctSearchEngines.xml +2 -0
  106. data/spec/files/Referers.getNumberOfDistinctWebsites.xml +2 -0
  107. data/spec/files/Referers.getNumberOfDistinctWebsitesUrls.xml +2 -0
  108. data/spec/files/Referers.getRefererType.xml +82 -0
  109. data/spec/files/Referers.getSearchEngines.xml +112 -0
  110. data/spec/files/Referers.getSocials.xml +2 -0
  111. data/spec/files/Referers.getUrlsForSocial.xml +2 -0
  112. data/spec/files/Referers.getWebsites.xml +386 -0
  113. data/spec/files/SEO.getRank.xml +33 -0
  114. data/spec/files/SitesManager.addSite.xml +1 -0
  115. data/spec/files/SitesManager.getAllSites.xml +63 -0
  116. data/spec/files/SitesManager.getAllSitesId.xml +4 -0
  117. data/spec/files/SitesManager.getCurrencyList.xml +165 -0
  118. data/spec/files/SitesManager.getCurrencySymbols.xml +165 -0
  119. data/spec/files/SitesManager.getDefaultCurrency.xml +2 -0
  120. data/spec/files/SitesManager.getDefaultTimezone.xml +2 -0
  121. data/spec/files/SitesManager.getExcludedIpsGlobal.xml +2 -0
  122. data/spec/files/SitesManager.getExcludedQueryParametersGlobal.xml +2 -0
  123. data/spec/files/SitesManager.getJavascriptTag.xml +14 -0
  124. data/spec/files/SitesManager.getSearchCategoryParametersGlobal.xml +2 -0
  125. data/spec/files/SitesManager.getSearchKeywordParametersGlobal.xml +2 -0
  126. data/spec/files/SitesManager.getSiteFromId.xml +18 -0
  127. data/spec/files/SitesManager.getSiteUrlsFromId.xml +4 -0
  128. data/spec/files/SitesManager.getSitesGroups.xml +4 -0
  129. data/spec/files/SitesManager.getSitesIdFromSiteUrl.xml +2 -0
  130. data/spec/files/SitesManager.getSitesIdWithAdminAccess.xml +4 -0
  131. data/spec/files/SitesManager.getSitesIdWithAtLeastViewAccess.xml +4 -0
  132. data/spec/files/SitesManager.getSitesIdWithViewAccess.xml +2 -0
  133. data/spec/files/SitesManager.getSitesIdWithVisits.xml +2 -0
  134. data/spec/files/SitesManager.getSitesWithAdminAccess.xml +63 -0
  135. data/spec/files/SitesManager.getSitesWithAtLeastViewAccess.xml +18 -0
  136. data/spec/files/SitesManager.getSitesWithViewAccess.xml +2 -0
  137. data/spec/files/SitesManager.getTimezonesList.xml +509 -0
  138. data/spec/files/SitesManager.getUniqueSiteTimezones.xml +4 -0
  139. data/spec/files/Transitions.getTranslations.xml +37 -0
  140. data/spec/files/UserCountry.getCity.xml +221 -0
  141. data/spec/files/UserCountry.getContinent.xml +185 -0
  142. data/spec/files/UserCountry.getCountry.xml +154 -0
  143. data/spec/files/UserCountry.getLocationFromIP.xml +17 -0
  144. data/spec/files/UserCountry.getNumberOfDistinctCountries.xml +2 -0
  145. data/spec/files/UserCountry.getRegion.xml +269 -0
  146. data/spec/files/UserSettings.getBrowser.xml +47 -0
  147. data/spec/files/UserSettings.getBrowserType.xml +58 -0
  148. data/spec/files/UserSettings.getBrowserVersion.xml +39 -0
  149. data/spec/files/UserSettings.getConfiguration.xml +43 -0
  150. data/spec/files/UserSettings.getMobileVsDesktop.xml +36 -0
  151. data/spec/files/UserSettings.getOS.xml +27 -0
  152. data/spec/files/UserSettings.getOSFamily.xml +102 -0
  153. data/spec/files/UserSettings.getPlugin.xml +63 -0
  154. data/spec/files/UserSettings.getResolution.xml +33 -0
  155. data/spec/files/UserSettings.getWideScreen.xml +47 -0
  156. data/spec/files/UsersManager.getSitesAccessFromUser.xml +4 -0
  157. data/spec/files/UsersManager.getUser.xml +10 -0
  158. data/spec/files/UsersManager.getUsers.xml +11 -0
  159. data/spec/files/UsersManager.getUsersAccessFromSite.xml +2 -0
  160. data/spec/files/UsersManager.getUsersLogin.xml +4 -0
  161. data/spec/files/UsersManager.getUsersSitesFromAccess.xml +2 -0
  162. data/spec/files/UsersManager.getUsersWithSiteAccess.xml +2 -0
  163. data/spec/files/UsersManager.userExists.xml +2 -0
  164. data/spec/files/VisitFrequency.get.xml +13 -0
  165. data/spec/files/VisitTime.getByDayOfWeek.xml +43 -0
  166. data/spec/files/VisitTime.getVisitInformationPerLocalTime.xml +83 -0
  167. data/spec/files/VisitTime.getVisitInformationPerServerTime.xml +87 -0
  168. data/spec/files/VisitorInterest.getNumberOfVisitsByDaysSinceLast.xml +63 -0
  169. data/spec/files/VisitorInterest.getNumberOfVisitsByVisitCount.xml +73 -0
  170. data/spec/files/VisitorInterest.getNumberOfVisitsPerPage.xml +43 -0
  171. data/spec/files/VisitorInterest.getNumberOfVisitsPerVisitDuration.xml +43 -0
  172. data/spec/files/VisitsSummary.get.xml +13 -0
  173. data/spec/files/VisitsSummary.getActions.xml +2 -0
  174. data/spec/files/VisitsSummary.getBounceCount.xml +2 -0
  175. data/spec/files/VisitsSummary.getMaxActions.xml +2 -0
  176. data/spec/files/VisitsSummary.getSumVisitsLength.xml +2 -0
  177. data/spec/files/VisitsSummary.getSumVisitsLengthPretty.xml +2 -0
  178. data/spec/files/VisitsSummary.getUniqueVisitors.xml +2 -0
  179. data/spec/files/VisitsSummary.getVisits.xml +2 -0
  180. data/spec/files/VisitsSummary.getVisitsConverted.xml +2 -0
  181. data/spec/files/failure.xml +3 -0
  182. data/spec/files/success.xml +3 -0
  183. data/spec/goals_spec.rb +14 -0
  184. data/spec/image_graph_spec.rb +12 -0
  185. data/spec/languages_manager_spec.rb +13 -0
  186. data/spec/live_spec.rb +13 -0
  187. data/spec/mobile_messaging_spec.rb +10 -0
  188. data/spec/multi_sites_spec.rb +11 -0
  189. data/spec/pdf_reports_spec.rb +11 -0
  190. data/spec/provider_spec.rb +12 -0
  191. data/spec/referers_spec.rb +46 -0
  192. data/spec/seo_spec.rb +15 -0
  193. data/spec/site_spec.rb +104 -0
  194. data/spec/sites_manager_spec.rb +30 -0
  195. data/spec/spec_helper.rb +76 -0
  196. data/spec/transitions_spec.rb +13 -0
  197. data/spec/user_country_spec.rb +33 -0
  198. data/spec/user_settings_spec.rb +50 -0
  199. data/spec/user_spec.rb +32 -0
  200. data/spec/users_manager_spec.rb +26 -0
  201. data/spec/visit_frequency_spec.rb +11 -0
  202. data/spec/visit_time_spec.rb +22 -0
  203. data/spec/visitor_interest_spec.rb +30 -0
  204. data/spec/visits_summary_spec.rb +47 -0
  205. metadata +426 -99
  206. data/.document +0 -5
  207. data/LICENSE +0 -7
  208. data/VERSION +0 -1
  209. data/lib/piwik/trackable.rb +0 -80
  210. data/script/console +0 -10
  211. data/test/files/config/example_piwik.yml +0 -4
  212. data/test/piwik_test.rb +0 -128
  213. data/test/test_helper.rb +0 -12
@@ -0,0 +1,70 @@
1
+ module Piwik
2
+ class SitesManager < ApiModule
3
+ available_methods %W{
4
+ getJavascriptTag
5
+ getSitesFromGroup
6
+ getSitesGroups
7
+ getSiteFromId
8
+ getSiteUrlsFromId
9
+ getAllSites
10
+ getAllSitesId
11
+ getSitesIdWithVisits
12
+ getSitesWithAdminAccess
13
+ getSitesWithViewAccess
14
+ getSitesWithAtLeastViewAccess
15
+ getSitesIdWithAdminAccess
16
+ getSitesIdWithViewAccess
17
+ getSitesIdWithAtLeastViewAccess
18
+ getSitesIdFromSiteUrl
19
+ addSite
20
+ deleteSite
21
+ addSiteAliasUrls
22
+ getIpsForRange
23
+ setGlobalExcludedIps
24
+ setGlobalSearchParameters
25
+ getSearchKeywordParametersGlobal
26
+ getSearchCategoryParametersGlobal
27
+ getExcludedQueryParametersGlobal
28
+ getExcludedUserAgentsGlobal
29
+ setGlobalExcludedUserAgents
30
+ isSiteSpecificUserAgentExcludeEnabled
31
+ setSiteSpecificUserAgentExcludeEnabled
32
+ setGlobalExcludedQueryParameters
33
+ getExcludedIpsGlobal
34
+ getDefaultCurrency
35
+ setDefaultCurrency
36
+ getDefaultTimezone
37
+ setDefaultTimezone
38
+ updateSite
39
+ getCurrencyList
40
+ getCurrencySymbols
41
+ getTimezonesList
42
+ getUniqueSiteTimezones
43
+ getPatternMatchSites
44
+ }
45
+
46
+ def self.get params
47
+ resp = self.get_site_from_id(params)
48
+ # Hack. The Piwik API get really weird sometimes
49
+ raise Piwik::UnknownSite if resp.value == '0'
50
+ Piwik::Site.new resp
51
+ end
52
+
53
+ # monkeypatching, as the Piwik API is inconsistent.
54
+ # not all add methods return the same response type. Boo.
55
+ def self.add params
56
+ obj = Piwik::Site.new(params)
57
+ resp = self.api_call('addSite',params)
58
+ obj.attributes.idSite = resp
59
+ obj
60
+ end
61
+
62
+ def self.save params
63
+ self.api_call('updateSite',params)
64
+ end
65
+
66
+ def self.delete params
67
+ self.api_call('deleteSite',params)
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,28 @@
1
+ module Piwik
2
+ class Transitions < ApiModule
3
+ available_methods %W{
4
+ getTransitionsForPageTitle
5
+ getTransitionsForPageUrl
6
+ getTransitionsForAction
7
+ getTranslations
8
+ }
9
+
10
+ scoped_methods do
11
+ def for_title title, params = {}
12
+ getTransitionsForPageTitle(defaults.merge(params).merge(:pageTitle => title))
13
+ end
14
+
15
+ def for_url url, params = {}
16
+ getTransitionsForPageUrl(defaults.merge(params).merge(:pageUrl => url))
17
+ end
18
+
19
+ def for_action name, type, params = {}
20
+ getTransitionsForAction(defaults.merge(params).merge(:actionName => name, :actionType => type, :parts => 'all', :returnNormalizedUrls => ''))
21
+ end
22
+
23
+ def translations
24
+ getTranslations
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,19 @@
1
+ module Piwik
2
+ # used to do basic typecasting to API response values
3
+ module Typecast
4
+ def self.included(base)
5
+ base.send(:include, InstanceMethods)
6
+ end
7
+
8
+ module InstanceMethods
9
+ private
10
+ def typecast(thing)
11
+ if thing.is_a?(String) and thing =~ /^[0-9]+$/
12
+ thing.to_i
13
+ else
14
+ thing
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,132 +1,13 @@
1
1
  module Piwik
2
- class User < Piwik::Base
3
- attr_accessor :login, :password, :email, :user_alias
4
- attr_reader :created_at, :config
5
-
6
- # Initializes a new <tt>Piwik::User</tt> object, with the supplied attributes.
7
- #
8
- # You can pass the URL for your Piwik install and an authorization token as
9
- # the second and third parameters. If you don't, than it will try to find
10
- # them in a <tt>'~/.piwik'</tt> or <tt>RAILS_ROOT/config/piwik.yml</tt>
11
- # (and create the file with an empty template if it doesn't exists).
12
- #
13
- # Valid (and required) attributes are:
14
- # * <tt>:login</tt> - the user login
15
- # * <tt>:password</tt> - the user password
16
- # * <tt>:email</tt> - the user email
17
- # * <tt>:alias</tt> - the user alias
18
- def initialize(attributes={}, piwik_url=nil, auth_token=nil)
19
- raise ArgumentError, "expected an attributes Hash, got #{attributes.inspect}" unless attributes.is_a?(Hash)
20
- @config = if piwik_url.nil? || auth_token.nil?
21
- self.class.load_config
22
- else
23
- {:piwik_url => piwik_url, :auth_token => auth_token}
2
+ class User < Base
3
+ class << self
4
+ def collection
5
+ Piwik::UsersManager
24
6
  end
25
- load_attributes(attributes)
26
- end
27
-
28
- # Returns <tt>true</tt> if the current site does not exists in the Piwik yet.
29
- def new?
30
- created_at.nil? or created_at.blank?
31
- end
32
-
33
- # Saves the current user in Piwik.
34
- #
35
- # Calls <tt>create</tt> it it's a new user, <tt>update</tt> otherwise.
36
- def save
37
- new? ? create : update
38
- end
39
-
40
- # Saves the current new user in Piwik.
41
- #
42
- # Equivalent Piwik API call: UsersManager.addUser (userLogin, password, email, alias)
43
- def create
44
- raise ArgumentError, "User already exists in Piwik, call 'update' instead" unless new?
45
- raise ArgumentError, "Login can not be blank" if login.blank?
46
- raise ArgumentError, "Password can not be blank" if password.blank?
47
- raise ArgumentError, "Email can not be blank" if email.blank?
48
- user_alias = login if user_alias.blank?
49
-
50
- result = call('UsersManager.addUser', :userLogin => login, :password => password, :email => email, :alias => user_alias)
51
- @created_at = Time.current
52
- #puts "\n create #{result} \n"
53
-
54
- if result["result"]
55
- result['message'] == 'ok' ? true : false
56
- else
57
- false
58
- end
59
- end
60
-
61
- # Saves the current user in Piwik, updating it's data.
62
- #
63
- # Equivalent Piwik API call: UsersManager.updateUser (userLogin, password, email, alias)
64
- def update
65
- raise UnknownUser, "User not existent in Piwik yet, call 'save' first" if new?
66
- raise ArgumentError, "Login can not be blank" if login.blank?
67
- raise ArgumentError, "Password can not be blank" if password.blank?
68
- raise ArgumentError, "Email can not be blank" if email.blank?
69
- user_alias = login if user_alias.blank?
70
7
 
71
- result = call('UsersManager.updateUser', :userLogin => login, :password => password, :email => email, :alias => user_alias)
72
- result['result'] == 'success' ? true : false
73
- end
74
-
75
- # Deletes the current user from Piwik.
76
- #
77
- # Equivalent Piwik API call: UsersManager.deleteUser (userLogin)
78
- def destroy
79
- raise UnknownUser, "User not existent in Piwik yet, call 'save' first" if new?
80
- result = call('UsersManager.deleteUser', :userLogin => login)
81
- freeze
82
- result['result'] == 'success' ? true : false
83
- end
84
-
85
- # Returns an instance of <tt>Piwik::User</tt> representing the user identified by
86
- # the supplied <tt>userLogin</tt>. Raises a <tt>Piwik::ApiError</tt> if the user doesn't
87
- # exists or if the user associated with the supplied auth_token does not
88
- # have 'admin' access.
89
- #
90
- # You can pass the URL for your Piwik install and an authorization token as
91
- # the second and third parameters. If you don't, than it will try to find
92
- # them in a <tt>'~/.piwik'</tt> or <tt>RAILS_ROOT/config/piwik.yml</tt>
93
- # (and create the file with an empty template if it doesn't exists).
94
- def self.load(user_login, piwik_url=nil, auth_token=nil)
95
- raise ArgumentError, "expected a user Login" if user_login.nil?
96
- @config = if piwik_url.nil? || auth_token.nil?
97
- load_config
98
- else
99
- {:piwik_url => piwik_url, :auth_token => auth_token}
8
+ def id_attr
9
+ :userLogin
100
10
  end
101
- attributes = get_user_attributes_by_login(user_login, @config[:piwik_url], @config[:auth_token])
102
- new(attributes, @config[:piwik_url], @config[:auth_token])
103
- end
104
-
105
- private
106
- # Loads the attributes in the instance variables.
107
- def load_attributes(attributes)
108
- @login = attributes[:login]
109
- @password = attributes[:password]
110
- @email = attributes[:email]
111
- @user_alias = attributes[:user_alias]
112
- @created_at = attributes[:created_at]
113
- end
114
-
115
- # Returns a hash with the attributes of the supplied user, identified
116
- # by it's Login in <tt>user_login</tt>.
117
- #
118
- # Equivalent Piwik API call: UsersManager.getUser (userLogin)
119
- def self.get_user_attributes_by_login(user_login, piwik_url, auth_token)
120
- result = call('UsersManager.getUser', {:userLogin => user_login}, piwik_url, auth_token)
121
- #puts "\n get_user_attributes_by_login #{result} \n"
122
- attributes = {
123
- :login => result[0]['login'],
124
- :user_alias => result[0]['alias'],
125
- :email => result[0]['email'],
126
- :password => result[0]['password'],
127
- :created_at => Time.parse(result[0]['date_registered'])
128
- }
129
- attributes
130
11
  end
131
12
  end
132
- end
13
+ end
@@ -0,0 +1,12 @@
1
+ module Piwik
2
+ class UserCountry < ApiModule
3
+ available_methods %W{
4
+ getCountry
5
+ getContinent
6
+ getRegion
7
+ getCity
8
+ getLocationFromIP
9
+ getNumberOfDistinctCountries
10
+ }
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ module Piwik
2
+ class UserSettings < ApiModule
3
+ available_methods %W{
4
+ getResolution
5
+ getConfiguration
6
+ getOS
7
+ getOSFamily
8
+ getMobileVsDesktop
9
+ getBrowserVersion
10
+ getBrowser
11
+ getBrowserType
12
+ getWideScreen
13
+ getPlugin
14
+ }
15
+ end
16
+ end
@@ -0,0 +1,52 @@
1
+ module Piwik
2
+ class UsersManager < ApiModule
3
+ available_methods %W{
4
+ setUserPreference
5
+ getUserPreference
6
+ getUsers
7
+ getUsersLogin
8
+ getUsersSitesFromAccess
9
+ getUsersAccessFromSite
10
+ getUsersWithSiteAccess
11
+ getSitesAccessFromUser
12
+ getUser
13
+ getUserByEmail
14
+ addUser
15
+ updateUser
16
+ deleteUser
17
+ userExists
18
+ userEmailExists
19
+ setUserAccess
20
+ getTokenAuth
21
+ }
22
+
23
+ def self.get params
24
+ resp = self.get_user(params)
25
+ raise Piwik::UnknownUser if resp.blank?
26
+ Piwik::User.new resp
27
+ end
28
+
29
+ # monkeypatching, as the Piwik API is inconsistent.
30
+ # not all add methods return the same response type. Boo.
31
+ def self.add params
32
+ obj = Piwik::User.new(params)
33
+ resp = self.api_call('addUser',params)
34
+ obj
35
+ end
36
+
37
+ def self.save params
38
+ self.api_call('updateUser',params)
39
+ end
40
+
41
+ def self.delete params
42
+ self.api_call('deleteDelete',params)
43
+ end
44
+
45
+ # TODO: this one is not working.
46
+ # I assume there are other metacoded methods that might throw errors,
47
+ # so a bit or hunting down is in ortder sometime
48
+ def self.user_exists(params)
49
+ Piwik::UsersManager::UserExists.new(:value => self.api_call('userExists',params))
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,3 @@
1
+ module Piwik
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,7 @@
1
+ module Piwik
2
+ class VisitFrequency < ApiModule
3
+ available_methods %W{
4
+ get
5
+ }
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ module Piwik
2
+ class VisitTime < ApiModule
3
+ available_methods %W{
4
+ getVisitInformationPerLocalTime
5
+ getVisitInformationPerServerTime
6
+ getByDayOfWeek
7
+ }
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ module Piwik
2
+ class VisitorInterest < ApiModule
3
+ available_methods %W{
4
+ getNumberOfVisitsPerVisitDuration
5
+ getNumberOfVisitsPerPage
6
+ getNumberOfVisitsByDaysSinceLast
7
+ getNumberOfVisitsByVisitCount
8
+ }
9
+ end
10
+ end
@@ -0,0 +1,53 @@
1
+ module Piwik
2
+ class VisitsSummary < ApiModule
3
+ available_methods %W{
4
+ get
5
+ getVisits
6
+ getUniqueVisitors
7
+ getActions
8
+ getMaxActions
9
+ getBounceCount
10
+ getVisitsConverted
11
+ getSumVisitsLength
12
+ getSumVisitsLengthPretty
13
+ }
14
+
15
+ scoped_methods do
16
+ def converted params = {}
17
+ getVisitsConverted(defaults.merge(params)).value
18
+ end
19
+
20
+ def summary params = {}
21
+ get(defaults.merge(params))
22
+ end
23
+
24
+ def count params = {}
25
+ getVisits(defaults.merge(params)).value
26
+ end
27
+
28
+ def uniques params = {}
29
+ getUniqueVisitors(defaults.merge(params)).value
30
+ end
31
+
32
+ def actions params = {}
33
+ getActions(defaults.merge(params)).value
34
+ end
35
+
36
+ def max_actions params = {}
37
+ getMaxActions(defaults.merge(params)).value
38
+ end
39
+
40
+ def bounces params = {}
41
+ getBounceCount(defaults.merge(params)).value
42
+ end
43
+
44
+ def length params = {}
45
+ getSumVisitsLength(defaults.merge(params)).value
46
+ end
47
+
48
+ def pretty_length params = {}
49
+ getSumVisitsLengthPretty(defaults.merge(params)).value
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,11 @@
1
+ class String
2
+ def is_binary_data?
3
+ self.count( "^ -~", "^\r\n" ).fdiv(self.size) > 0.3 || self.index( "\x00" )
4
+ end
5
+
6
+ if RUBY_VERSION.to_f < 1.9
7
+ def force_encoding(enc)
8
+ self
9
+ end
10
+ end
11
+ end