markita 5.0.241001 → 6.0.250327

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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +28 -15
  3. data/bin/markita +16 -19
  4. data/lib/markita/base.rb +38 -31
  5. data/lib/markita/config.rb +27 -18
  6. data/lib/markita/html.rb +35 -20
  7. data/lib/markita/markdown/attributes.rb +23 -0
  8. data/lib/markita/markdown/blockquote.rb +41 -0
  9. data/lib/markita/markdown/code.rb +44 -0
  10. data/lib/markita/markdown/code_block.rb +29 -0
  11. data/lib/markita/markdown/definitions.rb +42 -0
  12. data/lib/markita/markdown/embed.rb +63 -0
  13. data/lib/markita/markdown/empty.rb +22 -0
  14. data/lib/markita/markdown/fold.rb +39 -0
  15. data/lib/markita/markdown/footnotes.rb +28 -0
  16. data/lib/markita/markdown/form.rb +125 -0
  17. data/lib/markita/markdown/heading.rb +33 -0
  18. data/lib/markita/markdown/horizontal_rule.rb +25 -0
  19. data/lib/markita/markdown/image.rb +60 -0
  20. data/lib/markita/markdown/inline.rb +123 -0
  21. data/lib/markita/markdown/list.rb +65 -0
  22. data/lib/markita/markdown/markup.rb +23 -0
  23. data/lib/markita/markdown/script.rb +28 -0
  24. data/lib/markita/markdown/split.rb +38 -0
  25. data/lib/markita/markdown/table.rb +52 -0
  26. data/lib/markita/markdown.rb +51 -475
  27. data/lib/markita/plug/about.rb +28 -17
  28. data/lib/markita/plug/favicon.rb +14 -10
  29. data/lib/markita/plug/highlight.rb +17 -12
  30. data/lib/markita/plug/login.rb +35 -28
  31. data/lib/markita/plug/navigation.rb +4 -1
  32. data/lib/markita/plug/plugs.rb +7 -1
  33. data/lib/markita/plug/readme.rb +8 -4
  34. data/lib/markita/preprocess.rb +52 -23
  35. data/lib/markita/refinement.rb +21 -0
  36. data/lib/markita/requires.rb +29 -0
  37. data/lib/markita.rb +15 -25
  38. metadata +51 -135
@@ -1,37 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Markita namespace
1
4
  module Markita
2
- class Base
3
- module Login
4
- ID = File.exist?(_=File.join(ROOT, '.valid-id')) ?
5
- File.read(_).strip :
6
- nil
7
- IPS = (_=OPTIONS.allowed)? _.split(',') : []
8
- if !IPS.empty? && !ID
9
- raise 'Allowed ips without site password does not make sense.'
5
+ # Base class of the Sinatra Markita application
6
+ class Base
7
+ # Login namespace to support the /login.html route
8
+ module Login
9
+ ID = if File.exist?(filename = File.join(ROOT, '.valid-id'))
10
+ File.read(filename).strip
11
+ end
12
+ IPS = (ips = OPTIONS.allowed) ? ips.split(',') : []
13
+ if !IPS.empty? && !ID
14
+ raise 'Allowed ips without site password does not make sense.'
15
+ end
16
+
17
+ FORM = File.read PATH['login_form.html']
18
+ FAILED = File.read PATH['login_failed.html']
10
19
  end
11
- FORM = File.read PATH['login_form.html']
12
- FAILED = File.read PATH['login_failed.html']
13
- end
14
20
 
15
- before do
16
- unless Login::ID.nil? || Login::IPS.include?(request.ip)
17
- if (id=params[:id])
18
- session[:id] = Digest::SHA256.hexdigest id
19
- end
20
- if session[:id] == Login::ID
21
- redirect '/' if request.path_info == '/login.html'
22
- else
23
- redirect '/login.html' unless request.path_info == '/login.html'
21
+ before do
22
+ unless Login::ID.nil? || Login::IPS.include?(request.ip)
23
+ if (id = params[:id])
24
+ session[:id] = Digest::SHA256.hexdigest id
25
+ end
26
+ if session[:id] == Login::ID
27
+ redirect '/' if request.path_info == '/login.html'
28
+ else
29
+ # Report this unauthorized access attempt
30
+ puts "#{request.ip} #{request.path_info}".magenta
31
+ redirect '/login.html' unless request.path_info == '/login.html'
32
+ end
24
33
  end
