htmls_to_pdf 0.0.5 → 0.0.6

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.
data/.gitignore CHANGED
@@ -3,3 +3,4 @@
3
3
  *.html
4
4
  *.css
5
5
  *.pdf
6
+ **/noko_ruby-doc.rb
data/README.markdown CHANGED
@@ -4,6 +4,10 @@
4
4
 
5
5
  HtmlsToPdf enables you to package one or more (ordered) HTML pages as a PDF.
6
6
 
7
+ ## USEFULNESS
8
+
9
+ I created HtmlsToPdf because I often see multi-page websites with content I would rather have in a single PDF file, so I can view it offline and search through it. The Ruby on Rails Guides is one example. RSpec documentation is another.
10
+
7
11
  ## REQUIREMENTS
8
12
 
9
13
  HtmlsToPdf uses the PDFKit gem, which itself uses the [wkhtmltopdf](http://madalgo.au.dk/~jakobt/wkhtmltoxdoc/wkhtmltopdf-0.9.9-doc.html) program, which uses qtwebkit.
@@ -20,21 +24,39 @@ For information on qtwebkit:
20
24
 
21
25
  For information on wkhtmltopdf:
22
26
 
23
- - [Installation guide from PDFKit author](https://github.com/jdpace/PDFKit/wiki/Installing-WKHTMLTOPDF)
27
+ - [Installation guide from PDFKit author](https://github.com/pdfkit/PDFKit/wiki/Installing-WKHTMLTOPDF)
24
28
 
25
29
  - [code.google.com](http://code.google.com/p/wkhtmltopdf/)
26
30
 
27
31
  For information on PDFKit:
28
32
 
29
- - [Github](https://github.com/jdpace/PDFKit)
33
+ - [Github](https://github.com/pdfkit/PDFKit)
30
34
 
31
35
  - [Railscasts](http://railscasts.com/episodes/220-pdfkit)
32
36
 
33
37
  ## BASIC USAGE
34
38
 
35
- You will find seven example scripts in the /examples directory.
36
-
37
- After you install HtmlsToPdf and its dependencies, you can write an ordinary Ruby script with the following features:
39
+ You will find 16 example scripts in the /examples directory. Each creates a PDF from a website:
40
+
41
+ - The 12 Factor App (Adam Wiggins)
42
+ - Bash Guide (Greg Wooledge)
43
+ - Coffeescript Meet Backbone.js (Adam J. Spooner)
44
+ - Coffeescript Cookbook ([Various authors](http://coffeescriptcookbook.com/authors))
45
+ - Coffeescript official documentation
46
+ - Exploring Coffeescript (ElegantCode.com)
47
+ - Advanced Rails (Jumpstart Labs)
48
+ - The Little Book on Coffeescript (Alex MacCaw)
49
+ - Natural Language Processing for the Working Programmer (Daniël de Kok)
50
+ - Learn Python the Hard Way (Zed A. Shaw)
51
+ - Practicing Ruby Vol 2 (Gregory Brown)
52
+ - Rails 3.1 release notes
53
+ - Ruby on Rails Guides
54
+ - RSpec-Rails documentation
55
+ - RSpec documentation
56
+ - Learn Ruby the Hard Way (Zed A. Shaw)
57
+ - RubyGems User Guide
58
+
59
+ After you install HtmlsToPdf and its dependencies, you can write an ordinary Ruby script to save multiple ordered HTML pages as a single PDF.
38
60
 
39
61
  ### EXAMPLE 1
40
62
 
@@ -0,0 +1,26 @@
1
+ require 'rubygems'
2
+ require 'htmls_to_pdf'
3
+
4
+ # Get '12factor.net' as pdf file
5
+ # Source: '12factor.net'
6
+
7
+ config = {}
8
+ config[:urls] = ['http://www.12factor.net',
9
+ 'http://www.12factor.net/codebase',
10
+ 'http://www.12factor.net/dependencies',
11
+ 'http://www.12factor.net/config',
12
+ 'http://www.12factor.net/backing-services',
13
+ 'http://www.12factor.net/build-release-run',
14
+ 'http://www.12factor.net/processes',
15
+ 'http://www.12factor.net/port-binding',
16
+ 'http://www.12factor.net/concurrency',
17
+ 'http://www.12factor.net/disposability',
18
+ 'http://www.12factor.net/dev-prod-parity',
19
+ 'http://www.12factor.net/logs',
20
+ 'http://www.12factor.net/admin-processes'
21
+ ]
22
+ config[:savedir] = '~/Tech/Programming'
23
+ config[:savename] = 'The_12_Factor_App.pdf'
24
+ config[:css] = ['http://www.12factor.net/style.css']
25
+
26
+ HtmlsToPdf.new(config).create_pdf
@@ -0,0 +1,31 @@
1
+ require 'rubygems'
2
+ require 'htmls_to_pdf'
3
+
4
+ # Get 'BashGuide' as a pdf
5
+ # Source: 'http://mywiki.wooledge.org/BashGuide'
6
+
7
+ def bash_guide_urls
8
+ urls = ['http://mywiki.wooledge.org/BashGuide',
9
+ 'http://mywiki.wooledge.org/BashGuide/CommandsAndArguments',
10
+ 'http://mywiki.wooledge.org/BashGuide/SpecialCharacters',
11
+ 'http://mywiki.wooledge.org/BashGuide/Parameters',
12
+ 'http://mywiki.wooledge.org/BashGuide/Patterns',
13
+ 'http://mywiki.wooledge.org/BashGuide/TestsAndConditionals',
14
+ 'http://mywiki.wooledge.org/BashGuide/Arrays',
15
+ 'http://mywiki.wooledge.org/BashGuide/InputAndOutput',
16
+ 'http://mywiki.wooledge.org/BashGuide/CompoundCommands',
17
+ 'http://mywiki.wooledge.org/BashGuide/Sourcing',
18
+ 'http://mywiki.wooledge.org/BashGuide/JobControl',
19
+ 'http://mywiki.wooledge.org/BashGuide/Practices'
20
+ ]
21
+ urls
22
+ end
23
+
24
+ config = {}
25
+ config[:savedir] = '~/Tech/Linux/SHELL SCRIPTING'
26
+ config[:savename] = 'WooledgeBashGuide.pdf'
27
+ config[:urls] = bash_guide_urls
28
+ #config[:css] = ['http://ruby.learncodethehardway.org/book/css/syntax.css']
29
+ config[:remove_temp_files] = true
30
+
31
+ html_files = HtmlsToPdf.new(config).create_pdf
@@ -0,0 +1,101 @@
1
+ require 'rubygems'
2
+ require 'htmls_to_pdf'
3
+
4
+ # Get 'CoffeeScript Cookbook' as pdf file
5
+ # Source: 'http://coffeescriptcookbook.com/'
6
+
7
+ config = {}
8
+ config[:urls] = [
9
+ 'http://coffeescriptcookbook.com/',
10
+ 'http://coffeescriptcookbook.com/chapters/syntax',
11
+ 'http://coffeescriptcookbook.com/chapters/syntax/embedding_javascript',
12
+ 'http://coffeescriptcookbook.com/chapters/syntax/comparing_ranges',
13
+ 'http://coffeescriptcookbook.com/chapters/syntax/for_loops',
14
+ 'http://coffeescriptcookbook.com/chapters/classes_and_objects',
15
+ 'http://coffeescriptcookbook.com/chapters/classes_and_objects/class-methods-and-instance-methods',
16
+ 'http://coffeescriptcookbook.com/chapters/classes_and_objects/cloning',
17
+ 'http://coffeescriptcookbook.com/chapters/classes_and_objects/object-literal',
18
+ 'http://coffeescriptcookbook.com/chapters/classes_and_objects/type-function',
19
+ 'http://coffeescriptcookbook.com/chapters/classes_and_objects/class-variables',
20
+ 'http://coffeescriptcookbook.com/chapters/classes_and_objects/chaining',
21
+ 'http://coffeescriptcookbook.com/chapters/strings',
22
+ 'http://coffeescriptcookbook.com/chapters/strings/repeating',
23
+ 'http://coffeescriptcookbook.com/chapters/strings/lowercasing-a-string',
24
+ 'http://coffeescriptcookbook.com/chapters/strings/uppercasing-a-string',
25
+ 'http://coffeescriptcookbook.com/chapters/strings/finding-substrings',
26
+ 'http://coffeescriptcookbook.com/chapters/strings/trimming-whitespace-from-a-string',
27
+ 'http://coffeescriptcookbook.com/chapters/strings/capitalizing-words',
28
+ 'http://coffeescriptcookbook.com/chapters/strings/splitting-a-string',
29
+ 'http://coffeescriptcookbook.com/chapters/strings/interpolation',
30
+ 'http://coffeescriptcookbook.com/chapters/strings/matching-strings',
31
+ 'http://coffeescriptcookbook.com/chapters/strings/generating-a-unique-id',
32
+ 'http://coffeescriptcookbook.com/chapters/arrays',
33
+ 'http://coffeescriptcookbook.com/chapters/arrays/creating-a-string-from-an-array',
34
+ 'http://coffeescriptcookbook.com/chapters/arrays/zip-function',
35
+ 'http://coffeescriptcookbook.com/chapters/arrays/max-array-value',
36
+ 'http://coffeescriptcookbook.com/chapters/arrays/using-arrays-to-swap-variables',
37
+ 'http://coffeescriptcookbook.com/chapters/arrays/define-ranges',
38
+ 'http://coffeescriptcookbook.com/chapters/arrays/shuffling-array-elements',
39
+ 'http://coffeescriptcookbook.com/chapters/arrays/mapping-arrays',
40
+ 'http://coffeescriptcookbook.com/chapters/arrays/reducing-arrays',
41
+ 'http://coffeescriptcookbook.com/chapters/arrays/filtering-arrays',
42
+ 'http://coffeescriptcookbook.com/chapters/arrays/reversing-arrays',
43
+ 'http://coffeescriptcookbook.com/chapters/arrays/concatenating-arrays',
44
+ 'http://coffeescriptcookbook.com/chapters/arrays/testing-every-element',
45
+ 'http://coffeescriptcookbook.com/chapters/arrays/list-comprehensions',
46
+ 'http://coffeescriptcookbook.com/chapters/arrays/removing-duplicate-elements-from-arrays',
47
+ 'http://coffeescriptcookbook.com/chapters/dates_and_times',
48
+ 'http://coffeescriptcookbook.com/chapters/dates_and_times/date-of-easter',
49
+ 'http://coffeescriptcookbook.com/chapters/dates_and_times/date-of-thanksgiving',
50
+ 'http://coffeescriptcookbook.com/chapters/dates_and_times/finding-last-day-of-the-month',
51
+ 'http://coffeescriptcookbook.com/chapters/dates_and_times/days-between-two-dates',
52
+ 'http://coffeescriptcookbook.com/chapters/dates_and_times/finding-last-or-next-month',
53
+ 'http://coffeescriptcookbook.com/chapters/math',
54
+ 'http://coffeescriptcookbook.com/chapters/math/fast-fibonacci',
55
+ 'http://coffeescriptcookbook.com/chapters/math/random-integer',
56
+ 'http://coffeescriptcookbook.com/chapters/math/generating-random-numbers',
57
+ 'http://coffeescriptcookbook.com/chapters/math/constants',
58
+ 'http://coffeescriptcookbook.com/chapters/math/generating-predictable-random-numbers',
59
+ 'http://coffeescriptcookbook.com/chapters/math/fast-inv-square',
60
+ 'http://coffeescriptcookbook.com/chapters/math/radians-degrees',
61
+ 'http://coffeescriptcookbook.com/chapters/functions',
62
+ 'http://coffeescriptcookbook.com/chapters/functions/recursion',
63
+ 'http://coffeescriptcookbook.com/chapters/functions/parentheses',
64
+ 'http://coffeescriptcookbook.com/chapters/functions/splat_arguments',
65
+ 'http://coffeescriptcookbook.com/chapters/metaprogramming',
66
+ 'http://coffeescriptcookbook.com/chapters/metaprogramming/detecting-and-replacing-functions',
67
+ 'http://coffeescriptcookbook.com/chapters/metaprogramming/extending-built-in-objects',
68
+ 'http://coffeescriptcookbook.com/chapters/jquery',
69
+ 'http://coffeescriptcookbook.com/chapters/jquery/ajax',
70
+ 'http://coffeescriptcookbook.com/chapters/jquery/plugin',
71
+ 'http://coffeescriptcookbook.com/chapters/jquery/callback-bindings-jquery',
72
+ 'http://coffeescriptcookbook.com/chapters/regular_expressions',
73
+ 'http://coffeescriptcookbook.com/chapters/regular_expressions/replacing-substrings',
74
+ 'http://coffeescriptcookbook.com/chapters/regular_expressions/replacing-html-tags-with-html-named-entities',
75
+ 'http://coffeescriptcookbook.com/chapters/regular_expressions/heregexes',
76
+ 'http://coffeescriptcookbook.com/chapters/regular_expressions/searching-for-substrings',
77
+ 'http://coffeescriptcookbook.com/chapters/networking',
78
+ 'http://coffeescriptcookbook.com/chapters/networking/bi-directional-server',
79
+ 'http://coffeescriptcookbook.com/chapters/networking/bi-directional-client',
80
+ 'http://coffeescriptcookbook.com/chapters/networking/basic-client',
81
+ 'http://coffeescriptcookbook.com/chapters/networking/basic-http-client',
82
+ 'http://coffeescriptcookbook.com/chapters/networking/basic-server',
83
+ 'http://coffeescriptcookbook.com/chapters/networking/basic-http-server',
84
+ 'http://coffeescriptcookbook.com/chapters/design_patterns',
85
+ 'http://coffeescriptcookbook.com/chapters/design_patterns/builder',
86
+ 'http://coffeescriptcookbook.com/chapters/design_patterns/bridge',
87
+ 'http://coffeescriptcookbook.com/chapters/design_patterns/decorator',
88
+ 'http://coffeescriptcookbook.com/chapters/design_patterns/interpreter',
89
+ 'http://coffeescriptcookbook.com/chapters/design_patterns/command',
90
+ 'http://coffeescriptcookbook.com/chapters/design_patterns/factory_method',
91
+ 'http://coffeescriptcookbook.com/chapters/design_patterns/strategy',
92
+ 'http://coffeescriptcookbook.com/chapters/design_patterns/memento',
93
+ 'http://coffeescriptcookbook.com/chapters/design_patterns/singleton',
94
+ 'http://coffeescriptcookbook.com/chapters/databases',
95
+ 'http://coffeescriptcookbook.com/chapters/databases/mongodb',
96
+ 'http://coffeescriptcookbook.com/chapters/databases/sqlite']
97
+ config[:savedir] = '~/Tech/Javascript/COFFEESCRIPT/DOCUMENTATION'
98
+ config[:savename] = 'CoffeeScript_Cookbook.pdf'
99
+ config[:css] = ['http://coffeescriptcookbook.com/css/default.css']
100
+
101
+ HtmlsToPdf.new(config).create_pdf
@@ -0,0 +1,70 @@
1
+ require 'rubygems'
2
+ require 'htmls_to_pdf'
3
+
4
+ # Get 'Jumpstart Labs Advanced Rails' as pdf file
5
+ # Source: 'http://tutorials.jumpstartlab.com/paths/advanced_rails_five_day.html'
6
+
7
+ config = {}
8
+ config[:urls] = [
9
+ 'http://tutorials.jumpstartlab.com/paths/advanced_rails_five_day.html',
10
+ 'http://tutorials.jumpstartlab.com/topics/environment/environment.html',
11
+ 'http://tutorials.jumpstartlab.com/topics/environment/rvm.html',
12
+ 'http://tutorials.jumpstartlab.com/topics/environment/bundler.html',
13
+ 'http://tutorials.jumpstartlab.com/topics/environment/git_strategy.html',
14
+ 'http://tutorials.jumpstartlab.com/topics/environment/heroku.html',
15
+ 'http://tutorials.jumpstartlab.com/topics/routes/request_cycle.html',
16
+ 'http://tutorials.jumpstartlab.com/topics/routes/router.html',
17
+ 'http://tutorials.jumpstartlab.com/topics/internal_testing/rspec_and_bdd.html',
18
+ 'http://tutorials.jumpstartlab.com/topics/internal_testing/rspec_practices.html',
19
+ 'http://tutorials.jumpstartlab.com/topics/internal_testing/factories.html',
20
+ 'http://tutorials.jumpstartlab.com/topics/internal_testing/code_coverage.html',
21
+ 'http://tutorials.jumpstartlab.com/topics/capybara/capybara_with_rack_test.html',
22
+ 'http://tutorials.jumpstartlab.com/topics/capybara/capybara_with_selenium_and_webkit.html',
23
+ 'http://tutorials.jumpstartlab.com/topics/capybara/capybara_practice.html',
24
+ 'http://tutorials.jumpstartlab.com/topics/debugging/outputting_text.html',
25
+ 'http://tutorials.jumpstartlab.com/topics/debugging/debugger.html',
26
+ 'http://tutorials.jumpstartlab.com/topics/debugging/error_services.html',
27
+ 'http://tutorials.jumpstartlab.com/topics/models/relationships.html',
28
+ 'http://tutorials.jumpstartlab.com/topics/models/polymorphism.html',
29
+ 'http://tutorials.jumpstartlab.com/topics/models/legacy_databases.html',
30
+ 'http://tutorials.jumpstartlab.com/topics/models/validations.html',
31
+ 'http://tutorials.jumpstartlab.com/topics/models/transactions.html',
32
+ 'http://tutorials.jumpstartlab.com/topics/models/processor_models.html',
33
+ 'http://tutorials.jumpstartlab.com/topics/models/modules.html',
34
+ 'http://tutorials.jumpstartlab.com/topics/controllers/parameters.html',
35
+ 'http://tutorials.jumpstartlab.com/topics/controllers/filters.html',
36
+ 'http://tutorials.jumpstartlab.com/topics/controllers/friendly-urls.html',
37
+ 'http://tutorials.jumpstartlab.com/topics/controllers/flash.html',
38
+ 'http://tutorials.jumpstartlab.com/topics/controllers/render_and_redirect.html',
39
+ 'http://tutorials.jumpstartlab.com/topics/controllers/sessions_and_conversations.html',
40
+ 'http://tutorials.jumpstartlab.com/topics/better_views/understanding_views.html',
41
+ 'http://tutorials.jumpstartlab.com/topics/better_views/erb_and_haml.html',
42
+ 'http://tutorials.jumpstartlab.com/topics/better_views/view_partials.html',
43
+ 'http://tutorials.jumpstartlab.com/topics/better_views/pagination.html',
44
+ 'http://tutorials.jumpstartlab.com/topics/javascript/rails_and_javascript.html',
45
+ 'http://tutorials.jumpstartlab.com/topics/javascript/jquery.html',
46
+ 'http://tutorials.jumpstartlab.com/topics/javascript/coffeescript.html',
47
+ 'http://tutorials.jumpstartlab.com/topics/web_services/api.html',
48
+ 'http://tutorials.jumpstartlab.com/topics/web_services/encoding_and_filtering.html',
49
+ 'http://tutorials.jumpstartlab.com/topics/web_services/active_resource.html',
50
+ 'http://tutorials.jumpstartlab.com/topics/web_services/soap.html',
51
+ 'http://tutorials.jumpstartlab.com/topics/performance/measuring.html',
52
+ 'http://tutorials.jumpstartlab.com/topics/performance/queries.html',
53
+ 'http://tutorials.jumpstartlab.com/topics/performance/caching.html',
54
+ 'http://tutorials.jumpstartlab.com/topics/performance/background_jobs.html',
55
+ 'http://tutorials.jumpstartlab.com/topics/systems/credentials_and_configuration.html',
56
+ 'http://tutorials.jumpstartlab.com/topics/systems/automation.html',
57
+ 'http://tutorials.jumpstartlab.com/topics/auth/local_authentication.html',
58
+ 'http://tutorials.jumpstartlab.com/topics/auth/remote_authentication.html',
59
+ 'http://tutorials.jumpstartlab.com/topics/auth/authorization.html',
60
+ 'http://tutorials.jumpstartlab.com/topics/search.html',
61
+ 'http://tutorials.jumpstartlab.com/topics/heroku.html',
62
+ 'http://tutorials.jumpstartlab.com/topics/continuous_integration.html',
63
+ 'http://tutorials.jumpstartlab.com/topics/sample_project.html'
64
+ ]
65
+ config[:savedir] = '~/Tech/Rails/BOOKS'
66
+ config[:savename] = 'JumpstartLabs_Advanced_Rails.pdf'
67
+ config[:css] = ['http://tutorials.jumpstartlab.com/stylesheets/screen.css']
68
+ config[:remove_temp_files] = true
69
+
70
+ HtmlsToPdf.new(config).create_pdf
@@ -0,0 +1,20 @@
1
+ require 'rubygems'
2
+ require 'htmls_to_pdf'
3
+
4
+ # Get 'Little Book on CoffeeScript' as pdf file
5
+ # Source: 'http://arcturo.github.com/library/coffeescript/index.html'
6
+
7
+ config = {}
8
+ config[:urls] = []
9
+ config[:urls] << 'http://arcturo.github.com/library/coffeescript/01_introduction.html'
10
+ config[:urls] << 'http://arcturo.github.com/library/coffeescript/02_syntax.html'
11
+ config[:urls] << 'http://arcturo.github.com/library/coffeescript/03_classes.html'
12
+ config[:urls] << 'http://arcturo.github.com/library/coffeescript/04_idioms.html'
13
+ config[:urls] << 'http://arcturo.github.com/library/coffeescript/05_compiling.html'
14
+ config[:urls] << 'http://arcturo.github.com/library/coffeescript/06_applications.html'
15
+ config[:urls] << 'http://arcturo.github.com/library/coffeescript/07_the_bad_parts.html'
16
+ config[:savedir] = '~/Tech/Javascript/COFFEESCRIPT/THE LITTLE BOOK ON COFFEESCRIPT'
17
+ config[:savename] = 'Little_Book_on_CoffeeScript.pdf'
18
+ config[:css] = ['http://arcturo.github.com/library/coffeescript/site/site.css']
19
+
20
+ HtmlsToPdf.new(config).create_pdf
@@ -0,0 +1,26 @@
1
+ require 'rubygems'
2
+ require 'htmls_to_pdf'
3
+
4
+ # Get 'Natural Language Processing for the Working Programmer' as pdf file
5
+ # Source: 'http://nlpwp.org/book/'
6
+ # With appreciation to author Daniël de Kok
7
+
8
+ config = {}
9
+ config[:urls] = ['http://nlpwp.org/book/',
10
+ 'http://nlpwp.org/book/preface.xhtml',
11
+ 'http://nlpwp.org/book/chap-intro.xhtml',
12
+ 'http://nlpwp.org/book/chap-words.xhtml',
13
+ 'http://nlpwp.org/book/chap-ngrams.xhtml',
14
+ 'http://nlpwp.org/book/chap-similarity.xhtml',
15
+ 'http://nlpwp.org/book/chap-classification.xhtml',
16
+ 'http://nlpwp.org/book/chap-ir.xhtml',
17
+ 'http://nlpwp.org/book/chap-tagging.xhtml',
18
+ 'http://nlpwp.org/book/chap-reglang.xhtml',
19
+ 'http://nlpwp.org/book/chap-cfg.xhtml',
20
+ 'http://nlpwp.org/book/chap-performance.xhtml'
21
+ ]
22
+ config[:savedir] = '~/Tech/Natural Language Processing/NLP_for_Working_Programmers'
23
+ config[:savename] = 'Natural_Language_Processing_for_Working_Programmers.pdf'
24
+ config[:css] = ['http://nlpwp.org/book/screen.css']
25
+
26
+ HtmlsToPdf.new(config).create_pdf
@@ -0,0 +1,42 @@
1
+ require 'rubygems'
2
+ require 'htmls_to_pdf'
3
+
4
+ # Get all 'Practicing Ruby Volume 2' as a single pdf file
5
+ # Source: 'http://community.mendicantuniversity.org/articles/practicing-ruby-volume-2-now-freely-avai'
6
+
7
+ # Note: Author Gregory Brown generously provides these files for free
8
+ # but encourages those who can to support his work. He writes:
9
+ # "Practicing Ruby is a subscriber-supported service, and
10
+ # is literally how I pay my bills. If you like these
11
+ # articles and want to help make sure I can keep writing
12
+ # more of them, please become a subscriber. There is lots
13
+ # of content available to members that has not been publicly
14
+ # released yet, and I'm adding more articles regularly.
15
+ # PS: Anyone who can't pay the full $8/month fee for ANY
16
+ # reason is welcome to contact gregory.t.brown@gmail.com
17
+ # for a free account."
18
+
19
+ config = {}
20
+ config[:urls] = [
21
+ 'http://practicingruby.com/articles/shared/tmxmprhfrpwq',
22
+ 'http://practicingruby.com/articles/shared/bhftubljbomqpmifbibmzmptlxhoin',
23
+ 'http://practicingruby.com/articles/shared/mvzhovpjbghr',
24
+ 'http://practicingruby.com/articles/shared/ggcwduoyfqmz',
25
+ 'http://practicingruby.com/articles/shared/afshdqdholth',
26
+ 'http://practicingruby.com/articles/shared/vbmlgkdtahzd',
27
+ 'http://practicingruby.com/articles/shared/ozkzbsdmagcm',
28
+ 'http://practicingruby.com/articles/shared/jleygxejeopq',
29
+ 'http://practicingruby.com/articles/shared/qyxvmrgmhuln',
30
+ 'http://practicingruby.com/articles/shared/nlhxgszkgenq',
31
+ 'http://practicingruby.com/articles/shared/iptocucwujtj',
32
+ 'http://practicingruby.com/articles/shared/oelhlibhtlkx',
33
+ 'http://practicingruby.com/articles/shared/gthgvfebjvyn',
34
+ 'http://practicingruby.com/articles/shared/vpxpovppchww',
35
+ 'http://practicingruby.com/articles/shared/wdykkrmdfjvf'
36
+ ]
37
+ config[:savedir] = '~/Tech/Ruby/DOCUMENTATION'
38
+ config[:savename] = 'Practicing_Ruby_Vol_2.pdf'
39
+ config[:css] = ['http://practicingruby.com/assets/application-4fd26c9107c02ce07a20eb2d35d08230.css']
40
+ config[:remove_temp_files] = true
41
+
42
+ HtmlsToPdf.new(config).create_pdf
@@ -0,0 +1,48 @@
1
+ require 'rubygems'
2
+ require 'htmls_to_pdf'
3
+
4
+ # Get all 'Ruby on Rails Guides' as a single pdf file
5
+ # Source: 'http://guides.rubyonrails.org/index.html'
6
+
7
+ config = {}
8
+ config[:urls] = [
9
+ 'http://guides.rubyonrails.org/index.html',
10
+ 'http://guides.rubyonrails.org/getting_started.html',
11
+ 'http://guides.rubyonrails.org/migrations.html',
12
+ 'http://guides.rubyonrails.org/active_record_validations_callbacks.html',
13
+ 'http://guides.rubyonrails.org/association_basics.html',
14
+ 'http://guides.rubyonrails.org/active_record_querying.html',
15
+ 'http://guides.rubyonrails.org/layouts_and_rendering.html',
16
+ 'http://guides.rubyonrails.org/form_helpers.html',
17
+ 'http://guides.rubyonrails.org/action_controller_overview.html',
18
+ 'http://guides.rubyonrails.org/routing.html',
19
+ 'http://guides.rubyonrails.org/active_support_core_extensions.html',
20
+ 'http://guides.rubyonrails.org/i18n.html',
21
+ 'http://guides.rubyonrails.org/action_mailer_basics.html',
22
+ 'http://guides.rubyonrails.org/testing.html',
23
+ 'http://guides.rubyonrails.org/security.html',
24
+ 'http://guides.rubyonrails.org/debugging_rails_applications.html',
25
+ 'http://guides.rubyonrails.org/performance_testing.html',
26
+ 'http://guides.rubyonrails.org/configuring.html',
27
+ 'http://guides.rubyonrails.org/command_line.html',
28
+ 'http://guides.rubyonrails.org/caching_with_rails.html',
29
+ 'http://guides.rubyonrails.org/asset_pipeline.html',
30
+ 'http://guides.rubyonrails.org/initialization.html',
31
+ 'http://guides.rubyonrails.org/plugins.html',
32
+ 'http://guides.rubyonrails.org/rails_on_rack.html',
33
+ 'http://guides.rubyonrails.org/generators.html',
34
+ 'http://guides.rubyonrails.org/contributing_to_ruby_on_rails.html',
35
+ 'http://guides.rubyonrails.org/api_documentation_guidelines.html',
36
+ 'http://guides.rubyonrails.org/ruby_on_rails_guides_guidelines.html',
37
+ 'http://guides.rubyonrails.org/3_2_release_notes.html',
38
+ 'http://guides.rubyonrails.org/3_1_release_notes.htmlhttp://guides.rubyonrails.org/3_0_release_notes.html',
39
+ 'http://guides.rubyonrails.org/2_3_release_notes.html',
40
+ 'http://guides.rubyonrails.org/2_2_release_notes.html'
41
+ ]
42
+ config[:savedir] = '~/Tech/Rails/RAILS_GUIDES'
43
+ config[:savename] = 'Ruby_on_Rails_Guides.pdf'
44
+ config[:css] = [
45
+ 'http://guides.rubyonrails.org/stylesheets/print.css']
46
+ config[:remove_temp_files] = true
47
+
48
+ HtmlsToPdf.new(config).create_pdf
@@ -0,0 +1,115 @@
1
+ require 'rubygems'
2
+ require 'htmls_to_pdf'
3
+
4
+ # Get 'RSpec documentation' as pdf file
5
+ # Source: 'https://www.relishapp.com/rspec'
6
+
7
+ config = {}
8
+ config[:urls] = [
9
+ 'https://www.relishapp.com/rspec/rspec-core/docs',
10
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/autotest',
11
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/example-groups',
12
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/example-groups/basic-structure-describe-it',
13
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/example-groups/shared-examples',
14
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/example-groups/shared-context',
15
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/command-line',
16
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/command-line/example-option',
17
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/command-line/format-option',
18
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/command-line/line-number-option',
19
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/command-line/tag-option',
20
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/command-line/line-number-appended-to-file-path',
21
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/command-line/exit-status',
22
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/command-line/rake-task',
23
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/command-line/init-option',
24
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/command-line/order-new-in-rspec-core-2-8',
25
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/command-line/pattern-option',
26
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/command-line/run-with-ruby-command',
27
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/pending/pending-examples',
28
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/hooks/before-and-after-hooks',
29
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/hooks/around-hooks',
30
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/hooks/filters',
31
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/subject/implicitly-defined-subject',
32
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/subject/explicit-subject',
33
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/subject/attribute-of-subject',
34
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/subject/implicit-receiver',
35
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/helper-methods/let-and-let',
36
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/helper-methods/arbitrary-helper-methods',
37
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/helper-methods/define-helper-methods-in-a-module',
38
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/metadata/current-example',
39
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/metadata/described-class',
40
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/metadata/user-defined-metadata',
41
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/filtering/inclusion-filters',
42
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/filtering/exclusion-filters',
43
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/filtering/if-and-unless',
44
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/filtering/run-all-when-everything-filtered',
45
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/configuration/read-command-line-configuration-options-from-files',
46
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/configuration/fail-fast',
47
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/configuration/custom-settings',
48
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/configuration/alias-example-to',
49
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/configuration/default-path',
50
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/expectation-framework-integration/configure-expectation-framework',
51
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/mock-framework-integration/mock-with-rspec',
52
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/mock-framework-integration/mock-with-flexmock',
53
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/mock-framework-integration/mock-with-mocha',
54
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/mock-framework-integration/mock-with-rr',
55
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/mock-framework-integration/mock-with-an-alternative-framework',
56
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/formatters/custom-formatters',
57
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/formatters/text-formatter',
58
+ 'https://www.relishapp.com/rspec/rspec-core/v/2-8/docs/spec-files/arbitrary-file-suffix',
59
+ 'https://www.relishapp.com/rspec/rspec-expectations/docs',
60
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/customized-message',
61
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/diffing',
62
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/implicit-docstrings',
63
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/built-in-matchers',
64
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/built-in-matchers/be-matchers',
65
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/built-in-matchers/be-within-matcher',
66
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/built-in-matchers/equality-matchers',
67
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/built-in-matchers/exist-matcher',
68
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/built-in-matchers/expect-change',
69
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/built-in-matchers/raise-error-matcher',
70
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/built-in-matchers/have-n-items-matcher',
71
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/built-in-matchers/include-matcher',
72
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/built-in-matchers/match-matcher',
73
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/built-in-matchers/operator-matchers',
74
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/built-in-matchers/predicate-matchers',
75
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/built-in-matchers/respond-to-matcher',
76
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/built-in-matchers/satisfy-matcher',
77
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/built-in-matchers/throw-symbol-matcher',
78
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/built-in-matchers/specify-types-of-objects',
79
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/built-in-matchers/cover-matcher',
80
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/custom-matchers',
81
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/custom-matchers/define-matcher',
82
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/custom-matchers/define-diffable-matcher',
83
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/custom-matchers/define-matcher-with-fluent-interface',
84
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/custom-matchers/access-running-example',
85
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/custom-matchers/define-matcher-outside-rspec',
86
+ 'https://www.relishapp.com/rspec/rspec-expectations/v/2-8/docs/test-frameworks/test-unit-integration',
87
+ 'https://www.relishapp.com/rspec/rspec-mocks/docs',
88
+ 'https://www.relishapp.com/rspec/rspec-mocks/v/2-8/docs/method-stubs',
89
+ 'https://www.relishapp.com/rspec/rspec-mocks/v/2-8/docs/method-stubs/stub-with-a-simple-return-value',
90
+ 'https://www.relishapp.com/rspec/rspec-mocks/v/2-8/docs/method-stubs/stub-with-substitute-implementation',
91
+ 'https://www.relishapp.com/rspec/rspec-mocks/v/2-8/docs/method-stubs/stub-a-chain-of-methods',
92
+ 'https://www.relishapp.com/rspec/rspec-mocks/v/2-8/docs/method-stubs/stub-on-any-instance-of-a-class',
93
+ 'https://www.relishapp.com/rspec/rspec-mocks/v/2-8/docs/method-stubs/as-null-object',
94
+ 'https://www.relishapp.com/rspec/rspec-mocks/v/2-8/docs/method-stubs/double-handling-to-ary',
95
+ 'https://www.relishapp.com/rspec/rspec-mocks/v/2-8/docs/message-expectations',
96
+ 'https://www.relishapp.com/rspec/rspec-mocks/v/2-8/docs/message-expectations/expect-a-message',
97
+ 'https://www.relishapp.com/rspec/rspec-mocks/v/2-8/docs/message-expectations/expect-a-message-on-any-instance-of-a-class',
98
+ 'https://www.relishapp.com/rspec/rspec-mocks/v/2-8/docs/message-expectations/warn-when-expectation-is-set-on-nil',
99
+ 'https://www.relishapp.com/rspec/rspec-mocks/v/2-8/docs/message-expectations/receive-counts',
100
+ 'https://www.relishapp.com/rspec/rspec-mocks/v/2-8/docs/argument-matchers',
101
+ 'https://www.relishapp.com/rspec/rspec-mocks/v/2-8/docs/argument-matchers/explicit-arguments',
102
+ 'https://www.relishapp.com/rspec/rspec-mocks/v/2-8/docs/argument-matchers/general-matchers',
103
+ 'https://www.relishapp.com/rspec/rspec-mocks/v/2-8/docs/argument-matchers/stub-with-argument-constraints',
104
+ 'https://www.relishapp.com/rspec/rspec-mocks/v/2-8/docs/outside-rspec/configure-any-test-framework-to-use-rspec-mocks',
105
+ 'https://www.relishapp.com/rspec/rspec-mocks/v/2-8/docs/outside-rspec/standalone'
106
+ ]
107
+ config[:savedir] = '~/Tech/Ruby/TESTING/RSPEC'
108
+ config[:savename] = 'RSpec_documentation.pdf'
109
+ config[:css] = [
110
+ 'https://www.relishapp.com/stylesheets/global.css',
111
+ #'https://www.relishapp.com/stylesheets/application.css',
112
+ 'https://www.relishapp.com/stylesheets/print.css']
113
+ config[:remove_temp_files] = true
114
+
115
+ HtmlsToPdf.new(config).create_pdf
@@ -0,0 +1,51 @@
1
+ require 'rubygems'
2
+ require 'htmls_to_pdf'
3
+
4
+ # Get 'RSpec Rails documentation' as pdf file
5
+ # Source: 'https://www.relishapp.com/rspec/rspec-rails/docs'
6
+
7
+ config = {}
8
+ config[:urls] = [
9
+ 'https://www.relishapp.com/rspec/rspec-rails/docs',
10
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/gettingstarted',
11
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/generators',
12
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/transactions',
13
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/autotest',
14
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/railsversions',
15
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/request-specs/request-spec',
16
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/model-specs',
17
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/model-specs/errors-on',
18
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/model-specs/transactional-examples',
19
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/controller-specs',
20
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/controller-specs/cookies',
21
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/controller-specs/controller-spec',
22
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/controller-specs/views-are-stubbed-by-default',
23
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/controller-specs/render-views',
24
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/controller-specs/anonymous-controller',
25
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/controller-specs/bypass-rescue',
26
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/helper-specs/helper-spec',
27
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/mailer-specs/url-helpers-in-mailer-examples',
28
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/routing-specs',
29
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/routing-specs/route-to-matcher',
30
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/routing-specs/be-routable-matcher',
31
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/routing-specs/named-routes',
32
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/view-specs/view-spec',
33
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/view-specs/stub-template',
34
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/view-specs/view-spec-infers-controller-path-and-action',
35
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/matchers',
36
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/matchers/be-a-new-matcher',
37
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/matchers/render-template-matcher',
38
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/matchers/redirect-to-matcher',
39
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/matchers/activerecord-relation-match-array',
40
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/mocks/mock-model',
41
+ 'https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/mocks/stub-model'
42
+ ]
43
+ config[:savedir] = '~/Tech/Rails/TESTING/RSPEC'
44
+ config[:savename] = 'RSpec_Rails_documentation.pdf'
45
+ config[:css] = [
46
+ 'https://www.relishapp.com/stylesheets/global.css',
47
+ #'https://www.relishapp.com/stylesheets/application.css',
48
+ 'https://www.relishapp.com/stylesheets/print.css']
49
+ config[:remove_temp_files] = true
50
+
51
+ HtmlsToPdf.new(config).create_pdf
@@ -0,0 +1,120 @@
1
+ require 'rubygems'
2
+ require 'htmls_to_pdf'
3
+
4
+ # Get 'Ruby Core documentation' as pdf file
5
+ # Source: 'http://www.ruby-doc.org/core-1.9.3/'
6
+
7
+ config = {}
8
+
9
+ config[:urls] = %w(
10
+ ARGF.html
11
+ ArgumentError.html
12
+ Array.html
13
+ BasicObject.html
14
+ Bignum.html
15
+ Binding.html
16
+ Class.html
17
+ Comparable.html
18
+ Complex.html
19
+ Continuation.html
20
+ Data.html
21
+ Dir.html
22
+ ENV.html
23
+ EOFError.html
24
+ Encoding.html
25
+ Encoding/CompatibilityError.html
26
+ Encoding/Converter.html
27
+ Encoding/ConverterNotFoundError.html
28
+ Encoding/InvalidByteSequenceError.html
29
+ Encoding/UndefinedConversionError.html
30
+ EncodingError.html
31
+ Enumerable.html
32
+ Enumerator.html
33
+ Enumerator/Generator.html
34
+ Enumerator/Yielder.html
35
+ Errno.html
36
+ Exception.html
37
+ FalseClass.html
38
+ Fiber.html
39
+ FiberError.html
40
+ File.html
41
+ File/Constants.html
42
+ File/Stat.html
43
+ FileTest.html
44
+ Fixnum.html
45
+ Float.html
46
+ FloatDomainError.html
47
+ GC.html
48
+ GC/Profiler.html
49
+ Hash.html
50
+ IO.html
51
+ IO/WaitReadable.html
52
+ IO/WaitWritable.html
53
+ IOError.html
54
+ IndexError.html
55
+ Integer.html
56
+ Interrupt.html
57
+ Kernel.html
58
+ KeyError.html
59
+ LoadError.html
60
+ LocalJumpError.html
61
+ Marshal.html
62
+ MatchData.html
63
+ Math.html
64
+ Math/DomainError.html
65
+ Method.html
66
+ Module.html
67
+ Mutex.html
68
+ NameError.html
69
+ NilClass.html
70
+ NoMemoryError.html
71
+ NoMethodError.html
72
+ NotImplementedError.html
73
+ Numeric.html
74
+ Object.html
75
+ ObjectSpace.html
76
+ Proc.html
77
+ Process.html
78
+ Process/GID.html
79
+ Process/Status.html
80
+ Process/Sys.html
81
+ Process/UID.html
82
+ Random.html
83
+ Range.html
84
+ RangeError.html
85
+ Rational.html
86
+ Regexp.html
87
+ RegexpError.html
88
+ RubyVM.html
89
+ RubyVM/Env.html
90
+ RubyVM/InstructionSequence.html
91
+ RuntimeError.html
92
+ ScriptError.html
93
+ SecurityError.html
94
+ Signal.html
95
+ SignalException.html
96
+ StandardError.html
97
+ StopIteration.html
98
+ String.html
99
+ Struct.html
100
+ Symbol.html
101
+ SyntaxError.html
102
+ SystemCallError.html
103
+ SystemExit.html
104
+ SystemStackError.html
105
+ Thread.html
106
+ ThreadError.html
107
+ ThreadGroup.html
108
+ Time.html
109
+ TrueClass.html
110
+ TypeError.html
111
+ UnboundMethod.html
112
+ ZeroDivisionError.html
113
+ fatal.html)
114
+ config[:urls] = config[:urls].map { |u| 'http://www.ruby-doc.org/core-1.9.3/' + u }
115
+ config[:savedir] = '~/Tech/Ruby/DOCUMENTATION'
116
+ config[:css] = 'http://www.ruby-doc.org/core-1.9.3/css/obf.css'
117
+ config[:remove_css_files] = false
118
+ config[:savename] = 'Ruby_Core_docs.pdf'
119
+
120
+ HtmlsToPdf.new(config).create_pdf
@@ -2,11 +2,12 @@ require 'rubygems'
2
2
  require 'fileutils'
3
3
  require 'pdfkit'
4
4
  require 'uri'
5
- include URI
5
+ #include URI
6
+ require 'net/http'
6
7
 
7
8
  class HtmlsToPdf
8
9
 
9
- attr_reader :htmlarray, :pdfarray, :cssarray, :urls, :savedir, :savename, :remove_temp_files
10
+ attr_reader :htmlarray, :pdfarray, :cssarray, :urls, :savedir, :savename, :remove_html_files, :remove_css_files, :remove_tmp_pdf_files
10
11
 
11
12
  TMP_HTML_PREFIX = 'tmp_html_file_'
12
13
  TMP_PDF_PREFIX = 'tmp_pdf_file_'
@@ -14,19 +15,44 @@ class HtmlsToPdf
14
15
  def initialize(in_config = {})
15
16
  config = {
16
17
  :css => [],
17
- :remove_temp_files => true,
18
- :options => {}
18
+ :remove_css_files => true,
19
+ :remove_html_files => true,
20
+ :remove_tmp_pdf_files => true,
21
+ :overwrite_existing_pdf => false,
22
+ :options => {},
23
+ :savedir => File.expand_path("~"),
24
+ :savename => 'htmls_to_pdf.pdf'
19
25
  }.merge(in_config)
20
26
  set_dir(config[:savedir])
21
27
  @savename = config[:savename]
22
- exit_if_pdf_exists
28
+ @overwrite_existing_pdf = config[:overwrite_existing_pdf]
29
+ exit_if_pdf_exists unless @overwrite_existing_pdf
23
30
  @urls = clean_urls(config[:urls])
24
31
  @pdfarray = create_pdfarray
25
- @cssarray = config[:css]
26
- @remove_temp_files = config[:remove_temp_files]
32
+ @cssarray = config[:css].kind_of?(Array) ? config[:css] : Array[ config[:css] ]
33
+ @remove_css_files = config[:remove_css_files]
34
+ @remove_html_files = config[:remove_html_files]
35
+ @remove_tmp_pdf_files = config[:remove_tmp_pdf_files]
36
+ @remove_css_files = @remove_html_files = @remove_tmp_pdf_files = true if in_config[:remove_temp_files]
27
37
  @options = config[:options]
28
38
  end
29
39
 
40
+ def create_pdf
41
+ clean_temp_files
42
+ download_files
43
+ generate_pdfs
44
+ join_pdfs
45
+ clean_temp_files
46
+ end
47
+
48
+ private
49
+
50
+ def clean_temp_files
51
+ delete_html_files if @remove_html_files
52
+ delete_css_files if @remove_css_files
53
+ delete_tmp_pdf_files if @remove_tmp_pdf_files
54
+ end
55
+
30
56
  def get_htmlarray
31
57
  everything_after_last_slash(@urls)
32
58
  end
@@ -83,13 +109,20 @@ class HtmlsToPdf
83
109
  download_css_files
84
110
  end
85
111
 
112
+ def save_url_to_savename(url, savename)
113
+ uri = URI.parse(url)
114
+ file_content = Net::HTTP.get_response(uri).body
115
+ File.open(savename, 'w') { |f| f.write(file_content) }
116
+ end
117
+
86
118
  def download_html_files
87
119
  existing_files = Dir.entries(".")
88
120
  @htmlarray = []
89
121
  @urls.each_with_index do |url,idx|
90
122
  savename = TMP_HTML_PREFIX + idx.to_s
91
123
  unless existing_files.include?(savename)
92
- `wget #{url} -O #{savename}`
124
+ save_url_to_savename(url, savename)
125
+ #`wget #{url} -O #{savename}`
93
126
  end
94
127
  @htmlarray << savename
95
128
  end
@@ -98,7 +131,10 @@ class HtmlsToPdf
98
131
  def download_css_files
99
132
  existing_files = Dir.entries(".")
100
133
  @cssarray.each do |css_url|
101
- `wget #{css_url}` unless existing_files.include?(File.basename(css_url))
134
+ savename = File.basename(css_url)
135
+ next if existing_files.include?(savename)
136
+ save_url_to_savename(css_url, savename)
137
+ #`wget #{css_url}` unless existing_files.include?(File.basename(css_url))
102
138
  end
103
139
  end
104
140
 
@@ -125,17 +161,17 @@ class HtmlsToPdf
125
161
  end
126
162
  end
127
163
 
128
- def delete_temp_files
129
- @pdfarray.each { |pdffile| File.delete(pdffile) }
130
- @htmlarray.each { |htmlfile| File.delete(htmlfile) }
131
- @cssarray.each { |cssfile| File.delete(File.basename(cssfile)) }
164
+ def delete_tmp_pdf_files
165
+ @pdfarray.each { |pdffile| File.delete(pdffile) if File.exist?(File.basename(pdffile)) } unless @pdfarray.empty?
132
166
  end
133
167
 
134
- def create_pdf
135
- download_files
136
- generate_pdfs
137
- join_pdfs
138
- delete_temp_files if @remove_temp_files
168
+ def delete_html_files
169
+ to_delete = Dir.glob("#{TMP_HTML_PREFIX}*")
170
+ to_delete.each { |f| File.delete(f) }
171
+ end
172
+
173
+ def delete_css_files
174
+ @cssarray.each { |cssfile| File.delete(File.basename(cssfile)) if File.exist?(File.basename(cssfile)) } unless @cssarray.empty?
139
175
  end
140
176
 
141
177
  end
@@ -1,3 +1,3 @@
1
1
  module HtmlsToPdf
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ describe "PDFKit configuration" do
4
+ it "has a binary at '/usr/bin/wkhtmltopdf'" do
5
+ File.exists?('/usr/bin/wkhtmltopdf').should be_true
6
+ end
7
+ it "its binary at '/usr/bin/wkhtmltopdf' is runnable by current user" do
8
+ File.executable?('/usr/bin/wkhtmltopdf').should be_true
9
+ end
10
+ it "has installed the 'pdfkit' gem" do
11
+ expect { require 'pdfkit' }.to_not raise_error
12
+ end
13
+ end
@@ -0,0 +1,2 @@
1
+ Dir["./spec/support/**/*.rb"].each {|f| require f}
2
+
metadata CHANGED
@@ -1,77 +1,67 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: htmls_to_pdf
3
- version: !ruby/object:Gem::Version
4
- hash: 21
5
- prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 5
10
- version: 0.0.5
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.6
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - James Lavin
14
- autorequire:
9
+ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-11-02 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-03-27 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: pdfkit
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
16
+ version_requirements: &2056 !ruby/object:Gem::Requirement
17
+ requirements:
26
18
  - - ~>
27
- - !ruby/object:Gem::Version
28
- hash: 1
29
- segments:
30
- - 0
31
- - 5
32
- version: "0.5"
33
- - - ">="
34
- - !ruby/object:Gem::Version
35
- hash: 15
36
- segments:
37
- - 0
38
- - 5
39
- - 2
19
+ - !ruby/object:Gem::Version
20
+ version: '0.5'
21
+ - - ! '>='
22
+ - !ruby/object:Gem::Version
40
23
  version: 0.5.2
24
+ none: false
25
+ requirement: *2056
26
+ prerelease: false
41
27
  type: :runtime
42
- version_requirements: *id001
43
- - !ruby/object:Gem::Dependency
28
+ - !ruby/object:Gem::Dependency
44
29
  name: rspec
45
- prerelease: false
46
- requirement: &id002 !ruby/object:Gem::Requirement
30
+ version_requirements: &2082 !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
47
35
  none: false
48
- requirements:
49
- - - ">="
50
- - !ruby/object:Gem::Version
51
- hash: 3
52
- segments:
53
- - 0
54
- version: "0"
36
+ requirement: *2082
37
+ prerelease: false
55
38
  type: :development
56
- version_requirements: *id002
57
39
  description: Creates single PDF file from 1+ HTML pages using PDFKit
58
- email:
40
+ email:
59
41
  - htmls_to_pdf@futureresearch.com
60
42
  executables: []
61
-
62
43
  extensions: []
63
-
64
44
  extra_rdoc_files: []
65
-
66
- files:
45
+ files:
67
46
  - .gitignore
68
47
  - README.markdown
48
+ - examples/get_12factor.rb
49
+ - examples/get_bash_guide.rb
69
50
  - examples/get_coffeescript.rb
51
+ - examples/get_coffeescript_cookbook.rb
70
52
  - examples/get_coffeescript_meet_backbone.rb
71
53
  - examples/get_exploring_coffeescript.rb
54
+ - examples/get_jumpstartlabs_advanced_rails.rb
55
+ - examples/get_little_book_on_coffeescript.rb
56
+ - examples/get_nlp_for_working_programmer.rb
57
+ - examples/get_practicing_ruby_vol_2.rb
72
58
  - examples/get_python_book.rb
73
59
  - examples/get_rails_3_1_release_notes.rb
60
+ - examples/get_ror_guides.rb
61
+ - examples/get_rspec.rb
62
+ - examples/get_rspec_rails.rb
74
63
  - examples/get_ruby_book.rb
64
+ - examples/get_ruby_core_docs.rb
75
65
  - examples/get_rubygems_user_guide.rb
76
66
  - htmls_to_pdf.gemspec
77
67
  - lib/htmls_to_pdf.rb
@@ -79,38 +69,31 @@ files:
79
69
  - lib/htmls_to_pdf/pdfkit_config.rb
80
70
  - lib/htmls_to_pdf/version.rb
81
71
  - license.txt
82
- homepage:
72
+ - spec/ensure_pdfkit_installed_spec.rb
73
+ - spec/spec_helper.rb
74
+ homepage:
83
75
  licenses: []
84
-
85
- post_install_message:
76
+ post_install_message:
86
77
  rdoc_options: []
87
-
88
- require_paths:
78
+ require_paths:
89
79
  - lib
90
- required_ruby_version: !ruby/object:Gem::Requirement
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ! '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
91
85
  none: false
92
- requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- hash: 3
96
- segments:
97
- - 0
98
- version: "0"
99
- required_rubygems_version: !ruby/object:Gem::Requirement
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ! '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
100
91
  none: false
101
- requirements:
102
- - - ">="
103
- - !ruby/object:Gem::Version
104
- hash: 3
105
- segments:
106
- - 0
107
- version: "0"
108
92
  requirements: []
109
-
110
- rubyforge_project:
111
- rubygems_version: 1.8.7
112
- signing_key:
93
+ rubyforge_project:
94
+ rubygems_version: 1.8.15
95
+ signing_key:
113
96
  specification_version: 3
114
97
  summary: Creates single PDF file from 1+ HTML pages
115
98
  test_files: []
116
-
99
+ ...