paperize 0.0.1 → 0.0.2

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: 159c719916881f2d6a2d3435b2bb5569f4a3aff3
4
- data.tar.gz: 617392ecb5f294cbfc35085f629c36ce52f3ad5a
3
+ metadata.gz: 37ee371bd3275e7459483b22a5b2eb24fd20ef23
4
+ data.tar.gz: c8856c44fc22ff74685b582575779a056d450783
5
5
  SHA512:
6
- metadata.gz: ba16aa9f9c9c65df9daad7a06b438ba5377eaf911ec9d706604fe834db630842a6f95ba536c88f20aef8114c50e64ee81b2502ce1be9d18ea81e2f536de4c8b4
7
- data.tar.gz: 9a5937d8e3790bfa6994f724277e1e115c8c0da16578a5c6f5f4965455475c9d779b9c79bf459459a94e124bfa9ae2e6a36e4e4d5440d376caf33e42c42b530f
6
+ metadata.gz: ca5189fa54f4459202402da235480c5b56dc1a1d956d3ef1509b6b96f8d3ef5844eaae034f32966b500cc52451b552bf1d1e8fb1ae8ab9c19f874c50303f92ac
7
+ data.tar.gz: 451498847341aab98ac3fb984de6ba900ebb35c414d70c304269db76fcb63ffa7e919cf7747fb3b4991b52ad90efc26152ca850ecc10ccf8b6da0f9840fa9af1
data/Rakefile CHANGED
@@ -1 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
+
3
+ task :spec do
4
+ puts `ruby -Ilib spec/*_spec.rb`
5
+ end
6
+
7
+ task default: :spec
@@ -6,14 +6,18 @@ require "prawn/measurement_extensions"
6
6
 
7
7
  require "paperize/version"
8
8
  require "paperize/spreadsheet"
9
+ require "paperize/worksheet"
9
10
  require "paperize/template"
10
11
  require "paperize/layout"
12
+ require "paperize/exceptions"
11
13
 
12
14
  module Paperize
13
- def self.render!(filename, card_items, layout)
14
- layout.layout_cards(card_items)
15
- layout.document.render_file(filename)
15
+ class << self
16
+ attr_accessor :source
16
17
 
17
- puts "Done! Rendered to #{filename}"
18
+ def render!(filename, card_items, layout)
19
+ layout.layout_cards(card_items)
20
+ layout.document.render_file(filename)
21
+ end
18
22
  end
19
23
  end
@@ -0,0 +1 @@
1
+ class Paperize::DuplicateColumnLabelException < Exception; end
@@ -1,5 +1,3 @@
1
- require "paperize/adapter/google_drive"
2
-
3
1
  module Paperize
4
2
  class Spreadsheet
5
3
  attr_reader :spreadsheet
@@ -7,30 +5,26 @@ module Paperize
7
5
  @spreadsheet = spreadsheet
8
6
  end
9
7
 
10
- def parse_worksheet(worksheet_name, options={})
11
- worksheet = spreadsheet.worksheets.find do |worksheet|
12
- worksheet.title == worksheet_name
8
+ def worksheets
9
+ spreadsheet.worksheets.map do |google_worksheet|
10
+ Worksheet.from_google_worksheet(google_worksheet)
13
11
  end
12
+ end
14
13
 
15
- labels = worksheet.rows[0]
16
- attributes = labels.map { |label| label.downcase.gsub(' ', '_').to_sym }
17
-
18
- row_struct = Struct.new(*attributes)
19
-
20
- worksheet.rows[1..worksheet.num_rows].map do |row|
21
- row_struct.new(*row)
14
+ def worksheet_by_title(title)
15
+ worksheets.find do |worksheet|
16
+ worksheet.title == title
22
17
  end
23
18
  end
24
19
 
