neruda 0.0.10 → 0.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.
Files changed (41) hide show
  1. checksums.yaml +5 -5
  2. data/bin/pablo +105 -246
  3. data/lib/neruda/config.rb +94 -0
  4. data/lib/neruda/config/lisp_config.rb +201 -0
  5. data/lib/neruda/config/org-config.el +17 -0
  6. data/lib/neruda/config/ox-neruda.el +88 -0
  7. data/lib/neruda/index.rb +108 -0
  8. data/lib/neruda/index/atom_generator.rb +86 -0
  9. data/lib/neruda/index/org_generator.rb +92 -0
  10. data/lib/neruda/org_file.rb +266 -0
  11. data/lib/neruda/org_file/class_methods.rb +55 -0
  12. data/lib/neruda/org_file/extracter.rb +61 -0
  13. data/lib/neruda/org_file/htmlizer.rb +78 -0
  14. data/lib/neruda/preview.rb +53 -0
  15. data/lib/neruda/templater.rb +111 -0
  16. data/lib/neruda/utils.rb +130 -0
  17. data/lib/neruda/version.rb +5 -0
  18. data/lib/tasks/org.rake +69 -0
  19. data/lib/tasks/site.rake +84 -0
  20. data/lib/tasks/sync.rake +30 -0
  21. data/locales/en.yml +18 -0
  22. data/locales/fr.yml +18 -0
  23. data/themes/default/css/style.css +216 -0
  24. data/themes/default/fonts/Yanone_Kaffeesatz_400.woff +0 -0
  25. data/themes/default/fonts/Yanone_Kaffeesatz_400.woff2 +0 -0
  26. metadata +145 -39
  27. data/README.md +0 -98
  28. data/docs/Rakefile.example +0 -4
  29. data/docs/config.yml.example +0 -17
  30. data/lib/assets/chapter.slim +0 -14
  31. data/lib/assets/index.slim +0 -13
  32. data/lib/assets/layout.slim +0 -17
  33. data/lib/assets/style.css +0 -199
  34. data/lib/neruda.rb +0 -112
  35. data/lib/neruda/chapter.rb +0 -26
  36. data/lib/neruda/url.rb +0 -14
  37. data/lib/tasks/book.rake +0 -60
  38. data/lib/tasks/capistrano/chapters.rake +0 -60
  39. data/lib/tasks/capistrano/sinatra.rake +0 -18
  40. data/lib/tasks/chapters.rake +0 -132
  41. data/lib/tasks/sinatra.rake +0 -36
