middleman-google_drive 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 046c0207e7aeb1e5536b1838144a08ce0c46440a
4
- data.tar.gz: b16aca8e31aeb09d297a0d139662184aac4ba5f9
3
+ metadata.gz: 16c1bd804f853f95a62015f235fa40dac151a003
4
+ data.tar.gz: af02439107587b497cfe943fd0499798c6908b3e
5
5
  SHA512:
6
- metadata.gz: c2344bc5ce55c5e0c28a422ee86355568afeda34019564a34d6dbd9361e11ad619c37c67c9491252383de4a0e16dcc096dbed3ff5e720e27b94feddde0ae06ff
7
- data.tar.gz: 9102b25373ca55a560115d7246226d0f5c33dccfc74310cf80d94219cd5c771f9fa73de47b5b6fc4af02dd233c2da126b746777b2f87cb5f7e89f9c6b326dad2
6
+ metadata.gz: 1a3ab2878383a99299331cf70bb715e55b4552f5bdc8a58ae9f47fab38035ed36b724da8c69cee9d59a40bd7954d70037c14bc78853bd9385ba5b09f1f0aa4db
7
+ data.tar.gz: 087b46c200f6556ba3a72e86da8e57f0ad22d75b6641e65b28ec2ef8efc8b82622f85472f33f6f7d563e989239c85c15fc7820fb7e0c17a38cbe25355320c79d
data/README.md CHANGED
@@ -35,6 +35,8 @@ Then you can use the data in your templates:
35
35
  My column name: <%= row['My column name'] %>
36
36
  <% end %>
37
37
 
38
+ ## Setup
39
+
38
40
  The first time you use this extension, you will have to configure the authentication
39
41
  with Google docs. There are two parts to this. First you will have to register
40
42
  a client application with Google and get API keys. Tarbell has a [great
@@ -1,4 +1,4 @@
1
- require 'google_drive'
1
+ require 'roo'
2
2
 
3
3
  module Middleman
4
4
  module GoogleDrive
@@ -10,10 +10,9 @@ module Middleman
10
10
  super
11
11
 
12
12
  @client = Middleman::GoogleDrive.connect
13
- @session = ::GoogleDrive.login_with_oauth(
14
- @client.authorization.access_token)
13
+ @drive = @client.discovered_api('drive', 'v2')
15
14
 
16
- app = klass.inst
15
+ app = klass.inst # this is obviously where you would store the app instance
17
16
  options.load_sheets.each do |k, v|
18
17
  app.data.store(k, get_sheet(v))
19
18
  end
@@ -21,11 +20,58 @@ module Middleman
21
20
 
22
21
  def get_sheet(key)
23
22
  data = {}
24
- s = @session.spreadsheet_by_key(key)
25
- data[:title] = s.title
26
- s.worksheets.each do |sheet|
27
- data[sheet.title] = sheet.list.to_hash_array
23
+ # we're gonna request the spreadsheet in excel format
24
+ format = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
25
+
26
+ # get the file metadata
27
+ list_resp = @client.execute(
28
+ api_method: @drive.files.get,
29
+ parameters: { fileId: key })
30
+
31
+ # die if there's an error
32
+ fail list_resp.error_message if list_resp.error?
33
+
34
+ # grab the export url
35
+ uri = list_resp.data['exportLinks'][format]
36
+
37
+ # get the export
38
+ get_resp = @client.execute(uri: uri)
39
+
40
+ # die if there's an error
41
+ fail get_resp.error_message if get_resp.error?
42
+
43
+ # get a temporary file. we can't just write to it because ruby's
44
+ # tempfile tries to be clever and open the file for you, except we
45
+ # need to open the file in binary mode, so thanks ruby.
46
+ fp = Tempfile.new(['gdoc', '.xlsx'])
47
+ filename = fp.path
48
+ fp.close
49
+
50
+ # since the export is binary, reopen the tempfile in write binary mode
51
+ open(filename, 'wb') do |f|
52
+ # write the digits
53
+ f.write get_resp.body
54
+ end
55
+
56
+ # now open the file a third time with Roo. (Roo can't handle an IO
57
+ # object, it will only take filenames or urls, coulda done this all
58
+ # in memory, but alas...)
59
+ xls = Roo::Spreadsheet.open(filename)
60
+ xls.each_with_pagename do |title, sheet|
61
+ # if the sheet is called microcopy or copy, we assume the first
62
+ # column contains keys and the second contains values. Ala tarbell.
63
+ if %w(microcopy copy).include? title.downcase
64
+ data[title] = {}
65
+ sheet.each do |row|
66
+ data[title][row[0]] = row[1]
67
+ end
68
+ else
69
+ # otherwise parse the sheet into a dict, incorrectly, of course
70
+ sheet.header_line = 2 # this is stupid. theres a bug in Roo.
71
+ data[title] = sheet.parse(headers: true)
72
+ end
28
73
  end
74
+ fp.unlink # delete our tempfile
29
75
  data
30
76
  end
31
77
  end
@@ -1,5 +1,5 @@
1
1
  module Middleman
2
2
  module GoogleDrive
3
- VERSION = '0.0.6'
3
+ VERSION = '0.1.0'
4
4
  end
5
5
  end
@@ -39,10 +39,7 @@ module Middleman
39
39
  issuer: issuer,
40
40
  signing_key: key,
41
41
  scope: [
42
- 'https://www.googleapis.com/auth/drive',
43
- 'https://spreadsheets.google.com/feeds',
44
- 'https://docs.google.com/feeds/',
45
- 'https://docs.googleusercontent.com/'
42
+ 'https://www.googleapis.com/auth/drive'
46
43
  ]
47
44
  )
