most-popular 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.env.example +6 -0
- data/.gitignore +10 -0
- data/.travis.yml +16 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +143 -0
- data/Rakefile +5 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/most-popular.rb +4 -0
- data/lib/most-popular/config/Test-5eae1f52d9cf.p12 +0 -0
- data/lib/most-popular/config/Test2-2bdbc68098d7.p12 +0 -0
- data/lib/most-popular/google_analytics.rb +88 -0
- data/lib/most-popular/trending.rb +32 -0
- data/lib/most-popular/version.rb +3 -0
- data/lib/most-popular/viewed_story.rb +13 -0
- data/most-popular.gemspec +34 -0
- metadata +175 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 06e97da7a3296fe71490cde62c4b19e129b419ea
|
4
|
+
data.tar.gz: f3fc0cb6e37cac44b6a228167bdd25c59132be38
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e2e42c530a352c1ca2f7eef249b492fb5229a6b9e8ac1138d7fdbbe59114506e42cf364ba17c6705f9202543b6e74e05858f77045b3a9239195c1de18374e469
|
7
|
+
data.tar.gz: 8960dc2b3bdcc1859b01b63d35e064e1a5e985e099e8ba4af1561f2ee1f9555b0eea5730fac6c38ff40922e039b757c6774f031f19efe092a5e6ee71c7bfbb50
|
data/.env.example
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
SERVICE_ACCOUNT_EMAIL=238317317317-htv966ia96ii951mhhk6qhk6edtt2lad@developer.gserviceaccount.com
|
2
|
+
PROFILE_ID=777777
|
3
|
+
FILENAME=lib/most-popular/config/production/MyApplication-5eae1f52d9cf.p12
|
4
|
+
SECRET=notasecret
|
5
|
+
APPLICATION_NAME=MyApplication
|
6
|
+
APPLICATION_VERSION=1.0.0
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
language: ruby
|
2
|
+
cache: bundler
|
3
|
+
rvm:
|
4
|
+
- 2.1.5
|
5
|
+
- 2.2.2
|
6
|
+
before_install:
|
7
|
+
- gem update --system
|
8
|
+
- gem --version
|
9
|
+
- gem update bundler
|
10
|
+
|
11
|
+
deploy:
|
12
|
+
provider: rubygems
|
13
|
+
api_key:
|
14
|
+
secure: Iu+VsOaUY3SRBbDz30ROceQdhsp5VZrZ9v9Qmy1O/KVJDgODz5dJBwlbw0bUW5KL7BhyuSZfkDHA/UaZoB1/Ww/Qf+RqPIo36C0YHGktfUUs3F8iaEAkd0unTf5NcI9H+OnAFR5VqHCn5nwla+gABM7kTYy2/uIrM36XRjHF3kUhBVLELcOjr3x4P1ofJKOdLoS4IPMYc8sYT/Ai/62XVlCKjK+za4UWba2nnSWI/D6i/Hja/HUlNc1eqEaQIB9NRDhGtvv3mIfBNkdVBn+T3hk1n9Ddb07xOoPYfo8QKCMzC0vv0ayqUEEBlYYylFxXBETK3n7KB6u30/soMJNfj7ncZ8ePe1kHXS1wpd5uTI7kBFRWCwScXaEtAuMt73+3V6KHQKNXljESCAOqrIDVVHJjh8RsSVHseDpSCHEY9TsDMIUyTjIcYovRlGakWLNUmRM5yWJO19IahiGElaxG6xMywcyeRDzOVKh5XBe/pD2asa54NnyEQ62lQLm+CLv9Ma2kEAZUAjLLOXR/duaorHOeiET39QoxgVeSWqIaQFOvuHqZv9ziRRITVqOSFZD9vjdqCMm44aipgi8bbl1iLzLIQG/ceHg4C/AkLsO4xtgv/7ThARLy3Xq5XVkjp9TkMZDrE6s7K9ryB/z21XczSe4XnMRbJUWnvp2Etieyecw=
|
15
|
+
on:
|
16
|
+
tags: true
|
data/CODE_OF_CONDUCT.md
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# Contributor Code of Conduct
|
2
|
+
|
3
|
+
As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
|
4
|
+
|
5
|
+
We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, age, or religion.
|
6
|
+
|
7
|
+
Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.
|
8
|
+
|
9
|
+
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team.
|
10
|
+
|
11
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.
|
12
|
+
|
13
|
+
This Code of Conduct is adapted from the [Contributor Covenant](http:contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/)
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 gambaroff
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
[![Build Status](https://travis-ci.org/gambaroff/google-analytics-most-popular.svg?branch=master)](https://travis-ci.org/gambaroff/google-analytics-most-popular)
|
2
|
+
# most_popular
|
3
|
+
|
4
|
+
Add this line to your application's Gemfile:
|
5
|
+
|
6
|
+
```ruby
|
7
|
+
gem 'most-popular'
|
8
|
+
```
|
9
|
+
|
10
|
+
And then execute:
|
11
|
+
|
12
|
+
$ bundle
|
13
|
+
|
14
|
+
Or install it yourself as:
|
15
|
+
|
16
|
+
$ gem install most-popular
|
17
|
+
|
18
|
+
## Usage
|
19
|
+
You will need a service account credentials from google.
|
20
|
+
|
21
|
+
## Service Account with Google for Server-to-Server Applications
|
22
|
+
Google API uses OAuth 2.0 with service accounts. Learn more about Google APIs and OAuth 2.0 here:https://developers.google.com/accounts/docs/OAuth2
|
23
|
+
|
24
|
+
Or, follow these steps.
|
25
|
+
|
26
|
+
1. From the "Project Home" screen, activate access to "Google+ API”.
|
27
|
+
2. From google developer console, APIs -> Enabled APIs - Must enable analytics API
|
28
|
+
3. Click on "APIs&Auth" in the left column
|
29
|
+
4. Click Credentials in the left column
|
30
|
+
5. Under OAuth click Create New ClientID button
|
31
|
+
6. Give your application a name and click "Next"
|
32
|
+
7. Select "Service Account" as the "Application type"
|
33
|
+
8. Select "other" under "Installed application type"
|
34
|
+
9. Click "Create client ID"
|
35
|
+
10. Click 'Download private key' to save the generate private key file
|
36
|
+
|
37
|
+
|
38
|
+
### Managing Credentials
|
39
|
+
|
40
|
+
* ###Using Bash or Zsh Profile
|
41
|
+
|
42
|
+
This is the “bare minimum” solution. You can store the environment variable key/value pairs with the operating system directly and globally, so they are going to be available to the Rails app. In your .bashrc file or .zshrc file, set environment variables with lines like:
|
43
|
+
```
|
44
|
+
export KEY=value
|
45
|
+
```
|
46
|
+
|
47
|
+
With this, you can fire up rails console or irb and access your environment var by doing:
|
48
|
+
|
49
|
+
```
|
50
|
+
ENV["KEY"]
|
51
|
+
=> "value"
|
52
|
+
```
|
53
|
+
This is also not very ideal for creating app-specific environment variables or using different environment variables for different environments such as development and testing
|
54
|
+
http://www.gotealeaf.com/blog/managing-environment-configuration-variables-in-rails
|
55
|
+
|
56
|
+
* ###Using a gem, like Dotenv
|
57
|
+
|
58
|
+
[Dotenv](https://github.com/bkeepers/dotenv) solves the problems of setting project-specific environment vars and is super easy to get started on. Start by including the ```gem 'dotenv-rails', :groups => [:development, :test]``` in the appropriate groups, in this case development and test. You can then put your sensitive information inside a .env file at the root of your project directory:
|
59
|
+
|
60
|
+
```
|
61
|
+
SERVICE_ACCOUNT_EMAIL=072731723843-htv966ia965hk61mii9hqr98edtt2lad@developer.gserviceaccount.com
|
62
|
+
PROFILE_ID=77777
|
63
|
+
FILENAME=config/environments/production/YourApp-5eee1f52d9cf.p12
|
64
|
+
SECRET=notasecret
|
65
|
+
```
|
66
|
+
|
67
|
+
You can call these variables anywhere in your Rails application by using: ```ENV["SERVICE_ACCOUNT_EMAIL"], ENV["PROFILE_ID"], ENV["FILENAME"] and ENV["SECRET"]```
|
68
|
+
|
69
|
+
Support for export (for accessing these variables in the terminal) and yaml-like configs come baked in. Make sure to git-ignore your ```.env``` files if you’re working alone or you’ll be back to square one. While working on a team, you can maintain a default ```.env.example``` file that is checked into source control with further instructions to other developers. check out [dotenv](https://github.com/bkeepers/dotenv)
|
70
|
+
|
71
|
+
More info on [Managing Environment Configuration Variables in Rails](http://www.gotealeaf.com/blog/managing-environment-configuration-variables-in-rails)
|
72
|
+
|
73
|
+
|
74
|
+
### Example Rails App
|
75
|
+
|
76
|
+
```ruby
|
77
|
+
#app/models/concerns/most_popupar_story.rb
|
78
|
+
|
79
|
+
class MostPopularStory
|
80
|
+
def initialize
|
81
|
+
builder = MostPopular::Analytics::GoogleAnalyticsBuilder.new
|
82
|
+
builder.service_account({
|
83
|
+
service_account_email: ENV["SERVICE_ACCOUNT_EMAIL"],
|
84
|
+
profile_id: ENV["PROFILE_ID"]
|
85
|
+
})
|
86
|
+
builder.key_file({
|
87
|
+
filename: ENV["FILENAME"],
|
88
|
+
secret: ENV["SECRET"]
|
89
|
+
})
|
90
|
+
builder.application({
|
91
|
+
application_name: 'Your Application',
|
92
|
+
application_version: '1.0.0'
|
93
|
+
})
|
94
|
+
builder.api(:api_v3)
|
95
|
+
builder.filter({filter: 'topics'})
|
96
|
+
analytics = builder.build
|
97
|
+
@trending = MostPopular::Trending::TrendingStory.new(analytics)
|
98
|
+
end
|
99
|
+
|
100
|
+
def trending
|
101
|
+
@trending.trending_stories
|
102
|
+
end
|
103
|
+
end
|
104
|
+
```
|
105
|
+
|
106
|
+
### Optional Arguments
|
107
|
+
|
108
|
+
trending_stories method can take a Hash of any of these *date: :today*, *date: :last_day*, *date: :last_week*, *num_results: 10*, filter: 'my_filter'
|
109
|
+
|
110
|
+
for example
|
111
|
+
|
112
|
+
```ruby
|
113
|
+
@trending.trending_stories(date: :last_week, num_results: 3)
|
114
|
+
```
|
115
|
+
|
116
|
+
## Testing Example, using VCR gem
|
117
|
+
```ruby
|
118
|
+
require 'rails_helper'
|
119
|
+
|
120
|
+
RSpec.describe MostPopularStory do
|
121
|
+
let(:trending) { MostPopularStory.new}
|
122
|
+
|
123
|
+
VCR.use_cassette('treding_story', :record => :new_episodes) do
|
124
|
+
describe '#initialize' do
|
125
|
+
it 'can be instantiated',:vcr do
|
126
|
+
expect(trending).not_to be_nil
|
127
|
+
expect(trending.class).to eq MostPopularStory
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
describe '#now_trending' do
|
132
|
+
it 'contains an array of trending stories', :vcr do
|
133
|
+
expect(trending.now_trending.class).to eq Array
|
134
|
+
expect(trending.now_trending.size).to eq 10
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'contains expected Object', :vcr do
|
138
|
+
expect(trending.now_trending.first.class).to eq MostPopular::Trending::ViewedStory
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
```
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "most-popular"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
data/lib/most-popular.rb
ADDED
Binary file
|
Binary file
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require 'google/api_client'
|
2
|
+
|
3
|
+
module MostPopular
|
4
|
+
module Analytics
|
5
|
+
class GoogleAnalytics
|
6
|
+
# Don't call GoogleAnalytics.new directly. Use GoogleAnalyticsBuilder instead. See unit tests
|
7
|
+
def initialize(client, api_method, profile_id, filter)
|
8
|
+
@client = client
|
9
|
+
@api_method = api_method
|
10
|
+
@profile_id = profile_id
|
11
|
+
@filter = filter
|
12
|
+
end
|
13
|
+
|
14
|
+
def summarize(args={})
|
15
|
+
args = defaults.merge(args)
|
16
|
+
results = @client.execute(
|
17
|
+
:api_method => @api_method,
|
18
|
+
:parameters => query_hash(args))
|
19
|
+
results.data.rows
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def defaults
|
25
|
+
{start_date: 'yesterday', end_date: 'today', num_results: 10 }
|
26
|
+
end
|
27
|
+
|
28
|
+
def query_hash(args)
|
29
|
+
{
|
30
|
+
'ids' => "ga:" + @profile_id,
|
31
|
+
'start-date' => args[:start_date],
|
32
|
+
'end-date' => args[:end_date],
|
33
|
+
'dimensions' => 'ga:pagePath',
|
34
|
+
'metrics' => 'ga:pageviews',
|
35
|
+
'sort' => '-ga:pageviews',
|
36
|
+
'filters' => 'ga:pagePath=~^/' + @filter.to_s + '/.*',
|
37
|
+
'max-results' => args[:num_results]
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
class GoogleAnalyticsBuilder
|
44
|
+
def service_account(args)
|
45
|
+
@service_account_email = args[:service_account_email]
|
46
|
+
@profile_id = args[:profile_id]
|
47
|
+
end
|
48
|
+
|
49
|
+
def key_file(args)
|
50
|
+
@key_file = args[:filename]
|
51
|
+
@key_secret = args[:secret]
|
52
|
+
end
|
53
|
+
|
54
|
+
def application(args)
|
55
|
+
@application_name = args[:application_name]
|
56
|
+
@application_version = args[:application_version]
|
57
|
+
end
|
58
|
+
|
59
|
+
def api(api)
|
60
|
+
raise 'API not yet supported' unless api == :api_v3
|
61
|
+
@api_name = 'analytics'
|
62
|
+
@api_version = 'v3'
|
63
|
+
end
|
64
|
+
|
65
|
+
def filter(args)
|
66
|
+
@filter = args[:filter]
|
67
|
+
end
|
68
|
+
|
69
|
+
def build
|
70
|
+
#TODO check if account is set up or else raise exception
|
71
|
+
client = Google::APIClient.new(
|
72
|
+
:application_name => @application_name,
|
73
|
+
:application_version => @application_version
|
74
|
+
)
|
75
|
+
key = Google::APIClient::KeyUtils.load_from_pkcs12(@key_file, @key_secret)
|
76
|
+
client.authorization = Signet::OAuth2::Client.new(
|
77
|
+
:token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
|
78
|
+
:audience => 'https://accounts.google.com/o/oauth2/token',
|
79
|
+
:scope => 'https://www.googleapis.com/auth/analytics.readonly',
|
80
|
+
:issuer => @service_account_email,
|
81
|
+
:signing_key => key)
|
82
|
+
client.authorization.fetch_access_token!
|
83
|
+
api_method = client.discovered_api(@api_name, @api_version).data.ga.get
|
84
|
+
GoogleAnalytics.new(client, api_method, @profile_id, @filter)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module MostPopular
|
2
|
+
module Trending
|
3
|
+
class TrendingStory
|
4
|
+
|
5
|
+
def initialize(analytics)
|
6
|
+
@analytics = analytics
|
7
|
+
end
|
8
|
+
|
9
|
+
def trending_stories(date: :last_day, num_results: 10)
|
10
|
+
start_date, end_date = dates_for(date)
|
11
|
+
rows = @analytics.summarize({start_date: start_date, end_date: end_date, num_results: num_results})
|
12
|
+
rows.collect do |r|
|
13
|
+
ViewedStory.new(r.first, r.last)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def dates_for(date)
|
20
|
+
#TODO consider moving logic to Analytics subclasses
|
21
|
+
case date
|
22
|
+
when :last_day
|
23
|
+
return 'yesterday', 'today'
|
24
|
+
when :last_week
|
25
|
+
return '7daysAgo', 'today'
|
26
|
+
else
|
27
|
+
raise "I don't know what to do with #{date}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'most-popular/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "most-popular"
|
8
|
+
spec.version = MostPopular::VERSION
|
9
|
+
spec.authors = ["Stephania Gambaroff Thomas"]
|
10
|
+
spec.email = ["sthomas@marketplace.org"]
|
11
|
+
|
12
|
+
spec.summary = %q{Google Analytics Most popular}
|
13
|
+
spec.description = %q{Authorizes server to server account and returns X number of most viewed pages by path}
|
14
|
+
spec.homepage = "https://github.com/gambaroff/google-analytics-most-popular"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
18
|
+
# delete this section to allow pushing this gem to any host.
|
19
|
+
|
20
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
21
|
+
spec.bindir = "exe"
|
22
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
|
+
spec.require_paths = ["lib"]
|
24
|
+
|
25
|
+
spec.add_dependency "google-api-client", "~> 0.8.6"
|
26
|
+
|
27
|
+
spec.add_development_dependency "bundler", "~> 1.9"
|
28
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
29
|
+
spec.add_development_dependency "rspec", "~> 3.2"
|
30
|
+
spec.add_development_dependency "rspec-mocks", "~> 3.2"
|
31
|
+
spec.add_development_dependency "vcr", "~> 2.9"
|
32
|
+
spec.add_development_dependency "webmock", "~> 1.20"
|
33
|
+
spec.add_development_dependency "dotenv", "~> 2.0"
|
34
|
+
end
|
metadata
ADDED
@@ -0,0 +1,175 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: most-popular
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Stephania Gambaroff Thomas
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: google-api-client
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.8.6
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.8.6
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.9'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.9'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.2'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.2'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec-mocks
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.2'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.2'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: vcr
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.9'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.9'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: webmock
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.20'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1.20'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: dotenv
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '2.0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '2.0'
|
125
|
+
description: Authorizes server to server account and returns X number of most viewed
|
126
|
+
pages by path
|
127
|
+
email:
|
128
|
+
- sthomas@marketplace.org
|
129
|
+
executables: []
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- ".env.example"
|
134
|
+
- ".gitignore"
|
135
|
+
- ".travis.yml"
|
136
|
+
- CODE_OF_CONDUCT.md
|
137
|
+
- Gemfile
|
138
|
+
- LICENSE.txt
|
139
|
+
- README.md
|
140
|
+
- Rakefile
|
141
|
+
- bin/console
|
142
|
+
- bin/setup
|
143
|
+
- lib/most-popular.rb
|
144
|
+
- lib/most-popular/config/Test-5eae1f52d9cf.p12
|
145
|
+
- lib/most-popular/config/Test2-2bdbc68098d7.p12
|
146
|
+
- lib/most-popular/google_analytics.rb
|
147
|
+
- lib/most-popular/trending.rb
|
148
|
+
- lib/most-popular/version.rb
|
149
|
+
- lib/most-popular/viewed_story.rb
|
150
|
+
- most-popular.gemspec
|
151
|
+
homepage: https://github.com/gambaroff/google-analytics-most-popular
|
152
|
+
licenses:
|
153
|
+
- MIT
|
154
|
+
metadata: {}
|
155
|
+
post_install_message:
|
156
|
+
rdoc_options: []
|
157
|
+
require_paths:
|
158
|
+
- lib
|
159
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
160
|
+
requirements:
|
161
|
+
- - ">="
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '0'
|
164
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
165
|
+
requirements:
|
166
|
+
- - ">="
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: '0'
|
169
|
+
requirements: []
|
170
|
+
rubyforge_project:
|
171
|
+
rubygems_version: 2.4.8
|
172
|
+
signing_key:
|
173
|
+
specification_version: 4
|
174
|
+
summary: Google Analytics Most popular
|
175
|
+
test_files: []
|