middleman-spreadsheet 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +5 -0
- data/Gemfile +18 -0
- data/Rakefile +14 -0
- data/lib/middleman/spreadsheet/extension.rb +78 -0
- data/lib/middleman/spreadsheet/version.rb +5 -0
- data/lib/middleman-spreadsheet.rb +6 -0
- data/middleman-spreadsheet.gemspec +28 -0
- metadata +107 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1259e8e1a1357c6e0a95455117be302b671576a5
|
4
|
+
data.tar.gz: 711cc54f680d3a22b7861a6afbccc457ccfa9e3e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9fcd9eb87f0d5cd21a8a53cb81dc5c1ae70c9810f96cd257421fa98dbd4f445411c84d4952de7e9ec9f5fd793705e835695e76f7f746d24c2e07bee5b6ac72ef
|
7
|
+
data.tar.gz: fa3add330bc3a2d9a24b9fa8db8cd8fe100d4647b06eb379c1295870097338c2fc3dc12607c16e88f32908151dad790fa705af9746e870c8a962019013287d37
|
data/.gitignore
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# If you do not have OpenSSL installed, update
|
2
|
+
# the following line to use "http://" instead
|
3
|
+
source 'https://rubygems.org'
|
4
|
+
|
5
|
+
# Specify your gem's dependencies in middleman-spreadsheet.gemspec
|
6
|
+
gemspec
|
7
|
+
|
8
|
+
group :development do
|
9
|
+
gem 'rake'
|
10
|
+
gem 'rdoc'
|
11
|
+
gem 'yard'
|
12
|
+
end
|
13
|
+
|
14
|
+
group :test do
|
15
|
+
gem 'cucumber'
|
16
|
+
gem 'aruba'
|
17
|
+
gem 'rspec'
|
18
|
+
end
|
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
require 'cucumber/rake/task'
|
5
|
+
|
6
|
+
Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t|
|
7
|
+
t.cucumber_opts = '--color --tags ~@wip --strict'
|
8
|
+
end
|
9
|
+
|
10
|
+
require 'rake/clean'
|
11
|
+
|
12
|
+
task test: ['cucumber']
|
13
|
+
|
14
|
+
task default: :test
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'middleman-core'
|
2
|
+
|
3
|
+
module Middleman
|
4
|
+
module Spreadsheet
|
5
|
+
class SpreadsheetNotFound < Exception; end
|
6
|
+
class CredentialsNotFound < Exception; end
|
7
|
+
|
8
|
+
class Extension < ::Middleman::Extension
|
9
|
+
option :credentials, nil, 'Google API credentials'
|
10
|
+
option :data_name, "spreadsheet", 'Spreadsheet key'
|
11
|
+
option :spreadsheet_key, nil, 'Spreadsheet key'
|
12
|
+
option :spreadsheet_url, nil, 'Spreadsheet url'
|
13
|
+
option :spreadsheet_title, nil, 'Spreadsheet title'
|
14
|
+
|
15
|
+
def initialize(app, options_hash={}, &block)
|
16
|
+
super
|
17
|
+
|
18
|
+
require "google_drive"
|
19
|
+
require "sheet_wrap"
|
20
|
+
|
21
|
+
session = drive_session(options)
|
22
|
+
|
23
|
+
if options.spreadsheet_key
|
24
|
+
spreadsheet = session.spreadsheet_by_key(options.spreadsheet_key)
|
25
|
+
elsif options.spreadsheet_url
|
26
|
+
spreadsheet = session.spreadsheet_by_url(options.spreadsheet_url)
|
27
|
+
elsif options.spreadsheet_title
|
28
|
+
spreadsheet = session.spreadsheet_by_title(options.spreadsheet_title)
|
29
|
+
end
|
30
|
+
|
31
|
+
raise SpreadsheetNotFound, "No spreadsheet specified" unless spreadsheet
|
32
|
+
|
33
|
+
data = spreadsheet.worksheets.each_with_object({}) do |worksheet, hash|
|
34
|
+
sheet_wrap = SheetWrap.wrap(worksheet)
|
35
|
+
hash[sheet_wrap.title.to_sym] = sheet_wrap.rows.map(&:to_h)
|
36
|
+
end
|
37
|
+
@app.data.store(options.data_name.to_sym, data)
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def drive_session(options)
|
43
|
+
if options.credentials
|
44
|
+
credentials = Google::Auth::UserRefreshCredentials.new(
|
45
|
+
client_id: options.credentials[:client_id],
|
46
|
+
client_secret: options.credentials[:client_secret],
|
47
|
+
scope: GoogleDrive::Session::DEFAULT_SCOPE,
|
48
|
+
redirect_uri: 'urn:ietf:wg:oauth:2.0:oob',
|
49
|
+
)
|
50
|
+
if options.credentials[:refresh_token] || self.class.refresh_token
|
51
|
+
credentials.refresh_token = options.credentials[:refresh_token] || self.class.refresh_token
|
52
|
+
credentials.fetch_access_token!
|
53
|
+
else
|
54
|
+
STDERR.puts "1. Open this page:\n#{credentials.authorization_uri}"
|
55
|
+
STDERR.print "2. Enter the authorization code shown in the page: "
|
56
|
+
credentials.code = STDIN.gets.chomp
|
57
|
+
credentials.fetch_access_token!
|
58
|
+
STDERR.puts "3. Save refresh_token: #{credentials.refresh_token}"
|
59
|
+
self.class.refresh_token = credentials.refresh_token
|
60
|
+
end
|
61
|
+
GoogleDrive::Session.from_credentials(credentials)
|
62
|
+
elsif options.config
|
63
|
+
GoogleDrive::Session.from_config(options.config)
|
64
|
+
else
|
65
|
+
raise CredentialsNotFound, "No credentials specified"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.refresh_token=(token)
|
70
|
+
@refresh_token = token
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.refresh_token
|
74
|
+
@refresh_token
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'middleman/spreadsheet/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "middleman-spreadsheet"
|
8
|
+
spec.version = Middleman::Spreadsheet::VERSION
|
9
|
+
spec.authors = ["hogelog"]
|
10
|
+
spec.email = ["konbu.komuro@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Middleman extension for using Google spreadsheet as data files.}
|
13
|
+
spec.homepage = "https://github.com/hogelog/sheet_wrap"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
17
|
+
f.match(%r{^(test|spec|features)/})
|
18
|
+
end
|
19
|
+
spec.bindir = "exe"
|
20
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
|
+
spec.require_paths = ["lib"]
|
22
|
+
|
23
|
+
spec.add_dependency "sheet_wrap", ">= 0.1.1"
|
24
|
+
spec.add_runtime_dependency "middleman-core", ">= 4.2.0"
|
25
|
+
|
26
|
+
spec.add_development_dependency "bundler", "~> 1.14"
|
27
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: middleman-spreadsheet
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- hogelog
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-01-26 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: sheet_wrap
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.1.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.1.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: middleman-core
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 4.2.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 4.2.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.14'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.14'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.0'
|
69
|
+
description:
|
70
|
+
email:
|
71
|
+
- konbu.komuro@gmail.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- ".gitignore"
|
77
|
+
- Gemfile
|
78
|
+
- Rakefile
|
79
|
+
- lib/middleman-spreadsheet.rb
|
80
|
+
- lib/middleman/spreadsheet/extension.rb
|
81
|
+
- lib/middleman/spreadsheet/version.rb
|
82
|
+
- middleman-spreadsheet.gemspec
|
83
|
+
homepage: https://github.com/hogelog/sheet_wrap
|
84
|
+
licenses:
|
85
|
+
- MIT
|
86
|
+
metadata: {}
|
87
|
+
post_install_message:
|
88
|
+
rdoc_options: []
|
89
|
+
require_paths:
|
90
|
+
- lib
|
91
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
101
|
+
requirements: []
|
102
|
+
rubyforge_project:
|
103
|
+
rubygems_version: 2.6.10
|
104
|
+
signing_key:
|
105
|
+
specification_version: 4
|
106
|
+
summary: Middleman extension for using Google spreadsheet as data files.
|
107
|
+
test_files: []
|