25
34
  end
26
- puts "#{request.ip} #{request.path_info}"
27
- end
28
35
 
29
- get '/login.html' do
30
- Login::FORM
31
- end
36
+ get '/login.html' do
37
+ Login::FORM
38
+ end
32
39
 
33
- post '/login.html' do
34
- Login::FAILED
40
+ post '/login.html' do
41
+ Login::FAILED
42
+ end
35
43
  end
36
44
  end
37
- end
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Markita namespace
1
4
  module Markita
2
- NAVIGATION << %(![:Navigation](/favicon.ico /index)\n)
5
+ Html.navigation << %(![:Navigation](/favicon.ico /index)\n)
3
6
  end
@@ -1 +1,7 @@
1
- Dir.glob(File.join Markita::ROOT, 'plug', '*.rb').each{ require _1}
1
+ # frozen_string_literal: true
2
+
3
+ Dir.glob(File.join(Markita::ROOT, 'plug', '*.rb')).each do |path|
4
+ next if Markita.no.include? File.basename(path, '.rb').to_sym
5
+
6
+ require path
7
+ end
@@ -1,7 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Markita namespace
1
4
  module Markita
2
- class Base
3
- get '/readme.html' do
4
- Markdown.new('README').markdown File.read File.join(APPDIR,'README.md')
5
+ # Base class of the Sinatra Markita application
6
+ class Base
7
+ get '/readme.html' do
8
+ Markdown.new('README').markdown File.read File.join(APPDIR, 'README.md')
9
+ end
5
10
  end
6
11
  end
7
- end
@@ -1,30 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Markita namespace
1
4
  module Markita
2
- class Preprocess
3
- def initialize(file)
4
- @file = file.is_a?(String)? StringIO.new(file) : file
5
- @regx = @template = nil
6
- end
5
+ # Preprocess template lines
6
+ class Preprocess
7
+ using Refinement
8
+ # State variables that change as lines are read
9
+ IterationVariables = Struct.new(:line, :rgx, :template, :captures) do
10
+ def line2rgx
11
+ if (mdt = %r{^! regx = /(.*)/$}.match(line))
12
+ self.rgx = Regexp.new(mdt[1])
13
+ end
14
+ end
15
+
16
+ def line2template
17
+ if (mdt = /^! template = "(.*)"$/.match(line))
18
+ self.template = "#{mdt[1]}\n"
19
+ end
20
+ end
7
21
 
8
- def gets
9
- while (line=@file.gets)
10
- case line
11
- when @regx
12
- line = @template if @template
13
- $~.named_captures.each do |name, value|
14
- line = line.gsub("&#{name.downcase};", value)
15
- line = line.gsub("&#{name.upcase};", CGI.escape(value))
22
+ def line2captures
23
+ if (mdt = rgx.match(line))
24
+ self.captures = mdt.named_captures
25
+ else
26
+ self.rgx = self.template = nil
16
27
  end
17
- return line
18
- when %r{^! regx = /(.*)/$}
19
- @regx = Regexp.new $1
20
- when %r{^! template = "(.*)"$}
21
- @template = $1+"\n"
22
- else
23
- @regx &&= (@template=nil)
24
- return line
25
28
  end
29
+
30
+ def next?(line)
31
+ self.line = line
32
+ return true if line2rgx || line2template
33
+
34
+ line2captures if rgx
35
+ false
36
+ end
37
+
38
+ def to_s
39
+ return (template || line).template(captures) if captures
40
+
41
+ line
42
+ end
43
+ end
44
+
45
+ def gets
46
+ while (line = @line_getter.gets)
47
+ next if @iv.next?(line)
48
+
49
+ return @iv.to_s
50
+ end
51
+ nil
52
+ end
53
+
54
+ def initialize(line_getter)
55
+ @line_getter = line_getter
56
+ @iv = IterationVariables.new
26
57
  end
27
- nil
28
58
  end
29
59
  end
