klipbook 2.0.0 → 2.1.0
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/.ruby-version +1 -0
- data/Gemfile +2 -3
- data/Gemfile.lock +112 -74
- data/README.md +18 -18
- data/Rakefile +0 -6
- data/bin/klipbook +180 -84
- data/features/step_definitions/list_steps.rb +2 -2
- data/features/step_definitions/{pretty_print_steps.rb → tohtml_steps.rb} +9 -9
- data/features/step_definitions/tojson_steps.rb +17 -0
- data/features/{pretty_print.feature → tohtml.feature} +12 -12
- data/features/{collate.feature → tojson.feature} +2 -2
- data/klipbook.gemspec +15 -22
- data/lib/klipbook/collate/book_file.rb +8 -3
- data/lib/klipbook/sources/kindle_device/file.rb +4 -3
- data/lib/klipbook/version.rb +1 -1
- data/lib/klipbook.rb +0 -1
- data/spec/lib/klipbook/sources/kindle_device/file_spec.rb +1 -15
- metadata +39 -103
- data/features/step_definitions/collate_steps.rb +0 -17
- data/lib/klipbook/sources/book_source.rb +0 -26
- data/spec/lib/klipbook/sources/book_source_spec.rb +0 -81
data/lib/klipbook.rb
CHANGED
@@ -7,7 +7,6 @@ require 'klipbook/commands/collate'
|
|
7
7
|
require 'klipbook/commands/list_books'
|
8
8
|
require 'klipbook/commands/pretty_print'
|
9
9
|
|
10
|
-
require 'klipbook/sources/book_source'
|
11
10
|
require 'klipbook/sources/book'
|
12
11
|
require 'klipbook/sources/clipping'
|
13
12
|
require 'klipbook/sources/invalid_source_error'
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Klipbook::Sources::KindleDevice::File do
|
4
4
|
|
5
|
-
let(:file) { Klipbook::Sources::KindleDevice::File.new(
|
5
|
+
let(:file) { Klipbook::Sources::KindleDevice::File.new(input_file, max_books, file_parser) }
|
6
6
|
|
7
7
|
let(:max_books) { 30 }
|
8
8
|
|
@@ -20,20 +20,6 @@ describe Klipbook::Sources::KindleDevice::File do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
before :each do
|
24
|
-
stub(File).open.returns do |*args|
|
25
|
-
passed_block = args.last
|
26
|
-
passed_block.call(input_file)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe 'initially' do
|
31
|
-
it 'reads the contents of the input file' do
|
32
|
-
file
|
33
|
-
File.should have_received.open('file path', 'r')
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
23
|
describe '#books' do
|
38
24
|
subject { file.books }
|
39
25
|
|
metadata
CHANGED
@@ -1,254 +1,195 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: klipbook
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
5
|
-
prerelease:
|
4
|
+
version: 2.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Ray Grasso
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-12-11 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
14
|
+
name: slop
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: mechanize
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rainbow
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rspec
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: rr
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - '>='
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: bundler
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - '>='
|
100
88
|
- !ruby/object:Gem::Version
|
101
89
|
version: '0'
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - '>='
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: '0'
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: jeweler
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
101
|
- - ~>
|
116
102
|
- !ruby/object:Gem::Version
|
117
|
-
version: 1.
|
103
|
+
version: 1.8.8
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
108
|
- - ~>
|
124
109
|
- !ruby/object:Gem::Version
|
125
|
-
version: 1.
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
|
-
name: rcov
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
|
-
requirements:
|
131
|
-
- - ! '>='
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version: '0'
|
134
|
-
type: :development
|
135
|
-
prerelease: false
|
136
|
-
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
|
-
requirements:
|
139
|
-
- - ! '>='
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
version: '0'
|
110
|
+
version: 1.8.8
|
142
111
|
- !ruby/object:Gem::Dependency
|
143
112
|
name: pry-debugger
|
144
113
|
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
114
|
requirements:
|
147
|
-
- -
|
115
|
+
- - '>='
|
148
116
|
- !ruby/object:Gem::Version
|
149
117
|
version: '0'
|
150
118
|
type: :development
|
151
119
|
prerelease: false
|
152
120
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
121
|
requirements:
|
155
|
-
- -
|
122
|
+
- - '>='
|
156
123
|
- !ruby/object:Gem::Version
|
157
124
|
version: '0'
|
158
125
|
- !ruby/object:Gem::Dependency
|
159
126
|
name: cucumber
|
160
127
|
requirement: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
128
|
requirements:
|
163
|
-
- -
|
129
|
+
- - '>='
|
164
130
|
- !ruby/object:Gem::Version
|
165
131
|
version: '0'
|
166
132
|
type: :development
|
167
133
|
prerelease: false
|
168
134
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
135
|
requirements:
|
171
|
-
- -
|
136
|
+
- - '>='
|
172
137
|
- !ruby/object:Gem::Version
|
173
138
|
version: '0'
|
174
139
|
- !ruby/object:Gem::Dependency
|
175
140
|
name: aruba
|
176
141
|
requirement: !ruby/object:Gem::Requirement
|
177
|
-
none: false
|
178
142
|
requirements:
|
179
|
-
- -
|
143
|
+
- - '>='
|
180
144
|
- !ruby/object:Gem::Version
|
181
145
|
version: '0'
|
182
146
|
type: :development
|
183
147
|
prerelease: false
|
184
148
|
version_requirements: !ruby/object:Gem::Requirement
|
185
|
-
none: false
|
186
149
|
requirements:
|
187
|
-
- -
|
150
|
+
- - '>='
|
188
151
|
- !ruby/object:Gem::Version
|
189
152
|
version: '0'
|
190
153
|
- !ruby/object:Gem::Dependency
|
191
154
|
name: guard
|
192
155
|
requirement: !ruby/object:Gem::Requirement
|
193
|
-
none: false
|
194
156
|
requirements:
|
195
|
-
- -
|
157
|
+
- - '>='
|
196
158
|
- !ruby/object:Gem::Version
|
197
159
|
version: '0'
|
198
160
|
type: :development
|
199
161
|
prerelease: false
|
200
162
|
version_requirements: !ruby/object:Gem::Requirement
|
201
|
-
none: false
|
202
163
|
requirements:
|
203
|
-
- -
|
164
|
+
- - '>='
|
204
165
|
- !ruby/object:Gem::Version
|
205
166
|
version: '0'
|
206
167
|
- !ruby/object:Gem::Dependency
|
207
168
|
name: guard-rspec
|
208
169
|
requirement: !ruby/object:Gem::Requirement
|
209
|
-
none: false
|
210
170
|
requirements:
|
211
|
-
- -
|
171
|
+
- - '>='
|
212
172
|
- !ruby/object:Gem::Version
|
213
173
|
version: '0'
|
214
174
|
type: :development
|
215
175
|
prerelease: false
|
216
176
|
version_requirements: !ruby/object:Gem::Requirement
|
217
|
-
none: false
|
218
177
|
requirements:
|
219
|
-
- -
|
178
|
+
- - '>='
|
220
179
|
- !ruby/object:Gem::Version
|
221
180
|
version: '0'
|
222
181
|
- !ruby/object:Gem::Dependency
|
223
182
|
name: guard-cucumber
|
224
183
|
requirement: !ruby/object:Gem::Requirement
|
225
|
-
none: false
|
226
|
-
requirements:
|
227
|
-
- - ! '>='
|
228
|
-
- !ruby/object:Gem::Version
|
229
|
-
version: '0'
|
230
|
-
type: :development
|
231
|
-
prerelease: false
|
232
|
-
version_requirements: !ruby/object:Gem::Requirement
|
233
|
-
none: false
|
234
|
-
requirements:
|
235
|
-
- - ! '>='
|
236
|
-
- !ruby/object:Gem::Version
|
237
|
-
version: '0'
|
238
|
-
- !ruby/object:Gem::Dependency
|
239
|
-
name: terminal-notifier-guard
|
240
|
-
requirement: !ruby/object:Gem::Requirement
|
241
|
-
none: false
|
242
184
|
requirements:
|
243
|
-
- -
|
185
|
+
- - '>='
|
244
186
|
- !ruby/object:Gem::Version
|
245
187
|
version: '0'
|
246
188
|
type: :development
|
247
189
|
prerelease: false
|
248
190
|
version_requirements: !ruby/object:Gem::Requirement
|
249
|
-
none: false
|
250
191
|
requirements:
|
251
|
-
- -
|
192
|
+
- - '>='
|
252
193
|
- !ruby/object:Gem::Version
|
253
194
|
version: '0'
|
254
195
|
description: Process your Kindle clippings file to generate a nicely formatted compilation
|
@@ -263,6 +204,7 @@ extra_rdoc_files:
|
|
263
204
|
files:
|
264
205
|
- .document
|
265
206
|
- .rspec
|
207
|
+
- .ruby-version
|
266
208
|
- .yardopts
|
267
209
|
- CHANGELOG.txt
|
268
210
|
- Gemfile
|
@@ -273,14 +215,14 @@ files:
|
|
273
215
|
- Rakefile
|
274
216
|
- bin/klipbook
|
275
217
|
- example.png
|
276
|
-
- features/collate.feature
|
277
218
|
- features/fixtures/clippings-for-three-books.txt
|
278
219
|
- features/list.feature
|
279
|
-
- features/pretty_print.feature
|
280
|
-
- features/step_definitions/collate_steps.rb
|
281
220
|
- features/step_definitions/list_steps.rb
|
282
|
-
- features/step_definitions/
|
221
|
+
- features/step_definitions/tohtml_steps.rb
|
222
|
+
- features/step_definitions/tojson_steps.rb
|
283
223
|
- features/support/env.rb
|
224
|
+
- features/tohtml.feature
|
225
|
+
- features/tojson.feature
|
284
226
|
- klipbook.gemspec
|
285
227
|
- lib/klipbook.rb
|
286
228
|
- lib/klipbook/collate/book_file.rb
|
@@ -293,7 +235,6 @@ files:
|
|
293
235
|
- lib/klipbook/sources/amazon_site/book_scraper.rb
|
294
236
|
- lib/klipbook/sources/amazon_site/site_scraper.rb
|
295
237
|
- lib/klipbook/sources/book.rb
|
296
|
-
- lib/klipbook/sources/book_source.rb
|
297
238
|
- lib/klipbook/sources/clipping.rb
|
298
239
|
- lib/klipbook/sources/invalid_source_error.rb
|
299
240
|
- lib/klipbook/sources/kindle_device/entry.rb
|
@@ -307,7 +248,6 @@ files:
|
|
307
248
|
- spec/lib/klipbook/commands/list_books_spec.rb
|
308
249
|
- spec/lib/klipbook/commands/pretty_print_spec.rb
|
309
250
|
- spec/lib/klipbook/pretty_print/html_printer_spec.rb
|
310
|
-
- spec/lib/klipbook/sources/book_source_spec.rb
|
311
251
|
- spec/lib/klipbook/sources/book_spec.rb
|
312
252
|
- spec/lib/klipbook/sources/kindle_device/entry_parser_spec.rb
|
313
253
|
- spec/lib/klipbook/sources/kindle_device/file_parser_spec.rb
|
@@ -318,30 +258,26 @@ files:
|
|
318
258
|
homepage: https://github.com/grassdog/klipbook
|
319
259
|
licenses:
|
320
260
|
- MIT
|
261
|
+
metadata: {}
|
321
262
|
post_install_message:
|
322
263
|
rdoc_options: []
|
323
264
|
require_paths:
|
324
265
|
- lib
|
325
266
|
required_ruby_version: !ruby/object:Gem::Requirement
|
326
|
-
none: false
|
327
267
|
requirements:
|
328
|
-
- -
|
268
|
+
- - '>='
|
329
269
|
- !ruby/object:Gem::Version
|
330
270
|
version: '0'
|
331
|
-
segments:
|
332
|
-
- 0
|
333
|
-
hash: -33745898634206631
|
334
271
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
335
|
-
none: false
|
336
272
|
requirements:
|
337
|
-
- -
|
273
|
+
- - '>='
|
338
274
|
- !ruby/object:Gem::Version
|
339
275
|
version: '0'
|
340
276
|
requirements: []
|
341
277
|
rubyforge_project:
|
342
|
-
rubygems_version:
|
278
|
+
rubygems_version: 2.0.14
|
343
279
|
signing_key:
|
344
|
-
specification_version:
|
280
|
+
specification_version: 4
|
345
281
|
summary: Klipbook creates a nice html summary of the clippings you've created on your
|
346
282
|
Kindle.
|
347
283
|
test_files: []
|
@@ -1,17 +0,0 @@
|
|
1
|
-
|
2
|
-
When /^I collate clippings for "([^"]*)" books from the file "([^"]*)" to the output file "([^"]*)"$/ do |book_count, input_file, output_file|
|
3
|
-
run_collate(book_count, output_file, input_file)
|
4
|
-
end
|
5
|
-
|
6
|
-
Then /^I should find a file called "([^"]*)" that contains "([^"]*)"$/ do |output_file, expected_text|
|
7
|
-
in_current_dir do
|
8
|
-
File.exists?(output_file).should be_true
|
9
|
-
File.open(output_file, 'r') do |f|
|
10
|
-
f.read.should match(/#{expected_text}/m)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def run_collate(book_count, output_file, input_file)
|
16
|
-
run_simple(unescape("klipbook -n #{book_count} collate -c #{output_file} file:#{input_file}"), false)
|
17
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module Klipbook::Sources
|
2
|
-
class BookSource
|
3
|
-
def initialize(source_spec, max_books)
|
4
|
-
raise InvalidSourceError unless valid_source?(source_spec)
|
5
|
-
|
6
|
-
if (source_spec =~ /file:(.+)/)
|
7
|
-
file_path = $1
|
8
|
-
@source = Klipbook::Sources::KindleDevice::File.new(file_path, max_books)
|
9
|
-
elsif (source_spec =~ /site:(.+):(.+)/)
|
10
|
-
username = $1
|
11
|
-
password = $2
|
12
|
-
@source = Klipbook::Sources::AmazonSite::SiteScraper.new(username, password, max_books)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def books
|
17
|
-
@source.books
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def valid_source?(source_spec)
|
23
|
-
source_spec =~ /(file:|site:.+:.+)/
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,81 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Klipbook::Sources::BookSource do
|
4
|
-
|
5
|
-
let(:fake_source) do
|
6
|
-
Object.new.tap do |fakey|
|
7
|
-
stub(fakey).books { books }
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
context 'when created with an invalid source' do
|
12
|
-
it 'raises an error' do
|
13
|
-
expect { Klipbook::Sources::BookSource.new('sdf' , 2) }.to raise_error(InvalidSourceError)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'when created with a site source' do
|
18
|
-
subject { book_source }
|
19
|
-
|
20
|
-
let(:book_source) { Klipbook::Sources::BookSource.new('site:username@example.com:password', 2) }
|
21
|
-
|
22
|
-
before(:each) do
|
23
|
-
stub(Klipbook::Sources::AmazonSite::SiteScraper).new { fake_source }
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'creates a site scraper with the provided credentials' do
|
27
|
-
subject
|
28
|
-
Klipbook::Sources::AmazonSite::SiteScraper.should have_received.new('username@example.com', 'password', 2)
|
29
|
-
end
|
30
|
-
|
31
|
-
describe '#books' do
|
32
|
-
subject { book_source.books }
|
33
|
-
|
34
|
-
let(:books) { [] }
|
35
|
-
|
36
|
-
it 'returns the books returned by the site source' do
|
37
|
-
subject.should == books
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
context 'when created with a file source' do
|
43
|
-
subject { book_source }
|
44
|
-
|
45
|
-
let(:book_source) { Klipbook::Sources::BookSource.new('file:filename', 2) }
|
46
|
-
|
47
|
-
let(:fake_file) do
|
48
|
-
Object.new.tap do |file|
|
49
|
-
stub(file).read { file_contents }
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
let(:file_contents) { 'fake contents ' }
|
54
|
-
|
55
|
-
before(:each) do
|
56
|
-
stub(Klipbook::Sources::KindleDevice::File).new { fake_source }
|
57
|
-
stub(File).open { fake_file }
|
58
|
-
end
|
59
|
-
|
60
|
-
it "reads the file's contents from disk" do
|
61
|
-
subject
|
62
|
-
File.should have_received.open('filename', 'r')
|
63
|
-
end
|
64
|
-
|
65
|
-
pending 'uses the file contents to create a file source' do
|
66
|
-
subject
|
67
|
-
|
68
|
-
Klipbook::Sources::KindleDevice::File.should have_received.new('fake contents', 2)
|
69
|
-
end
|
70
|
-
|
71
|
-
describe '#books' do
|
72
|
-
subject { book_source.books }
|
73
|
-
|
74
|
-
let(:books) { [] }
|
75
|
-
|
76
|
-
pending 'returns the books returned by the file source' do
|
77
|
-
subject.should == books
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|