data/README.md DELETED
@@ -1,98 +0,0 @@
1
- ![](https://badge.fury.io/rb/neruda.svg)
2
-
3
- **Neruda** is a little [Sinatra](http://sinatrarb.com) app, which aims to offer a quick access for writers to web publication. It is named in memory of Pablo Neruda.
4
-
5
- Source code is available on my [cgit instance](https://git.deparis.io/neruda), while issues should be followed on my [redmine instance](https://projects.deparis.io/projects/neruda).
6
-
7
- Install
8
- =======
9
-
10
- These installation instructions use [rvm](https://rvm.io) as ruby provider. If you want to use rbenv or your system ruby, please refer to their specific documentation to know how to install ruby 2.4.
11
-
12
- First we need to upgrade rvm (always do that from time to time):
13
-
14
- ``` bash
15
- $ rvm get latest
16
- $ rvm install ruby-2.4.1
17
- ```
18
-
19
- Then the installation itself:
20
-
21
- ``` bash
22
- $ mkdir mysite
23
- $ rvm use ruby-2.4.1@neruda --create
24
- $ gem install neruda
25
- ```
26
-
27
- Finally, you need to configure it to your needs.
28
-
29
- ``` bash
30
- $ pablo setup
31
- ```
32
-
33
- Running it
34
- ==========
35
-
36
- For testing it, you should just run:
37
-
38
- ``` bash
39
- $ pablo start
40
- ```
41
-
42
- For production use, just pass the right environnement variable:
43
-
44
- ``` bash
45
- $ APP_ENV=production pablo start
46
- ```
47
-
48
- To stop it, just enter `ctrl+C` if you are in development mode or enter `pablo stop` in production mode.
49
-
50
- Pablo command
51
- =============
52
-
53
- In order to manage you Neruda installation, this gem provides a little helper called `pablo`. You already used it to `setup`, `start` and `stop` your local installation. It can do a little more.
54
-
55
- New
56
- ---
57
-
58
- `pablo new [article title]` will open your favorite text editor to let you write a new chapter to your book.
59
-
60
- If you don't provide a title to the command, `pablo` will ask you for one before launching your editor.
61
-
62
- If you don't have configured the `EDITOR` or `VISUAL` environnement variable, `pablo` will default to Gnu Emacs.
63
-
64
- Compile
65
- -------
66
-
67
- `pablo compile` will first convert your orphaned org files (the ones without a corresponding epub file), then producing the global epub book, made with all your chapters.
68
-
69
- Capify
70
- ------
71
-
72
- `pablo capify` will add the correct references to Neruda rake tasks in your `Capfile`, what will allow you to call them as part of your deployment workflow.
73
-
74
- You can add the `chapters:sync` task:
75
-
76
- ``` ruby
77
- after 'deploy:finishing', 'chapters:sync'
78
- ```
79
-
80
- This task depends on all the following. Or you can just select a bunch of them:
81
-
82
- ``` ruby
83
- after 'deploy:finishing', 'chapters:build_epubs'
84
- after 'deploy:finishing', 'chapters:upload_epubs'
85
- after 'deploy:finishing', 'chapters:upload_book'
86
- after 'deploy:finishing', 'chapters:purge:remote'
87
- ```
88
-
89
- Don't forget to restart the remote sinatra server:
90
-
91
- ``` ruby
92
- after 'deploy:finished', 'sinatra:restart:remote'
93
- ```
94
-
95
- Known issues
96
- ============
97
-
98
- See [issues on redmine](https://projects.deparis.io/projects/neruda/issues).
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- neruda_spec = Gem::Specification.find_by_name 'neruda'
4
- Dir.glob("#{neruda_spec.gem_dir}/lib/tasks/*.rake").each { |r| import r }
@@ -1,17 +0,0 @@
1
- ---
2
-
3
- title: My Awesome Title
4
- author: Me Myself
5
- # license: © Me
6
- # lang: en_US
7
-
8
- book_filename: my_awesome_title
9
-
10
- ## If we are behind a subfolder reverse proxy
11
- # base_path: /subfolder
12
-
13
- chapters:
14
- - in_the
15
- - order
16
- - we_wish
17
- - they_appear
@@ -1,14 +0,0 @@
1
- .chapter
2
- h1.chapter-title = title
3
-
4
- .chapter-meta
5
- p.chapter-info
6
- span.chapter-date = meta_data 'date'
7
- br
8
- span.chapter-epub
9
- a href=proxy_url("/epub/#{@slug}") epub version
10
- ' -
11
- span.chapter-permalink
12
- a href=proxy_url("/chapter/#{@slug}") permalink
13
-
14
- == @content.to_html
@@ -1,13 +0,0 @@
1
- h1 = title
2
-
3
- == text
4
-
5
- p
6
- a href=proxy_url('/epub/all') Télécharger la version complète
7
-
8
- h2 Chapitres
9
-
10
- ul
11
- - @chapters.each do |c|
12
- li
13
- a href=proxy_url("/chapter/#{c[:slug]}") = c[:title]
@@ -1,17 +0,0 @@
1
- doctype html
2
- html
3
- head
4
- title #{title}
5
- meta name='author' content=author
6
- link rel='stylesheet' href=proxy_url('/style.css') type='text/css'
7
-
8
- body
9
- #content
10
- == yield
11
-
12
- footer#footer.status
13
- p © #{author}
14
- p#gotop
15
- a href=proxy_url('/') Accueil
16
- ' ·
17
- a href='#top' Aller en haut
@@ -1,199 +0,0 @@
1
- body {
2
- font-family: serif;
3
- font-size: 20pt;
4
- }
5
-
6
- a:hover {
7
- text-decoration: none;
8
- }
9
-
10
- dt {
11
- font-weight: bold;
12
- }
13
- dt:after {
14
- font-weight: bold;
15
- content: ":";
16
- }
17
-
18
- figure {
19
- text-align: center;
20
- }
21
-
22
- kbd {
23
- border-width: .3em;
24
- border-style: solid;
25
- }
26
-
27
- #content,
28
- #footer,
29
- .status {
30
- width: 968px;
31
- margin: 1em auto;
32
- }
33
-
34
- #content img {
35
- max-width: 100%;
36
- }
37
-
38
-
39
- /**
40
- * Content
41
- */
42
-
43
- #content {
44
- padding: 1em;
45
- line-height: 1.5em;
46
- }
47
-
48
- #content h1.chapter-title {
49
- margin: 0;
50
- line-height: 1.5em;
51
- }
52
-
53
- .chapter-meta {
54
- font-size: smaller;
55
- padding: 0 .4em;
56
- border-left-style: solid;
57
- border-left-width: .4em;
58
- border-radius: .4em;
59
- }
60
- .chapter-meta p {
61
- margin: .3em 0;
62
- }
63
-
64
- .src {
65
- font-family: Inconsolata, monospace;
66
- font-size: 1em;
67
- display:block;
68
- padding-left:.4em;
69
- margin:1em 1.5em;
70
- line-height:1.5em;
71
- border-left-width: .4em;
72
- border-left-style: solid;
73
- border-radius: .4em;
74
- overflow-x: auto;
75
- }
76
-
77
- blockquote {
78
- display: block;
79
- padding: 0 1.5em;
80
- font-style: italic;
81
- margin: 1em 0;
82
- }
83
- blockquote::after {
84
- display: table;
85
- content: "";
86
- clear: both;
87
- }
88
- blockquote>*:first-child::before {
89
- content: "« ";
90
- font-size: 3em;
91
- }
92
- blockquote>*:last-child::after {
93
- content: " »";
94
- font-size: 2em;
95
- }
96
-
97
- div.footnotes,
98
- .footdef {
99
- font-size: smaller;
100
- }
101
- div.footnotes::before,
102
- .footdef::before {
103
- content: "---";
104
- display: block;
105
- }
106
- div.footnotes,
107
- .footdef sup {
108
- font-size: smaller;
109
- }
110
-
111
- #content .chapter::after {
112
- content: "❦";
113
- font-size: xx-large;
114
- display: block;
115
- text-align: center;
116
- }
117
-
118
- /**
119
- * Footer
120
- */
121
- #gotop {
122
- position: fixed;
123
- bottom: 0em;
124
- right: 1em;
125
- font-size: smaller;
126
- }
127
-
128
- #footer {
129
- clear: both;
130
- padding-top: 0;
131
- font-size: smaller;
132
- margin-bottom: .5em;
133
- }
134
-
135
- /**
136
- * Responsive...
137
- */
138
- @media screen and (max-width: 968px) {
139
- #content, .status {
140
- width: 90%;
141
- }
142
- }
143
-
144
-
145
- /**
146
- * Colors
147
- * We used the Dracula color theme
148
- * https://draculatheme.com/
149
- */
150
-
151
- body {
152
- background: #282a36;
153
- color: #f8f8f2;
154
- }
155
-
156
- h1 {
157
- color: #ffb86c;
158
- }
159
-
160
- h2 {
161
- color: #bd93f9;
162
- }
163
-
164
- a:link, a:visited {
165
- color: #ff79c6;
166
- }
167
-
168
- kbd {
169
- border-color: #f8f8f2;
170
- }
171
-
172
- code {
173
- background: #373844;
174
- color: #e2e2dc;
175
- }
176
-
177
- mark {
178
- background: #f1fa8c;
179
- }
180
-
181
- .chapter-meta {
182
- border-left-color: #373844;
183
- background-color: #464752;
184
- }
185
-
186
- .src {
187
- border-left-color: #bd93f9;
188
- }
189
-
190
- blockquote>*:first-child::before {
191
- color: #50fa7b;
192
- }
193
- blockquote>*:last-child::after {
194
- color: #50fa7b;
195
- }
196
-
197
- .comment-content {
198
- border-left-color: #bd93f9;
199
- }
@@ -1,112 +0,0 @@
1
- # coding: utf-8
2
- # frozen_string_literal: true
3
-
4
- require 'yaml'
5
- require 'org-ruby'
6
- require 'sinatra/base'
7
-
8
- # Namespacing
9
- module Neruda
10
- CONFIG = YAML.load_file(File.join('config', 'config.yml')).freeze
11
- end
12
-
13
- # The following must be required after to allow compact name style
14
- require 'neruda/url'
15
- require 'neruda/chapter'
16
-
17
- # Main Sinatra application
18
- class Neruda::App < Sinatra::Base
19
- configure :production, :development do
20
- # When used as a Gem, we lose the correct path.
21
- set :root, Dir.pwd
22
- disable :logging, :method_override, :sessions
23
- mime_type :epub, 'application/epub+zip'
24
- end
25
-
26
- include Neruda::Url
27
- include Neruda::Chapter
28
-
29
- def chdir
30
- loc_env = 'development'
31
- if ENV.key? 'APP_ENV'
32
- loc_env = ENV['APP_ENV']
33
- elsif ENV.key? 'RACK_ENV'
34
- loc_env = ENV['RACK_ENV']
35
- end
36
- Dir.chdir settings.root if loc_env == 'production'
37
- end
38
-
39
- def find_slug
40
- @slug = params[:chapter]
41
- halt 404 if @slug.nil?
42
- end
43
-
44
- def find_file(kind = 'org')
45
- if kind == 'epub'
46
- f = File.join('private', 'epubs', "#{@slug}.epub")
47
- elsif kind == 'chapters'
48
- f = File.join('private', 'chapters', "#{@slug}.org")
49
- else
50
- f = File.join('private', "#{@slug}.#{kind}")
51
- end
52
- halt 404 unless File.exist? f
53
- f
54
- end
55
-
56
- get '/epub/:chapter' do
57
- chdir
58
- find_slug
59
- if @slug == 'all' && !Neruda::CONFIG['book_filename'].nil?
60
- @slug = Neruda::CONFIG['book_filename']
61
- end
62
- epub_file = find_file('epub')
63
- halt 404 unless File.exist? epub_file
64
- content_type :epub
65
- send_file epub_file, filename: "#{@slug}.epub"
66
- end
67
-
68
- get '/chapter/:chapter' do
69
- chdir
70
- find_slug
71
- @org_file = find_file('chapters')
72
- @content = Orgmode::Parser.load @org_file
73
- title # Force the early removal of the title
74
- slim :chapter
75
- end
76
-
77
- unless Neruda::CONFIG['base_path'].nil?
78
- # If we are behind a misconfigured subfolder reverse proxy, this one
79
- # could be usefull
80
- get Neruda::CONFIG['base_path'] do
81
- call env.merge('PATH_INFO' => '/')
82
- end
83
- end
84
-
85
- get '/' do
86
- chdir
87
- @slug = 'index'
88
- text_content = ''
89
- index_file = File.join('private', 'index.org')
90
- if File.exist? index_file
91
- @org_file = index_file
92
- @content = Orgmode::Parser.load @org_file
93
- title
94
- text_content = @content.to_html
95
- end
96
-
97
- @chapters = []
98
- if File.exist? File.join('config', 'chapters.yml')
99
- @chapters = YAML.load_file(File.join('config', 'chapters.yml'))
100
- end
101
-
102
- slim :index, locals: { text: text_content }
103
- end
104
-
105
- error 403 do
106
- slim 'h1 Access forbidden'
107
- end
108
-
109
- error 404 do
110
- slim 'h1 Not Found'
111
- end
112
- end