30
- end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Markita top level namespace
4
+ module Markita
5
+ # Utility methods as refinements
6
+ module Refinement
7
+ # category: string
8
+ refine String do
9
+ def template(named_captures)
10
+ template = dup
11
+ named_captures.each { |key, value| template.template!(key, value) }
12
+ template
13
+ end
14
+
15
+ def template!(key, value)
16
+ gsub!("&#{key.downcase};", value)
17
+ gsub!("&#{key.upcase};", CGI.escape(value))
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Standard libraries
4
+ require 'English'
5
+ require 'digest'
6
+ require 'cgi'
7
+ require 'openssl'
8
+ # Gems
9
+ require 'colorize'
10
+ require 'rouge'
11
+ require 'webrick/https'
12
+ require 'sinatra/base'
13
+ # Local
14
+ require_relative 'refinement'
15
+ require_relative 'config'
16
+ require_relative 'html'
17
+ require_relative 'preprocess'
18
+ require_relative 'markdown'
19
+ require_relative 'base'
20
+ # Plugs
21
+ require_relative 'plug/about' unless Markita.no.include? :about
22
+ require_relative 'plug/favicon' unless Markita.no.include? :favicon
23
+ require_relative 'plug/highlight' unless Markita.no.include? :highlight
24
+ require_relative 'plug/login' unless Markita.no.include? :login
25
+ require_relative 'plug/navigation' unless Markita.no.include? :navigation
26
+ require_relative 'plug/plugs' unless Markita.no.include? :plugs
27
+ require_relative 'plug/readme' unless Markita.no.include? :readme
28
+ # Requires:
29
+ # `ruby`
data/lib/markita.rb CHANGED
@@ -1,31 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Markita top level namespace
4
+ # :reek:ClassVariable
5
+ # rubocop:disable Style/ClassVars
1
6
  module Markita
2
- VERSION = '5.0.241001'
7
+ VERSION = '6.0.250327'
8
+
9
+ @@no = []
10
+ def self.no = @@no
3
11
 
4
12
  def self.run!
5
- # Standard libraries
6
- require 'digest'
7
- require 'cgi'
8
- require 'openssl'
9
- # Gems
10
- require 'rouge'
11
- require 'webrick/https'
12
- require 'sinatra/base'
13
- # Local
14
- require_relative 'markita/config'
15
- require_relative 'markita/html'
16
- require_relative 'markita/preprocess'
17
- require_relative 'markita/markdown'
18
- require_relative 'markita/base'
19
- # Plugs
20
- require_relative 'markita/plug/about' unless OPTIONS.no_about
21
- require_relative 'markita/plug/favicon' unless OPTIONS.no_favicon
22
- require_relative 'markita/plug/highlight' unless OPTIONS.no_highlight
23
- require_relative 'markita/plug/login' unless OPTIONS.no_login
24
- require_relative 'markita/plug/navigation' unless OPTIONS.no_navigation
25
- require_relative 'markita/plug/plugs' unless OPTIONS.no_plugs
26
- require_relative 'markita/plug/readme' unless OPTIONS.no_readme
13
+ require_relative 'markita/requires'
14
+ # Requiring the markdown elements:
15
+ Dir.glob("#{__dir__}/markita/markdown/*.rb")
16
+ .map { File.basename(it, '.rb') }
17
+ .each { require_relative "markita/markdown/#{it}" }
27
18
  Base.run!
28
19
  end
29
20
  end
30
- # Requires:
31
- #`ruby`
21
+ # rubocop:enable Style/ClassVars
metadata CHANGED
@@ -1,95 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: markita
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.241001
4
+ version: 6.0.250327
5
5
  platform: ruby
6
6
  authors:
7
7
  - CarlosJHR64
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-10-02 00:00:00.000000000 Z
10
+ date: 2025-03-28 00:00:00.000000000 Z
12
11
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: help_parser
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '9.0'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 9.0.240926
23
- type: :runtime
24
- prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: '9.0'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 9.0.240926
33
- - !ruby/object:Gem::Dependency
34
- name: rouge
35
- requirement: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '4.4'
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: 4.4.0
43
- type: :runtime
44
- prerelease: false
45
- version_requirements: !ruby/object:Gem::Requirement
46
- requirements:
47
- - - "~>"
48
- - !ruby/object:Gem::Version
49
- version: '4.4'
50
- - - ">="
51
- - !ruby/object:Gem::Version
52
- version: 4.4.0
53
- - !ruby/object:Gem::Dependency
54
- name: sinatra
55
- requirement: !ruby/object:Gem::Requirement
56
- requirements:
57
- - - "~>"
58
- - !ruby/object:Gem::Version
59
- version: '4.0'
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: 4.0.0
63
- type: :runtime
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - "~>"
68
- - !ruby/object:Gem::Version
69
- version: '4.0'
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- version: 4.0.0
73
- - !ruby/object:Gem::Dependency
74
- name: webrick
75
- requirement: !ruby/object:Gem::Requirement
76
- requirements:
77
- - - "~>"
78
- - !ruby/object:Gem::Version
79
- version: '1.8'
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: 1.8.2
83
- type: :runtime
84
- prerelease: false
85
- version_requirements: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '1.8'
90
- - - ">="
91
- - !ruby/object:Gem::Version
92
- version: 1.8.2
93
12
  - !ruby/object:Gem::Dependency
94
13
  name: colorize
95
14
  requirement: !ruby/object:Gem::Requirement
@@ -100,7 +19,7 @@ dependencies:
100
19
  - - ">="
101
20
  - !ruby/object:Gem::Version
102
21
  version: 1.1.0
103
- type: :development
22
+ type: :runtime
104
23
  prerelease: false
105
24
  version_requirements: !ruby/object:Gem::Requirement
106
25
  requirements:
@@ -111,105 +30,85 @@ dependencies:
111
30
  - !ruby/object:Gem::Version
112
31
  version: 1.1.0
113
32
  - !ruby/object:Gem::Dependency
114
- name: cucumber
115
- requirement: !ruby/object:Gem::Requirement
116
- requirements:
117
- - - "~>"
118
- - !ruby/object:Gem::Version
119
- version: '9.2'
120
- - - ">="
121
- - !ruby/object:Gem::Version
122
- version: 9.2.0
123
- type: :development
124
- prerelease: false
125
- version_requirements: !ruby/object:Gem::Requirement
126
- requirements:
127
- - - "~>"
128
- - !ruby/object:Gem::Version
129
- version: '9.2'
130
- - - ">="
131
- - !ruby/object:Gem::Version
132
- version: 9.2.0
133
- - !ruby/object:Gem::Dependency
134
- name: nokogiri
33
+ name: help_parser
135
34
  requirement: !ruby/object:Gem::Requirement
136
35
  requirements:
137
36
  - - "~>"
138
37
  - !ruby/object:Gem::Version
139
- version: '1.16'
38
+ version: '9.0'
140
39
  - - ">="
141
40
  - !ruby/object:Gem::Version
142
- version: 1.16.7
143
- type: :development
41
+ version: 9.0.240926
42
+ type: :runtime
144
43
  prerelease: false
145
44
  version_requirements: !ruby/object:Gem::Requirement
146
45
  requirements:
147
46
  - - "~>"
148
47
  - !ruby/object:Gem::Version
149
- version: '1.16'
48
+ version: '9.0'
150
49
  - - ">="
151
50
  - !ruby/object:Gem::Version
152
- version: 1.16.7
51
+ version: 9.0.240926
153
52
  - !ruby/object:Gem::Dependency
154
- name: parser
53
+ name: rouge
155
54
  requirement: !ruby/object:Gem::Requirement
156
55
  requirements:
157
56
  - - "~>"
158
57
  - !ruby/object:Gem::Version
159
- version: '3.3'
58
+ version: '4.5'
160
59
  - - ">="
161
60
  - !ruby/object:Gem::Version
162
- version: 3.3.5
163
- type: :development
61
+ version: 4.5.1
62
+ type: :runtime
164
63
  prerelease: false
165
64
  version_requirements: !ruby/object:Gem::Requirement
166
65
  requirements:
167
66
  - - "~>"
168
67
  - !ruby/object:Gem::Version
169
- version: '3.3'
68
+ version: '4.5'
170
69
  - - ">="
171
70
  - !ruby/object:Gem::Version
172
- version: 3.3.5
71
+ version: 4.5.1
173
72
  - !ruby/object:Gem::Dependency
174
- name: rubocop
73
+ name: sinatra
175
74
  requirement: !ruby/object:Gem::Requirement
176
75
  requirements:
177
76
  - - "~>"
178
77
  - !ruby/object:Gem::Version
