impression 0.1 → 0.5

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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.github/workflows/test.yml +32 -0
  4. data/CHANGELOG.md +23 -0
  5. data/Gemfile +5 -0
  6. data/Gemfile.lock +63 -32
  7. data/README.md +44 -2
  8. data/Rakefile +10 -0
  9. data/examples/markdown/_assets/style.css +98 -0
  10. data/examples/markdown/app.rb +11 -5
  11. data/examples/markdown/docs/tutorial.md +15 -0
  12. data/impression.gemspec +11 -7
  13. data/lib/impression/app.rb +9 -0
  14. data/lib/impression/file_tree.rb +124 -0
  15. data/lib/impression/file_watcher.rb +50 -0
  16. data/lib/impression/jamstack.rb +179 -0
  17. data/lib/impression/request_extensions/responses.rb +48 -0
  18. data/lib/impression/request_extensions/routing.rb +52 -0
  19. data/lib/impression/request_extensions.rb +8 -2
  20. data/lib/impression/resource.rb +168 -0
  21. data/lib/impression/version.rb +1 -1
  22. data/lib/impression.rb +8 -0
  23. data/test/helper.rb +94 -0
  24. data/test/jamstack/_layouts/article.rb +9 -0
  25. data/test/jamstack/_layouts/default.rb +12 -0
  26. data/test/jamstack/articles/2008-06-14-manu.md +6 -0
  27. data/test/jamstack/articles/2009-06-12-noatche.md +6 -0
  28. data/test/jamstack/articles/a.md +6 -0
  29. data/test/jamstack/assets/js/a.js +1 -0
  30. data/test/jamstack/bar.html +1 -0
  31. data/test/jamstack/baz/index.md +7 -0
  32. data/test/jamstack/foo.rb +7 -0
  33. data/test/jamstack/foobar.rb +10 -0
  34. data/test/jamstack/index.md +4 -0
  35. data/test/run.rb +5 -0
  36. data/test/static/bar/index.html +1 -0
  37. data/test/static/foo.html +1 -0
  38. data/test/static/index.html +1 -0
  39. data/test/static/js/a.js +1 -0
  40. data/test/test_app.rb +52 -0
  41. data/test/test_file_tree.rb +116 -0
  42. data/test/test_file_watcher.rb +57 -0
  43. data/test/test_jamstack.rb +263 -0
  44. data/test/test_resource.rb +201 -0
  45. metadata +57 -35
  46. data/lib/impression/pages.rb +0 -120
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: impression
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: '0.5'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-24 00:00:00.000000000 Z
11
+ date: 2022-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: polyphony
@@ -16,70 +16,70 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.51.0
19
+ version: 0.73.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.51.0
26
+ version: 0.73.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: tipi
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.37'
33
+ version: '0.45'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.37'
40
+ version: '0.45'
41
41
  - !ruby/object:Gem::Dependency
42
- name: kramdown
42
+ name: qeweney
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 2.3.0
47
+ version: '0.15'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 2.3.0
54
+ version: '0.15'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rouge
56
+ name: papercraft
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 3.26.0
61
+ version: '0.14'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 3.26.0
68
+ version: '0.14'
69
69
  - !ruby/object:Gem::Dependency
70
- name: kramdown-parser-gfm
70
+ name: modulation
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 1.1.0
75
+ version: '1.1'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 1.1.0
82
+ version: '1.1'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -108,20 +108,6 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: 5.11.3
111
- - !ruby/object:Gem::Dependency
112
- name: minitest-reporters
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: 1.4.2
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: 1.4.2
125
111
  - !ruby/object:Gem::Dependency
126
112
  name: simplecov
127
113
  requirement: !ruby/object:Gem::Requirement
@@ -136,34 +122,70 @@ dependencies:
136
122
  - - "~>"
137
123
  - !ruby/object:Gem::Version
138
124
  version: 0.17.1
139
- description:
125
+ description:
140
126
  email: sharon@noteflakes.com
141
127
  executables: []
142
128
  extensions: []
143
129
  extra_rdoc_files:
144
130
  - README.md
145
131
  files:
132
+ - ".github/FUNDING.yml"
133
+ - ".github/workflows/test.yml"
146
134
  - ".gitignore"
147
135
  - CHANGELOG.md
148
136
  - Gemfile
149
137
  - Gemfile.lock
150
138
  - LICENSE
151
139
  - README.md
140
+ - Rakefile
152
141
  - TODO.md
142
+ - examples/markdown/_assets/style.css
153
143
  - examples/markdown/app.rb
154
144
  - examples/markdown/docs/index.md
145
+ - examples/markdown/docs/tutorial.md
155
146
  - impression.gemspec
156
147
  - lib/impression.rb
148
+ - lib/impression/app.rb
157
149
  - lib/impression/errors.rb
158
- - lib/impression/pages.rb
150
+ - lib/impression/file_tree.rb
151
+ - lib/impression/file_watcher.rb
152
+ - lib/impression/jamstack.rb
159
153
  - lib/impression/request_extensions.rb
154
+ - lib/impression/request_extensions/responses.rb
155
+ - lib/impression/request_extensions/routing.rb
156
+ - lib/impression/resource.rb
160
157
  - lib/impression/version.rb