25
- class << self
26
- def import(options={})
27
- unless options[:google_drive] and options[:google_drive][:key]
28
- raise 'Only Google Drive is supported at this time. Please provide { google_drive: { key: YOUR_KEY_HERE } } as parameters to Paperize::Spreadsheet.import'
29
- end
20
+ def parse_worksheet(worksheet_name, options={})
21
+ self.worksheet_by_title(worksheet_name).rows
22
+ end
30
23
 
31
- if options[:google_drive]
32
- Spreadsheet.new Paperize::Adapter::GoogleDrive.open_spreadsheet(options[:google_drive][:key])
33
- end
24
+ class << self
25
+ def find(key)
26
+ google_spreadsheet = Paperize.source.spreadsheet_by_key(key)
27
+ Paperize::Spreadsheet.new(google_spreadsheet)
34
28
  end
35
29
  end
36
30
  end
@@ -1,3 +1,3 @@
1
1
  module Paperize
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,66 @@
1
+ require 'ostruct'
2
+
3
+ module Paperize
4
+ class Worksheet
5
+ def self.find(options={})
6
+ spreadsheet = Paperize::Spreadsheet.find(options[:spreadsheet_key])
7
+ spreadsheet.worksheet_by_title(options[:worksheet_title])
8
+ end
9
+
10
+ attr_reader :title, :labels, :attributes, :rows
11
+ def initialize(title, labels, rows)
12
+ raise_on_duplicates(labels)
13
+
14
+ @title = title
15
+ @labels = labels
16
+ @attributes = @labels.map do |label|
17
+ unless label.nil?
18
+ label.downcase.gsub(' ', '_').gsub('/', '_').to_sym
19
+ end
20
+ end
21
+
22
+ @rows = rows.map do |row|
23
+ card = OpenStruct.new
24
+
25
+ @attributes.zip(row).each do |attribute_value_pair|
26
+ attribute = attribute_value_pair[0]
27
+ unless attribute.nil? or attribute.empty?
28
+ card.send("#{attribute}=".to_sym, attribute_value_pair[1])
29
+ end
30
+ end
31
+
32
+ card
33
+ end
34
+ end
35
+
36
+ def cards
37
+ rows
38
+ end
39
+
40
+ def as_json(option=nil)
41
+ {
42
+ title: @title,
43
+ columns: @labels
44
+ }
45
+ end
46
+
47
+ private
48
+ def raise_on_duplicates(labels)
49
+ duplicates = labels.map do |label|
50
+ label if labels.index(label) != labels.rindex(label)
51
+ end.compact.uniq
52
+
53
+ unless duplicates.empty?
54
+ duplicate_sentence = "\"#{duplicates.join('", "')}\""
55
+ message = "Found duplicate columns: #{duplicate_sentence}"
56
+ raise Paperize::DuplicateColumnLabelException.new(message)
57
+ end
58
+ end
59
+
60
+ def self.from_google_worksheet(google_worksheet)
61
+ Worksheet.new(google_worksheet.title,
62
+ google_worksheet.rows[0],
63
+ google_worksheet.rows[1..google_worksheet.num_rows])
64
+ end
65
+ end
66
+ end
@@ -24,4 +24,5 @@ Gem::Specification.new do |spec|
24
24
 
25
25
  spec.add_development_dependency "bundler", "~> 1.5"
26
26
  spec.add_development_dependency "rake", "~> 10.1"
27
+ spec.add_development_dependency "minitest", "~> 5.3"
27
28
  end
