lessons_indexer 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +28 -0
- data/lib/lessons_indexer/course.rb +8 -0
- data/lib/lessons_indexer/indexer.rb +8 -0
- data/lib/lessons_indexer/options.rb +1 -0
- data/lib/lessons_indexer/version.rb +1 -1
- data/spec/course_spec.rb +4 -0
- data/spec/indexer_spec.rb +7 -0
- data/spec/options_spec.rb +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 066ca6597bddc89b3925da3df00a4732cfdc4977
|
4
|
+
data.tar.gz: 176a832789ba3064daeb96fac15c8de2abbdd31d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 41ec1829cc6aa5c2e845189263a53e0e93080596f466a17f4ee1585734060f2f8057b44ea107c6e5496819978fe23699e5b0ca0de95d99c49f1bc2dbdd0e8a45
|
7
|
+
data.tar.gz: ca02f59549d1e92127b1ebeda8139c78ab18ce1dfefcd5acf57f9416ad39326fbbb795344e00fd5b4874ee6bd2670da4bb3b6257c7ae113f4a3f28f47050d42f
|
data/README.md
CHANGED
@@ -51,6 +51,8 @@ is not set.
|
|
51
51
|
has a heading in the beginning, it will be skipped.
|
52
52
|
* `-d` (`--headings_dir`) - relative path to the directory with heading images.
|
53
53
|
Defaults to `headings`, has no effect if the `-i` flag is not set.
|
54
|
+
* `-f` (`--pdf`) - should PDFs be generated from the lesson files in markdown format. PDFs will have the same name as the
|
55
|
+
lesson files, read more [below](#pdf-generation). Defauls to `false`.
|
54
56
|
|
55
57
|
## Some Assumptions
|
56
58
|
|
@@ -68,6 +70,32 @@ files (of course, they don't need to have the *.md* extension). Valid files name
|
|
68
70
|
All other files will be ignored. If the program cannot find a header image for a specific step,
|
69
71
|
this step will be just skipped and the corresponding warning message will be displayed.
|
70
72
|
|
73
|
+
## PDF Generation
|
74
|
+
|
75
|
+
Starting from version **0.2.0** Indexer supports PDF generation. It is disabled by default - provide `-f` flag to enable this feature.
|
76
|
+
|
77
|
+
PDF generation is not a very simple process, so some additional software has to be installed on your machine:
|
78
|
+
|
79
|
+
* [Pandoc](http://pandoc.org/) - the main program that makes conversion possible. It supports all major platforms, just select the [version](http://pandoc.org/installing.html) that suits you.
|
80
|
+
* [LaTex](http://www.latex-project.org/). Unfortunately, it is not possible to convert directly to PDF, so LaTex is required. Pandoc [lists](http://pandoc.org/installing.html) the recommended
|
81
|
+
implementations of LaTex for various platforms.
|
82
|
+
* [xetex](http://xetex.sourceforge.net/) - extension for LaTex to integrate typesetting capabilities. By default changing the default
|
83
|
+
font family is a huge pain, therefore xetex is used. Please note, that it is already a part of some LaTex implementations
|
84
|
+
(for example, if you install full version of MIKTex, xetex will already be present, so no additional actions are needed).
|
85
|
+
|
86
|
+
Make sure Pandoc is present in your PATH by typing
|
87
|
+
|
88
|
+
```
|
89
|
+
pandoc -v
|
90
|
+
```
|
91
|
+
|
92
|
+
in your terminal.
|
93
|
+
|
94
|
+
Indexer uses [Open Sans](http://www.fontsquirrel.com/fonts/open-sans) as a main font and [Liberation Mono](http://www.fontsquirrel.com/fonts/Liberation-Mono) as monotype font (for code examples). Both of these fonts
|
95
|
+
are free (in contrast to Helvetica Neue that has to be purchased), so if you don't have those fonts just download them and install into the fonts directory.
|
96
|
+
|
97
|
+
After that you are ready to generate PDFs! Just remember that it will take some time (about 5-10 seconds per lesson file).
|
98
|
+
|
71
99
|
## Testing
|
72
100
|
|
73
101
|
```
|
@@ -29,6 +29,14 @@ module LessonsIndexer
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
def generate_pdfs
|
33
|
+
within(dir, true) do
|
34
|
+
lessons.list.sort.each do |lesson|
|
35
|
+
%x{pandoc #{lesson.file_name} -f markdown_github -o #{lesson.file_name.gsub(/md\z/i, '')}.pdf --variable geometry:"top=1.5cm, bottom=2.5cm, left=1.5cm, right=1.5cm" --latex-engine=xelatex --variable mainfont="Open Sans" --variable monofont="Liberation Mono" --variable fontsize="12pt"}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
32
40
|
def load_headings!
|
33
41
|
within(dir + '/' + headings_dir, true) do
|
34
42
|
@headings = HeadingsList.new(all_with_pattern(Heading::VERSION_PATTERN).map {|heading| Heading.new(heading)})
|
@@ -14,6 +14,7 @@ module LessonsIndexer
|
|
14
14
|
|
15
15
|
build_index(course) unless options.skip_index
|
16
16
|
add_headings(course) if options.headings
|
17
|
+
generate_pdfs(course) if options.pdf
|
17
18
|
git_push! if options.git
|
18
19
|
end
|
19
20
|
|
@@ -32,6 +33,13 @@ module LessonsIndexer
|
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
36
|
+
def generate_pdfs(course)
|
37
|
+
course.load_lessons!
|
38
|
+
with_messages("Starting to generate PDFs...", "PDFs for the course #{course.title} were generated!") do
|
39
|
+
course.generate_pdfs
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
35
43
|
def get_course_dir
|
36
44
|
dir = Dir.entries('.').detect {|el| el =~ /_handouts\z/i}
|
37
45
|
exit_msg("Lesson files were not found inside the provided directory. Aborting...") if dir.nil?
|
@@ -26,6 +26,7 @@ module LessonsIndexer
|
|
26
26
|
o.bool '-a', '--all', 'Work with all branches (except for master)', default: false
|
27
27
|
o.bool '-i', '--headings', 'Add heading images to the beginning of the lesson files?', default: false
|
28
28
|
o.string '-d', '--headings_dir', 'Relative path to the directory with heading images', default: 'headings'
|
29
|
+
o.bool '-f', '--pdf', 'Should PDFs be generated?', default: false
|
29
30
|
end.to_hash
|
30
31
|
rescue Slop::Error => e
|
31
32
|
exit_msg e.message
|
data/spec/course_spec.rb
CHANGED
@@ -22,6 +22,10 @@ RSpec.describe LessonsIndexer::Course do
|
|
22
22
|
expect(subject.generate_index).to eq("# Index for the My Course course\n\n* [Lesson 1.3](my_course_handouts/lesson1.3.md)\n* [Lesson 2.5](my_course_handouts/lesson2.5.md)\n* [Lesson 5.8](my_course_handouts/lesson5.8.md)\n* [Lesson 10.2](my_course_handouts/lesson10.2.md)\n")
|
23
23
|
end
|
24
24
|
|
25
|
+
specify "#generate_pdfs" do
|
26
|
+
expect(subject).to respond_to(:generate_pdfs)
|
27
|
+
end
|
28
|
+
|
25
29
|
context "#generate_headings" do
|
26
30
|
it "should return formatted heading and path to file" do
|
27
31
|
expect(subject).to receive(:lessons).and_return(sample_lessons)
|
data/spec/indexer_spec.rb
CHANGED
@@ -36,6 +36,13 @@ RSpec.describe LessonsIndexer::Indexer do
|
|
36
36
|
expect(subject).not_to receive(:add_headings)
|
37
37
|
capture_stdout { subject.do_work! }
|
38
38
|
end
|
39
|
+
|
40
|
+
it "should generate pdfs if --pdf is set" do
|
41
|
+
allow(subject.options).to receive(:skip_index).and_return(true)
|
42
|
+
allow(subject.options).to receive(:pdf).and_return(true)
|
43
|
+
expect(subject).to receive(:generate_pdfs)
|
44
|
+
capture_stdout { subject.do_work! }
|
45
|
+
end
|
39
46
|
end
|
40
47
|
|
41
48
|
context "#get_course_dir" do
|
data/spec/options_spec.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lessons_indexer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ilya Bodrov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slop
|