179
- version: '1.66'
78
+ version: '4.1'
180
79
  - - ">="
181
80
  - !ruby/object:Gem::Version
182
- version: 1.66.1
183
- type: :development
81
+ version: 4.1.1
82
+ type: :runtime
184
83
  prerelease: false
185
84
  version_requirements: !ruby/object:Gem::Requirement
186
85
  requirements:
187
86
  - - "~>"
188
87
  - !ruby/object:Gem::Version
189
- version: '1.66'
88
+ version: '4.1'
190
89
  - - ">="
191
90
  - !ruby/object:Gem::Version
192
- version: 1.66.1
91
+ version: 4.1.1
193
92
  - !ruby/object:Gem::Dependency
194
- name: test-unit
93
+ name: webrick
195
94
  requirement: !ruby/object:Gem::Requirement
196
95
  requirements:
197
96
  - - "~>"
198
97
  - !ruby/object:Gem::Version
199
- version: '3.6'
98
+ version: '1.9'
200
99
  - - ">="
201
100
  - !ruby/object:Gem::Version
202
- version: 3.6.2
203
- type: :development
101
+ version: 1.9.1
102
+ type: :runtime
204
103
  prerelease: false
205
104
  version_requirements: !ruby/object:Gem::Requirement
206
105
  requirements:
207
106
  - - "~>"
208
107
  - !ruby/object:Gem::Version
209
- version: '3.6'
108
+ version: '1.9'
210
109
  - - ">="
211
110
  - !ruby/object:Gem::Version
212
- version: 3.6.2
111
+ version: 1.9.1
213
112
  description: |
214
113
  A Sinatra Markdown server.
215
114
 
@@ -232,6 +131,25 @@ files:
232
131
  - lib/markita/config.rb
233
132
  - lib/markita/html.rb
234
133
  - lib/markita/markdown.rb
134
+ - lib/markita/markdown/attributes.rb
135
+ - lib/markita/markdown/blockquote.rb
136
+ - lib/markita/markdown/code.rb
137
+ - lib/markita/markdown/code_block.rb
138
+ - lib/markita/markdown/definitions.rb
139
+ - lib/markita/markdown/embed.rb
140
+ - lib/markita/markdown/empty.rb
141
+ - lib/markita/markdown/fold.rb
142
+ - lib/markita/markdown/footnotes.rb
143
+ - lib/markita/markdown/form.rb
144
+ - lib/markita/markdown/heading.rb
145
+ - lib/markita/markdown/horizontal_rule.rb
146
+ - lib/markita/markdown/image.rb
147
+ - lib/markita/markdown/inline.rb
148
+ - lib/markita/markdown/list.rb
149
+ - lib/markita/markdown/markup.rb
150
+ - lib/markita/markdown/script.rb
151
+ - lib/markita/markdown/split.rb
152
+ - lib/markita/markdown/table.rb
235
153
  - lib/markita/plug/about.rb
236
154
  - lib/markita/plug/favicon.rb
237
155
  - lib/markita/plug/highlight.rb
@@ -240,11 +158,12 @@ files:
240
158
  - lib/markita/plug/plugs.rb
241
159
  - lib/markita/plug/readme.rb
242
160
  - lib/markita/preprocess.rb
161
+ - lib/markita/refinement.rb
162
+ - lib/markita/requires.rb
243
163
  homepage: https://github.com/carlosjhr64/markita
244
164
  licenses:
245
165
  - MIT
246
166
  metadata: {}
247
- post_install_message:
248
167
  rdoc_options: []
249
168
  require_paths:
250
169
  - lib
@@ -252,17 +171,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
252
171
  requirements:
253
172
  - - ">="
254
173
  - !ruby/object:Gem::Version
255
- version: '3.3'
174
+ version: '3.4'
256
175
  required_rubygems_version: !ruby/object:Gem::Requirement
257
176
  requirements:
258
177
  - - ">="
259
178
  - !ruby/object:Gem::Version
260
179
  version: '0'
261
- requirements:
262
- - 'egrep: 3.6'
263
- - 'git: 2.30'
264
- rubygems_version: 3.5.19
265
- signing_key:
180
+ requirements: []
181
+ rubygems_version: 3.6.6
266
182
  specification_version: 4
267
183
  summary: A Sinatra Markdown server.
268
184
  test_files: []