@@ -0,0 +1,2 @@
1
+ require 'minitest/autorun'
2
+ require 'paperize'
@@ -0,0 +1,27 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe Paperize::Worksheet do
4
+ it "stores the labels" do
5
+ labels = ["Label 1", "label 2"]
6
+ ws = Paperize::Worksheet.new 'title', labels, []
7
+ ws.labels.must_equal labels
8
+ end
9
+
10
+ it "denies duplicate labels" do
11
+ proc {
12
+ Paperize::Worksheet.new('title', ['a', 'a'], [])
13
+ }.must_raise Paperize::DuplicateColumnLabelException
14
+ end
15
+
16
+ it "generates attributes from labels" do
17
+ labels = ["Casting Cost", "spell name", "oil/rope"]
18
+ ws = Paperize::Worksheet.new('title', labels, [])
19
+ ws.attributes.must_equal [:casting_cost, :spell_name, :oil_rope]
20
+ end
21
+
22
+ it "detects and modifies bunk illegal attributes" do
23
+ ws = Paperize::Worksheet.new('title', ['one', nil, '', 'four'], [[1, 2, 3, 4]])
24
+ ws.cards.first.one.must_equal 1
25
+ ws.cards.first.four.must_equal 4
26
+ end
27
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paperize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Loren Norman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-08 00:00:00.000000000 Z
11
+ date: 2014-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '10.1'
83
+ - !ruby/object:Gem::Dependency
84
+ name: minitest
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '5.3'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '5.3'
83
97
  description: Allows a user to specify a list of gaming cards in a spreadsheet, then
84
98
  generate a PDF suitable for print-and-play games and prototyping.
85
99
  email:
@@ -94,12 +108,15 @@ files:
94
108
  - README.md
95
109
  - Rakefile
96
110
  - lib/paperize.rb
97
- - lib/paperize/adapter/google_drive.rb
111
+ - lib/paperize/exceptions.rb
98
112
  - lib/paperize/layout.rb
99
113
  - lib/paperize/spreadsheet.rb
100
114
  - lib/paperize/template.rb
101
115
  - lib/paperize/version.rb
116
+ - lib/paperize/worksheet.rb
102
117
  - paperize.gemspec
118
+ - spec/spec_helper.rb
119
+ - spec/worksheet_spec.rb
103
120
  homepage: ''
104
121
  licenses:
105
122
  - MIT
@@ -124,4 +141,6 @@ rubygems_version: 2.2.2
124
141
  signing_key:
125
142
  specification_version: 4
126
143
  summary: From spreadsheets, cards!
127
- test_files: []
144
+ test_files:
145
+ - spec/spec_helper.rb
146
+ - spec/worksheet_spec.rb
@@ -1,45 +0,0 @@
1
- require 'google_drive'
2
-
3
- module Paperize
4
- module Adapter
5
- class GoogleDrive
6
- def self.open_spreadsheet(key)
7
- client = OAuth2::Client.new(
8
- ENV["GOOGLE_CLIENT_ID"],
9
- ENV["GOOGLE_CLIENT_SECRET"],
10
- :site => "https://accounts.google.com",
11
- :token_url => "/o/oauth2/token",
12
- :authorize_url => "/o/oauth2/auth")
13
-
14
- begin
15
- # try using a stored token
16
- refresh_token = ENV["PAPERIZE_GOOGLE_DRIVE_REFRESH_TOKEN"]
17
- auth_token = OAuth2::AccessToken.from_hash(client,
18
- {:refresh_token => refresh_token})#, :expires_at => expires_at})
19
- auth_token = auth_token.refresh!
20
- rescue Exception => e
21
- puts "Exception attempting to use refresh token:"
22
- puts e
23
-
24
- auth_url = client.auth_code.authorize_url(
25
- :redirect_uri => "urn:ietf:wg:oauth:2.0:oob",
26
- :scope => "https://spreadsheets.google.com/feeds/")
27
-
28
- puts "Opening authorization URL:\n#{auth_url}"
29
- `open "#{auth_url}" -a 'Google Chrome'`
30
- puts "Enter Authorization Code:"
31
- authorization_code = gets.chomp
32
-
33
- # Redirect the user to auth_url and get authorization code from redirect URL.
34
- auth_token = client.auth_code.get_token(authorization_code, :redirect_uri => "urn:ietf:wg:oauth:2.0:oob")
35
- puts "Refresh Token:"
36
- puts auth_token.refresh_token
37
- end
38
-
39
- session = ::GoogleDrive.login_with_oauth(auth_token.token)
40
-
41
- session.spreadsheet_by_key(key)
42
- end
43
- end
44
- end
45
- end