fronde 0.3.3 → 0.4.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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/bin/fronde +15 -30
  3. data/lib/ext/nil_time.rb +25 -0
  4. data/lib/ext/r18n.rb +17 -0
  5. data/lib/ext/time.rb +49 -0
  6. data/lib/fronde/cli/commands.rb +92 -103
  7. data/lib/fronde/cli/data/Rakefile +8 -0
  8. data/lib/fronde/cli/data/config.yml +13 -0
  9. data/lib/fronde/cli/data/gitignore +7 -0
  10. data/lib/fronde/cli/data/zsh_completion +37 -0
  11. data/lib/fronde/cli/helpers.rb +55 -0
  12. data/lib/fronde/cli/opt_parse.rb +143 -0
  13. data/lib/fronde/cli/throbber.rb +99 -0
  14. data/lib/fronde/cli.rb +41 -42
  15. data/lib/fronde/config/data/org-config.el +24 -0
  16. data/lib/fronde/config/{ox-fronde.el → data/ox-fronde.el} +1 -1
  17. data/lib/fronde/config/helpers.rb +80 -0
  18. data/lib/fronde/config/lisp.rb +70 -0
  19. data/lib/fronde/config.rb +135 -99
  20. data/lib/fronde/emacs.rb +23 -20
  21. data/lib/fronde/index/atom_generator.rb +55 -66
  22. data/lib/fronde/index/data/all_tags.org +14 -0
  23. data/lib/fronde/index/data/template.org +22 -0
  24. data/lib/fronde/index/data/template.xml +37 -0
  25. data/lib/fronde/index/org_generator.rb +70 -88
  26. data/lib/fronde/index.rb +56 -82
  27. data/lib/fronde/org/file.rb +287 -0
  28. data/lib/fronde/org/file_extracter.rb +98 -0
  29. data/lib/fronde/org.rb +103 -0
  30. data/lib/fronde/preview.rb +43 -39
  31. data/lib/fronde/slug.rb +27 -0
  32. data/lib/fronde/source/gemini.rb +39 -0
  33. data/lib/fronde/source/html.rb +67 -0
  34. data/lib/fronde/source.rb +204 -0
  35. data/lib/fronde/templater.rb +94 -71
  36. data/lib/fronde/version.rb +1 -1
  37. data/lib/tasks/cli.rake +33 -0
  38. data/lib/tasks/org.rake +63 -43
  39. data/lib/tasks/site.rake +68 -30
  40. data/lib/tasks/sync.rake +41 -21
  41. data/lib/tasks/tags.rake +11 -7
  42. data/locales/en.yml +60 -14
  43. data/locales/fr.yml +68 -14
  44. metadata +57 -156
  45. data/lib/fronde/config/lisp_config.rb +0 -340
  46. data/lib/fronde/config/org-config.el +0 -19
  47. data/lib/fronde/org_file/class_methods.rb +0 -72
  48. data/lib/fronde/org_file/extracter.rb +0 -72
  49. data/lib/fronde/org_file/htmlizer.rb +0 -43
  50. data/lib/fronde/org_file.rb +0 -298
  51. data/lib/fronde/utils.rb +0 -229
