fronde 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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