nucleo-client 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.
- checksums.yaml +7 -0
- data/.env.sample +2 -0
- data/.gitignore +16 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +31 -0
- data/Rakefile +37 -0
- data/lib/nucleo/client.rb +172 -0
- data/lib/nucleo/client/version.rb +5 -0
- data/lib/nucleo/configuration.rb +83 -0
- data/lib/nucleo/configurations.rb +6 -0
- data/lib/nucleo/configurations/default.rb +100 -0
- data/lib/nucleo/connection.rb +44 -0
- data/lib/nucleo/errors.rb +7 -0
- data/lib/nucleo/errors/invalid_uri_error.rb +6 -0
- data/lib/nucleo/errors/record_not_found.rb +6 -0
- data/lib/nucleo/logger.rb +36 -0
- data/lib/nucleo/models.rb +50 -0
- data/lib/nucleo/models/change_types.rb +10 -0
- data/lib/nucleo/models/change_types/base.rb +81 -0
- data/lib/nucleo/models/change_types/seo.rb +13 -0
- data/lib/nucleo/models/change_types/seo/base.rb +50 -0
- data/lib/nucleo/models/change_types/seo/meta_description.rb +10 -0
- data/lib/nucleo/models/change_types/seo/page_title.rb +10 -0
- data/lib/nucleo/models/changes.rb +50 -0
- data/lib/nucleo/models/check_js.rb +41 -0
- data/lib/nucleo/models/check_types.rb +11 -0
- data/lib/nucleo/models/check_types/base.rb +25 -0
- data/lib/nucleo/models/check_types/count.rb +26 -0
- data/lib/nucleo/models/check_types/length.rb +26 -0
- data/lib/nucleo/models/check_types/not_exists.rb +8 -0
- data/lib/nucleo/models/checks.rb +56 -0
- data/lib/nucleo/models/concerns.rb +7 -0
- data/lib/nucleo/models/concerns/count.rb +57 -0
- data/lib/nucleo/models/concerns/length.rb +57 -0
- data/lib/nucleo/models/date_range.rb +66 -0
- data/lib/nucleo/models/element.rb +40 -0
- data/lib/nucleo/models/elements.rb +47 -0
- data/lib/nucleo/models/feed.rb +141 -0
- data/lib/nucleo/models/feed_types.rb +11 -0
- data/lib/nucleo/models/feed_types/analytics.rb +18 -0
- data/lib/nucleo/models/feed_types/analytics/base.rb +12 -0
- data/lib/nucleo/models/feed_types/analytics/page/channels.rb +61 -0
- data/lib/nucleo/models/feed_types/analytics/page/pages.rb +58 -0
- data/lib/nucleo/models/feed_types/analytics/page/referrers.rb +61 -0
- data/lib/nucleo/models/feed_types/analytics/page/social.rb +61 -0
- data/lib/nucleo/models/feed_types/analytics/site/channels.rb +61 -0
- data/lib/nucleo/models/feed_types/analytics/site/pages.rb +61 -0
- data/lib/nucleo/models/feed_types/analytics/site/referrers.rb +61 -0
- data/lib/nucleo/models/feed_types/analytics/site/social.rb +61 -0
- data/lib/nucleo/models/feed_types/base.rb +182 -0
- data/lib/nucleo/models/feed_types/seo.rb +22 -0
- data/lib/nucleo/models/feed_types/seo/page/base.rb +47 -0
- data/lib/nucleo/models/feed_types/seo/page/img_alt.rb +90 -0
- data/lib/nucleo/models/feed_types/seo/page/meta_description.rb +49 -0
- data/lib/nucleo/models/feed_types/seo/page/meta_robots.rb +48 -0
- data/lib/nucleo/models/feed_types/seo/page/page_title.rb +48 -0
- data/lib/nucleo/models/feed_types/seo/page/seo_summary.rb +53 -0
- data/lib/nucleo/models/feed_types/seo/page/summary.rb +52 -0
- data/lib/nucleo/models/feed_types/seo/site/base.rb +22 -0
- data/lib/nucleo/models/feed_types/seo/site/img_alt.rb +14 -0
- data/lib/nucleo/models/feed_types/seo/site/meta_description.rb +14 -0
- data/lib/nucleo/models/feed_types/seo/site/meta_robots.rb +14 -0
- data/lib/nucleo/models/feed_types/seo/site/page_title.rb +14 -0
- data/lib/nucleo/models/feeds.rb +126 -0
- data/lib/nucleo/models/metric.rb +54 -0
- data/lib/nucleo/models/metric_period.rb +97 -0
- data/lib/nucleo/models/metric_period_row.rb +125 -0
- data/lib/nucleo/models/metric_period_rows.rb +34 -0
- data/lib/nucleo/models/metric_period_totals.rb +121 -0
- data/lib/nucleo/models/metric_periods.rb +78 -0
- data/lib/nucleo/models/metric_periods_comparison.rb +80 -0
- data/lib/nucleo/models/metric_periods_comparisons.rb +73 -0
- data/lib/nucleo/models/metric_periods_totals.rb +58 -0
- data/lib/nucleo/models/page.rb +147 -0
- data/lib/nucleo/models/page_alerts.rb +27 -0
- data/lib/nucleo/models/page_metric.rb +58 -0
- data/lib/nucleo/models/page_rank.rb +28 -0
- data/lib/nucleo/models/pages.rb +40 -0
- data/lib/nucleo/models/seo_score.rb +28 -0
- data/lib/nucleo/models/site_feed.rb +82 -0
- data/lib/nucleo/models/tag.rb +48 -0
- data/lib/nucleo/models/tags.rb +35 -0
- data/lib/nucleo/requests.rb +14 -0
- data/lib/nucleo/requests/analyzer.rb +35 -0
- data/lib/nucleo/requests/check_js.rb +56 -0
- data/lib/nucleo/requests/feed.rb +58 -0
- data/lib/nucleo/requests/page.rb +113 -0
- data/lib/nucleo/requests/page_alerts.rb +36 -0
- data/lib/nucleo/requests/page_changes.rb +44 -0
- data/lib/nucleo/requests/site.rb +26 -0
- data/lib/nucleo/requests/site_changes.rb +56 -0
- data/lib/nucleo/requests/site_feed.rb +41 -0
- data/lib/nucleo/response.rb +52 -0
- data/lib/nucleo/utilities.rb +7 -0
- data/lib/nucleo/utilities/status_code_mapper.rb +53 -0
- data/lib/nucleo/webhook.rb +26 -0
- data/nucleo-client.gemspec +35 -0
- data/spec/data/models/feed_types/seo/heading_tag_length.json +55 -0
- data/spec/data/models/feed_types/seo/internal_link_count.json +149 -0
- data/spec/data/models/feed_types/seo/no_follow_link_count.json +142 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/unit/nucleo/models/concerns/count_spec.rb +103 -0
- data/spec/unit/nucleo/models/concerns/length_spec.rb +79 -0
- data/spec/unit/nucleo/models/feed_types/analytics/site/pages_no_data_spec.rb +39 -0
- data/spec/unit/nucleo/models/metric_periods_comparison_spec.rb +50 -0
- data/spec/unit/nucleo/models/metric_periods_comparisons_spec.rb +58 -0
- metadata +341 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
require File.expand_path('../metric_period', __FILE__)
|
|
2
|
+
|
|
3
|
+
module Nucleo
|
|
4
|
+
module Models
|
|
5
|
+
class MetricPeriodsComparison
|
|
6
|
+
include Comparable
|
|
7
|
+
|
|
8
|
+
# Creates a new instance of the Metric Periods Comparison domain model.
|
|
9
|
+
#
|
|
10
|
+
# @param attributes [Hash]
|
|
11
|
+
#
|
|
12
|
+
# @return [Nucleo::Models::MetricPeriodsComparison]
|
|
13
|
+
def initialize(attributes={})
|
|
14
|
+
@attributes = attributes
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Returns the dimension
|
|
18
|
+
#
|
|
19
|
+
# @return [String]
|
|
20
|
+
def dimension
|
|
21
|
+
@attributes['dimension']
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Returns the current period value
|
|
25
|
+
#
|
|
26
|
+
# @return [Float]
|
|
27
|
+
def current_value
|
|
28
|
+
@attributes['current_value'].to_f
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Returns the prior period value
|
|
32
|
+
#
|
|
33
|
+
# @return [Float]
|
|
34
|
+
def prior_value
|
|
35
|
+
@attributes['prior_value'].to_f
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Returns the percent change
|
|
39
|
+
#
|
|
40
|
+
# @return [Integer]
|
|
41
|
+
def change
|
|
42
|
+
@attributes['change'].to_f
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Returns true if there is no change
|
|
46
|
+
#
|
|
47
|
+
# @return [Boolean]
|
|
48
|
+
def no_change?
|
|
49
|
+
self.change == 0
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Returns true if there is a positive change
|
|
53
|
+
#
|
|
54
|
+
# @return [Boolean]
|
|
55
|
+
def positive_change?
|
|
56
|
+
self.change > 0
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Returns true if the change is negative
|
|
60
|
+
#
|
|
61
|
+
# @return [Boolean]
|
|
62
|
+
def negative_change?
|
|
63
|
+
self.change < 0
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Returns the direcction of change
|
|
67
|
+
#
|
|
68
|
+
# @return [String]
|
|
69
|
+
def direction
|
|
70
|
+
if self.positive_change?
|
|
71
|
+
'up'
|
|
72
|
+
elsif self.no_change?
|
|
73
|
+
'same'
|
|
74
|
+
elsif self.negative_change?
|
|
75
|
+
'down'
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
require File.expand_path('../metric_periods_comparison', __FILE__)
|
|
2
|
+
|
|
3
|
+
module Nucleo
|
|
4
|
+
module Models
|
|
5
|
+
class MetricPeriodsComparisons
|
|
6
|
+
include Enumerable
|
|
7
|
+
|
|
8
|
+
# Returns a Metrics Comparison domain model
|
|
9
|
+
#
|
|
10
|
+
# @param first_period [Nucleo::Models::MetricPeriod]
|
|
11
|
+
# @param second_period [Nucleo::Models::MetricPeriod]
|
|
12
|
+
#
|
|
13
|
+
# @return [Nucleo::Models::MetricPeriodComparison]
|
|
14
|
+
def initialize(first_period, second_period)
|
|
15
|
+
@first_period = first_period
|
|
16
|
+
@second_period = second_period
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def each(&block)
|
|
20
|
+
internal_collection.each(&block)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
def internal_collection
|
|
25
|
+
grouped_periods.map do |dimension, periods|
|
|
26
|
+
current_period = periods.find(&:current?)
|
|
27
|
+
prior_period = periods.find(&:prior?)
|
|
28
|
+
|
|
29
|
+
attributes = {
|
|
30
|
+
'dimension' => dimension,
|
|
31
|
+
'current_value' => 0,
|
|
32
|
+
'prior_value' => 0,
|
|
33
|
+
'change' => 0,
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if current_period
|
|
37
|
+
attributes.merge!('current_value' => current_period.value, 'change' => current_period.change)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
if prior_period
|
|
41
|
+
attributes.merge!('prior_value' => prior_period.value)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
Nucleo::Models::MetricPeriodsComparison.new(attributes)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def grouped_periods
|
|
49
|
+
all_rows.group_by(&:dimension_name)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def first_period
|
|
53
|
+
@first_period
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def first_period_rows
|
|
57
|
+
first_period.rows
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def second_period
|
|
61
|
+
@second_period
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def second_period_rows
|
|
65
|
+
second_period.rows
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def all_rows
|
|
69
|
+
(first_period_rows.to_a + second_period_rows.to_a)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
module Nucleo
|
|
2
|
+
module Models
|
|
3
|
+
class MetricPeriodsTotals
|
|
4
|
+
# Returns an instance of the MetricPeriodsTotals domain model
|
|
5
|
+
#
|
|
6
|
+
# These are the totals across both `current_period`
|
|
7
|
+
# and `prior_period`.
|
|
8
|
+
#
|
|
9
|
+
# @param attributes [Hash]
|
|
10
|
+
#
|
|
11
|
+
# @return [Nucleo::Models::MetricPeriodsTotals]
|
|
12
|
+
def initialize(attributes={})
|
|
13
|
+
@attributes = attributes
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Returns the metric type for the totals
|
|
17
|
+
#
|
|
18
|
+
# @return [String]
|
|
19
|
+
def metric
|
|
20
|
+
@attributes['metric']
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Returns the dimension
|
|
24
|
+
#
|
|
25
|
+
# @return [String]
|
|
26
|
+
def dimension
|
|
27
|
+
@attributes['dimension']
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Returns the current period totals
|
|
31
|
+
#
|
|
32
|
+
# @return [Nucleo::Models::MetricPeriodTotals]
|
|
33
|
+
def current_period
|
|
34
|
+
params = {
|
|
35
|
+
'metric' => self.metric,
|
|
36
|
+
'dimension' => self.dimension,
|
|
37
|
+
'period' => @attributes['totals']['current_period']
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
Nucleo::Models::MetricPeriodTotals.new(params)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Returns the prior period totals
|
|
44
|
+
#
|
|
45
|
+
# @return [Nucleo::Models::MetricPeriodTotals]
|
|
46
|
+
def prior_period
|
|
47
|
+
params = {
|
|
48
|
+
'metric' => self.metric,
|
|
49
|
+
'dimension' => self.dimension,
|
|
50
|
+
'period' => @attributes['totals']['prior_period']
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
Nucleo::Models::MetricPeriodTotals.new(params)
|
|
54
|
+
end
|
|
55
|
+
alias :previous_period :prior_period
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
module Nucleo
|
|
2
|
+
module Models
|
|
3
|
+
class Page
|
|
4
|
+
# Return an instance of the Page domain model
|
|
5
|
+
#
|
|
6
|
+
# @param attributes [Hash]
|
|
7
|
+
#
|
|
8
|
+
# @return [Nucleo::Models::Page]
|
|
9
|
+
def initialize(attributes={})
|
|
10
|
+
@attributes = attributes
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Returns the ID of the page
|
|
14
|
+
#
|
|
15
|
+
# @return [String]
|
|
16
|
+
def id
|
|
17
|
+
@attributes['id']
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Returns the title of the page
|
|
21
|
+
#
|
|
22
|
+
# @return [String]
|
|
23
|
+
def title
|
|
24
|
+
@attributes['title']
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Returns the path of the page
|
|
28
|
+
#
|
|
29
|
+
# @return [String]
|
|
30
|
+
def path
|
|
31
|
+
@attributes['path']
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Returns the hostname of the page
|
|
35
|
+
#
|
|
36
|
+
# @return [String]
|
|
37
|
+
def hostname
|
|
38
|
+
@attributes['hostname']
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Returns the URI of the resolved URL
|
|
42
|
+
#
|
|
43
|
+
# @return [URI]
|
|
44
|
+
def url
|
|
45
|
+
URI(self.resolved_url)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Returns the resolved URL of the page
|
|
49
|
+
#
|
|
50
|
+
# @return [String]
|
|
51
|
+
def resolved_url
|
|
52
|
+
@attributes['resolved_url'].to_s
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Returns the date the page was crawled
|
|
56
|
+
#
|
|
57
|
+
# @return [DateTime,nil]
|
|
58
|
+
def crawled_at
|
|
59
|
+
begin
|
|
60
|
+
DateTime.parse(@attributes['crawled_at'])
|
|
61
|
+
rescue
|
|
62
|
+
nil
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Returns a set of rules
|
|
67
|
+
#
|
|
68
|
+
# @return [Nucleo::Models::Rules]
|
|
69
|
+
def rules
|
|
70
|
+
Nucleo::Models::Rules.new(@attributes.fetch('rules', []))
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Returns a Feeds collection of recommendations for this page
|
|
74
|
+
#
|
|
75
|
+
# @return [Nucleo::Models::Feeds]
|
|
76
|
+
def recommendations
|
|
77
|
+
Nucleo::Models::Feeds.new(@attributes.fetch('recommendations', []))
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Returns true if there are any recommendations
|
|
81
|
+
#
|
|
82
|
+
# @return [Boolean]
|
|
83
|
+
def recommendations?
|
|
84
|
+
self.recommendations.any?
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Returns a Feeds collection of alerts for this page
|
|
88
|
+
#
|
|
89
|
+
# @return [Nucleo::Models::Feeds]
|
|
90
|
+
def alerts
|
|
91
|
+
Nucleo::Models::Feeds.new(@attributes.fetch('alerts', []))
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Returns true if there are any alerts
|
|
95
|
+
#
|
|
96
|
+
# @return [Boolean]
|
|
97
|
+
def alerts?
|
|
98
|
+
self.alerts.any?
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Returns a collection of Analytics
|
|
102
|
+
#
|
|
103
|
+
# @return [Array]
|
|
104
|
+
def analytics
|
|
105
|
+
Nucleo::Models::Feeds.new(@attributes.fetch('analytics', []))
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Returns true if there are any analytics
|
|
109
|
+
#
|
|
110
|
+
# @return [Boolean]
|
|
111
|
+
def analytics?
|
|
112
|
+
self.analytics.any?
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Returns metrics for this page
|
|
116
|
+
#
|
|
117
|
+
# @return [Nucleo::Models::PageMetric]
|
|
118
|
+
def metrics
|
|
119
|
+
Nucleo::Models::PageMetric.new(@attributes.fetch('metrics', []))
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Returns true if there are any metrics
|
|
123
|
+
#
|
|
124
|
+
# @return [Boolean]
|
|
125
|
+
def metrics?
|
|
126
|
+
self.metrics.any?
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Returns the SeoScore domain model for this page
|
|
130
|
+
#
|
|
131
|
+
# @return [Nucleo::Models::SeoScore]
|
|
132
|
+
def seo_score
|
|
133
|
+
Nucleo::Models::SeoScore.new(seo_score_params)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
private
|
|
137
|
+
def seo_score_params
|
|
138
|
+
reference = @attributes.fetch('seo_score', {})
|
|
139
|
+
|
|
140
|
+
{
|
|
141
|
+
'score' => reference['seo_score'],
|
|
142
|
+
'grade' => reference['seo_grade']
|
|
143
|
+
}
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require File.expand_path('../feeds', __FILE__)
|
|
2
|
+
|
|
3
|
+
module Nucleo
|
|
4
|
+
module Models
|
|
5
|
+
class PageAlerts
|
|
6
|
+
# Returns an instance of Page Alerts
|
|
7
|
+
#
|
|
8
|
+
# @param attributes [Hash]
|
|
9
|
+
#
|
|
10
|
+
# @return [Nucleo::Models::PageAlerts]
|
|
11
|
+
def initialize(attributes={})
|
|
12
|
+
@attributes = attributes
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.retrieve(id, params={})
|
|
16
|
+
response_body = Nucleo::Requests::PageAlerts.retrieve(id, params)
|
|
17
|
+
|
|
18
|
+
self.new(response_body)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def alerts
|
|
22
|
+
Nucleo::Models::Feeds.new(@attributes)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
module Nucleo
|
|
2
|
+
module Models
|
|
3
|
+
class PageMetric
|
|
4
|
+
METRIC_NAME = 'ga:pageviews'.freeze
|
|
5
|
+
|
|
6
|
+
# Returns an instance of the PageRank domain model
|
|
7
|
+
#
|
|
8
|
+
# @param attributes [Hash]
|
|
9
|
+
#
|
|
10
|
+
# @return [Nucleo::Models::PageRank]
|
|
11
|
+
def initialize(attributes={})
|
|
12
|
+
@attributes = attributes
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Returns the metric value
|
|
16
|
+
#
|
|
17
|
+
# @return [Integer]
|
|
18
|
+
def value
|
|
19
|
+
@attributes[METRIC_NAME].to_i
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Returns the change
|
|
23
|
+
#
|
|
24
|
+
# @return [Integer]
|
|
25
|
+
def change
|
|
26
|
+
@attributes[translated_key_name(:change)].to_f
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Returns the pct total
|
|
30
|
+
#
|
|
31
|
+
# @return [Integer]
|
|
32
|
+
def pct_total
|
|
33
|
+
@attributes[translated_key_name(:pct_total)].to_f
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Returns the rank
|
|
37
|
+
#
|
|
38
|
+
# @return [Integer]
|
|
39
|
+
def rank
|
|
40
|
+
@attributes[translated_key_name(:rank)].to_i
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Returns the rank
|
|
44
|
+
#
|
|
45
|
+
# @return [Integer]
|
|
46
|
+
def rank_change
|
|
47
|
+
@attributes[translated_key_name(:rank_change)].to_i
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
private
|
|
51
|
+
def translated_key_name(key)
|
|
52
|
+
key = key.to_s
|
|
53
|
+
|
|
54
|
+
[METRIC_NAME, key].join('_')
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|