wouter-views 0.0.1

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 94b3cf7bfeda14996d0ce25902ae19b84d1725024ce8a2102301506f604f16e7
4
+ data.tar.gz: f66c1a22ef7a29404d2fd1638a450afc2a3e0c91062c5de7f5135eea3fafc753
5
+ SHA512:
6
+ metadata.gz: c21209a777a3e10c13eb89aea1eda11509c399fd31b964f752962366afd14f6ad65151a91ad0e31aff0339db7d439aa79b2010d87415de8cc79032b30dfe365d
7
+ data.tar.gz: f57188ad1839a905358fcd791c54c3a84157425f6850c07865efa5ecc747ed0924d3a144ab58df5fbbfabb2d072c97e5649b1eedd164d0f47bc3687d5ae92045
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gemspec
data/README.md ADDED
@@ -0,0 +1,84 @@
1
+ # Wouter Views
2
+
3
+ Adds view template support to the Wouter web framework.
4
+
5
+ `wouter-views` uses [Tilt](https://github.com/rtomayko/tilt) to load Ruby template engines.
6
+
7
+ ## Usage
8
+
9
+ Require the gem after your `wouter` require.
10
+
11
+ ```ruby
12
+ require 'wouter'
13
+ require 'wouter/views'
14
+ ```
15
+
16
+ Render a view directly in your route definition:
17
+
18
+ ```ruby
19
+ class Routes < Wouter
20
+ get '/', render_view(:index)
21
+ end
22
+ ```
23
+
24
+ Render a view in your endpoint:
25
+
26
+ ```ruby
27
+ class Index < Wouter::Endpoint
28
+ def respond
29
+ render_view :index
30
+ end
31
+ end
32
+ ```
33
+
34
+ ## Configuration
35
+
36
+ ### View Directory
37
+
38
+ By default, the view folder is set to `./views`. You can set the view directory using `view_dir`:
39
+
40
+ ```ruby
41
+ class Routes < Wouter
42
+ view_dir './template/views'
43
+
44
+ get '/', render_view(:index)
45
+ end
46
+ ```
47
+
48
+ ### Template Engine
49
+
50
+ By default, `wouter-views` will look for `.html` files. You can specify which templating engine to use and it will try to find the file:
51
+
52
+ ```ruby
53
+ get '/', render_view(:index, engine: :slim)
54
+ ```
55
+
56
+ You can also change the engine globally:
57
+
58
+ ```ruby
59
+ class Routes < Wouter
60
+ view_engine :slim
61
+
62
+ get '/', render_view(:index)
63
+ end
64
+ ```
65
+
66
+ If you provide a string with a file extension, `wouter-views` will first try to find the file with the given engine extension. If it does not find it, it will try to find the file given the literal string value. This allows you to load any file:
67
+
68
+ ```ruby
69
+ class Routes < Wouter
70
+ get '/', render_view('randomfile.extension')
71
+ end
72
+ ```
73
+
74
+ [Tilt](https://github.com/rtomayko/tilt) will try to auto-load the appropriate templating engine. It is recommended you load the template engine library yourself. Example:
75
+
76
+ ```ruby
77
+ require 'wouter'
78
+ require 'wouter/views'
79
+ require 'slim'
80
+
81
+ class Routes < Wouter
82
+ get '/', render_view(:index, engine: :slim)
83
+ end
84
+ ```
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler'
4
+ Bundler.setup(:default, :test)
5
+
6
+ desc 'Run tests'
7
+ task :test do
8
+ require_relative './test/helper'
9
+
10
+ Dir['test/**/*_test.rb'].each do |file|
11
+ load file
12
+ end
13
+ end
@@ -0,0 +1,62 @@
1
+ require 'wouter'
2
+ require 'rack'
3
+ require 'tilt'
4
+
5
+ class Wouter
6
+ class Views
7
+ class FileNotFound < StandardError; end
8
+
9
+ def self.file_finder(dir, template, engine, bind)
10
+ file_name = template.to_s + '.' + engine.to_s
11
+ full_path = dir + '/' + file_name
12
+
13
+ return Tilt.new(full_path).render(bind) if File.exists?(full_path)
14
+
15
+ full_path = dir + '/' + template
16
+
17
+ if Tilt.template_for('./test/fixtures/views/fallback.txt')
18
+ Tilt.new(full_path).render(bind)
19
+ else
20
+ if File.exists?(full_path)
21
+ File.read(full_path)
22
+ else
23
+ raise FileNotFound, "could not find file: #{full_path}"
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ class Wouter
31
+ class <<self
32
+ def render_template(template, bind = self, engine = nil)
33
+ dir = @view_dir || File.expand_path('./views')
34
+ engine = engine || @view_engine || :html
35
+ Wouter::Views.file_finder(dir, template, engine, bind)
36
+ end
37
+
38
+ def render_view(template, engine: nil)
39
+ lambda { |env|
40
+ response = Rack::Response.new
41
+ response.write render_template(template, self, engine)
42
+ response.finish
43
+ }
44
+ end
45
+
46
+ def view_dir(dir = nil)
47
+ @view_dir = dir unless dir.nil?
48
+ @view_dir
49
+ end
50
+
51
+ def view_engine(engine = nil)
52
+ @view_engine = engine unless engine.nil?
53
+ @view_engine
54
+ end
55
+ end
56
+
57
+ class Endpoint
58
+ def render_view(template, engine: nil)
59
+ Wouter.render_template(template, self, engine)
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = 'wouter-views'
5
+ s.platform = Gem::Platform::RUBY
6
+ s.version = '0.0.1'
7
+ s.summary = 'View template support for Wouter web framework.'
8
+ s.description = 'Adds view template support to the Wouter web framework.'
9
+ s.authors = ['Robert Peterson']
10
+ s.email = 'robertpeterson@gmail.com'
11
+ s.files = Dir['lib/**/*'] + ['README.md', 'Gemfile', 'Rakefile', 'wouter-views.gemspec']
12
+ s.test_files = s.files.select { |p| p =~ /^test\/.*_test.rb/ }
13
+ s.license = 'MIT'
14
+ s.homepage = 'https://github.com/rawburt/wouter-views'
15
+
16
+ s.add_dependency 'wouter', '~> 0.0.8'
17
+ s.add_dependency 'rack', '~> 2.0', '>= 2.0.6'
18
+ s.add_dependency 'tilt', '~> 2.0', '>= 2.0.8'
19
+ s.add_development_dependency 'm', '~> 1.5'
20
+ s.add_development_dependency 'minitest', '~> 5.11'
21
+ s.add_development_dependency 'minitest-rg', '~> 5.2'
22
+ s.add_development_dependency 'rack-test', '~> 1.1'
23
+ s.add_development_dependency 'rake', '~> 12.3'
24
+ s.add_development_dependency 'slim', '~> 4.0', '>= 4.0.1'
25
+ end
metadata ADDED
@@ -0,0 +1,192 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wouter-views
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Robert Peterson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-11-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: wouter
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.8
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.8
27
+ - !ruby/object:Gem::Dependency
28
+ name: rack
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 2.0.6
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '2.0'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 2.0.6
47
+ - !ruby/object:Gem::Dependency
48
+ name: tilt
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.0'
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 2.0.8
57
+ type: :runtime
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '2.0'
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: 2.0.8
67
+ - !ruby/object:Gem::Dependency
68
+ name: m
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '1.5'
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '1.5'
81
+ - !ruby/object:Gem::Dependency
82
+ name: minitest
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '5.11'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '5.11'
95
+ - !ruby/object:Gem::Dependency
96
+ name: minitest-rg
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '5.2'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '5.2'
109
+ - !ruby/object:Gem::Dependency
110
+ name: rack-test
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
114
+ - !ruby/object:Gem::Version
115
+ version: '1.1'
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: '1.1'
123
+ - !ruby/object:Gem::Dependency
124
+ name: rake
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '12.3'
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - "~>"
135
+ - !ruby/object:Gem::Version
136
+ version: '12.3'
137
+ - !ruby/object:Gem::Dependency
138
+ name: slim
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: '4.0'
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: 4.0.1
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: '4.0'
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: 4.0.1
157
+ description: Adds view template support to the Wouter web framework.
158
+ email: robertpeterson@gmail.com
159
+ executables: []
160
+ extensions: []
161
+ extra_rdoc_files: []
162
+ files:
163
+ - Gemfile
164
+ - README.md
165
+ - Rakefile
166
+ - lib/wouter/views.rb
167
+ - wouter-views.gemspec
168
+ homepage: https://github.com/rawburt/wouter-views
169
+ licenses:
170
+ - MIT
171
+ metadata: {}
172
+ post_install_message:
173
+ rdoc_options: []
174
+ require_paths:
175
+ - lib
176
+ required_ruby_version: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ required_rubygems_version: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ version: '0'
186
+ requirements: []
187
+ rubyforge_project:
188
+ rubygems_version: 2.7.3
189
+ signing_key:
190
+ specification_version: 4
191
+ summary: View template support for Wouter web framework.
192
+ test_files: []