data/lib/fronde/utils.rb DELETED
@@ -1,229 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'uri'
4
- require 'rainbow'
5
- require 'net/http'
6
- require 'r18n-core'
7
- require 'fronde/config'
8
-
9
- module Fronde
10
- # Default Error, which may be raised by fronde code
11
- class Error < ::StandardError; end
12
-
13
- # Embeds usefull methods, mainly used in rake tasks.
14
- module Utils
15
- # @return [Hash] the possible throbber themes
16
- THROBBER_FRAMES = {
17
- 'basic' => '-\|/',
18
- 'basicdots' => '⋯⋱⋮⋰',
19
- 'moon' => '🌑🌒🌓🌔🌕🌖🌗🌘',
20
- 'clock' => '🕛🕐🕑🕒🕓🕔🕕🕖🕗🕘🕙🕚',
21
- 'bricks' => '⣷⣯⣟⡿⢿⣻⣽⣾',
22
- 'points' => '·⁘∷⁛∷⁘',
23
- 'quadrant2' => '▙▛▜▟',
24
- 'default' => ['⠁ ⠂ ⠄ ⡀ ⠄ ⠂ ⠁', '⠂ ⠁ ⠂ ⠄ ⡀ ⠄ ⠂', '⠄ ⠂ ⠁ ⠂ ⠄ ⡀ ⠄',
25
- '⡀ ⠄ ⠂ ⠁ ⠂ ⠄ ⡀', '⠄ ⡀ ⠄ ⠂ ⠁ ⠂ ⠄', '⠂ ⠄ ⡀ ⠄ ⠂ ⠁ ⠂']
26
- }.freeze
27
-
28
- # @return [Hash] the possible ~fronde~ options and their
29
- # configuration
30
- FRONDE_OPTIONS = {
31
- '-a' => { long: 'author' },
32
- '-f' => { long: 'force', boolean: true },
33
- '-h' => { long: 'help', boolean: true, meth: :on_tail },
34
- '-l' => { long: 'lang', keyword: 'LOCALE' },
35
- '-t' => { long: 'title' },
36
- '-v' => { long: 'verbose', boolean: true, meth: :on_tail },
37
- '-V' => { long: 'version', boolean: true, meth: :on_tail }
38
- }.freeze
39
-
40
- # @return [Hash] the possible ~fronde~ subcommands and their
41
- # configuration
42
- FRONDE_COMMANDS = {
43
- 'init' => { opts: ['-a', '-h', '-l', '-t', '-v'] },
44
- 'update' => { opts: ['-a', '-h', '-l', '-t', '-v'] },
45
- 'config' => { alias: 'update' },
46
- 'preview' => { opts: ['-h'] },
47
- 'open' => { opts: ['-a', '-h', '-l', '-t', '-v'] },
48
- 'edit' => { alias: 'open' },
49
- 'build' => { opts: ['-f', '-h'] },
50
- 'publish' => { opts: ['-h'] },
51
- 'help' => { opts: ['-h'] },
52
- 'basic' => { opts: ['-h', '-V'], label: '<command>' }
53
- }.freeze
54
-
55
- class << self
56
- # Animates strings in the user console to alert him that something
57
- # is running in the background.
58
- #
59
- # The animation is chosen among a bunch of themes, with the
60
- # configuration option ~throbber~ (retrieved via
61
- # {Fronde::Config#settings}).
62
- #
63
- # @example
64
- # long_stuff = Thread.new { very_long_operation }
65
- # Fronde::Utils.throbber(long_stuff, 'Computing hard stuff:')
66
- #
67
- # @param thread [Thread] the long-running operation to decorate
68
- # @param message [String] the message to display before the throbber
69
- # @return [void]
70
- def throbber(thread, message)
71
- frames = select_throbber_frames
72
- begin
73
- run_and_decorate_thread thread, message, frames
74
- rescue RuntimeError => e
75
- throbber_error message
76
- raise e
77
- else
78
- done = Rainbow('done'.ljust(frames[0].length)).green
79
- puts "#{message} #{done}"
80
- end
81
- end
82
-
83
- # Returns the short and long options specification for a given
84
- # short option.
85
- #
86
- # This method use the {Fronde::Utils::FRONDE_OPTIONS} Hash to
87
- # retrieve corresponding values.
88
- #
89
- # @example
90
- # spec = Fronde::Utils.decorate_option('-a')
91
- # => ['-a AUTHOR', '--author AUTHOR']
92
- #
93
- # @param short [String] the short option to decorate
94
- # @return [Array] the short and long specification for an option
95
- def decorate_option(short)
96
- opt = Fronde::Utils::FRONDE_OPTIONS[short]
97
- long = "--#{opt[:long]}"
98
- return [short, long] if opt[:boolean]
99
- key = opt[:keyword] || opt[:long].upcase
100
- [short + key, format('%<long>s %<key>s', long: long, key: key)]
101
- end
102
-
103
- # Returns the ~fronde~ help summary for a given command.
104
- #
105
- # @param command [String] the command for which a summary
106
- # should be given
107
- # @return [String]
108
- def summarize_command(command)
109
- Fronde::Utils::FRONDE_COMMANDS[command][:opts].map do |k|
110
- short, long = Fronde::Utils.decorate_option(k)
111
- opt = Fronde::Utils::FRONDE_OPTIONS[k]
112
- label = [short, long].join(', ')
113
- line = [format(' %<opt>s', opt: label).ljust(30)]
114
- if R18n.t.fronde.bin.options[opt[:long]].translated?
115
- line << R18n.t.fronde.bin.options[opt[:long]]
116
- end
117
- line.join(' ')
118
- end.join("\n")
119
- end
120
-
121
- # Returns a formatted list of available commands for ~fronde~.
122
- #
123
- # @return [String]
124
- def list_commands
125
- lines = []
126
- Fronde::Utils::FRONDE_COMMANDS.each do |cmd, opt|
127
- next if cmd == 'basic'
128
- line = [' ', cmd.ljust(10)]
129
- if opt.has_key? :alias
130
- line << R18n.t.fronde.bin.commands.alias(opt[:alias])
131
- else
132
- line << R18n.t.fronde.bin.commands[cmd]
133
- end
134
- lines << line.join(' ')
135
- end
136
- lines.join("\n")
137
- end
138
-
139
- # Returns the real command name for a given command, which may be
140
- # an alias.
141
- #
142
- # @param command [String] the command to resolve
143
- # @return [String]
144
- def resolve_possible_alias(command)
145
- return 'basic' unless Fronde::Utils::FRONDE_COMMANDS.include?(command)
146
- cmd_opt = Fronde::Utils::FRONDE_COMMANDS[command]
147
- return cmd_opt[:alias] if cmd_opt.has_key?(:alias)
148
- command
149
- end
150
-
151
- # Returns the given command options.
152
- #
153
- # This method will first try to resolve command alias, if any.
154
- #
155
- # @param command [String] the command, which options should be returned
156
- # @return [Hash] the command options
157
- def command_options(command)
158
- cmd = resolve_possible_alias command
159
- FRONDE_COMMANDS[cmd].merge(name: cmd)
160
- end
161
-
162
- # Try to discover the current host operating system.
163
- #
164
- # @return [String] either apple, windows or linux (default)
165
- # :nocov:
166
- def current_os
167
- if ENV['OS'] == 'Windows_NT' || RUBY_PLATFORM.include?('cygwin')
168
- return 'windows'
169
- end
170
- return 'apple' if RUBY_PLATFORM.include?('darwin')
171
- 'linux'
172
- end
173
- # :nocov:
174
-
175
- # Download latest org-mode tarball.
176
- #
177
- # @param destination [String] where to save the org-mode tarball
178
- # @return [String] the downloaded org-mode version
179
- def download_org(destination = 'var/tmp')
180
- # :nocov:
181
- return if Fronde::Config.org_last_version.nil?
182
- # :nocov:
183
- # Remove version number in dest file to allow easy rake file
184
- # task naming
185
- dest_file = File.expand_path('org.tar.gz', destination)
186
- return if File.exist?(dest_file)
187
- tarball = "org-mode-release_#{Fronde::Config.org_last_version}.tar.gz"
188
- uri = URI("https://git.savannah.gnu.org/cgit/emacs/org-mode.git/snapshot/#{tarball}")
189
- # Will crash on purpose if anything goes wrong
190
- Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
191
- http.request(Net::HTTP::Get.new(uri)) do |response|
192
- File.open(dest_file, 'w') do |io|
193
- response.read_body { |chunk| io.write chunk }
194
- end
195
- end
196
- end
197
- end
198
-
199
- private
200
-
201
- def throbber_error(message)
202
- warn(
203
- format(
204
- "%<message>s %<label>s\n%<explanation>s",
205
- message: message,
206
- label: Rainbow(R18n.t.fronde.error.label).bold.red,
207
- explanation: Rainbow(R18n.t.fronde.error.explanation).bold
208
- )
209
- )
210
- end
211
-
212
- def select_throbber_frames
213
- model = Fronde::Config.settings['throbber'] || 'default'
214
- model = 'default' unless Fronde::Utils::THROBBER_FRAMES.has_key?(model)
215
- Fronde::Utils::THROBBER_FRAMES[model]
216
- end
217
-
218
- def run_and_decorate_thread(thread, message, frames)
219
- thread.abort_on_exception = true
220
- current = 0
221
- while thread.alive?
222
- sleep 0.1
223
- print "#{message} #{frames[current % frames.length]}\r"
224
- current += 1
225
- end
226
- end
227
- end
228
- end
229
- end