diff --git a/.gitignore b/.gitignore
index b397243..b8ae448 100644
--- a/.gitignore
+++ b/.gitignore
@@ -48,3 +48,5 @@ build/
/log/
/tmp
*.log
+test.html.haml
+
diff --git a/Gemfile b/Gemfile
index 84249ac..b641c6d 100644
--- a/Gemfile
+++ b/Gemfile
@@ -42,9 +42,12 @@ gem 'spring', group: :development
# gem 'debugger', group: [:development, :test]
# Use google_drive to read/write files or spreadsheets from google drive
-gem 'google_drive'
+gem 'omniauth-google-oauth2'
+gem 'google-api-client', require: 'google/api_client'
+gem 'google_drive', git: 'git://github.com/SixiS/google-drive-ruby'
# Use linkedin to interface with linkedin api
+#gem 'omniauth-linkedin-oauth2'
gem 'linkedin'
# Use sendrid to access sendgrid api to send mails and get their status
@@ -68,16 +71,23 @@ gem 'bootstrap-datepicker-rails'
# The following gems for testing purpose in development and testing environment
group :development, :test do
-# Rspec is used to write the test cases
+ # Rspec is used to write the test cases
gem 'rspec-rails'
-# Use factory girl to pass random data for test cases
+ # Use factory girl to pass random data for test cases
gem 'factory_girl_rails'
-# Use faker to generate fake strings and data
+ # Use faker to generate fake strings and data
gem 'faker'
-# Use to clean database after executing a test case
+ # Use to clean database after executing a test case
gem 'database_cleaner'
-# Use to track how much code has been tested
- gem 'simplecov'
+ # Use to track how much code has been tested
+ gem 'simplecov', '~> 0.7.1'
+end
+
+group :test do
+ # Webmock to stub http requests
+ gem 'webmock'
+ # VCR to record the responses from web and replay them when needed
+ gem 'vcr'
end
gem 'simple_form'
@@ -88,3 +98,5 @@ gem 'carrierwave-mongoid', :require => 'carrierwave/mongoid'
gem 'mini_magick'
gem 'redis-rails'
gem 'redis-namespace'
+gem 'pry'
+gem 'rest_client'
diff --git a/Gemfile.lock b/Gemfile.lock
index 50d1e1b..699923f 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,3 +1,12 @@
+GIT
+ remote: git://github.com/SixiS/google-drive-ruby
+ revision: 7a58b426959727aef9d7e99a9942e945f836875a
+ specs:
+ google_drive (0.3.9)
+ nokogiri (>= 1.4.4, != 1.5.2, != 1.5.1)
+ oauth (>= 0.3.6)
+ oauth2 (>= 0.5.0)
+
GEM
remote: https://rubygems.org/
specs:
@@ -27,7 +36,12 @@ GEM
minitest (~> 5.1)
thread_safe (~> 0.1)
tzinfo (~> 1.1)
+ addressable (2.3.6)
arel (5.0.1.20140414130214)
+ autoparse (0.3.3)
+ addressable (>= 2.3.1)
+ extlib (>= 0.9.15)
+ multi_json (>= 1.0.0)
bcrypt (3.1.7)
bootstrap-datepicker-rails (1.3.0.2)
railties (>= 3.0)
@@ -46,6 +60,7 @@ GEM
mongoid-grid_fs (>= 1.3, < 3.0)
celluloid (0.15.2)
timers (~> 1.1.0)
+ coderay (1.1.0)
coffee-rails (4.0.1)
coffee-script (>= 2.2.0)
railties (>= 4.0.0, < 5.0)
@@ -54,6 +69,8 @@ GEM
execjs
coffee-script-source (1.7.0)
connection_pool (2.0.0)
+ crack (0.4.2)
+ safe_yaml (~> 1.0.0)
database_cleaner (1.3.0)
devise (3.2.4)
bcrypt (~> 3.0)
@@ -65,9 +82,9 @@ GEM
actionmailer (>= 3.2.6, < 5)
devise (>= 3.2.0)
diff-lcs (1.2.5)
- docile (1.1.5)
erubis (2.7.0)
execjs (2.2.1)
+ extlib (0.9.16)
factory_girl (4.4.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.4.1)
@@ -77,10 +94,17 @@ GEM
i18n (~> 0.5)
faraday (0.9.0)
multipart-post (>= 1.2, < 3)
- google_drive (0.3.9)
- nokogiri (>= 1.4.4, != 1.5.2, != 1.5.1)
- oauth (>= 0.3.6)
- oauth2 (>= 0.5.0)
+ google-api-client (0.7.1)
+ addressable (>= 2.3.2)
+ autoparse (>= 0.3.3)
+ extlib (>= 0.9.15)
+ faraday (>= 0.9.0)
+ jwt (>= 0.1.5)
+ launchy (>= 2.1.1)
+ multi_json (>= 1.0.0)
+ retriable (>= 1.4)
+ signet (>= 0.5.0)
+ uuidtools (>= 2.1.0)
haml (4.0.5)
tilt
haml-rails (0.5.3)
@@ -99,6 +123,8 @@ GEM
thor (>= 0.14, < 2.0)
json (1.8.1)
jwt (1.0.0)
+ launchy (2.4.2)
+ addressable (~> 2.3)
libv8 (3.16.14.3)
linkedin (0.4.7)
hashie (~> 2.0)
@@ -107,6 +133,7 @@ GEM
mail (2.5.4)
mime-types (~> 1.16)
treetop (~> 1.4.8)
+ method_source (0.8.2)
mime-types (1.25.1)
mini_magick (3.7.0)
subexec (~> 0.2.1)
@@ -127,6 +154,7 @@ GEM
multi_json (1.10.1)
multi_xml (0.5.5)
multipart-post (2.0.0)
+ netrc (0.7.7)
nokogiri (1.6.2.1)
mini_portile (= 0.6.0)
oauth (0.4.7)
@@ -136,10 +164,25 @@ GEM
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (~> 1.2)
+ omniauth (1.2.1)
+ hashie (>= 1.2, < 3)
+ rack (~> 1.0)
+ omniauth-google-oauth2 (0.2.4)
+ omniauth (~> 1.0)
+ omniauth-oauth2 (~> 1.1)
+ omniauth-oauth2 (1.1.2)
+ faraday (>= 0.8, < 0.10)
+ multi_json (~> 1.3)
+ oauth2 (~> 0.9.3)
+ omniauth (~> 1.2)
optionable (0.2.0)
origin (2.1.1)
orm_adapter (0.5.0)
polyglot (0.3.5)
+ pry (0.10.0)
+ coderay (~> 1.1.0)
+ method_source (~> 0.8.1)
+ slop (~> 3.4)
rack (1.5.2)
rack-test (0.6.2)
rack (>= 1.0)
@@ -185,6 +228,9 @@ GEM
redis-store (1.1.4)
redis (>= 2.2)
ref (1.0.5)
+ rest_client (1.7.3)
+ netrc (~> 0.7.7)
+ retriable (1.4.1)
rspec-core (3.0.2)
rspec-support (~> 3.0.0)
rspec-expectations (3.0.2)
@@ -201,6 +247,7 @@ GEM
rspec-mocks (~> 3.0.0)
rspec-support (~> 3.0.0)
rspec-support (3.0.2)
+ safe_yaml (1.0.3)
sass (3.2.19)
sass-rails (4.0.3)
railties (>= 4.0.0, < 5.0)
@@ -219,14 +266,19 @@ GEM
json
redis (>= 3.0.6)
redis-namespace (>= 1.3.1)
+ signet (0.5.1)
+ addressable (>= 2.2.3)
+ faraday (>= 0.9.0.rc5)
+ jwt (>= 0.1.5)
+ multi_json (>= 1.0.0)
simple_form (3.0.2)
actionpack (~> 4.0)
activemodel (~> 4.0)
- simplecov (0.8.2)
- docile (~> 1.1.0)
- multi_json
- simplecov-html (~> 0.8.0)
- simplecov-html (0.8.0)
+ simplecov (0.7.1)
+ multi_json (~> 1.0)
+ simplecov-html (~> 0.7.1)
+ simplecov-html (0.7.1)
+ slop (3.5.0)
spring (1.1.3)
sprockets (2.11.0)
hike (~> 1.2)
@@ -255,8 +307,13 @@ GEM
uglifier (2.5.1)
execjs (>= 0.3.0)
json (>= 1.8.0)
+ uuidtools (2.1.4)
+ vcr (2.9.2)
warden (1.2.3)
rack (>= 1.0)
+ webmock (1.18.0)
+ addressable (>= 2.3.6)
+ crack (>= 0.3.2)
PLATFORMS
ruby
@@ -272,7 +329,8 @@ DEPENDENCIES
devise_invitable
factory_girl_rails
faker
- google_drive
+ google-api-client
+ google_drive!
haml
haml-rails
jbuilder (~> 2.0)
@@ -280,18 +338,23 @@ DEPENDENCIES
linkedin
mini_magick
mongoid
+ omniauth-google-oauth2
+ pry
rails (= 4.1.2)
redactor-rails
redis-namespace
redis-rails
+ rest_client
rspec-rails
sass-rails (~> 4.0.3)
sdoc (~> 0.4.0)
sendgrid
sidekiq
simple_form
- simplecov
+ simplecov (~> 0.7.1)
spring
therubyracer
turbolinks
uglifier (>= 1.3.0)
+ vcr
+ webmock
diff --git a/app/assets/javascripts/spreadsheets.js.coffee b/app/assets/javascripts/spreadsheets.js.coffee
new file mode 100644
index 0000000..bb6bec6
--- /dev/null
+++ b/app/assets/javascripts/spreadsheets.js.coffee
@@ -0,0 +1,6 @@
+# Place all the behaviors and hooks related to the matching controller here.
+# All this logic will automatically be available in application.js.
+# You can use CoffeeScript in this file: http://coffeescript.org/
+xyz = ->
+ alert "welcome"
+ return
\ No newline at end of file
diff --git a/app/assets/stylesheets/bootstrap_config.scss b/app/assets/stylesheets/bootstrap_config.scss
index c2c0a35..97dbd4a 100644
--- a/app/assets/stylesheets/bootstrap_config.scss
+++ b/app/assets/stylesheets/bootstrap_config.scss
@@ -1,4 +1,5 @@
@import "bootstrap";
+
body
{
padding-top: 80px;
diff --git a/app/assets/stylesheets/spreadsheets.css.scss b/app/assets/stylesheets/spreadsheets.css.scss
new file mode 100644
index 0000000..2f69a6e
--- /dev/null
+++ b/app/assets/stylesheets/spreadsheets.css.scss
@@ -0,0 +1,3 @@
+// Place all the styles related to the spreadsheets controller here.
+// They will automatically be included in application.css.
+// You can use Sass (SCSS) here: http://sass-lang.com/
diff --git a/app/controllers/spreadsheets_controller.rb b/app/controllers/spreadsheets_controller.rb
new file mode 100644
index 0000000..51b6925
--- /dev/null
+++ b/app/controllers/spreadsheets_controller.rb
@@ -0,0 +1,70 @@
+class SpreadsheetsController < ApplicationController
+ require 'google'
+ include Google::Spreadsheets
+
+ def index
+ @spreadsheets = Spreadsheet.all.to_a
+ end
+
+ def new
+ if params[:access_token]
+ spreadsheet = Spreadsheet.where(access_token: params['access_token'])[0]
+ else
+ spreadsheet = Spreadsheet.new
+ spreadsheet.add_tokens(request.env['omniauth.auth'].fetch('credentials'))
+ end
+
+ if spreadsheet.save
+ # Spreadsheets from google
+ @spreadsheets = list(spreadsheet)
+ @token = spreadsheet.access_token
+ else
+ # Handle if data does not get saved
+ @msg = 'Getting same access token. Try deleting '
+ end
+ end
+
+ def edit
+ token = spreadsheet_params['token']
+ spreadsheet = Spreadsheet.where(access_token: token)[0]
+
+ if spreadsheet.add_spreadsheet_credentials(spreadsheet_params)
+ spreadsheet.save
+ else
+ @error = 'Already Present'
+ end
+
+ @spreadsheets = Spreadsheet.all.to_a
+
+ render action: 'index'
+ end
+
+ def update
+ spreadsheet = Spreadsheet.find(params['id'])
+ @worksheet = worksheets(spreadsheet)
+ User.add_users_from_worksheet(@worksheet)
+
+ redirect_to users_path
+ end
+
+ def destroy
+ Spreadsheet.find(params['id']).delete
+ redirect_to spreadsheets_path
+ end
+
+ def failure
+ if params['message'].match('access_denied')
+ @msg = 'Account integration Failed. User Refused to grant permissions'
+ end
+ @spreadsheets = Spreadsheet.all.to_a
+ render action: 'index'
+ end
+
+ #################################
+ private
+ #################################
+
+ def spreadsheet_params
+ params.permit(:title, :id, :token)
+ end
+end
diff --git a/app/helpers/spreadsheets_helper.rb b/app/helpers/spreadsheets_helper.rb
new file mode 100644
index 0000000..4d8051e
--- /dev/null
+++ b/app/helpers/spreadsheets_helper.rb
@@ -0,0 +1,2 @@
+module SpreadsheetsHelper
+end
diff --git a/app/models/spreadsheet.rb b/app/models/spreadsheet.rb
new file mode 100644
index 0000000..640648b
--- /dev/null
+++ b/app/models/spreadsheet.rb
@@ -0,0 +1,27 @@
+class Spreadsheet
+ include Mongoid::Document
+
+ field :spreadsheet_id, type: String
+ field :spreadsheet_title, type: String
+ field :refresh_token, type: String
+ field :expires_at, type: Time
+ field :access_token, type: String
+
+ validates :access_token, presence: true, uniqueness: true
+
+ def add_tokens(tokens = {})
+ self['access_token'] = tokens.fetch('token')
+ self['refresh_token'] = tokens.fetch('refresh_token')
+ self['expires_at'] = tokens.fetch('expires_at')
+ end
+
+ def add_spreadsheet_credentials(credentials = {})
+ self['spreadsheet_id'] = credentials['id']
+ self['spreadsheet_title'] = credentials['title']
+ end
+
+ def access_token
+ self['access_token']
+ end
+
+end
diff --git a/app/models/user.rb b/app/models/user.rb
index 466e4f0..0c78b8a 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -16,4 +16,12 @@ class User
belongs_to :newsletter, counter_cache: :users_count
+ def self.add_users_from_worksheet(worksheet, column = 1)
+ worksheet.rows.count.times do |i|
+ User.create(email_id: worksheet[i + 1, column],
+ is_subscribed: true,
+ joined_on: Date.today,
+ source: 'Google Spreadsheet')
+ end
+ end
end
diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml
index 87a0687..0f192a5 100644
--- a/app/views/layouts/application.html.haml
+++ b/app/views/layouts/application.html.haml
@@ -11,33 +11,34 @@
%div.navbar-header
.navbar-brand
%h4 LightAir
-
- %ul.nav.navbar-nav
- %li.active
- %a{href: "#{home_index_path}"}
- %h4 Home
- %li
- %a{href: "#{newsletters_path}"}
- %h4 Newsletters
- %li
- %a{href: "#{new_user_path}"}
- %h4 Add New User
- %li
- %a{href: "#{users_path}"}
- %h4 All Users
- %li
- %a{href: "#{new_newsletter_path}"}
- %h4 Add New Newsletter
- %li
- %a{href: "#{sendmailer_path}"}
- %h4 Send Mail
-
+ %div.nav-collapse
+ %ul.nav.navbar-nav
+ %li.active
+ %a{href: "#{home_index_path}"}
+ %h4 Home
+ %li
+ %a{href: "#"}
+ %h4 Newsletters
+ %li
+ %a{href: "#{users_path}"}
+ %h4 Show Users
+ %li.dropdown
+ %a.dropdown-toggle{"data-toggle" => "dropdown"}
+ %h4
+ Add Users
+ %span.caret
+ %ul.dropdown-menu{role: "menu", "aria-labelledby" => "dropdownMenu1" }
+ %li
+ %a{role: "menuitem", tabindex: "-1", href: "#{new_user_path}"}Add Manually
+ %li
+ %a{role: "menuitem", tabindex: "-2", href: "#{spreadsheets_path}"}Google Spreadsheets
%ul.nav.navbar-nav.navbar-right
%li.active
%a{href: "#"}
- Subscriber count :
- 1000
+ %h4
+ Subscriber count :
+ =User.count
%div.container
%div.row
%div.col-sm-9= yield
diff --git a/app/views/spreadsheets/edit.html.haml b/app/views/spreadsheets/edit.html.haml
new file mode 100644
index 0000000..ee1ae52
--- /dev/null
+++ b/app/views/spreadsheets/edit.html.haml
@@ -0,0 +1 @@
+=debug @sp
\ No newline at end of file
diff --git a/app/views/spreadsheets/index.html.haml b/app/views/spreadsheets/index.html.haml
new file mode 100644
index 0000000..cc0691a
--- /dev/null
+++ b/app/views/spreadsheets/index.html.haml
@@ -0,0 +1,36 @@
+= @msg if @msg
+%h4
+ =link_to 'Add New Spreadsheet', '/auth/google/'
+
+%table.table.table-striped
+ %tr.info
+ %td
+ %strong #
+ %td
+ %strong
+ Spreadsheets (
+ =Spreadsheet.count
+ )
+ %td
+ %strong Operations
+ - i = 0
+ - @spreadsheets.each do |ss|
+ %tr
+ %td
+ = i = i + 1
+ %td
+ -if ss['spreadsheet_title']
+ =ss['spreadsheet_title']
+ -else
+ =link_to 'Get Spreadsheet', new_spreadsheet_path(access_token: ss['access_token'])
+ -if @error
+ (
+ =@error
+ )
+ %td
+ =link_to 'Delete', spreadsheet_path(ss), method: :delete
+ -if ss['spreadsheet_title']
+ |
+ =link_to 'Update', spreadsheet_path(ss), method: :patch
+
+
diff --git a/app/views/spreadsheets/new.html.haml b/app/views/spreadsheets/new.html.haml
new file mode 100644
index 0000000..c644423
--- /dev/null
+++ b/app/views/spreadsheets/new.html.haml
@@ -0,0 +1,7 @@
+-if @msg
+ =@msg
+-else
+ -count = @spreadsheets.count
+ -count.times do |i|
+ =link_to @spreadsheets[i]['title'], edit_spreadsheet_path(@spreadsheets[i]['id'], title: @spreadsheets[i]['title'], token: @token) if @spreadsheets[i]['mimeType'].include?('spreadsheet')
+ %br
diff --git a/config/application.rb b/config/application.rb
index d21154e..4fad8ea 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -16,6 +16,7 @@
module Lightair
class Application < Rails::Application
config.assets.precompile += %w(*.png, *.jpg, *.jpeg, *.gif)
+ config.autoload_paths += Dir["#{config.root}/lib/**/"]
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.
diff --git a/config/environments/development.rb b/config/environments/development.rb
index 4155830..4a3a580 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -1,4 +1,6 @@
Rails.application.configure do
+ ENV["GOOGLE_ID"] = '367225507767-119uvbhdadqbft2kn4759rodoiivksn9.apps.googleusercontent.com'
+ ENV["GOOGLE_KEY"] = '1yX7HzuzWi3yD1OqJ21ZgpSS'
# Settings specified here will take precedence over those in config/application.rb.
# In the development environment your application's code is reloaded on
diff --git a/config/environments/production.rb b/config/environments/production.rb
index 56b7477..753405d 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -1,4 +1,6 @@
Rails.application.configure do
+ ENV["GOOGLE_ID"] = '367225507767-119uvbhdadqbft2kn4759rodoiivksn9.apps.googleusercontent.com'
+ ENV["GOOGLE_KEY"] = '1yX7HzuzWi3yD1OqJ21ZgpSS'
# Settings specified here will take precedence over those in config/application.rb.
# Code is not reloaded between requests.
diff --git a/config/environments/test.rb b/config/environments/test.rb
index 6278aaa..6622fbc 100644
--- a/config/environments/test.rb
+++ b/config/environments/test.rb
@@ -1,4 +1,6 @@
Rails.application.configure do
+ ENV['GOOGLE_ID'] = '367225507767-119uvbhdadqbft2kn4759rodoiivksn9.apps.googleusercontent.com'
+ ENV['GOOGLE_KEY'] = '1yX7HzuzWi3yD1OqJ21ZgpSS'
# Settings specified here will take precedence over those in config/application.rb.
# The test environment is used exclusively to run your application's
diff --git a/config/initializers/google_oauth.rb b/config/initializers/google_oauth.rb
new file mode 100644
index 0000000..4cde5db
--- /dev/null
+++ b/config/initializers/google_oauth.rb
@@ -0,0 +1,13 @@
+Rails.application.config.middleware.use OmniAuth::Builder do
+ provider :google_oauth2, ENV['GOOGLE_ID'], ENV['GOOGLE_KEY'],
+ {
+ name: 'google',
+ scope: 'userinfo.profile,userinfo.email,drive,https://spreadsheets.google.com/feeds',
+ prompt: 'consent',
+ access_type: 'offline'
+ }
+end
+
+OmniAuth.config.on_failure = Proc.new { |env|
+ OmniAuth::FailureEndpoint.new(env).redirect_to_failure
+}
\ No newline at end of file
diff --git a/config/mongoid.yml b/config/mongoid.yml
index 6db69b7..723c683 100644
--- a/config/mongoid.yml
+++ b/config/mongoid.yml
@@ -44,7 +44,7 @@ development:
# Raise an error when performing a #find and the document is not found.
# (default: true)
- # raise_not_found_error: true
+ raise_not_found_error: false
# Raise an error when defining a scope with the same name as an
# existing method. (default: false)
diff --git a/config/routes.rb b/config/routes.rb
index 2ad37da..e43d9ea 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -6,7 +6,11 @@
resources :newsletters
resources :home
resources :user_mailer
- root :to => "home#index"
+ get '/auth/:provider/callback', to: 'spreadsheets#new'
+ get '/auth/failure', to: 'spreadsheets#failure'
+ resources :users, :newsletters, :home, :spreadsheets
+
+ root :to => 'home#index'
# The priority is based upon order of creation: first created -> highest priority.
# See how all your routes lay out with "rake routes".
diff --git a/lib/google.rb b/lib/google.rb
new file mode 100644
index 0000000..9b68401
--- /dev/null
+++ b/lib/google.rb
@@ -0,0 +1,44 @@
+module Google
+ module Spreadsheets
+ def list(spreadsheet)
+ if Time.now > spreadsheet['expires_at']
+ spreadsheet = refresh_token spreadsheet
+ end
+
+ client = Google::APIClient.new
+ client.authorization.access_token = spreadsheet.access_token
+ drive = client.discovered_api('drive', 'v2')
+
+ wks = client.execute(
+ api_method: drive.files.list,
+ parameters: {},
+ headers: {'Content-Type' => 'application/json'}
+ )
+ (JSON.parse(wks.data.to_json))['items']
+ end
+
+ def worksheets(spreadsheet, index = 0)
+ if DateTime.now.utc > spreadsheet['expires_at']
+ spreadsheet = refresh_token spreadsheet
+ end
+
+ session = GoogleDrive.login_with_oauth(spreadsheet['access_token'])
+ session.spreadsheet_by_key(spreadsheet['spreadsheet_id']).worksheets[index]
+ end
+
+ def refresh_token(spreadsheet)
+ client = Google::APIClient.new
+ client.authorization.client_id = ENV['GOOGLE_ID']
+ client.authorization.client_secret = ENV['GOOGLE_KEY']
+ client.authorization.grant_type = 'refresh_token'
+ client.authorization.refresh_token = spreadsheet['refresh_token']
+ re = client.authorization.fetch_access_token!
+
+ spreadsheet['access_token'] = re['access_token']
+ spreadsheet['expires_at'] = (Time.now + re['expires_in'].second)
+ spreadsheet.save
+
+ spreadsheet
+ end
+ end
+end
\ No newline at end of file
diff --git a/spec/controllers/google_auth_response.json b/spec/controllers/google_auth_response.json
new file mode 100644
index 0000000..8473da2
--- /dev/null
+++ b/spec/controllers/google_auth_response.json
@@ -0,0 +1,12 @@
+HTTP/1.1 302 Found
+Content-Length: 537
+Location: https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=367225507767-119uvbhdadqbft2kn4759rodoiivksn9.apps.googleusercontent.com&prompt=consent&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fauth%2Fgoogle%2Fcallback&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive+https%3A%2F%2Fspreadsheets.google.com%2Ffeeds&state=df37c7da59cf8f7a4899cd5a67a612e9d18946664bc98d4f
+Cache-Control: no-cache
+X-Request-Id: b511bdb4-c778-4f1a-b5d7-849f1402b1a3
+X-Runtime: 0.003534
+Server: WEBrick/1.3.1 (Ruby/2.1.2/2014-05-08)
+Date: Thu, 10 Jul 2014 10:39:34 GMT
+Connection: Keep-Alive
+Set-Cookie: _lightair_session=Uy9SNDQ1LzZFandLd1g4S2VVTEptR3ZRa0RBcnNFWGtZbG1VZmNKMzc5Z1F6cDFuaHBCa2lScHcxL1FBQ044RTJZMU9iUWF2UitaVjQxcGVzeUZwS0Q3NkdXdzg2SHB6S0IrcU1sR2ExelhRRVZuWFF6MFpraktBMTNCcTM4UVZ5a01ReitYSzNYT2M0dXR1NWViUjhvVGVxUnYwRUtLREtoQUVjMkJPMW1PZG14MUVUQlN0Q2hkRUh5blVLMDZRLS1OZ3JGQXFWQmJKMGNCWGszQWoyMkNRPT0%3D--8345e9f7215c9ef812febd3588c505cfaef628c1; path=/; HttpOnly
+
+Redirecting to https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=367225507767-119uvbhdadqbft2kn4759rodoiivksn9.apps.googleusercontent.com&prompt=consent&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fauth%2Fgoogle%2Fcallback&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive+https%3A%2F%2Fspreadsheets.google.com%2Ffeeds&state=df37c7da59cf8f7a4899cd5a67a612e9d18946664bc98d4f...
diff --git a/spec/controllers/host_response.json b/spec/controllers/host_response.json
new file mode 100644
index 0000000..f76a7f1
--- /dev/null
+++ b/spec/controllers/host_response.json
@@ -0,0 +1,121 @@
+HTTP/1.1 200 OK
+X-Frame-Options: SAMEORIGIN
+X-Xss-Protection: 1; mode=block
+X-Content-Type-Options: nosniff
+Content-Type: text/html; charset=utf-8
+Etag: "b29936011c26adc86d08ede08dc03e1e"
+Cache-Control: max-age=0, private, must-revalidate
+X-Request-Id: cdc9c224-e586-409f-adfb-8367d40f8a41
+X-Runtime: 0.015686
+Server: WEBrick/1.3.1 (Ruby/2.1.2/2014-05-08)
+Date: Thu, 10 Jul 2014 10:21:40 GMT
+Content-Length: 4406
+Connection: Keep-Alive
+Set-Cookie: request_method=GET; path=/
+Set-Cookie: _lightair_session=aUVDRko5L1dYOFJqN2NvNmg2NkI3b2JwN01GRXduamtJdFhmM3hoU0dkR2U3WkpLS2ZUUFlqRWppOGg1NHBPYllDaVpDM2w5d0xxVlBuRFJjaHVFa0FaRVdXOUdQWDlFSGJoaUZTYkdtQnl0N3F3OVdQd1c0YU5rZjNQZ09JcTFmck1HenpMbnhxaHFRT091SnZkdUZRPT0tLTVuczRGVTZyNHdwWXVaZmliU0VxZ0E9PQ%3D%3D--f5a6ab0bbbd0ec42bc63ca27924361e391dd36b3; path=/; HttpOnly
+
+
+
+
+ Lightair
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Insight of LightAir
+ LightAir is a mass Mailer designed to send newsletters designed in html to be sent to a few hundered to a tens of thousands of subscribers. It has an inbuilt HTML editor to create a newsletter online.
+
+
+
+
+
+
diff --git a/spec/controllers/spreadsheets_controller_spec.rb b/spec/controllers/spreadsheets_controller_spec.rb
new file mode 100644
index 0000000..c0e6689
--- /dev/null
+++ b/spec/controllers/spreadsheets_controller_spec.rb
@@ -0,0 +1,131 @@
+require 'rails_helper'
+require 'webmock/rspec'
+require 'vcr'
+
+RSpec.describe SpreadsheetsController, :type => :controller do
+
+ context 'GET User Permission' do
+ context 'User accepts' do
+ it 'redirects to new ' do
+ VCR.use_cassette 'controllers/api-permissions' do
+ data = {
+ name: 'google',
+ scope: 'userinfo.profile,userinfo.email,drive,https://spreadsheets.google.com/feeds',
+ prompt: 'consent',
+ access_type: 'offline',
+ redirect_uri: 'http://localhost:8080/auth/google/callback'
+ }
+ RestClient.post 'https://accounts.google.com/o/oauth2/auth', data
+ end
+
+ end
+ end
+ end
+
+ context 'GET Index' do
+ it 'it renders the index template' do
+ get :index
+ expect(response).to render_template(:index)
+ end
+
+ let(:sheet) { FactoryGirl.create(:spreadsheet)}
+ it 'should return all the spreadhseets' do
+ sheet
+ get :index
+ expect(assigns(:spreadsheets)).equal?(Spreadsheet.all.to_a.count)
+ end
+ end
+
+ context 'GET New' do
+ it 'creates new spreadsheet when no access_token given' do
+ VCR.use_cassette 'controllers/api-new_tokens' do
+ request.env['omniauth.auth'] = {
+ 'credentials' => {
+ 'token' => 'ya29.QgC-5kYKwAzcdh8AAABnuwXicpaXRvO_YSlv4V9J556542KazsYWEia63TlRyA',
+ 'refresh_token' => '1/DlAqfSUji69F3YuVAHSoWxWE0grR8aYSkb2OocVCNBw',
+ 'expires_at' => Time.now,
+ 'expires' => true
+ }
+ }
+
+ get :new
+ expect(response).to render_template(:new)
+ end
+ end
+
+ let(:sheet) { FactoryGirl.create(:spreadsheet)}
+ it 'does not creates new spreadsheet when access_token is given' do
+ VCR.use_cassette 'controllers/api-response' do
+ get(:new, access_token: sheet.access_token)
+ expect(response).to render_template(:new)
+ end
+ end
+ end
+
+ context 'Get Edit' do
+ let(:sheet) { FactoryGirl.create(:spreadsheet)}
+ it 'renders index page after executing' do
+ get :edit, title: 'namecollection', id: sheet['spreadsheet_id'], token: sheet['access_token']
+
+ expect(response).to render_template(:index)
+ end
+
+ it 'adds spreadsheet\'s credentials' do
+ get :edit, title: 'namecollection', id: sheet['spreadsheet_id'], token: sheet['access_token']
+ expect(assigns(:error)).to be(nil)
+ end
+ end
+
+ context 'Post Update' do
+ let(:sheet) { FactoryGirl.create(:spreadsheet)}
+ it 'updates the spreadsheet' do
+ VCR.use_cassette 'controllers/api-update-with-data', record: :new_episodes do
+ post :update, id: sheet
+ expect(response).to redirect_to users_path
+ end
+ end
+ end
+
+ context 'Post Destroy' do
+ let(:sheet) { FactoryGirl.create(:spreadsheet)}
+ it 'deletes spreadsheets from database' do
+ sheet
+ count1 = Spreadsheet.all.count
+ post :destroy, id: sheet
+ count2 = Spreadsheet.all.count
+
+ expect(count1).to be(count2 + 1)
+ end
+
+ it 'redirects to spreadsheets index page' do
+ post :destroy, id: sheet
+ expect(response).to redirect_to spreadsheets_path
+ end
+ end
+
+ context 'Get Failure' do
+ it 'renders index page when user does not accepts permissions' do
+ get :failure, message: 'access_denied'
+
+ expect(response).to render_template(:index)
+ end
+
+ it 'to give a failure message when it fails' do
+ get :failure, message: 'access_denied'
+ expect(assigns(:msg)).not_to be nil
+ end
+
+ it 'not to give a failure message when it does not fails' do
+ get :failure, message: 'access_granted'
+ expect(assigns(:msg)).to be nil
+ end
+
+ let(:sheet) { FactoryGirl.create(:spreadsheet)}
+ it 'gets all the spreadsheets' do
+ sheet
+ get :failure, message: 'access_denied'
+
+ expect(assigns(:spreadsheets).count).equal?(Spreadsheet.all.count)
+ end
+ end
+end
diff --git a/spec/factories/spreadsheets.rb b/spec/factories/spreadsheets.rb
new file mode 100644
index 0000000..63c310f
--- /dev/null
+++ b/spec/factories/spreadsheets.rb
@@ -0,0 +1,11 @@
+# Read about factories at https://github.com/thoughtbot/factory_girl
+
+FactoryGirl.define do
+ factory :spreadsheet do |s|
+ s.spreadsheet_id {'1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE'}
+ s.spreadsheet_title {'namecollection'}
+ s.access_token {'ya29.QgC-5kYKwAzcdh8AAABnuwXicpaXRvO_YSlv4V9J556542KazsYWEia63TlRyA'}
+ s.refresh_token {'1/DlAqfSUji69F3YuVAHSoWxWE0grR8aYSkb2OocVCNBw'}
+ s.expires_at {Time.now - 3600}
+ end
+end
diff --git a/spec/helpers/spreadsheets_helper_spec.rb b/spec/helpers/spreadsheets_helper_spec.rb
new file mode 100644
index 0000000..35864e6
--- /dev/null
+++ b/spec/helpers/spreadsheets_helper_spec.rb
@@ -0,0 +1,15 @@
+require 'rails_helper'
+
+# Specs in this file have access to a helper object that includes
+# the SpreadsheetsHelper. For example:
+#
+# describe SpreadsheetsHelper do
+# describe "string concat" do
+# it "concats two strings with spaces" do
+# expect(helper.concat_strings("this","that")).to eq("this that")
+# end
+# end
+# end
+RSpec.describe SpreadsheetsHelper, :type => :helper do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
diff --git a/spec/models/spreadsheet_spec.rb b/spec/models/spreadsheet_spec.rb
new file mode 100644
index 0000000..a4927c8
--- /dev/null
+++ b/spec/models/spreadsheet_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe Spreadsheet, :type => :model do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index b81d6eb..4720d64 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,12 +1,12 @@
+require 'database_cleaner'
require 'simplecov'
SimpleCov.start
-
# This file was generated by the `rails generate rspec:install` command. Conventionally, all
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
# The generated `.rspec` file contains `--require spec_helper` which will cause this
# file to always be loaded, without a need to explicitly require it in any files.
#
-# Given that it is always loaded, you are encouraged to keep this file as
+# Given th at it is always loaded, you are encouraged to keep this file as
# light-weight as possible. Requiring heavyweight dependencies from this file
# will add to the boot time of your test suite on EVERY test run, even for an
# individual file that may not need all of that loaded. Instead, make a
@@ -17,7 +17,21 @@
# users commonly want.
#
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
+
+
RSpec.configure do |config|
+
+ config.before(:suite) do
+ DatabaseCleaner.clean_with(:truncation)
+ end
+
+ config.before(:each) do
+ DatabaseCleaner.start
+ end
+
+ config.after(:each) do
+ DatabaseCleaner.clean
+ end
# The settings below are suggested to provide a good initial experience
# with RSpec, but feel free to customize to your heart's content.
=begin
diff --git a/spec/support/vcr_setup.rb b/spec/support/vcr_setup.rb
new file mode 100644
index 0000000..7e18602
--- /dev/null
+++ b/spec/support/vcr_setup.rb
@@ -0,0 +1,7 @@
+# spec/support/vcr_setup.rb
+VCR.configure do |c|
+ #the directory where your cassettes will be saved
+ c.cassette_library_dir = 'spec/vcr'
+ # your HTTP request service. You can also use fakeweb, webmock, and more
+ c.hook_into :webmock
+end
\ No newline at end of file
diff --git a/spec/vcr/controllers/api-new_tokens.yml b/spec/vcr/controllers/api-new_tokens.yml
new file mode 100644
index 0000000..24a8893
--- /dev/null
+++ b/spec/vcr/controllers/api-new_tokens.yml
@@ -0,0 +1,518 @@
+---
+http_interactions:
+- request:
+ method: post
+ uri: https://accounts.google.com/o/oauth2/token
+ body:
+ encoding: ASCII-8BIT
+ string: grant_type=refresh_token&refresh_token=1%2FDlAqfSUji69F3YuVAHSoWxWE0grR8aYSkb2OocVCNBw&client_id=367225507767-119uvbhdadqbft2kn4759rodoiivksn9.apps.googleusercontent.com&client_secret=1yX7HzuzWi3yD1OqJ21ZgpSS
+ headers:
+ Cache-Control:
+ - no-store
+ Content-Type:
+ - application/x-www-form-urlencoded
+ Accept-Encoding:
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+ Accept:
+ - "*/*"
+ User-Agent:
+ - Ruby
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Content-Type:
+ - application/json; charset=utf-8
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ Pragma:
+ - no-cache
+ Expires:
+ - Fri, 01 Jan 1990 00:00:00 GMT
+ Date:
+ - Mon, 14 Jul 2014 10:26:54 GMT
+ Content-Disposition:
+ - attachment; filename="json.txt"; filename*=UTF-8''json.txt
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-Xss-Protection:
+ - 1; mode=block
+ Server:
+ - GSE
+ Alternate-Protocol:
+ - 443:quic
+ Transfer-Encoding:
+ - chunked
+ body:
+ encoding: UTF-8
+ string: |-
+ {
+ "access_token" : "ya29.QgBKOx6dCMp3zh8AAAB9kzvJu1nqcmQE2EzA7LzVh-FMvHcrjSFT-4G4MSfmpg",
+ "token_type" : "Bearer",
+ "expires_in" : 3600,
+ "id_token" : "eyJhbGciOiJSUzI1NiIsImtpZCI6IjBjODk2NjU5OWE3Zjc0ZTU3Yjc2MGRkZWE2MGUwZGMxMjRmMjE1YTMifQ.eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwiaWQiOiIxMTY4MTc0NzkyNTg0MjY4ODk3MDkiLCJzdWIiOiIxMTY4MTc0NzkyNTg0MjY4ODk3MDkiLCJhenAiOiIzNjcyMjU1MDc3NjctMTE5dXZiaGRhZHFiZnQya240NzU5cm9kb2lpdmtzbjkuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJlbWFpbCI6InBhbmthamJhc25hbDE3QGdtYWlsLmNvbSIsImF0X2hhc2giOiJLdHpJZktjdHJlNk9VTkVHUW9DblFnIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImF1ZCI6IjM2NzIyNTUwNzc2Ny0xMTl1dmJoZGFkcWJmdDJrbjQ3NTlyb2RvaWl2a3NuOS5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsInRva2VuX2hhc2giOiJLdHpJZktjdHJlNk9VTkVHUW9DblFnIiwidmVyaWZpZWRfZW1haWwiOnRydWUsImNpZCI6IjM2NzIyNTUwNzc2Ny0xMTl1dmJoZGFkcWJmdDJrbjQ3NTlyb2RvaWl2a3NuOS5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImlhdCI6MTQwNTMzMzMxNCwiZXhwIjoxNDA1MzM3MjE0fQ.wFDAFiBWbKy-vOgJXspfzKiTOPw05tufou7PAs14WCmfL7ejx7qTteYn4u8519y3GBWKdiUhs9tcLDu6zhq3R94rh0ACVYEgyR5S2RR5VEfFzdVdmGBh2dlQyiYcv43M8E7LZToRtWDvjkjaATf-znUaxo4_sJo143uJvspItgU"
+ }
+ http_version:
+ recorded_at: Mon, 14 Jul 2014 10:26:54 GMT
+- request:
+ method: get
+ uri: https://www.googleapis.com/discovery/v1/apis/drive/v2/rest
+ body:
+ encoding: UTF-8
+ string: ''
+ headers:
+ User-Agent:
+ - |-
+ google-api-ruby-client/0.7.1 Linux/3.13.0-30-generic
+ (gzip)
+ Accept-Encoding:
+ - gzip
+ Content-Type:
+ - ''
+ Accept:
+ - "*/*"
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Expires:
+ - Mon, 14 Jul 2014 10:31:55 GMT
+ Date:
+ - Mon, 14 Jul 2014 10:26:55 GMT
+ Cache-Control:
+ - public, max-age=300, must-revalidate, no-transform
+ Etag:
+ - '"FrPV2U6xXFUq8eRv_PO3IoAURkc/IERJ5Hcz59m5dfn8v5XjYGA7sqU"'
+ Content-Type:
+ - application/json; charset=UTF-8
+ Content-Encoding:
+ - gzip
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-Xss-Protection:
+ - 1; mode=block
+ Content-Length:
+ - '13967'
+ Server:
+ - GSE
+ Alternate-Protocol:
+ - 443:quic
+ body:
+ encoding: ASCII-8BIT
+ string: !binary |-
+ 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
+ mfQC/vflxf8CzsreGV/IAQA=
+ http_version:
+ recorded_at: Mon, 14 Jul 2014 10:26:55 GMT
+- request:
+ method: get
+ uri: https://www.googleapis.com/drive/v2/files
+ body:
+ encoding: UTF-8
+ string: ''
+ headers:
+ User-Agent:
+ - |-
+ google-api-ruby-client/0.7.1 Linux/3.13.0-30-generic
+ (gzip)
+ Content-Type:
+ - application/json
+ Accept-Encoding:
+ - gzip
+ Authorization:
+ - Bearer ya29.QgBKOx6dCMp3zh8AAAB9kzvJu1nqcmQE2EzA7LzVh-FMvHcrjSFT-4G4MSfmpg
+ Cache-Control:
+ - no-store
+ Accept:
+ - "*/*"
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Expires:
+ - Mon, 14 Jul 2014 10:26:56 GMT
+ Date:
+ - Mon, 14 Jul 2014 10:26:56 GMT
+ Cache-Control:
+ - private, max-age=0, must-revalidate, no-transform
+ Etag:
+ - '"gROZn7NlhxVF8deqr1tB7t1xA6k/iJA_uW5OZnhfqIiChoSn5PQczwE"'
+ Content-Type:
+ - application/json; charset=UTF-8
+ Content-Encoding:
+ - gzip
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-Xss-Protection:
+ - 1; mode=block
+ Server:
+ - GSE
+ Alternate-Protocol:
+ - 443:quic
+ Transfer-Encoding:
+ - chunked
+ body:
+ encoding: ASCII-8BIT
+ string: !binary |-
+ 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
+ http_version:
+ recorded_at: Mon, 14 Jul 2014 10:26:56 GMT
+recorded_with: VCR 2.9.2
diff --git a/spec/vcr/controllers/api-permissions.yml b/spec/vcr/controllers/api-permissions.yml
new file mode 100644
index 0000000..b25c89c
--- /dev/null
+++ b/spec/vcr/controllers/api-permissions.yml
@@ -0,0 +1,122 @@
+---
+http_interactions:
+- request:
+ method: post
+ uri: https://accounts.google.com/o/oauth2/auth
+ body:
+ encoding: US-ASCII
+ string: name=google&scope=userinfo.profile%2Cuserinfo.email%2Cdrive%2Chttps%3A%2F%2Fspreadsheets.google.com%2Ffeeds&prompt=consent&access_type=offline&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fauth%2Fgoogle%2Fcallback
+ headers:
+ Accept:
+ - "*/*; q=0.5, application/xml"
+ Accept-Encoding:
+ - gzip, deflate
+ Content-Length:
+ - '212'
+ Content-Type:
+ - application/x-www-form-urlencoded
+ User-Agent:
+ - Ruby
+ response:
+ status:
+ code: 400
+ message: Bad Request
+ headers:
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ Pragma:
+ - no-cache
+ Expires:
+ - Fri, 01 Jan 1990 00:00:00 GMT
+ Date:
+ - Mon, 14 Jul 2014 13:03:28 GMT
+ Content-Type:
+ - text/html; charset=utf-8
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-Xss-Protection:
+ - 1; mode=block
+ Server:
+ - GSE
+ Alternate-Protocol:
+ - 443:quic
+ Transfer-Encoding:
+ - chunked
+ body:
+ encoding: ASCII-8BIT
+ string: !binary |-
+ PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz1lbj48bWV0YSBjaGFyc2V0PXV0
+ Zi04PjxtZXRhIG5hbWU9dmlld3BvcnQgY29udGVudD0iaW5pdGlhbC1zY2Fs
+ ZT0xLCBtaW5pbXVtLXNjYWxlPTEsIHdpZHRoPWRldmljZS13aWR0aCI+PHRp
+ dGxlPkVycm9yIDQwMCAoT0F1dGgyIEVycm9yKSEhMTwvdGl0bGU+PHN0eWxl
+ Pip7bWFyZ2luOjA7cGFkZGluZzowfWh0bWwsY29kZXtmb250OjE1cHgvMjJw
+ eCBhcmlhbCxzYW5zLXNlcmlmfWh0bWx7YmFja2dyb3VuZDojZmZmO2NvbG9y
+ OiMyMjI7cGFkZGluZzoxNXB4fWJvZHl7bWFyZ2luOjclIGF1dG8gMDttYXgt
+ d2lkdGg6MzkwcHg7bWluLWhlaWdodDoxODBweDtwYWRkaW5nOjMwcHggMCAx
+ NXB4fSogPiBib2R5e2JhY2tncm91bmQ6dXJsKC8vd3d3Lmdvb2dsZS5jb20v
+ aW1hZ2VzL2Vycm9ycy9yb2JvdC5wbmcpIDEwMCUgNXB4IG5vLXJlcGVhdDtw
+ YWRkaW5nLXJpZ2h0OjIwNXB4fXB7bWFyZ2luOjExcHggMCAyMnB4O292ZXJm
+ bG93OmhpZGRlbn1pbnN7Y29sb3I6Izc3Nzt0ZXh0LWRlY29yYXRpb246bm9u
+ ZX1hIGltZ3tib3JkZXI6MH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRo
+ Ojc3MnB4KXtib2R5e2JhY2tncm91bmQ6bm9uZTttYXJnaW4tdG9wOjA7bWF4
+ LXdpZHRoOm5vbmU7cGFkZGluZy1yaWdodDowfX0jbG9nb3tiYWNrZ3JvdW5k
+ OnVybCgvL3d3dy5nb29nbGUuY29tL2ltYWdlcy9lcnJvcnMvbG9nb19zbV8y
+ LnBuZykgbm8tcmVwZWF0fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi1y
+ ZXNvbHV0aW9uOjE5MmRwaSl7I2xvZ297YmFja2dyb3VuZDp1cmwoLy93d3cu
+ Z29vZ2xlLmNvbS9pbWFnZXMvZXJyb3JzL2xvZ29fc21fMl9oci5wbmcpIG5v
+ LXJlcGVhdCAwJSAwJS8xMDAlIDEwMCU7LW1vei1ib3JkZXItaW1hZ2U6dXJs
+ KC8vd3d3Lmdvb2dsZS5jb20vaW1hZ2VzL2Vycm9ycy9sb2dvX3NtXzJfaHIu
+ cG5nKSAwfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1k
+ ZXZpY2UtcGl4ZWwtcmF0aW86Mil7I2xvZ297YmFja2dyb3VuZDp1cmwoLy93
+ d3cuZ29vZ2xlLmNvbS9pbWFnZXMvZXJyb3JzL2xvZ29fc21fMl9oci5wbmcp
+ IG5vLXJlcGVhdDstd2Via2l0LWJhY2tncm91bmQtc2l6ZToxMDAlIDEwMCV9
+ fSNsb2dve2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDo1NXB4O3dpZHRo
+ OjE1MHB4fTwvc3R5bGU+PGRpdiBpZD0iYWYtZXJyb3ItY29udGFpbmVyIj48
+ YSBocmVmPS8vd3d3Lmdvb2dsZS5jb20vPjxzcGFuIGlkPWxvZ28gYXJpYS1s
+ YWJlbD1Hb29nbGU+PC9zcGFuPjwvYT48cD48Yj40MDAuPC9iPiA8aW5zPlRo
+ YXTigJlzIGFuIGVycm9yLjwvaW5zPjxwPjxzY3JpcHQgdHlwZT0idGV4dC9q
+ YXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vc3NsLmdzdGF0aWMuY29tL2FjY291
+ bnRzL28vMTA1OTY0MTI3MS1jb21tb25fbGliLmpzIj48L3NjcmlwdD4KPHN0
+ eWxlPgogICAgI3JlcXVlc3RfaW5mb19oZWFkZXIgewogICAgICBjdXJzb3I6
+ IGRlZmF1bHQ7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIHBhZGRpbmct
+ bGVmdDogMTRweDsKICAgICAgcGFkZGluZy10b3A6IDEwcHg7CiAgICB9Cgog
+ ICAgI3JlcXVlc3RfaW5mb19pdGVtcyB7CiAgICAgIGxpbmUtaGVpZ2h0OiAx
+ OHB4OwogICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgICAgIG1hcmdp
+ bi10b3A6IDhweDsKICAgICAgcGFkZGluZy1sZWZ0OiAxNHB4OwogICAgfQoK
+ ICAgIC5wYXJhbV9lbnRyeSB7CiAgICAgIG1hcmdpbi10b3A6IDJweDsKICAg
+ IH0KCiAgICAuZ29vZy16aXBweS1leHBhbmRlZCwKICAgIC5nb29nLXppcHB5
+ LWNvbGxhcHNlZCB7CiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICAgIHBh
+ ZGRpbmc6IDJweCAwIDFweCAxNXB4OwogICAgICBwb3NpdGlvbjogcmVsYXRp
+ dmU7CiAgICB9CgogICAgLmdvb2ctemlwcHktZXhwYW5kZWQ6YmVmb3JlIHsK
+ ICAgICAgY29udGVudDogdXJsKGh0dHBzOi8vc3NsLmdzdGF0aWMuY29tL3Vp
+ L3YxL3ppcHB5L2Fycm93X2Rvd24ucG5nKTsKICAgICAgbGVmdDogMXB4Owog
+ ICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogN3B4OwogICAg
+ fQoKICAgIC5nb29nLXppcHB5LWNvbGxhcHNlZDpiZWZvcmUgewogICAgICBj
+ b250ZW50OiB1cmwoaHR0cHM6Ly9zc2wuZ3N0YXRpYy5jb20vdWkvdjEvemlw
+ cHkvYXJyb3dfcmlnaHQucG5nKTsKICAgICAgbGVmdDogM3B4OwogICAgICBw
+ b3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogNnB4OwogICAgfQogIDwv
+ c3R5bGU+PHAgaWQ9ImVycm9yQ29kZSI+PGI+RXJyb3I6IGludmFsaWRfcmVx
+ dWVzdDwvYj48L3A+PHAgaWQ9ImVycm9yRGVzY3JpcHRpb24iPlJlcXVpcmVk
+ IHBhcmFtZXRlciBpcyBtaXNzaW5nOiByZXNwb25zZV90eXBlPC9wPjxwIGlk
+ PSJlcnJvclVyaSI+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly9j
+ b2RlLmdvb2dsZS5jb20vYXBpcy9hY2NvdW50cy9kb2NzL09BdXRoMi5odG1s
+ Ij5MZWFybiBtb3JlPC9hPjwvcD48ZGl2IGlkPSJyZXF1ZXN0X2luZm9faGVh
+ ZGVyIj5SZXF1ZXN0IERldGFpbHM8dWwgaWQ9InJlcXVlc3RfaW5mb19pdGVt
+ cyI+PGxpIGNsYXNzPSJwYXJhbV9lbnRyeSIgaWQ9InBhcmFtX2VudHJ5XzAi
+ PnNjb3BlPXVzZXJpbmZvLnByb2ZpbGUsdXNlcmluZm8uZW1haWwsZHJpdmUs
+ aHR0cHM6Ly9zcHJlYWRzaGVldHMuZ29vZ2xlLmNvbS9mZWVkczwvbGk+PGxp
+ IGNsYXNzPSJwYXJhbV9lbnRyeSIgaWQ9InBhcmFtX2VudHJ5XzEiPnJlZGly
+ ZWN0X3VyaT1odHRwOi8vbG9jYWxob3N0OjgwODAvYXV0aC9nb29nbGUvY2Fs
+ bGJhY2s8L2xpPjxsaSBjbGFzcz0icGFyYW1fZW50cnkiIGlkPSJwYXJhbV9l
+ bnRyeV8yIj5hY2Nlc3NfdHlwZT1vZmZsaW5lPC9saT48bGkgY2xhc3M9InBh
+ cmFtX2VudHJ5IiBpZD0icGFyYW1fZW50cnlfMyI+bmFtZT1nb29nbGU8L2xp
+ PjxsaSBjbGFzcz0icGFyYW1fZW50cnkiIGlkPSJwYXJhbV9lbnRyeV80Ij5w
+ cm9tcHQ9Y29uc2VudDwvbGk+PC91bD48L2Rpdj48c2NyaXB0IHR5cGU9InRl
+ eHQvamF2YXNjcmlwdCI+bHNvLmRvWmlwcHkoInJlcXVlc3RfaW5mb19oZWFk
+ ZXIiLCAicmVxdWVzdF9pbmZvX2l0ZW1zIik7PC9zY3JpcHQ+PHA+IDxpbnM+
+ VGhhdOKAmXMgYWxsIHdlIGtub3cuPC9pbnM+PC9kaXY+
+ http_version:
+ recorded_at: Mon, 14 Jul 2014 13:03:29 GMT
+recorded_with: VCR 2.9.2
diff --git a/spec/vcr/controllers/api-response.yml b/spec/vcr/controllers/api-response.yml
new file mode 100644
index 0000000..92ea4d9
--- /dev/null
+++ b/spec/vcr/controllers/api-response.yml
@@ -0,0 +1,518 @@
+---
+http_interactions:
+- request:
+ method: post
+ uri: https://accounts.google.com/o/oauth2/token
+ body:
+ encoding: ASCII-8BIT
+ string: grant_type=refresh_token&refresh_token=1%2FDlAqfSUji69F3YuVAHSoWxWE0grR8aYSkb2OocVCNBw&client_id=367225507767-119uvbhdadqbft2kn4759rodoiivksn9.apps.googleusercontent.com&client_secret=1yX7HzuzWi3yD1OqJ21ZgpSS
+ headers:
+ Cache-Control:
+ - no-store
+ Content-Type:
+ - application/x-www-form-urlencoded
+ Accept-Encoding:
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+ Accept:
+ - "*/*"
+ User-Agent:
+ - Ruby
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Content-Type:
+ - application/json; charset=utf-8
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ Pragma:
+ - no-cache
+ Expires:
+ - Fri, 01 Jan 1990 00:00:00 GMT
+ Date:
+ - Mon, 14 Jul 2014 09:43:47 GMT
+ Content-Disposition:
+ - attachment; filename="json.txt"; filename*=UTF-8''json.txt
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-Xss-Protection:
+ - 1; mode=block
+ Server:
+ - GSE
+ Alternate-Protocol:
+ - 443:quic
+ Transfer-Encoding:
+ - chunked
+ body:
+ encoding: UTF-8
+ string: |-
+ {
+ "access_token" : "ya29.QgCA1zb2xkPTVh8AAADuNe6pjiKAKmnEUw6u56ufzLLFQBh94PiC-LYd3bvUxA",
+ "token_type" : "Bearer",
+ "expires_in" : 3600,
+ "id_token" : "eyJhbGciOiJSUzI1NiIsImtpZCI6IjBjODk2NjU5OWE3Zjc0ZTU3Yjc2MGRkZWE2MGUwZGMxMjRmMjE1YTMifQ.eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwiaWQiOiIxMTY4MTc0NzkyNTg0MjY4ODk3MDkiLCJzdWIiOiIxMTY4MTc0NzkyNTg0MjY4ODk3MDkiLCJhenAiOiIzNjcyMjU1MDc3NjctMTE5dXZiaGRhZHFiZnQya240NzU5cm9kb2lpdmtzbjkuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJlbWFpbCI6InBhbmthamJhc25hbDE3QGdtYWlsLmNvbSIsImF0X2hhc2giOiI2cnAxRzVvRnZMbE1id1E1WHR2QmdBIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImF1ZCI6IjM2NzIyNTUwNzc2Ny0xMTl1dmJoZGFkcWJmdDJrbjQ3NTlyb2RvaWl2a3NuOS5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsInRva2VuX2hhc2giOiI2cnAxRzVvRnZMbE1id1E1WHR2QmdBIiwidmVyaWZpZWRfZW1haWwiOnRydWUsImNpZCI6IjM2NzIyNTUwNzc2Ny0xMTl1dmJoZGFkcWJmdDJrbjQ3NTlyb2RvaWl2a3NuOS5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImlhdCI6MTQwNTMzMDcyNywiZXhwIjoxNDA1MzM0NjI3fQ.sBQTuWmb6AL_6FkQQPTrB-GKxH7Aa8u6aQHWG1wsDVsrNRUeeNv3ZwwMNqbeUxG28fI7a1o3w5cPwFSlc1Y_N90yN7x_NZLPAFlSOdShXm37fNcK4bP9xzhPVWYPMx2Gukb9Ni2uYPa7DmSqFHj4qDO6kbHhNtCqhecDWKb6deI"
+ }
+ http_version:
+ recorded_at: Mon, 14 Jul 2014 09:43:47 GMT
+- request:
+ method: get
+ uri: https://www.googleapis.com/discovery/v1/apis/drive/v2/rest
+ body:
+ encoding: UTF-8
+ string: ''
+ headers:
+ User-Agent:
+ - |-
+ google-api-ruby-client/0.7.1 Linux/3.13.0-30-generic
+ (gzip)
+ Accept-Encoding:
+ - gzip
+ Content-Type:
+ - ''
+ Accept:
+ - "*/*"
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Expires:
+ - Mon, 14 Jul 2014 09:48:48 GMT
+ Date:
+ - Mon, 14 Jul 2014 09:43:48 GMT
+ Cache-Control:
+ - public, max-age=300, must-revalidate, no-transform
+ Etag:
+ - '"FrPV2U6xXFUq8eRv_PO3IoAURkc/IERJ5Hcz59m5dfn8v5XjYGA7sqU"'
+ Content-Type:
+ - application/json; charset=UTF-8
+ Content-Encoding:
+ - gzip
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-Xss-Protection:
+ - 1; mode=block
+ Content-Length:
+ - '13967'
+ Server:
+ - GSE
+ Alternate-Protocol:
+ - 443:quic
+ body:
+ encoding: ASCII-8BIT
+ string: !binary |-
+ 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
+ mfQC/vflxf8CzsreGV/IAQA=
+ http_version:
+ recorded_at: Mon, 14 Jul 2014 09:43:48 GMT
+- request:
+ method: get
+ uri: https://www.googleapis.com/drive/v2/files
+ body:
+ encoding: UTF-8
+ string: ''
+ headers:
+ User-Agent:
+ - |-
+ google-api-ruby-client/0.7.1 Linux/3.13.0-30-generic
+ (gzip)
+ Content-Type:
+ - application/json
+ Accept-Encoding:
+ - gzip
+ Authorization:
+ - Bearer ya29.QgCA1zb2xkPTVh8AAADuNe6pjiKAKmnEUw6u56ufzLLFQBh94PiC-LYd3bvUxA
+ Cache-Control:
+ - no-store
+ Accept:
+ - "*/*"
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Expires:
+ - Mon, 14 Jul 2014 09:43:49 GMT
+ Date:
+ - Mon, 14 Jul 2014 09:43:49 GMT
+ Cache-Control:
+ - private, max-age=0, must-revalidate, no-transform
+ Etag:
+ - '"gROZn7NlhxVF8deqr1tB7t1xA6k/7XaNv4ODRlztP3eUuU7Lgdf4AcI"'
+ Content-Type:
+ - application/json; charset=UTF-8
+ Content-Encoding:
+ - gzip
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-Xss-Protection:
+ - 1; mode=block
+ Server:
+ - GSE
+ Alternate-Protocol:
+ - 443:quic
+ Transfer-Encoding:
+ - chunked
+ body:
+ encoding: ASCII-8BIT
+ string: !binary |-
+ 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
+ http_version:
+ recorded_at: Mon, 14 Jul 2014 09:43:49 GMT
+recorded_with: VCR 2.9.2
diff --git a/spec/vcr/controllers/api-update-with-data.yml b/spec/vcr/controllers/api-update-with-data.yml
new file mode 100644
index 0000000..9861930
--- /dev/null
+++ b/spec/vcr/controllers/api-update-with-data.yml
@@ -0,0 +1,340 @@
+---
+http_interactions:
+- request:
+ method: post
+ uri: https://accounts.google.com/o/oauth2/token
+ body:
+ encoding: ASCII-8BIT
+ string: grant_type=refresh_token&refresh_token=1%2FDlAqfSUji69F3YuVAHSoWxWE0grR8aYSkb2OocVCNBw&client_id=367225507767-119uvbhdadqbft2kn4759rodoiivksn9.apps.googleusercontent.com&client_secret=1yX7HzuzWi3yD1OqJ21ZgpSS
+ headers:
+ Cache-Control:
+ - no-store
+ Content-Type:
+ - application/x-www-form-urlencoded
+ Accept-Encoding:
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+ Accept:
+ - "*/*"
+ User-Agent:
+ - Ruby
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Content-Type:
+ - application/json; charset=utf-8
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ Pragma:
+ - no-cache
+ Expires:
+ - Fri, 01 Jan 1990 00:00:00 GMT
+ Date:
+ - Mon, 14 Jul 2014 12:33:18 GMT
+ Content-Disposition:
+ - attachment; filename="json.txt"; filename*=UTF-8''json.txt
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-Xss-Protection:
+ - 1; mode=block
+ Server:
+ - GSE
+ Alternate-Protocol:
+ - 443:quic
+ Transfer-Encoding:
+ - chunked
+ body:
+ encoding: UTF-8
+ string: |-
+ {
+ "access_token" : "ya29.QgAFK5QrFhLCIB8AAABfqjxL7sQjl5zVnL-YlD_fcUxIutL1k_KUFTr1NDwqCA",
+ "token_type" : "Bearer",
+ "expires_in" : 3600,
+ "id_token" : "eyJhbGciOiJSUzI1NiIsImtpZCI6IjBjODk2NjU5OWE3Zjc0ZTU3Yjc2MGRkZWE2MGUwZGMxMjRmMjE1YTMifQ.eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwiaWQiOiIxMTY4MTc0NzkyNTg0MjY4ODk3MDkiLCJzdWIiOiIxMTY4MTc0NzkyNTg0MjY4ODk3MDkiLCJhenAiOiIzNjcyMjU1MDc3NjctMTE5dXZiaGRhZHFiZnQya240NzU5cm9kb2lpdmtzbjkuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJlbWFpbCI6InBhbmthamJhc25hbDE3QGdtYWlsLmNvbSIsImF0X2hhc2giOiItSVVuNzJyVWU5N252a0txcHdJQ0VBIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImF1ZCI6IjM2NzIyNTUwNzc2Ny0xMTl1dmJoZGFkcWJmdDJrbjQ3NTlyb2RvaWl2a3NuOS5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsInRva2VuX2hhc2giOiItSVVuNzJyVWU5N252a0txcHdJQ0VBIiwidmVyaWZpZWRfZW1haWwiOnRydWUsImNpZCI6IjM2NzIyNTUwNzc2Ny0xMTl1dmJoZGFkcWJmdDJrbjQ3NTlyb2RvaWl2a3NuOS5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImlhdCI6MTQwNTM0MDg5OCwiZXhwIjoxNDA1MzQ0Nzk4fQ.VaoYUEGoMU5Bteicpf1gXg9V6HJBa0RanBwlCFs2n4iL04eGUmP3MPHsFNF5asSKAo5HaWV3X962RE5eYdGwUon2wjJ7k_E3KkA_py9zXBnOIZ5pDAFlyDAVi4SihsxZ5h6DrcmucrDqE7HD5ry4xc7oFvuBqJJpCZG339um_RY"
+ }
+ http_version:
+ recorded_at: Mon, 14 Jul 2014 12:33:19 GMT
+- request:
+ method: get
+ uri: https://spreadsheets.google.com/feeds/worksheets/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/private/full
+ body:
+ encoding: US-ASCII
+ string: ''
+ headers:
+ Authorization:
+ - Bearer ya29.QgAFK5QrFhLCIB8AAABfqjxL7sQjl5zVnL-YlD_fcUxIutL1k_KUFTr1NDwqCA
+ Accept-Encoding:
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+ Accept:
+ - "*/*"
+ User-Agent:
+ - Ruby
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Content-Type:
+ - application/atom+xml; charset=UTF-8
+ X-Robots-Tag:
+ - noarchive
+ Expires:
+ - Mon, 14 Jul 2014 12:33:19 GMT
+ Date:
+ - Mon, 14 Jul 2014 12:33:19 GMT
+ Cache-Control:
+ - private, max-age=0, must-revalidate, no-transform
+ Vary:
+ - Accept, X-GData-Authorization, GData-Version
+ Gdata-Version:
+ - '1.0'
+ Last-Modified:
+ - Fri, 11 Jul 2014 09:41:23 GMT
+ Transfer-Encoding:
+ - chunked
+ Set-Cookie:
+ - NID=67=nygKrEvvbhyRV0iJnTSPRO8-eAzvBWE9G1bs1ya8QkKORQPc0SQq1oJE1evD5W12fVZqLjNHWwNQAj7R-NYRDO-I2NoSiAvO8Ei0L4o9TDE3VhC0XAbniGLJCjgYLwEK;Domain=.google.com;Path=/;Expires=Tue,
+ 13-Jan-2015 12:33:19 GMT;HttpOnly
+ P3p:
+ - CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657
+ for more info."
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-Xss-Protection:
+ - 1; mode=block
+ Server:
+ - GSE
+ Alternate-Protocol:
+ - 443:quic
+ body:
+ encoding: UTF-8
+ string: "https://spreadsheets.google.com/feeds/worksheets/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/private/full 2014-07-11T09:41:23.890Z namecollection pankajbasnal17 pankajbasnal17@gmail.com 1 1 https://spreadsheets.google.com/feeds/worksheets/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/private/full/od6 2014-07-11T09:41:23.890Z Sheet1 Sheet1 26 1001 "
+ http_version:
+ recorded_at: Mon, 14 Jul 2014 12:33:19 GMT
+- request:
+ method: get
+ uri: https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full
+ body:
+ encoding: US-ASCII
+ string: ''
+ headers:
+ Authorization:
+ - Bearer ya29.QgAFK5QrFhLCIB8AAABfqjxL7sQjl5zVnL-YlD_fcUxIutL1k_KUFTr1NDwqCA
+ Accept-Encoding:
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+ Accept:
+ - "*/*"
+ User-Agent:
+ - Ruby
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Content-Type:
+ - application/atom+xml; charset=UTF-8
+ X-Robots-Tag:
+ - noarchive
+ Expires:
+ - Mon, 14 Jul 2014 12:33:20 GMT
+ Date:
+ - Mon, 14 Jul 2014 12:33:20 GMT
+ Cache-Control:
+ - private, max-age=0, must-revalidate, no-transform
+ Vary:
+ - Accept, X-GData-Authorization, GData-Version
+ Gdata-Version:
+ - '1.0'
+ Last-Modified:
+ - Fri, 11 Jul 2014 09:41:23 GMT
+ Transfer-Encoding:
+ - chunked
+ Set-Cookie:
+ - NID=67=E2DmmdFxqIqSu67rlO7nnmaF0JvOajx3ElDEj5wig1wR0X5PCbOVn4Ss1NMooVx6-YUoYhNAB__2LDyv1VUaPxZ-pboj85EFh5QY0QVbBayqc-xlV8iurVXJX1HSsLNa;Domain=.google.com;Path=/;Expires=Tue,
+ 13-Jan-2015 12:33:20 GMT;HttpOnly
+ P3p:
+ - CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657
+ for more info."
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-Xss-Protection:
+ - 1; mode=block
+ Server:
+ - GSE
+ Alternate-Protocol:
+ - 443:quic
+ body:
+ encoding: UTF-8
+ string: "https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full 2014-07-11T09:41:23.890Z Sheet1 pankajbasnal17 pankajbasnal17@gmail.com 27 1 1001 26 https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R2C1 2014-07-11T09:41:23.890Z A2 pankaj pankaj https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R3C1 2014-07-11T09:41:23.890Z A3 basnal basnal https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R4C1 2014-07-11T09:41:23.890Z A4 kanhaiya kanhaiya https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R5C1 2014-07-11T09:41:23.890Z A5 varsha varsha https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R6C1 2014-07-11T09:41:23.890Z A6 josh josh https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R7C1 2014-07-11T09:41:23.890Z A7 hari hari https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R8C1 2014-07-11T09:41:23.890Z A8 mudgal mudgal https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R9C1 2014-07-11T09:41:23.890Z A9 fiona fiona https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R10C1 2014-07-11T09:41:23.890Z A10 rishi rishi https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R11C1 2014-07-11T09:41:23.890Z A11 anil anil https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R12C1 2014-07-11T09:41:23.890Z A12 jiren jiren https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R13C1 2014-07-11T09:41:23.890Z A13 manoj manoj https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R14C1 2014-07-11T09:41:23.890Z A14 avinash avinash https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R15C1 2014-07-11T09:41:23.890Z A15 gautam gautam https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R16C1 2014-07-11T09:41:23.890Z A16 a new one a new one https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R17C1 2014-07-11T09:41:23.890Z A17 old old https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R18C1 2014-07-11T09:41:23.890Z A18 pankaj@gmail.com pankaj@gmail.com https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R19C1 2014-07-11T09:41:23.890Z A19 me@i.com me@i.com https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R20C1 2014-07-11T09:41:23.890Z A20 he@you.com he@you.com https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R21C1 2014-07-11T09:41:23.890Z A21 heroku@josh.com heroku@josh.com https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R22C1 2014-07-11T09:41:23.890Z A22 facebook facebook https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R23C1 2014-07-11T09:41:23.890Z A23 orkut orkut https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R24C1 2014-07-11T09:41:23.890Z A24 google google https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R25C1 2014-07-11T09:41:23.890Z A25 josh software josh software https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R26C1 2014-07-11T09:41:23.890Z A26 adding a new name adding a new name https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R27C1 2014-07-11T09:41:23.890Z A27 just chill just chill https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R28C1 2014-07-11T09:41:23.890Z A28 airnow airnow "
+ http_version:
+ recorded_at: Mon, 14 Jul 2014 12:33:21 GMT
+recorded_with: VCR 2.9.2
diff --git a/spec/vcr/controllers/api-update.yml b/spec/vcr/controllers/api-update.yml
new file mode 100644
index 0000000..83204aa
--- /dev/null
+++ b/spec/vcr/controllers/api-update.yml
@@ -0,0 +1,394 @@
+---
+http_interactions:
+- request:
+ method: post
+ uri: https://accounts.google.com/o/oauth2/token
+ body:
+ encoding: ASCII-8BIT
+ string: grant_type=refresh_token&refresh_token=1%2FDlAqfSUji69F3YuVAHSoWxWE0grR8aYSkb2OocVCNBw&client_id=367225507767-119uvbhdadqbft2kn4759rodoiivksn9.apps.googleusercontent.com&client_secret=1yX7HzuzWi3yD1OqJ21ZgpSS
+ headers:
+ Cache-Control:
+ - no-store
+ Content-Type:
+ - application/x-www-form-urlencoded
+ Accept-Encoding:
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+ Accept:
+ - "*/*"
+ User-Agent:
+ - Ruby
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Content-Type:
+ - application/json; charset=utf-8
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ Pragma:
+ - no-cache
+ Expires:
+ - Fri, 01 Jan 1990 00:00:00 GMT
+ Date:
+ - Mon, 14 Jul 2014 12:24:07 GMT
+ Content-Disposition:
+ - attachment; filename="json.txt"; filename*=UTF-8''json.txt
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-Xss-Protection:
+ - 1; mode=block
+ Server:
+ - GSE
+ Alternate-Protocol:
+ - 443:quic
+ Transfer-Encoding:
+ - chunked
+ body:
+ encoding: UTF-8
+ string: |-
+ {
+ "access_token" : "ya29.QgCfzla7VI5YwR8AAAA1bZYaulSC87eJzDLPPnV9JZImeTQk4uC8BPmC46O98A",
+ "token_type" : "Bearer",
+ "expires_in" : 3600,
+ "id_token" : "eyJhbGciOiJSUzI1NiIsImtpZCI6IjBjODk2NjU5OWE3Zjc0ZTU3Yjc2MGRkZWE2MGUwZGMxMjRmMjE1YTMifQ.eyJpc3MiOiJhY2NvdW50cy5nb29nbGUuY29tIiwiaWQiOiIxMTY4MTc0NzkyNTg0MjY4ODk3MDkiLCJzdWIiOiIxMTY4MTc0NzkyNTg0MjY4ODk3MDkiLCJhenAiOiIzNjcyMjU1MDc3NjctMTE5dXZiaGRhZHFiZnQya240NzU5cm9kb2lpdmtzbjkuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJlbWFpbCI6InBhbmthamJhc25hbDE3QGdtYWlsLmNvbSIsImF0X2hhc2giOiJrS0doQ0tUVUJ2N2VoY2NaSmhoR1BRIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImF1ZCI6IjM2NzIyNTUwNzc2Ny0xMTl1dmJoZGFkcWJmdDJrbjQ3NTlyb2RvaWl2a3NuOS5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsInRva2VuX2hhc2giOiJrS0doQ0tUVUJ2N2VoY2NaSmhoR1BRIiwidmVyaWZpZWRfZW1haWwiOnRydWUsImNpZCI6IjM2NzIyNTUwNzc2Ny0xMTl1dmJoZGFkcWJmdDJrbjQ3NTlyb2RvaWl2a3NuOS5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImlhdCI6MTQwNTM0MDM0NywiZXhwIjoxNDA1MzQ0MjQ3fQ.WD1p7mQgg0EacCdJuKqJRT1OMrBRTqkGoJaDHwKj45PfvF11KfQAKO_S99VDdMeZsNFwp2FYVGo5Ib28Ztaimo_5-fPzidRpVBEJDNw4OJ2-6f4a1tQIsZe8ATO4mHiyhSB0fbhzILS4GHpzvgKKQ5e-CGT4tQN3-bv9piKDNb0"
+ }
+ http_version:
+ recorded_at: Mon, 14 Jul 2014 12:24:07 GMT
+- request:
+ method: get
+ uri: https://spreadsheets.google.com/feeds/worksheets/53c39d036261731def000000/private/full
+ body:
+ encoding: US-ASCII
+ string: ''
+ headers:
+ Authorization:
+ - Bearer ya29.QgCfzla7VI5YwR8AAAA1bZYaulSC87eJzDLPPnV9JZImeTQk4uC8BPmC46O98A
+ Accept-Encoding:
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+ Accept:
+ - "*/*"
+ User-Agent:
+ - Ruby
+ response:
+ status:
+ code: 400
+ message: Bad Request
+ headers:
+ Content-Type:
+ - text/html; charset=UTF-8
+ Set-Cookie:
+ - NID=67=m3-pRM2JBYO-OQJjfHgqb6fjjDI85uzWqpT1_UOoHH6yx2T4qyzCHcgc0qyqpPxSa3dSQHLzuZCEyuV8dEq9Ctgc6JAuQccxdJKB-rIuUVXJjxRbNcPo5Pif2si3RL1E;Domain=.google.com;Path=/;Expires=Tue,
+ 13-Jan-2015 12:24:08 GMT;HttpOnly
+ P3p:
+ - CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657
+ for more info."
+ X-Chromium-Appcache-Fallback-Override:
+ - disallow-fallback
+ Date:
+ - Mon, 14 Jul 2014 12:24:08 GMT
+ Expires:
+ - Mon, 14 Jul 2014 12:24:08 GMT
+ Cache-Control:
+ - private, max-age=0
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-Xss-Protection:
+ - 1; mode=block
+ Server:
+ - GSE
+ Alternate-Protocol:
+ - 443:quic
+ Transfer-Encoding:
+ - chunked
+ body:
+ encoding: UTF-8
+ string: The spreadsheet at this URL could not be found. Make sure that you have
+ the right URL and that the owner of the spreadsheet hasn't deleted it.
+ http_version:
+ recorded_at: Mon, 14 Jul 2014 12:24:08 GMT
+- request:
+ method: get
+ uri: https://spreadsheets.google.com/feeds/worksheets/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/private/full
+ body:
+ encoding: US-ASCII
+ string: ''
+ headers:
+ Authorization:
+ - Bearer ya29.QgCfzla7VI5YwR8AAAA1bZYaulSC87eJzDLPPnV9JZImeTQk4uC8BPmC46O98A
+ Accept-Encoding:
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+ Accept:
+ - "*/*"
+ User-Agent:
+ - Ruby
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Content-Type:
+ - application/atom+xml; charset=UTF-8
+ X-Robots-Tag:
+ - noarchive
+ Expires:
+ - Mon, 14 Jul 2014 12:26:23 GMT
+ Date:
+ - Mon, 14 Jul 2014 12:26:23 GMT
+ Cache-Control:
+ - private, max-age=0, must-revalidate, no-transform
+ Vary:
+ - Accept, X-GData-Authorization, GData-Version
+ Gdata-Version:
+ - '1.0'
+ Last-Modified:
+ - Fri, 11 Jul 2014 09:41:23 GMT
+ Transfer-Encoding:
+ - chunked
+ Set-Cookie:
+ - NID=67=BLaHF-nsO0p38-JXk-yuu_jdMw85AvyOVXj8Qqx78AagoXb9nYnraHyxjTRV-jP5NjElSKtTzVgZlVMqmdR-s0vHqyXD5EFjnEZrGiw5CMQhtRwJ9FHq2dad0-LtVWAB;Domain=.google.com;Path=/;Expires=Tue,
+ 13-Jan-2015 12:26:23 GMT;HttpOnly
+ P3p:
+ - CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657
+ for more info."
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-Xss-Protection:
+ - 1; mode=block
+ Server:
+ - GSE
+ Alternate-Protocol:
+ - 443:quic
+ body:
+ encoding: UTF-8
+ string: "https://spreadsheets.google.com/feeds/worksheets/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/private/full 2014-07-11T09:41:23.890Z namecollection pankajbasnal17 pankajbasnal17@gmail.com 1 1 https://spreadsheets.google.com/feeds/worksheets/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/private/full/od6 2014-07-11T09:41:23.890Z Sheet1 Sheet1 26 1001 "
+ http_version:
+ recorded_at: Mon, 14 Jul 2014 12:26:23 GMT
+- request:
+ method: get
+ uri: https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full
+ body:
+ encoding: US-ASCII
+ string: ''
+ headers:
+ Authorization:
+ - Bearer ya29.QgCfzla7VI5YwR8AAAA1bZYaulSC87eJzDLPPnV9JZImeTQk4uC8BPmC46O98A
+ Accept-Encoding:
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+ Accept:
+ - "*/*"
+ User-Agent:
+ - Ruby
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Content-Type:
+ - application/atom+xml; charset=UTF-8
+ X-Robots-Tag:
+ - noarchive
+ Expires:
+ - Mon, 14 Jul 2014 12:26:23 GMT
+ Date:
+ - Mon, 14 Jul 2014 12:26:23 GMT
+ Cache-Control:
+ - private, max-age=0, must-revalidate, no-transform
+ Vary:
+ - Accept, X-GData-Authorization, GData-Version
+ Gdata-Version:
+ - '1.0'
+ Last-Modified:
+ - Fri, 11 Jul 2014 09:41:23 GMT
+ Transfer-Encoding:
+ - chunked
+ Set-Cookie:
+ - NID=67=MpS_-ANxVGpUuQXWLyBe2bryI8PlNn5qfLx6dbyscmyEa0XjMimK6ge2QHYCSLStDpa7hWg6aeF3qYIqmA1IuRiXThQV6Ihq3gAvJE0X5oPxqIMo3Eb4mlgRrGAF_tg-;Domain=.google.com;Path=/;Expires=Tue,
+ 13-Jan-2015 12:26:23 GMT;HttpOnly
+ P3p:
+ - CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657
+ for more info."
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-Xss-Protection:
+ - 1; mode=block
+ Server:
+ - GSE
+ Alternate-Protocol:
+ - 443:quic
+ body:
+ encoding: UTF-8
+ string: "https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full 2014-07-11T09:41:23.890Z Sheet1 pankajbasnal17 pankajbasnal17@gmail.com 27 1 1001 26 https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R2C1 2014-07-11T09:41:23.890Z A2 pankaj pankaj https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R3C1 2014-07-11T09:41:23.890Z A3 basnal basnal https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R4C1 2014-07-11T09:41:23.890Z A4 kanhaiya kanhaiya https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R5C1 2014-07-11T09:41:23.890Z A5 varsha varsha https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R6C1 2014-07-11T09:41:23.890Z A6 josh josh https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R7C1 2014-07-11T09:41:23.890Z A7 hari hari https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R8C1 2014-07-11T09:41:23.890Z A8 mudgal mudgal https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R9C1 2014-07-11T09:41:23.890Z A9 fiona fiona https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R10C1 2014-07-11T09:41:23.890Z A10 rishi rishi https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R11C1 2014-07-11T09:41:23.890Z A11 anil anil https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R12C1 2014-07-11T09:41:23.890Z A12 jiren jiren https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R13C1 2014-07-11T09:41:23.890Z A13 manoj manoj https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R14C1 2014-07-11T09:41:23.890Z A14 avinash avinash https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R15C1 2014-07-11T09:41:23.890Z A15 gautam gautam https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R16C1 2014-07-11T09:41:23.890Z A16 a new one a new one https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R17C1 2014-07-11T09:41:23.890Z A17 old old https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R18C1 2014-07-11T09:41:23.890Z A18 pankaj@gmail.com pankaj@gmail.com https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R19C1 2014-07-11T09:41:23.890Z A19 me@i.com me@i.com https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R20C1 2014-07-11T09:41:23.890Z A20 he@you.com he@you.com https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R21C1 2014-07-11T09:41:23.890Z A21 heroku@josh.com heroku@josh.com https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R22C1 2014-07-11T09:41:23.890Z A22 facebook facebook https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R23C1 2014-07-11T09:41:23.890Z A23 orkut orkut https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R24C1 2014-07-11T09:41:23.890Z A24 google google https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R25C1 2014-07-11T09:41:23.890Z A25 josh software josh software https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R26C1 2014-07-11T09:41:23.890Z A26 adding a new name adding a new name https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R27C1 2014-07-11T09:41:23.890Z A27 just chill just chill https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R28C1 2014-07-11T09:41:23.890Z A28 airnow airnow "
+ http_version:
+ recorded_at: Mon, 14 Jul 2014 12:26:24 GMT
+recorded_with: VCR 2.9.2