48
45
  )
@@ -63,16 +60,14 @@ module Middleman
63
60
  puts 'You need to create a client_secrets.json file and save it to `~/.google_client_secrets.json`. Find instructions here: http://tarbell.readthedocs.org/en/latest/install.html#configure-google-spreadsheet-access-optional'
64
61
  exit
65
62
  end
63
+ puts 'Please login via your web browser'
66
64
  client_secrets = Google::APIClient::ClientSecrets.load(
67
65
  client_secrets)
68
66
  flow = Google::APIClient::InstalledAppFlow.new(
69
67
  client_id: client_secrets.client_id,
70
68
  client_secret: client_secrets.client_secret,
71
69
  scope: [
72
- 'https://www.googleapis.com/auth/drive',
73
- 'https://spreadsheets.google.com/feeds',
74
- 'https://docs.google.com/feeds/',
75
- 'https://docs.googleusercontent.com/'
70
+ 'https://www.googleapis.com/auth/drive'
76
71
  ]
77
72
  )
78
73
  client.authorization = flow.authorize(file_storage)
@@ -6,12 +6,13 @@ require 'middleman-google_drive/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'middleman-google_drive'
8
8
  spec.version = Middleman::GoogleDrive::VERSION
9
+ spec.platform = Gem::Platform::RUBY
9
10
  spec.authors = ['Ryan Mark', 'Pablo Mercado']
10
11
  spec.email = ['ryan@mrk.cc', 'pablo@voxmedia.com']
11
12
  spec.summary = 'Pull content from a google spreadsheet to use in your middleman site.'
12
13
  #spec.description = %q(TODO: Write a longer description. Optional.)
13
14
  spec.homepage = 'https://github.com/voxmedia/middleman-google_drive'
14
- spec.license = 'MIT'
15
+ spec.license = 'BSD'
15
16
 
16
17
  spec.files = `git ls-files -z`.split("\x0")
17
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
@@ -20,7 +21,7 @@ Gem::Specification.new do |spec|
20
21
 
21
22
  spec.add_runtime_dependency 'middleman-core', '>= 3.0.0'
22
23
  spec.add_runtime_dependency 'google-api-client', '>= 0.7.1'
23
- spec.add_runtime_dependency 'google_drive', '>= 0.3.9'
24
+ spec.add_runtime_dependency 'roo', '~> 1.13.2'
24
25
  spec.add_development_dependency 'bundler', '~> 1.6'
25
26
  spec.add_development_dependency 'rake', '>= 10.3.2'
26
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman-google_drive
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Mark
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-07-01 00:00:00.000000000 Z
12
+ date: 2014-07-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: middleman-core
@@ -40,19 +40,19 @@ dependencies:
40
40
  - !ruby/object:Gem::Version
41
41
  version: 0.7.1
42
42
  - !ruby/object:Gem::Dependency
43
- name: google_drive
43
+ name: roo
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - '>='
46
+ - - ~>
47
47
  - !ruby/object:Gem::Version
48
- version: 0.3.9
48
+ version: 1.13.2
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - '>='
53
+ - - ~>
54
54
  - !ruby/object:Gem::Version
55
- version: 0.3.9
55
+ version: 1.13.2
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: bundler
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -101,7 +101,7 @@ files:
101
101
  - middleman-google_drive.gemspec
102
102
  homepage: https://github.com/voxmedia/middleman-google_drive
103
103
  licenses:
104
- - MIT
104
+ - BSD
105
105
  metadata: {}
106
106
  post_install_message:
107
107
  rdoc_options: []