158
+ - test/helper.rb
159
+ - test/jamstack/_layouts/article.rb
160
+ - test/jamstack/_layouts/default.rb
161
+ - test/jamstack/articles/2008-06-14-manu.md
162
+ - test/jamstack/articles/2009-06-12-noatche.md
163
+ - test/jamstack/articles/a.md
164
+ - test/jamstack/assets/js/a.js
165
+ - test/jamstack/bar.html
166
+ - test/jamstack/baz/index.md
167
+ - test/jamstack/foo.rb
168
+ - test/jamstack/foobar.rb
169
+ - test/jamstack/index.md
170
+ - test/run.rb
171
+ - test/static/bar/index.html
172
+ - test/static/foo.html
173
+ - test/static/index.html
174
+ - test/static/js/a.js
175
+ - test/test_app.rb
176
+ - test/test_file_tree.rb
177
+ - test/test_file_watcher.rb
178
+ - test/test_jamstack.rb
179
+ - test/test_resource.rb
161
180
  homepage: http://github.com/digital-fabric/impression
162
181
  licenses:
163
182
  - MIT
164
183
  metadata:
165
184
  source_code_uri: https://github.com/digital-fabric/impression
166
- post_install_message:
185
+ documentation_uri: https://www.rubydoc.info/gems/impression
186
+ homepage_uri: https://github.com/digital-fabric/impression
187
+ changelog_uri: https://github.com/digital-fabric/impression/blob/master/CHANGELOG.md
188
+ post_install_message:
167
189
  rdoc_options:
168
190
  - "--title"
169
191
  - impression
@@ -182,8 +204,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
182
204
  - !ruby/object:Gem::Version
183
205
  version: '0'
184
206
  requirements: []
185
- rubygems_version: 3.1.4
186
- signing_key:
207
+ rubygems_version: 3.3.3
208
+ signing_key:
187
209
  specification_version: 4
188
210
  summary: Impression - a modern web framework for Ruby
189
211
  test_files: []
@@ -1,120 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'kramdown'
4
- require 'rouge'
5
- require 'kramdown-parser-gfm'
6
- require 'yaml'
7
-
8
- require_relative './errors'
9
-
10
- module Impression
11
- class Pages
12
- module RequestMethods
13
- def serve_page(pages)
14
- pages.serve(self)
15
- end
16
- end
17
-
18
- def initialize(base_path, opts = {})
19
- @base_path = base_path
20
- @opts = opts
21
-
22
- load
23
- end
24
-
25
- def load
26
- @map = {}
27
- Dir['**/*', base: @base_path].each do |path|
28
- next if path =~ /\/_.+/
29
-
30
- full_path = File.join(@base_path, path)
31
- next unless File.file?(full_path)
32
-
33
- page = Page.new(path, full_path, @opts)
34
- @map[page.relative_permalink] = page
35
- end
36
- @map['/'] = @map['/index']
37
- end
38
- alias_method :reload, :load
39
-
40
- def load_file(path)
41
- content = IO.read(path)
42
- end
43
-
44
- def serve(req)
45
- page = @map[req.routing_path]
46
- raise NotFoundError unless page
47
-
48
- # return req.respond('Hello world')
49
-
50
-
51
- req.respond(page.to_html, 'Content-Type' => 'text/html')
52
- end
53
-
54
- class Page
55
- def initialize(path, full_path, opts = {})
56
- @path = path
57
- @full_path = full_path
58
- @opts = opts
59
- read_page
60
- end
61
-
62
- PAGE_REGEXP = /\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)/m.freeze
63
-
64
- def read_page
65
- data = IO.read(@full_path) || ''
66
- if data =~ PAGE_REGEXP
67
- front_matter = Regexp.last_match(1)
68
- @attributes = YAML.load(front_matter)
69
- @content = Regexp.last_match.post_match
70
- else
71
- @attributes = {}
72
- @content = data
73
- end
74
- end
75
-
76
- def relative_permalink
77
- @relative_permalink = @attributes[:permalink] || path_without_extension
78
- end
79
-
80
- def path_without_extension
81
- "/#{File.basename(@path, File.extname(@path))}"
82
- end
83
-
84
- def title
85
- @attributes['title'] || title_from_content
86
- end
87
-
88
- TITLE_REGEXP = /^#\s+([^\n]+)/.freeze
89
-
90
- def title_from_content
91
- (@content =~ TITLE_REGEXP) && Regexp.last_match(1)
92
- end
93
-
94
- def status
95
- @attributes['status'] || Qeweney::Status::OK
96
- end
97
-
98
- def to_html
99
- @html ||= render_html
100
- end
101
-
102
- def kramdown_options
103
- {
104
- entity_output: :numeric,
105
- syntax_highlighter: :rouge,
106
- input: 'GFM'
107
- }
108
- end
109
-
110
- def render_html
111
- inner = Kramdown::Document.new(@content, **kramdown_options).to_html
112
- "<!doctype html><html><body>#{inner}</body></html>"
113
- end
114
- end
115
- end
116
- end
117
-
118
- class Qeweney::Request
119
- include Impression::Pages::RequestMethods
120
- end