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 |- + H4sIAAAAAAAAAO19a3PcxrHod/2KKeZWWTqXIi05dhJX3Q8UKTmbI1q8fDg5 + dZRKgYvZXYRYAAawXPK49N9PP2YGg+fitXzIW5WKqQXQ0zPT7+nu+e2F2Lvx + AnfvR7Hnesk0vJXx/R9imaQnMpnGXpR6YbC3D2/J1JnjW5/3PsRnv7y9+uHu + Hx+ufv2zPL/919mn7ybh0dX5zfRw8v78b9//dfo/3/9l+b07C/58+/0//v1f + Px39Kfn16vMewTGj/CLjBIEDzNs39MhjNGLvVv54+5Z+CpylND/SL7fWZ/xO + 6qU+vXSCL4mjswkPZE0AHl4u6JFIQ+EFqYydaSrWXroQ9NUBfRKuAxmfhEvH + o0/mYTj35cE0XGZPf1YI/UTPGO1pGCTw228vhNi7e/MDPl6kaZT8eHiYJP7B + PEmd1JsinEM3nCb4f76XpIfe0plL+Cci8C+E8q83PxxEwRyhAqTv3g6A9N1b + gvRCfKG1CKerpQzw6zD46AU3NmRX3ko/jGBdD7IZM6xDmmAUh2k4DX38CEmD + frx2EnkV+zag9XqtIDiRl1hQbt8emm/OnHSBHxUexWGYbgZHryYyvvWmBlBx + iHS60I/oHzwFJ4aNg203G+X4qfoTKOg+ok1N0thTy1+inxMndcQsjJdOiv8R + KdATLEYEe8/UQ5/MnBXB3ft3wnwDv8pgtYSf/hv/oR7gn//Mnlq8lmRvnivo + CdPpcQhkG6SvLwFZEc6EE0W+N6UdPSwC9UN+gJj8ugJmw4dfiKxmnvTdpNPU + L6QvpynMOYnk1Jvdw4tivfCmC8HAmKem/sqV8F/hCFjt1HP80vo0oHUj7zvh + hKwM3xyI/wpXsVD/Ep4LK+QBVom4x9+Bcv8NqAsncPHvW3hOT3hF8StnOpVJ + si9+XYWps08vxjIK4zQ5EOfy15UXS1esAh9eog8VFHhRfDpaAZC3B9/C/G9k + 0GKSoQNf/Ive7jTZwkiG/qarOIYJixWwRIvho1im6f0ZjFMm/eswBD4Lqsc/ + l+kqDhKzn7x8oDa0SElo4XwvkOI6ls5NUsERabySm3GkfbiC+XSjhlvH851r + XyIpwmrQChEoEa3iKEQmwp9QdMj4dUI7mPEP7PUxbOg1buu9cOJrL42d+F7w + kMJJEm8eAB0AcIcWe19cr1KRLMKV74ogTIW8m0p44Y/fiunCQd2C0lR8gsFi + ojn8aBIJbyauQ1g6J5aaktwWG8dfd1qRyZlwXDdGsgVZgcSSeCls3ELC0Cy7 + YJAkFWHszb3ASSXgC+sOz7wE8SQucYC4YNIygMWbAsqwdogL7PTSS5NmzJXq + QZLXMpfo/62ZBxgCkTSiqFHw44esMczrpSn/4sk10eHSCUAd0ixnHnAu/ahV + YIIiioQDq3DW/yQ8ebXbInIABOSCUmiPECyZACNCgH6eefNVTIsmEMaYOCUH + wIFuGPj3GzArDYgskfQZFVe5/TLkhuQNShegVZHiFg78BlSB3Ab8OoWppPAn + yRuiTECxD4ag+x1c6LZro98nqbFNImqJz7ZpmUdM6rE4DV3Q/LnBjoBaxAW9 + JNT334AMhS30wlgh8UL9n5YGyXQhl44xwo6uw1Wmi9j+59/2c5IuvEY1XiP7 + A2AsuWQaIenkBWynIXfhciWg9kBQGnkFkhckWerZsgeEpYcfOP45KMIJQLDW + QqPhxLFzz0AqJK49Ks5BJKsILQmg3wy6iEPcRRif9lMg6AOBzskyBGnMFpY3 + pd9F6tzgu7GcSlC1U21H4VLBjK3dql6pmrniz4jFhUxzP9bMs2KqiO6GyUUx + +CSgQvGXAxtUEfMG5OvxL+9Y8XH9ZLrPR0kfWTupmnnZWChdbT/8Yv3jiw1s + T42D86qdlq386+Z1ZDCGNVx6CTrOCnl77BcVf5q/Msz00BUEU0KmaoWn7MAo + 0kaJzxI9v9zEvWycoWIIM1Q1Suq/X3JiziWv/QKML0DkLATL7r6CgfN4ViHJ + cMC0I0AiIkg1BncOARUf6T7i+0tnrm00JKIi3Dskyw8kWpKuMgnhO74frsk2 + ZlDKiU3GEyYJKIXpeJQR4r/BcgZM43Bp7b9FiU48HyS9wCVIPFwTe+jEHhsp + r6XYKvL2l1YUOwPTZhXLznv60UOrfWbzjQYFhjpuNJhOgeKt6TRcBel4W61G + UlGwvvuNUT1N8gpi5TarZ+dgA1aPFqyW1+AqNo+mPR1yWgRY3VLxMyyQGmEf + DSl0XTylvhIJdODmKIDZhiJO4QpWuZ1c8pajsS+DeoLsy4gB2aFF803y+2Rn + Lzlm5QBm8SRIUtg36VZseC7QUqWy1QsYXqHwBAXbJLAKqyA02jHINSXHCPSk + QH9dDyiu7yveqlBXKujfVV3hWCBW/LVznwhyHf5Atu6B9YmJ+FjP84P7TjBf + gSt4HLqyBxKSJgSEpuGgq4hBCCIAF7jZAeTkzAt4Qd4dn4k//mmf7bgkXKIm + BCpJKHCFRCmuAg8/BJAfT04/6jDvS/SdlOu04jcOwnh+qAKEh2n83feHrw6K + cwNaTtLjBeAmJ33WWAoFA2NJAcYNMkFkSSEvSH/4Y37spXN3Ffmh4154/9Nf + sQAUsSIwIkE4JC2lQ+Hex/NYEJUBMqowqUwD0HSq5by1wmJMQzhbxnY6JMhp + 2w50ZOvZBtM1cw560qsNG3hocoIMeOuxSPYC9p3MIKggfDxRgL8LmFDI9t19 + KpN39xd8zNNLZy7R6sGZJ2kYo4DgWDDgRwLB9WYzSRirUIY6UhpRqV7jJK4S + WwV0ppM88gTRTIEiuox1V+pVnw204RQU2G6ksn0hD+YH4uR88sv7ffHT6dHk + 4z5K5bO/frr8dNGSzrPdv4Q//F6kmOKXgu1CJABr7VoK0QyL/PZ14buq4c3W + 2bG6XjgdzeexnOeM4tGQAytCI4jRYPGS0NwXZ2BKJA5sczo9eNUL60lwGTvJ + Ygs4pwgX/iSe7YLbZU6Od6EydQabZrZIjlkPxJm2SG8df4Vh21j+KMTn4LX4 + ODmdXL4/ob+vflb/yiMXSwxCAA7aiqjS5V1WzQDMTIq2C4UH8x9C35VxT+Xg + uXqlEBQoXoRVkPuJ9GcqLaHbAEd46Hgjrp3pDVr7fHhVDqKsrANF+Of/ieUM + v6ZzxiY9UmtFv1D/x+dzYPJr6DqIDb+0D2HTWMht4MOTM5YdVjvCV2ZZql+i + 0BmfQ4qFYxn/+/pcthiIJuMNvkUyNWHO08npe/aT9tkiyYxiPgcPyedwZep4 + fnPsHJYpjMGq6uHv/N12bdiZycDRgSsd0PMpWRjYHKcEaG6j+cBoEjDFXspl + 5PeVk6n6WKxinzxJAg0LH8g1L1juVIozH+aAUqBpXOTArD0QreifYnzxt5li + qS8I+hqDFPDWNNPt/NwaF380I3tFw4lf4gSaHu5UqxkWhgTSox34O9DpBZ7k + Dt98pGZyGl+v8YSezocPxFFADwmX4lMxBU9ZkQiqLj4j83J04lbQiZ2zZSO8 + 0bS8dWIvXMEQU3IeQ4P8eKYjSpt5GN/v9TPOjtXnJqYMmMIiYhgJyKukjqw0 + CPGaXrZnZR7hq/rY0X7PYUJxkiScevZZLe+o/RkG5+F57uOEf2uCUWXCIoQc + sXdaoavzj2aOtDqVVnKtv4npg/PGqCO63/nlP5fgEyewCBizSegBeKTecrXU + 7wFNY2IIyN2F9OaLtN6q/+5ty9BjP30N3lumbYps0z+wVSHoDbTtxaZsvixH + poq5BH4YzE9yYDtbIwBBWL/WL+UoTn0ZLMuYwYYtg8mUG6sGcAfIzQOzNE5f + HYjJTIB2S+/3za4Sciov6lqyhY7bLJ3iJmOSB7DweCoaORqBopXLaiCvvZq0 + MZjDX5D3DgHGb3xMNsGfqnWzM01Xjq80MRrSuYmpI9cP8PS9saj6qBpt+Okz + 3IKR1kLh5CLZX6qwPPWWEollFASXAIwtyqG4he5qmvb0NzL5peAQnkQVOuZX + Zhv1ah8DSrkg5H10GpPPmEYlFQNyXGIxYEchlwzJsQgGBE6cDhPcBKKd5FYu + VHJMMnGIJlTCVQNkKYtUgwY4i+CidNHvTujMbczB+RQPR9cBqnBaN/op6FHv + UySrVro3Alp4L0NKUQXDPgw4WF6DxafZDFOOt7wPSpcsJJIEDVgOLry7PzHG + xXC7KKF8+8xSVIYLuEeB62PimLJd+ZDTM4lmSW10Ao92yhEK+rV9lOLICkV4 + sfsas/zvc2nUqipA+1756ASGg9k9Vv4aSMyKUGhlhEGtAB6tVsbC2iVMwOpO + ThKdemThqM6wOOCA6eN4RsBDstlAEyeLFYwBrECSr0HphbEHCxDG6Ki/RPcq + oWzpBZjv8OerYTJtlHwixLtowudx6XCowlaPn61mk9TWIbYj48Dlpzeqjf+R + ptlk5xOpF3TaiCFHe53zzMcR3ALvqR/bs55xHx2tmhwdyaWaBBaSTfzjy3So + 10YmBbLLtQQmViAL1FXIBNdUgBZOYwAKM+mB/bC+LcsMwkmJM544liTkkMCq + iw2IDDYga8ISsOG8+EXWGjqehtoqMD8eBxWHLTEQv1DINcCEcCX4T3o7cJ72 + ZQEnG2LVGiCJvMYvtsjI+X2tYuUKVWo96KNNecxERcTsWq4qVn7qekHNpoVq + OLaoamvaYWr2ZiN9l3XEGLk8OjeikNMzOWnJ5gE4cUPIW/mlCEZElCtl7VFp + pDN449KuT+w0V4KfL1FsMe4DauJA+hW8i792YNwAdY+RVDQpgMCxLkBjjUXH + NH9zmpfnibr6EyzW67XsutCPi/ts5CjQjxoSqJzi7DoaoZAu55p7sS7l64bH + CZ0cBa4R6ZVrlA2wj38j1uzmOJiCd0cfgw2wjCghd+n5sJ0ULcBiyoiznVvy + TQ9lfCSurlAZxyLxYGwnFqvA+3UldR0oOQ5WiXHDSvYSYJMCaFqXlrSmlQiZ + g5rwDsQveNzzozJm7sjCoql83nMi7w8K3Oe9StlovVEIlmExfRWp5g+4Ssub + Jaxn5fgUg41D2GgKnBOh3pt56mqyqt3P8t/Pqs7R6o6DSoQrp7DTdNKO3r7B + DH1AjGYfVCqoyLnHXMLuBvWReKfye+kkjkvnKdFXmjRfBRx1GVbggm1rTT+H + ht7oHroJxFgYOUjdQPJlypaZ9LqWlIOMpGaVFmi6FxcpZac70zjEc3qTWofV + 9apZR1Hia9BXsdeDSRXQ1ybz1CCehUY0toYT8gikvVQcHkQXa8Mz2aoULeey + ZzIZXQbKv8gxcvYZ9kIprGjNZuezTnsc6hj2Wkocy0uWLEjqtEJRf3q+W2n9 + 6t/7Gb/wdSyVT7vJj336xi/PppX1C6+eS2KW6fatYLVHjUaw3scHsD/1Mj24 + AVo58INZoLktr2Cj7GEXXor1VyoYRKlDWIeDIJvYSW354M1VAw21v4rBkAx7 + VPcBCFA2am12ilWPlj3dNofgUjzZbLYXgE+d6qSJfz4Aq5l93MRvBQGwFYKM + M2QqqTJcYnZOkRzVr13o8G8Xn37Gw/JyqJKBoe3g6AS21rF/J5guwrjHSsRy + bp3jmeSlOJ+K4zDaDAysGYluDI4ock2zSJ6oXEicxyJc4wJzlRE5PtRVDFvs + 6O+zyRRYgxMcrRm1zUelA4v1Auz+OExVqxa1tsV8QP51cAS0DjpV2fUT0T5m + XKQolXWxnvZmTKajNS2hmQzjvX+9PP0oEmfGC67STLB7hsk1oQ0FD5IPMqPQ + 4wY2S+dGCuliAxYSkQp6Vqs4SM4wsETLmf265xzlbpRDhM5d1co2+1aXuor6 + Ls0Fr/lAzkuUEa9QITM+m3JlHmKpyKk2v64KF5NcnBESI5cEXhRJTVBWxt0e + +UO9BqTWbGW5wyUyc5Y81ppULIWYcMbo1Em4txoTKL1O1W93zjLy5T7T5lqn + N1nJQPS+OVnUAg+VA5dH6ulWbjp3uekdRXeV8xjkWAd8oARmEGPMkQfoEFQf + 4cDIwqR0aISZY07t44xgcBaYqAVrPYVR0V+iGBPtAj4g5jdbb8GkrQjRJpJ3 + YJCNeT5kMVZultzLAr0+1CTl4S5Vn8o+xyTwZQVftx5+kS79455Cm4QuEwzu + jd6XzGmsVBEjGlQafr0lpWyVHAJ8mjQ+V+EhTUDJ1ahNMDUQAyZrjLz6DvCa + HrcDsykgXf3Pc6l7pDCGUZg0dXowjidPBL++r8n2GvNArZI68Jx31S/YzZ+a + Q0NjJ1zw71Pu48fhUMrYxGWhLn60Wfc5AyBLNIeRqNUjgz/g3PjPlKX6eU+8 + Fpd5qQ4gUfrA0wP1Jkaa/Fvplt420k2/gUhhZlOehBqN86qwi/VkFCPdxDCU + udLPWu8VSflYGLo9FW87bpIt8mb580CxE7NGpaGGxU44bKISoOA/um1KCQOg + HJj+Y53i2dKrkiP40SgsUSEw+rmwYzp8hNTDO2Q87HbcMYJtOWM8CjUXFjS0 + 6sMbYlcU9LGoQ2kQ4lHANYljk8D3UknZw1iidH41xLHTkrmN3zauCc+E9/gG + PONRY75XPxxivCt+22C6b9OYrWKu0dXJOQ+ySZ9YFtq2jNqMzobYrveDw0xV + y4683QusQ51F7AmCQMaJZId0kUNHlMZ4/DuuiMn65pNgTYy8j6kFmIqCFMw6 + iPX1/8ZUZEsx1HZhpmQykzIzP/E1/Jd4uQpeqy9eWZ9sVJb1JmT2eFQ7Ms7c + k4Hqc5BNGeeZrb9btB0x0M60zLZo6/ZlwR35nZmXH6z8ZcUlWe5y614Oue7R + m0+1HT+VMbZgHzJBu/zRhImAyVaJdn59eetkLY/Q/MJPYnHryXWpI4cTRRhW + VXq2ivu62BGMjCnMV53Tq3uBTMPoHjNKhgyppq+DAWHkZdWbDY2whlhxx8pW + xvS3rL0kYvEyszcmF5/+/MO3b7I8t8pWOrUmHQkHLLv6u5cuBjI+KZMMSRMI + 0U0TVM0RFs3kpnMgPqHZFoXRyuekeLYmpKjoQK+aNHjcq+egOJ+tFOxVFIy5 + 4TrAjKo+5Z0XNA4mzmDfdYYj7A4CvCha0If5xcnax9MCa3sTmwVRZXRlExNk + zXE5ACG24gC5vJaDMgLotASBuLYgGqNXsp3CUwXzDuvQvNS/v+R2UGOILOPc + ZNB1tylqMhlGeLeIy/oMljWBzcxeUVSR+TpoNhrSsAta0MBU35RmBeSHG9I9 + 35K+UsdXFaWdiLRJoSs1lR0pu/IIfP0ookJo7LOZ60CNCAAjVRpbM7skupe9 + kS+A5nAEiSrNxEyfRqoVQw4OhzIO0PROJNspBtx+dt9RqpUaH9Ksc57EduQD + fnCRa0/SJX5u9SbRNgK3xxuKY1mRVaRlL2BhzyX2huzdbTJfnwW6CmFiXSYB + bWa6XuuNLVxGMLMVtlbHmdFypSrkIV0JdwqC3zlV1mhnAaI/VF3ECCLYtgCy + cpFVGAeXmF+l+mTuJYahPrXY6jNXggFCIb01xnuUogI3mjJSUVjgxBhQKUmj + OmPBwd9WcXUSQbFVeGXkQAEoB0ABs0UIP7ycvWZAmeGWo/gZSBaTaZblNkyd + pYydU+emf0YFxUx1MgWBq8WyIrlCIRC60u+PAX49AIXQD+OLyJn2XwMCAUoL + YJgeHzWjuYWe8Z3GcXPFLNnuY6AMOxwH4uX7f0w+GD1mWfMlRFDlJUBT7zwn + 6U2YGoi49pwkN3Xx8ujs/T84ytSNJjXM01wT7o4rZRBD4uhCDfrDS2/Zn199 + GcxBiqv10CCpdkiXDXVZkZkPJlixZ2+d8VhvPoJfi4CIWjqsyAwbmH+kGfVe + EIKhl6Vu7Ky2iktwOq0RNyerRLDUF60KQ/7eNEcj8Q7oRN6d9GswybU8yzDx + kvAikjWb1QoX8MbRAubWnjXb1AEhWPZqDm/DSPhxF2qx7twrD1i8R6k44E8y + nMdOtADDX8PJdQ3NzCGzSfZK1NzJhHEsL13lpUkDAdfoYAVkAxL5gEn+Qg6r + jR/W8I6AlAYyGlJhMB8BKw1lEFovCn9kNLZ07o6URfRLbXJmG7GULLEDTAK2 + 4eusJ3GqqV7lTLaSXf3VHck6YMNB6k4D6azuYnX03F9YaQi4yVPg2pu1l2Da + 0jyWMikYzOBlqGs9ffxDn890kmZgyyd2zkLHldK5vwymy1IlK5JeJx6YVEGN + sdhqxVwFQftfCnDOfGJd2KAGa1ZnvfBS+c7xazFss0YERFwzlM4kRQ1D+68O + 9xvtr4dfWP8xPmfgyjuMXF72yWGf6K85GcVJYQmvV6lMcqFW8XJKncHY6VzH + Xgqu4atNuew5fLqSMqV206EvTdCumLQc75o16XlsmHFQPn6UO0i0DpZExeEh + NePJIeM717C9nXfmSMzjcBUhNgwhH/zesPgLz3VlteTbaFOf4AHz1MmSQHJC + VeIqTtOhBjsfgCXqVmZ5y2UBJFKrg4UVQit14ngoHrmjMgVRx+ytWL09blqM + dQ8b18S789HoXJkGLtb4AzJYni0fF8XNfIUJK3wpLezNVb/+/pT0Qjl2mJTG + N9wWd7l2vJ/7NPD92Wre23X0X2iJ3t2fyl4HlB9xOBXQMKd+dE9PtvIq49A6 + sTz/cCy+++67v/Q7slw68Y10ByJ+WcbZOo7hIbY7C/f744Wc3iSrZWfkjwJx + evK9mKrvs5tEVeRZ57HnpXwWsCZF1ytqvVS9Wnspn1L9VsUpxnLFnR/wdCXK + Esv4li3dPbMqpVPFen05S8U1GD83+yoxUFJHWBpWZw66aJst6SY3Y+PyCFn6 + Hpi7Bt/iIqiMttG5RgPuQnHiZ07iBYdHXUkt7IQ+nrPjJ6Fez5SjrmYGHJjU + JKSSg7EQSB9Q4fMuhD0knbDNyjjBPVY6bFqXNmRFFrxkEawXLGvWQl1T0w5T + D60sij4G0dKJjPFMF9xQj4/8lUB8W0tIOXFNSRdOyg3KByRW9Dy2rVKs2nPE + vKfeTeqN+zlTUHLH3RQZ1Uy8dIKV4/v3dF9Yan/LJ6rFDzkDnBKNwSidc9bK + 0dnEZq+YxjSRcnU0i+yFeeu6c2YVns3Hh1gH3lUOgwXJxkLnFEb86GXySs+C + AJl/GztBf9ynySyB7NX4pCsyOZOsChVOoO2My7G5SpA60XMWLueV6XbEust/ + hubn4ELJ3zTTSrTl0SrNnYzjnTJZN3m8ksnV0JFfFTHuq3IEPS47Evz6vkW9 + Sqep2wRUtE5nWuVux9q4jmc00+b+MdaVi3222LT3t25unHEsJ1YckHVy7kID + ZwZgNdoVkqsH1lb3hc0Y8cvVib9bvxCwYu0acyhGzYWt6q9Ol/JUQO/dLJgh + Vg6DSniIYwDS3iqGNlpCXSyUS2sczyNA6P3czivy98gEZAzJggC6zFC10/NI + sji3juejTVRsCLYAsgrgWWf75VJ/WchiJAsEmTpS2k5dmYvmeeaEsMXCrSZB + QqJNgkSsQNqXXG4KDVHcsXdg7ur842sqP3vnJPKHPwoQhKFLw6eW7jdTLZ1j + ZduMX1QcGZQ8qI4Ilrwog0xzbMO8Nl7WUXFkM9QYTQmqxQjSryXqy3xiPWwY + p6h+cFLlixlNX8IKRFTDwB4LuQyBxMMAxgEDFXP+gNYpn16B1IK9IhcY5oiG + SSKk6WiJ2VNg8to7o680xNt0kdsx+Ag/hAkzl75DWX2haiYQAatN9CZ1sZbX + Ko1/aGJvPhpaCGJYRpO4jsM1bgoXH0zD8MbDgw4qCc22zlOdV7Driu5ea4P1 + jBiPVte+N/XVRVP6uYojaKyUuMdUNezQAHtFfSEdv1hLAguCIakhq0GugZHL + uIuMojEBZ6qwQi2VF1NnAXgBBseW8hIo4yVWI+6L44uLffG3C7pb9xV85OQK + o4B3/y6vEzwp+it3MijOJvbw+OrYCeiCvf5qWwGiZaV1Z/NU980i/cR3gpIF + WF9AU1FqZn4mHFqWmGlTjrTOc24LaU+gyQz9YA5stlZ7NlMbseHY6GFqzdS6 + lMbZbhPIqlEfqLyMvbYK/rAe9OEQR6t55UU/Z2bJT2GoDzwe50Rmixp4J3vp + EemrrsVo8WkXSiv2GLXJrbF2d/AlfvYQok8bB01QLdqAesl5GA64xAvEDZpt + Gd66dLz+6vOxCbRN69GoinHygbgRRL3eue0xwobOpmXnQzNCwfFoyQOZJ9K2 + sNdE48+BfDoLR6thfozfZ2knZP2zt677GNIZiAodoG3K9z0PCw+jrf6f8r4X + B+O3N/LeOqMxbVzMNLIFLRVsLh2vn/bnT3O35KIXkN4Xh2TqweCllV0TCHAf + olX6ms9dOTCse2jqChdzMGMBIy9f7cy+TpeJFTalIkvwG44GXPhBAEyLeevQ + 6eHmaE5s+Uo/deLFjsv/xeArOYMRiBtneq+POxMmS87Uzzyj3HTGKBUtWiu1 + dDZYOzUvuqp9ctnf9Y1gNK9OzCnA0TX7ra74QDE2fXFBopqTLJ0bruNXOi0L + iii9poMDeLEKWFS+6TGnjyhjdeMEbXgilqsEL1DLWidtTy9Zq1+vkgpnAsYd + GHRN9mZJQ9mVYyg7TfEqq7Q+aouivJ9fo65ZRgBFVXDE4r7cbYbO6egvDNOq + P9nTH2JSlciv0awaVenXbmXaN9nFmU7DFXYmw/yR+qUkXsc/WLrjX0rZ4J+c + 6vBwa1pol9xfe8Q5lak9ZtaZmdagsyp3RcnvugcbCTduBWeVtVOjywhm8Xiy + a13fHqPDERaRnt1+rkGa1BmeWYlzyfSERx2MzwCVTnZDIF2mS2SIZ114xAbr + nsGmE6XGKEBPzWdpObzBbusaY+K20hmwls37UBVyyT/sE3axjyaK14Q+/8ts + bD4dfKi/DeLYFIvJb/D2NFJDPEbnFRRIT//chejAmXrNUjByPHWGDINLjwSW + On6gayfA5k45ThPY13OPTos5E1tNqSgTenqP6Dnqo8U60ONRlBmgnpZyCSKD + qehSq5e8ZVM90f6ansllwzrSGaPne2m/nco+rx2omieqRLL9qAtvTPNZYIbA + 9wtcY+UuPCLfbFOGj5/+ND6fbZLbNhVsk9/q5bbuUFOgT/Nzt8g5f9Tuhrvh + rcowX35jp7IR81tHYQHTvWfX/grBjNbhyRBfocvTsP3Xg499AW8+tlZDE+PJ + o2yAWlmkX9lQC2bhM7j2rGbaD1h/VoPBQ5RBtevi1UdMjVsOVbdEIxbUGNbN + FdWMlsK6pTIPu7e4hb9uYD/6toJwDUZoc6+lJBivBBBZQpUC40lWuKTcrWgV + zzEBq3EWGBWzS9TN1rWanjqJ0dm1lsI6ENr84BQtKhTDkRlhfWBzT9+q9c7V + yHD0jbNfOO52yAVWh9hyF5N2V/pQRgP9dYW5i+YIr7j2aDsniyNYn/4bkKyu + E4z+0c2Men66UsIsPeVfxlKNaAip3KywdvVR4tirWTmVcSlp68iOcW6hYdWJ + NPPCp1WaeK48qTuaHbxMeCyJI6i0Qzo4HXnlRs4+yC9YtQtR4ebmHvWJO2aM + 8lXcmm2m08JVPc8ZZFtzVWNri1qYh48WYLSNT0VdmeHZiqpwP+guB1jxyNf1 + xY6dYF7tqHoJvH7fywo9si8dUoAojzp/aFvZn3pbqRNF2k6O7BqDgpHfR+aR + pa3SwRKcp5PU1TLgCqwXqtpdX5RAZqDjFg2g8Wg+X1JQovWVqdws1xf27OSr + skbA5aM+FFzr4BXzThIrvFey/qb5hq+t65/M4ObgnkFtqlhaxf0aqB5RJIai + j3QNlioML4xu/KCG/idGALygZdgzmSIKrz3q1muEAhhui9C1GHcu7QRHlhmq + wpyuqsXnZg0cajGlQOpfF2kanRJYfPbT+8u6Zf4JqxzoDNdqLsjNhIuFbkCK + IdieZBqzIXx0NjF5QxZCyhTNl5FxM+4LMCVh+OsB7WmwGMWfopGhLeGsdDNG + 2UH3a6hinslJso92N/N4aHqC61IQVSynsoQW1C9eBsp6UZUtbI7zOTl1cQjF + DCx7fdUwJSYo6ycblS/7WAf6ewKINS8KaBgXcVA99gwiVgMVkIXs7+j7ONiL + APAHuaUy4iCNV9J6YnWi3CN/oaKQzrk7JuQn7jFOqBcHnTp33nK13LAh1DyN + xqjE/Y31czF61WlKdKmdnlSv+RxrnCkSieAYcRMtXBfJsXnmA2f2IjfBPZ3D + UWWDUa7aXuEDakiBXKnzWkhMJD8eHq7X64M5meRO5CV4Hfoh6rxDEjpZ6LTV + 6wfq6piun83MJT7tv9G3+JimG10BmO/4s39WGXDY1aOXrMZuIJWiGh4c/gb/ + P3G/9JTYThYYx74kG4QvDdWLA/LhXnsokcuUQoFTTcI06RoKNth+il0y3v47 + j7HalFYEH0XPi9xzvWKeMa/o2LflQ1fxgW8c6QIjdGcA9OQS5f58Q81mUuxd + 61Iznxas8MHDy7zM1SX9GkIfUVa/8zqROA66BXYlYXYNSWJu/WLDaUaDU4Ty + CFtJYf8hfKBMak7VxhudOK7HPYRUkxQMpiAgdbl59n5xSB2bU9aOyWDWDMS3 + g+qVOFVh93xTFLT319L39/WX2ADFo3UPvOwqp3QdqoeUPwiI4zokNXZJNwVe + xnDkrTJnBg+yS9Zo3TYoI9WntkM+WDYrZy6P+3ZsPhIaBFrEOCLeiAXQ6O4m + wIvayl3fi3fHZ+KPf9rn7UnCZZ7F0Ba7Cjz8ECTCxxNzg6x4iWJFibYVv3EQ + xvPDWOI5b3KYxt99f5hrUz2O/RVFWcBpsEoqKIsGW4VtzV7mivq00mJRzw5/ + mypzegS7hUFtktfTIfZ73nopDLhdA8bg3cGGYXdjZ8Y8TTNG80elJaP5rqcx + k5FnUo7tboqpnBTvEe8YUCnGRvQt4XaCuvp0QIBhvADQtmI5OjMv4D4yCDvJ + hXAif5U0x3AeM3xzzpfyVi7rxnbz5ciNJke6NzFdxXW4vvn227qwxndvrSdL + L8ARihGeFnOLyq0mOuiAs3yrCc3FTyCUhNSWxYfYiqlt6z9+iIgxGtFK2Wmc + lhrHrPMqIiNUyURNK8j9OaW0dtKpdY1EpVbid+rstvzTvHI6+3RRq52MtKaY + 7U5B7RTUTkHtFFTlWvZVUHRyXqefAunvWcusZIxKaDDHqkX9tUnrIdSdynua + Ku+FKIYzAus6nHI8I0nDqEE14scH9E6VasSnh7mnHVQjfCZIryKLmBN+K50T + z4bzNLwdct/R7sOfCcKu+26cSfwyYbKRUkua/PmBeqtInKSuD39jZTxxvxzq + DzACB3/VB+BO3n98f/m+jmjP5TK8xUC/IDAcOHVEsaV5XSiORh4lEgeQhgXi + zJ7qNRoBrcIy9MKrwJv1AUKD935xfYsi82HYO7uJrBASa4oYKyquChn3J+FO + MWSk4rjcT21HwU+IgpvtMfik1B/yeai2J6SdFK+qpjQb2FW91Zpje1hHE91/ + RnectpzLTVz67PmhRP4NRl8T9X/VfFNFvo2nL4p4K49fupJui+wShvVNIszI + z4tstxp54RXZRujF/uDhQy+FnW6Hw6+9xv7/nDlCb9HoiXRidia74TGCfNog + Zp7fGcET0swvRM5v5FawDQGNZr9Rfb7Jb4T/kBRUr4PJzX/19Rs5gk9+IwPa + aGnr8cawtQtDDrS2aW3GENL2bVBbtiwY5/3y6hZY+SF9xTHt1gYfU1N8k4/Z + ndw3+5gKBOaeYRu9HbkPJneD0xjHgpMZHo+pEhxKp0xW06nUVfZglsSevFU9 + LdV5oVpZbvlL3+gTOjwz02/FMvI9WXeuSIdxI+vlttzdqKj5o0dS06MLhGZH + VsuEDY5sQSz0cGOPqUcDigO+KJlFQhgUcq83ugZPhwm7UmWJBOt92WoK/B0R + bZP7qkm20X1tR7BtnFe++8OM+nzocytKAq+I1WtBwl/J+H2lAFBNFJRE7j3x + stAPBsaIpPvK5PGzFyzdwUpjNK8d92VZ8txdL5muVMW2laBSqD7Y51bS6JSC + f03XmVVO6+0g715hV44TbN3tv1RdrbxgxfXOFAJQs8auQhQWUOe4vhPPTXUF + 3gl3IC5DMVe3uedureKXgKr4rncvsW7WUL1cTLvPz/lbtD7v8Vkc92kFwyVc + JVk1SLfF4Y5B7qnXb3XoypIcoWBp8hpv/lOQhTNLdcsE09iqzAvig+mD5dCd + FuVuWGNHOGp01kYN9IgRjtG1UNSULagVQlSZLtjfnzo7ujz+a51WuiKyIRKQ + dzqnSHk53D2IoyBCZ4cIQg/YaOlg142N+mvnfj1KtOGrMwar2Ill3iZ+Um+N + yFBXtUZeEzvtGGXHKA/NKC+EHeEmktdol8Pb2Mewhpk49Zle2MhH1jt9vHnq + pqgIxtxQ0sqVB7vxNheZ6OKPWLnhCo4wF2JrC3Eaxrz5brEbMlvY47kYo7Ic + zym6H0kchNN48BKj6bmMUvHp+BxDNgf/jub74iAK8P/n3mwf0+MPIncGZi32 + 4R4e8bOx/6jKmnstL/itAII6keG6iQV1o1INgkzBNExxhaXivzi+Z9+FJCYX + n8QP3/3l9RuqpO6aSl5s19pz9SPlVC7AVs01WGe3aV2ilmFLji6Fe4kXIA9Z + +Et7fXX9PEKmPngdF9KgdBk705t8F76OOGU4AEVg20HswtcRnapLJDqiUbxI + gjfS6lmf+bu6H2gsfXnr2LcVchKzvpXKgamk2Essk3TcOZTl4/8jUqghk5P3 + H46uPl5aD2VAAQWtAUXFO6Aizie/HF2+1ytk1LT6/iSbd5KH1bwEOCMX577U + PQt0uc031MkAsbY+P8QaHRTxUYhlODk2VdfjacDas9bt94C7aG0RPl0ed1A1 + ly3607XWjH07ehtTpur9p51ZMDydvcrJaDz0Z7uo1Yl/r8N9vBbKCfhOWtcc + 9BPl8eGnuLjxIq4eA+mTLB40nIzUzlg96sHH06bKWsJCA+j+Ejetkbis16oJ + LM09G0xd2JV9ZstHgm/KH/eGrnrVUtTnGPCgmxMMeucSqOMYnWHULqdgOBfZ + l8pgjJ/EthcGI9noURz+m1u+9kSyaDC4Morl1DQPxyLVIBSzVTAtYl3W8++O + LibHtgb9cPXxY3cVf2JQsGFZv3ZStIWQ/C+eXBcvnuhpXTNAPlIAqIL+xWF5 + yoNIktmK+/GbPIiq4MiDJDaUzIedPfCU0hTNOrfsRtCYmmFfXVEtTXvEbbiY + QCVh/M6CNLtAyFcdCOEVL8Yed9GQrUdDgGCOOZ3jKJkErrzDyw0QveGqOZG5 + e7McbFGqBigt3LBtfgohnV2g5sECNbvAyxiBl6K9cypdz7kiOZx3gvaWuSdm + DR2wr6PUpri9/zj8D71pZmMxwUldELn3/Zu33/70LsMaXKc0nIZ+Prkr8ZaR + nxOLAAT7tgIPpkUHLTOrDlmJ8FQPb98esp2lX/ySURomKC1RDnUfw3y6abQa + 2m1rXTbkULJtWZ9A2d09z5ovKu4vhB+qrcvxC+pUd6avq5ouv5YtEdiFFNou + 1ehVhx32q6OieX71g8/fq88J1aaUQN72NvmAdZ57m9Q/Mo9M/BNY8RDrbdlC + HicH0HHdMye2ays7McZxTYv4iGDqa2tgkI4S7SsKRYx+rMNBzJGi0WCEF6+E + 77fYjrj2w2vlmYtkEa58V13WqkJQ2Q3Ik5ndnZG+IwJXLr++PSvv+tO9lJHv + TDFHGiDgMThmjGO0nqIcPApB88y9vOhH5uBwGZuVLK4vnOQ7AiRYNLd4G/HU + 4TtjvQAhJXyBXeH4hZDGa25Rhf+6ClPnVQ3ddO/8uItgfS0RrBztj7bCMfUk + 277s5nG69tWUfKN76cLwnkuZqLoRcxkuHdxQdRHlxoDy8/Hn3PNdXPAB44KP + dVJH77U4p+sugJ9zqLPgNexSlbp99rBODJNJUumCpOFqgwvCbzS7IIf5lzp0 + a1VyV2Vi6EI2lBjGkFbGGtlNMT168ESnMSziwSyz44FNWVXpxoSqtCGXKiPm + hqSqJmI+VT1cbTfwcRLz8qPuyHXLdLcKNlOefmcD7RVfa0995xIdxYwATd3y + 45CgmsiOCB+MCJsKIhUNtqmGrCO9zYWPjcHEXZhwFybchQl3YcJdmLA18rsw + 4S5MKHZhwi7o7MKEuzDhEzT3n2OY0KzS152Pl/k9+osHScyrGLbANDnnrumq + Sfbtqi+aLEQXRr1vEiw5DjVsPbSwK5jT/3zs7LZdwVzL+0N2dyR+NSl7RUXY + 8o7EKO8SdbxRQH3d8kIB9fbhb/zH8GvolO+l76FrUdv3hBqF2Vw3Vlc1BvVI + DczMPIoU+WSvoNPk2+J2gNa02+H+OUW+rS+g2xHvwxNvk6bjcNJzvkbrsZVW + jk8bS8M1q7Zr2q+1Wncf4sh1bc3C95nznfXPTL9sz27cQPdfN8tUUW5D2Zmm + 2zad+5uptn3jfj3m74hWN1Hc8ysiekLyueAxYOkzN3fv6zVkENp6DtkXYIGZ + fwy/kCyD9bBehB0rGssSs5ZlDNQyeI9lktkTej4+hUXcbfyKrpS92b+waPoR + WoXtqLk7NTfqL/PdI+mvJ6SIMuabuB/C+P3S8fx2bGi9X2RIe2OAByW+1IP5 + zqn4PikQmyZB7LaPgDG5C3Z7o20m81PrSPe5oWj89cKbLrIeAXkpMTl5GJbg + SfWifcMzz8R6e/7x5BzHNbvmFqu1dM8tE7K7i57dDm9bb61ddKLCU2CMvpkp + R2K6SlIwFpcMpHAXVhCmGN3ju6FosK4ZVU9SIScycH+2pkbCtDqVqluuUuBW + LRm3h9LNkzgNJE4wBW8eh6soqeov5c2DMFanmUbgwu8JhnI89lXjkFs4qYZK + Nords1+6GgMl0VcfYqnV+k/fVqgSIE0REkt8tIqSbBQeHSIl1tjPyEoeTHdt + SOiZ3Wr2eD1QbCJqdTNaZ5+v3f1oto8zSlOUp0TyT94xNAimsRMkM2BG1DDJ + wouG6UjKY+KbqEl3gSr8hpTXN7pswPGTULjw2zx2XJmrCaAXKTF5HXu4vQ+e + jdLS//3dKMLG+idbkrS7E667KGlxM1wVT+xExE5E7ETEQ16FF8WARpx6Tffh + NR+zGABtT1nMByBL+O/7/5T3g89YFKhndB6ZkWS2DL0Ru5GmiXBpKYZht5UO + zlU4WnIgAtqyFNOWJIG17AVB8LTjfn0OjDI2bXNe1I1HW5wWKSB4VuTBL0Ct + O0bdMepwRm1Uvuqz5xXUf3phiea4fCZYWoblM4uje1ReJ85pcYIF1buUuU0E + /5UySRWtNoWAM0ptFQHeRKcdAsDZyL8jMt1Mc7t8uS3HjDO6axcy7mb2tQ0Y + awviiYSLd2ZhZ+SeoVm4U5J9w8OZ0GgZHe4oNVrFhnfRnJ00EDtpsFVp8ELY + kWCwMnxsO6NnXI4D10eX9LdtYktmnM5W9fs7thisPi2JpsBzBVUcnU24B9gy + dKUvnCQJpx61H1CtiXTTOScRf7v49PMDN4NcqH5ZdfgCdgWUR+L7uKmj3Mb7 + oHAqxXsh66YAPrmknToQ56aTW5I6eD1qKt6Il/ixF3ip5/iCbvW2vn7FeVWx + 5CZvS9hjvXXSATuRG25Qs7m0lJol7yg/zt1XjakSLHud4vmThZ6+AI9zVGWu + C2KrC6vePETW1hPOgdnUE4Ca45yE68Bqj9Pe/DCipJ3xsUGaNBgbn25lTIeR + SU8BYlqdgea59fCCVJQn1rebRMu1k8jGRo9tBEyRKw0Put6scH+rmtDc8YIk + JRZKZLpf9Q72bYHPMcuR387P04yJvApLnUh+naotudvfUsZzvWROcG8a5Szp + ZDi0UOUGJ5Xw7Z6SlXiq5pNJ7qyZH4Xc6I87pT94auyjyvxnJHqaRMiW+2u9 + +fb0kbprZUJLf/qwbbYqxi+QTrV9iP0c+6YJqK9b5ggAqSy5EYb6i7EmEIe/ + 4R/3w6syCcwmGW3GH0EaKFgjGXRP0fVVOzMCUvnNeRAxuF/e89LEHl9U5iyp + Jo+M+a2FQzaI2TYf/e/YbHQ2U3VALMp6NkXOrD8wP8gnoh5zaIBgTYzVY84R + LLTdMlMObZf8+5IWjf3sGMo5fvmM6iH65w1oAdUuaaBJRvVIIzimRvSJaYIP + i66dkjkgF5RkyE5sPSpnlRipvttkAx89B/6r4qOGnAbNRW0SGnrw0OYUB9Ab + lgz2+Ip4Z8c/T13t48apHdtXdcWo621Nj5v5kgI4uik6zjyKpPuqMYg6zCgA + D/0c/Fi/5gKFVpFqgIHBWhGsltcyxp2wiNMqomayZaGwj7W/LlVjRA7WOdRM + 6e23XePF9gcKM44/fNttZQAteRneyP6xQtxHL1hxBXSKoNSs8WYMqjFfxOFq + vhC+E89paWDSSC9YCB2KubrxIcBrCSJ1YwK/BETE90HkQvJKpdIlIPju5z38 + 9EzP4/NedjGXdfkL70e7kN02dEs7JfHMCld75xBpDdMqgWiQK9kunSgQ8g6W + HoUVW/2jZBXtFNEuzNPkuP2u7M0N53MsD9odzw0TCC0yhUriYMfoO0bfMXrH + zB+VpaHx73y2o75vebpj3kcJwH8O79Jfus3tGWUMZqswCqeVr7V7QGaz5lJg + rueWHqe0YdMZi6b7VmlvHYi+Q3v/Hd0/dbpv0g4m/edxNMNXUwXTGCLVXNom + SJrpwr4RUV30lY37fDizK/X3oPRdzde24zWa7FpFbDqppZYFX1n63tMo+NpC + 859xNJdG7Amrrlp/qE5zfaXarooNN8RJNB+2TWTuwohtaqgezjLcMdiOwbZT + 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/full2014-07-11T09:41:23.890Znamecollectionpankajbasnal17pankajbasnal17@gmail.com11https://spreadsheets.google.com/feeds/worksheets/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/private/full/od62014-07-11T09:41:23.890ZSheet1Sheet1261001" + 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/full2014-07-11T09:41:23.890ZSheet1pankajbasnal17pankajbasnal17@gmail.com271100126https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R2C12014-07-11T09:41:23.890ZA2pankajpankajhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R3C12014-07-11T09:41:23.890ZA3basnalbasnalhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R4C12014-07-11T09:41:23.890ZA4kanhaiyakanhaiyahttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R5C12014-07-11T09:41:23.890ZA5varshavarshahttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R6C12014-07-11T09:41:23.890ZA6joshjoshhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R7C12014-07-11T09:41:23.890ZA7hariharihttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R8C12014-07-11T09:41:23.890ZA8mudgalmudgalhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R9C12014-07-11T09:41:23.890ZA9fionafionahttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R10C12014-07-11T09:41:23.890ZA10rishirishihttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R11C12014-07-11T09:41:23.890ZA11anilanilhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R12C12014-07-11T09:41:23.890ZA12jirenjirenhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R13C12014-07-11T09:41:23.890ZA13manojmanojhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R14C12014-07-11T09:41:23.890ZA14avinashavinashhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R15C12014-07-11T09:41:23.890ZA15gautamgautamhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R16C12014-07-11T09:41:23.890ZA16a new onea new onehttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R17C12014-07-11T09:41:23.890ZA17oldoldhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R18C12014-07-11T09:41:23.890ZA18pankaj@gmail.compankaj@gmail.comhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R19C12014-07-11T09:41:23.890ZA19me@i.comme@i.comhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R20C12014-07-11T09:41:23.890ZA20he@you.comhe@you.comhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R21C12014-07-11T09:41:23.890ZA21heroku@josh.comheroku@josh.comhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R22C12014-07-11T09:41:23.890ZA22facebookfacebookhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R23C12014-07-11T09:41:23.890ZA23orkutorkuthttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R24C12014-07-11T09:41:23.890ZA24googlegooglehttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R25C12014-07-11T09:41:23.890ZA25josh softwarejosh softwarehttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R26C12014-07-11T09:41:23.890ZA26adding a new name adding a new name https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R27C12014-07-11T09:41:23.890ZA27just chilljust chillhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R28C12014-07-11T09:41:23.890ZA28airnowairnow" + 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/full2014-07-11T09:41:23.890Znamecollectionpankajbasnal17pankajbasnal17@gmail.com11https://spreadsheets.google.com/feeds/worksheets/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/private/full/od62014-07-11T09:41:23.890ZSheet1Sheet1261001" + 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/full2014-07-11T09:41:23.890ZSheet1pankajbasnal17pankajbasnal17@gmail.com271100126https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R2C12014-07-11T09:41:23.890ZA2pankajpankajhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R3C12014-07-11T09:41:23.890ZA3basnalbasnalhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R4C12014-07-11T09:41:23.890ZA4kanhaiyakanhaiyahttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R5C12014-07-11T09:41:23.890ZA5varshavarshahttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R6C12014-07-11T09:41:23.890ZA6joshjoshhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R7C12014-07-11T09:41:23.890ZA7hariharihttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R8C12014-07-11T09:41:23.890ZA8mudgalmudgalhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R9C12014-07-11T09:41:23.890ZA9fionafionahttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R10C12014-07-11T09:41:23.890ZA10rishirishihttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R11C12014-07-11T09:41:23.890ZA11anilanilhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R12C12014-07-11T09:41:23.890ZA12jirenjirenhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R13C12014-07-11T09:41:23.890ZA13manojmanojhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R14C12014-07-11T09:41:23.890ZA14avinashavinashhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R15C12014-07-11T09:41:23.890ZA15gautamgautamhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R16C12014-07-11T09:41:23.890ZA16a new onea new onehttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R17C12014-07-11T09:41:23.890ZA17oldoldhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R18C12014-07-11T09:41:23.890ZA18pankaj@gmail.compankaj@gmail.comhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R19C12014-07-11T09:41:23.890ZA19me@i.comme@i.comhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R20C12014-07-11T09:41:23.890ZA20he@you.comhe@you.comhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R21C12014-07-11T09:41:23.890ZA21heroku@josh.comheroku@josh.comhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R22C12014-07-11T09:41:23.890ZA22facebookfacebookhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R23C12014-07-11T09:41:23.890ZA23orkutorkuthttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R24C12014-07-11T09:41:23.890ZA24googlegooglehttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R25C12014-07-11T09:41:23.890ZA25josh softwarejosh softwarehttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R26C12014-07-11T09:41:23.890ZA26adding a new name adding a new name https://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R27C12014-07-11T09:41:23.890ZA27just chilljust chillhttps://spreadsheets.google.com/feeds/cells/1g2JX-w0XtcWD7yZo-K3cSHs7PhycCwhaYYmwajsLIwE/od6/private/full/R28C12014-07-11T09:41:23.890ZA28airnowairnow" + http_version: + recorded_at: Mon, 14 Jul 2014 12:26:24 GMT +recorded_with: VCR 2.9.2