tynn 0.0.4 → 1.0.0.rc1

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/lib/tynn/all_methods.rb +17 -0
  3. data/lib/tynn/environment.rb +12 -8
  4. data/lib/tynn/matchers.rb +37 -19
  5. data/lib/tynn/request.rb +4 -0
  6. data/lib/tynn/response.rb +151 -0
  7. data/lib/tynn/secure_headers.rb +28 -4
  8. data/lib/tynn/session.rb +74 -3
  9. data/lib/tynn/ssl.rb +2 -2
  10. data/lib/tynn/static.rb +26 -0
  11. data/lib/tynn/test.rb +37 -2
  12. data/lib/tynn/version.rb +7 -2
  13. data/lib/tynn.rb +88 -8
  14. data/test/all_methods_test.rb +16 -0
  15. data/test/core_test.rb +0 -86
  16. data/test/matchers_test.rb +11 -8
  17. data/test/middleware_test.rb +79 -0
  18. data/test/protection_test.rb +37 -0
  19. data/test/session_test.rb +1 -6
  20. metadata +45 -52
  21. data/.gems +0 -10
  22. data/docs/bin/build +0 -38
  23. data/docs/guides/security.md +0 -1
  24. data/docs/index.md +0 -89
  25. data/docs/layout.html +0 -61
  26. data/docs/public/.gitignore +0 -1
  27. data/docs/public/css/styles.css +0 -111
  28. data/docs/public/guides/.gitignore +0 -2
  29. data/docs/syro/syro.rb +0 -112
  30. data/examples/composition.ru +0 -40
  31. data/examples/hello.ru +0 -9
  32. data/examples/protection.ru +0 -18
  33. data/examples/render.ru +0 -13
  34. data/examples/views/home.erb +0 -1
  35. data/examples/views/layout.erb +0 -5
  36. data/lib/tynn/csrf.rb +0 -48
  37. data/lib/tynn/options.rb +0 -9
  38. data/makefile +0 -15
  39. data/test/csrf_test.rb +0 -98
  40. data/test/options_test.rb +0 -16
  41. data/test/views/custom_layout.erb +0 -1
  42. data/test/views/custom_layout.mote +0 -1
  43. data/test/views/layout.erb +0 -1
  44. data/test/views/layout.mote +0 -1
  45. data/test/views/partial.erb +0 -1
  46. data/test/views/partial.mote +0 -1
  47. data/test/views/view.erb +0 -1
  48. data/test/views/view.mote +0 -1
  49. data/tynn.gemspec +0 -24
data/test/core_test.rb CHANGED
@@ -71,89 +71,3 @@ test "raise unless application handler is set" do
71
71
  app.get("/")
72
72
  end
73
73
  end
74
-
75
- scope "middleware" do
76
- class Shrimp
77
- def initialize(app)
78
- @app = app
79
- end
80
-
81
- def call(env)
82
- s, h, resp = @app.call(env)
83
-
84
- return [s, h, resp.reverse]
85
- end
86
- end
87
-
88
- setup do
89
- Tynn.reset!
90
- end
91
-
92
- test "middleware in main application" do
93
- Tynn.use(Shrimp)
94
-
95
- Tynn.define do
96
- get do
97
- res.write("1")
98
- res.write("2")
99
- end
100
- end
101
-
102
- app = Tynn::Test.new
103
- app.get("/")
104
-
105
- assert_equal 200, app.res.status
106
- assert_equal "21", app.res.body
107
- end
108
-
109
- test "middleware with composition" do
110
- Tynn.use(Shrimp)
111
-
112
- Tynn.define do
113
- on "api" do
114
- run(API)
115
- end
116
- end
117
-
118
- class API < Tynn
119
- end
120
-
121
- API.define do
122
- get do
123
- res.write("1")
124
- res.write("2")
125
- end
126
- end
127
-
128
- app = Tynn::Test.new
129
- app.get("/api")
130
-
131
- assert_equal 200, app.res.status
132
- assert_equal "21", app.res.body
133
- end
134
-
135
- test "middleware only in child application" do
136
- Tynn.define do
137
- on "api" do
138
- run(API)
139
- end
140
- end
141
-
142
- class API < Tynn
143
- use(Shrimp)
144
- end
145
-
146
- API.define do
147
- get do
148
- res.write("1")
149
- res.write("2")
150
- end
151
- end
152
-
153
- app = Tynn::Test.new
154
- app.get("/api")
155
-
156
- assert_equal 200, app.res.status
157
- assert_equal "21", app.res.body
158
- end
159
- end
@@ -19,19 +19,22 @@ test "default" do |app|
19
19
  assert_equal "foo", app.res.body
20
20
  end
21
21
 
22
- test "param?" do |app|
22
+ test "param" do |app|
23
23
  Tynn.define do
24
- on param?(:key) do
25
- res.write(req[:key])
24
+ param(:foo) do |foo|
25
+ res.write(foo)
26
+ end
27
+
28
+ param("bar") do |bar|
29
+ res.write(bar)
26
30
  end
27
31
  end
28
32
 
29
- app.get("/")
33
+ app.get("/", foo: "foo")
30
34
 
31
- assert_equal 404, app.res.status
35
+ assert_equal "foo", app.res.body
32
36
 
33
- app.get("/", key: "foo")
37
+ app.get("/", foo: "bar")
34
38
 
35
- assert_equal 200, app.res.status
36
- assert_equal "foo", app.res.body
39
+ assert_equal "bar", app.res.body
37
40
  end
@@ -0,0 +1,79 @@
1
+ class Shrimp
2
+ def initialize(app)
3
+ @app = app
4
+ end
5
+
6
+ def call(env)
7
+ status, headers, body = @app.call(env)
8
+
9
+ return [status, headers, body.reverse]
10
+ end
11
+ end
12
+
13
+ test "middleware in main application" do
14
+ Tynn.use(Shrimp)
15
+
16
+ Tynn.define do
17
+ get do
18
+ res.write("1")
19
+ res.write("2")
20
+ end
21
+ end
22
+
23
+ app = Tynn::Test.new
24
+ app.get("/")
25
+
26
+ assert_equal 200, app.res.status
27
+ assert_equal "21", app.res.body
28
+ end
29
+
30
+ test "middleware with composition" do
31
+ Tynn.use(Shrimp)
32
+
33
+ Tynn.define do
34
+ on "api" do
35
+ run(API)
36
+ end
37
+ end
38
+
39
+ class API < Tynn
40
+ end
41
+
42
+ API.define do
43
+ get do
44
+ res.write("1")
45
+ res.write("2")
46
+ end
47
+ end
48
+
49
+ app = Tynn::Test.new
50
+ app.get("/api")
51
+
52
+ assert_equal 200, app.res.status
53
+ assert_equal "21", app.res.body
54
+ end
55
+
56
+ test "middleware only in child application" do
57
+ Tynn.define do
58
+ on "api" do
59
+ run(API)
60
+ end
61
+ end
62
+
63
+ class API < Tynn
64
+ use(Shrimp)
65
+ end
66
+
67
+ API.define do
68
+ get do
69
+ res.write("1")
70
+ res.write("2")
71
+ end
72
+ end
73
+
74
+ app = Tynn::Test.new
75
+ app.get("/api")
76
+
77
+ assert_equal 200, app.res.status
78
+ assert_equal "21", app.res.body
79
+ end
@@ -1,4 +1,5 @@
1
1
  require_relative "../lib/tynn/protection"
2
+ require_relative "../lib/tynn/session"
2
3
 
3
4
  test "includes secure headers" do
4
5
  Tynn.helpers(Tynn::Protection)
@@ -27,3 +28,39 @@ test "supports hsts options" do
27
28
 
28
29
  assert_equal "max-age=100; preload", hsts
29
30
  end
31
+
32
+ test "adds secure flag to session cookie" do
33
+ Tynn.helpers(Tynn::Protection, ssl: true)
34
+ Tynn.helpers(Tynn::Session, secret: "_this_must_be_random_")
35
+
36
+ Tynn.define do
37
+ root do
38
+ session[:foo] = "foo"
39
+ end
40
+ end
41
+
42
+ app = Tynn::Test.new
43
+ app.get("/", {}, "HTTPS" => "on")
44
+
45
+ session, _ = app.res.headers["Set-Cookie"].split("\n")
46
+
47
+ assert(/;\s*secure\s*(;|$)/i === session)
48
+ end
49
+
50
+ test "if session uses secure flag" do
51
+ Tynn.helpers(Tynn::Protection, ssl: true)
52
+ Tynn.helpers(Tynn::Session, secret: "_this_must_be_random_", secure: true)
53
+
54
+ Tynn.define do
55
+ root do
56
+ session[:foo] = "foo"
57
+ end
58
+ end
59
+
60
+ app = Tynn::Test.new
61
+ app.get("/", {}, "HTTPS" => "on")
62
+
63
+ session, _ = app.res.headers["Set-Cookie"].split("\n")
64
+
65
+ assert(/;\s*secure\s*(;|$)/i === session)
66
+ end
data/test/session_test.rb CHANGED
@@ -15,11 +15,6 @@ test "session" do
15
15
  app = Tynn::Test.new
16
16
  app.get("/")
17
17
 
18
- env = app.req.env
19
- session = env["rack.session"]
20
- session_options = env["rack.session.options"]
21
-
22
18
  assert_equal "foo", app.res.body
23
- assert_equal "foo", session["foo"]
24
- assert_equal true, session_options[:http_only]
19
+ assert_equal "foo", app.req.env["rack.session"]["foo"]
25
20
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tynn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 1.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Francesco Rodríguez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-06 00:00:00.000000000 Z
11
+ date: 2015-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -28,44 +28,44 @@ dependencies:
28
28
  name: seteable
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '='
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.1.0
33
+ version: '1.1'
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: 1.1.0
40
+ version: '1.1'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: syro
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.0'
47
+ version: '1.1'
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: '1.0'
54
+ version: '1.1'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: cutest
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '='
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.2.2
61
+ version: '1.2'
62
62
  type: :development
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: 1.2.2
68
+ version: '1.2'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: erubis
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -84,30 +84,30 @@ dependencies:
84
84
  name: hmote
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '='
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 1.4.0
89
+ version: '1.4'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '='
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 1.4.0
96
+ version: '1.4'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rack-test
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '='
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 0.6.3
103
+ version: '0.6'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - '='
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 0.6.3
110
+ version: '0.6'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: tilt
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -129,25 +129,10 @@ executables: []
129
129
  extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
- - ".gems"
133
132
  - LICENSE
134
133
  - README.md
135
- - docs/bin/build
136
- - docs/guides/security.md
137
- - docs/index.md
138
- - docs/layout.html
139
- - docs/public/.gitignore
140
- - docs/public/css/styles.css
141
- - docs/public/guides/.gitignore
142
- - docs/syro/syro.rb
143
- - examples/composition.ru
144
- - examples/hello.ru
145
- - examples/protection.ru
146
- - examples/render.ru
147
- - examples/views/home.erb
148
- - examples/views/layout.erb
149
134
  - lib/tynn.rb
150
- - lib/tynn/csrf.rb
135
+ - lib/tynn/all_methods.rb
151
136
  - lib/tynn/environment.rb
152
137
  - lib/tynn/erubis.rb
153
138
  - lib/tynn/hmote.rb
@@ -155,18 +140,18 @@ files:
155
140
  - lib/tynn/json_parser.rb
156
141
  - lib/tynn/matchers.rb
157
142
  - lib/tynn/not_found.rb
158
- - lib/tynn/options.rb
159
143
  - lib/tynn/protection.rb
160
144
  - lib/tynn/render.rb
145
+ - lib/tynn/request.rb
146
+ - lib/tynn/response.rb
161
147
  - lib/tynn/secure_headers.rb
162
148
  - lib/tynn/session.rb
163
149
  - lib/tynn/ssl.rb
164
150
  - lib/tynn/static.rb
165
151
  - lib/tynn/test.rb
166
152
  - lib/tynn/version.rb
167
- - makefile
153
+ - test/all_methods_test.rb
168
154
  - test/core_test.rb
169
- - test/csrf_test.rb
170
155
  - test/environment_test.rb
171
156
  - test/erubis_test.rb
172
157
  - test/helper.rb
@@ -174,23 +159,14 @@ files:
174
159
  - test/json_parser_test.rb
175
160
  - test/json_test.rb
176
161
  - test/matchers_test.rb
162
+ - test/middleware_test.rb
177
163
  - test/not_found_test.rb
178
- - test/options_test.rb
179
164
  - test/protection_test.rb
180
165
  - test/render_test.rb
181
166
  - test/secure_headers_test.rb
182
167
  - test/session_test.rb
183
168
  - test/ssl_test.rb
184
169
  - test/static_test.rb
185
- - test/views/custom_layout.erb
186
- - test/views/custom_layout.mote
187
- - test/views/layout.erb
188
- - test/views/layout.mote
189
- - test/views/partial.erb
190
- - test/views/partial.mote
191
- - test/views/view.erb
192
- - test/views/view.mote
193
- - tynn.gemspec
194
170
  homepage: https://github.com/harmoni/tynn
195
171
  licenses:
196
172
  - MIT
@@ -206,13 +182,30 @@ required_ruby_version: !ruby/object:Gem::Requirement
206
182
  version: '0'
207
183
  required_rubygems_version: !ruby/object:Gem::Requirement
208
184
  requirements:
209
- - - ">="
185
+ - - ">"
210
186
  - !ruby/object:Gem::Version
211
- version: '0'
187
+ version: 1.3.1
212
188
  requirements: []
213
189
  rubyforge_project:
214
190
  rubygems_version: 2.4.8
215
191
  signing_key:
216
192
  specification_version: 4
217
193
  summary: Simple library to create Rack applications
218
- test_files: []
194
+ test_files:
195
+ - test/all_methods_test.rb
196
+ - test/core_test.rb
197
+ - test/environment_test.rb
198
+ - test/erubis_test.rb
199
+ - test/helper.rb
200
+ - test/hmote_test.rb
201
+ - test/json_parser_test.rb
202
+ - test/json_test.rb
203
+ - test/matchers_test.rb
204
+ - test/middleware_test.rb
205
+ - test/not_found_test.rb
206
+ - test/protection_test.rb
207
+ - test/render_test.rb
208
+ - test/secure_headers_test.rb
209
+ - test/session_test.rb
210
+ - test/ssl_test.rb
211
+ - test/static_test.rb
data/.gems DELETED
@@ -1,10 +0,0 @@
1
- cutest:1.2.2
2
- erubis:2.7.0
3
- hmote:1.4.0
4
- rack:1.6.4
5
- rack-test:0.6.3
6
- redcarpet:3.3.3
7
- seg:0.0.1
8
- seteable:1.1.0
9
- syro:1.0.0
10
- tilt:2.0.1
data/docs/bin/build DELETED
@@ -1,38 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "redcarpet"
4
-
5
- LAYOUT = File.read("./docs/layout.html")
6
-
7
- def markdown(text)
8
- options = {
9
- autolink: true,
10
- fenced_code_blocks: true,
11
- tables: true
12
- }
13
-
14
- renderer = Redcarpet::Render::HTML.new
15
- markdown = Redcarpet::Markdown.new(renderer, options)
16
-
17
- return markdown.render(text)
18
- end
19
-
20
- def title(content)
21
- return content.match(/<h1>(.*)<\/h1>/)[1]
22
- end
23
-
24
- def render(content)
25
- markdown = markdown(content)
26
- title = title(markdown)
27
-
28
- return sprintf(LAYOUT, content: markdown, title: title)
29
- end
30
-
31
- Dir["./docs/**/*.md"].each do |file|
32
- _, name = file.split("./docs")
33
-
34
- name = name.sub(".md", ".html")
35
- output = File.join("./docs/public", name)
36
-
37
- File.write(output, render(File.read(file)))
38
- end
@@ -1 +0,0 @@
1
- # Security
data/docs/index.md DELETED
@@ -1,89 +0,0 @@
1
- # Getting Started
2
-
3
- ## Subtitle
4
-
5
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
6
- Donec magna sapien, dignissim at tellus lobortis, finibus
7
- pulvinar nulla. Nulla non ante ut mauris accumsan
8
- vulputate at sed tortor. Integer dignissim massa at elit
9
- pretium dapibus. Duis pretium erat dolor, vel luctus quam
10
- pretium eget. Fusce imperdiet est in quam semper, ac
11
- hendrerit risus hendrerit. Praesent convallis, risus
12
- tempor lacinia posuere, quam diam porttitor magna, eget
13
- pharetra turpis dui id est. Suspendisse pharetra mauris
14
- nulla, eget sagittis risus cursus eget. Donec efficitur
15
- odio non risus luctus, nec posuere nulla fermentum.
16
-
17
- ## Subtitle
18
-
19
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
20
- Donec magna sapien, dignissim at tellus lobortis, finibus
21
- pulvinar nulla. Nulla non ante ut mauris accumsan
22
- vulputate at sed tortor. Integer dignissim massa at elit
23
- pretium dapibus. Duis pretium erat dolor, vel luctus quam
24
- pretium eget. Fusce imperdiet est in quam semper, ac
25
- hendrerit risus hendrerit. Praesent convallis, risus
26
- tempor lacinia posuere, quam diam porttitor magna, eget
27
- pharetra turpis dui id est. Suspendisse pharetra mauris
28
- nulla, eget sagittis risus cursus eget. Donec efficitur
29
- odio non risus luctus, nec posuere nulla fermentum.
30
-
31
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
32
- Donec magna sapien, dignissim at tellus lobortis, finibus
33
- pulvinar nulla. Nulla non ante ut mauris accumsan
34
- vulputate at sed tortor. Integer dignissim massa at elit
35
- pretium dapibus. Duis pretium erat dolor, vel luctus quam
36
- pretium eget. Fusce imperdiet est in quam semper, ac
37
- hendrerit risus hendrerit. Praesent convallis, risus
38
- tempor lacinia posuere, quam diam porttitor magna, eget
39
- pharetra turpis dui id est. Suspendisse pharetra mauris
40
- nulla, eget sagittis risus cursus eget. Donec efficitur
41
- odio non risus luctus, nec posuere nulla fermentum.
42
-
43
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
44
- Donec magna sapien, dignissim at tellus lobortis, finibus
45
- pulvinar nulla. Nulla non ante ut mauris accumsan
46
- vulputate at sed tortor. Integer dignissim massa at elit
47
- pretium dapibus. Duis pretium erat dolor, vel luctus quam
48
- pretium eget. Fusce imperdiet est in quam semper, ac
49
- hendrerit risus hendrerit. Praesent convallis, risus
50
- tempor lacinia posuere, quam diam porttitor magna, eget
51
- pharetra turpis dui id est. Suspendisse pharetra mauris
52
- nulla, eget sagittis risus cursus eget. Donec efficitur
53
- odio non risus luctus, nec posuere nulla fermentum.
54
-
55
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
56
- Donec magna sapien, dignissim at tellus lobortis, finibus
57
- pulvinar nulla. Nulla non ante ut mauris accumsan
58
- vulputate at sed tortor. Integer dignissim massa at elit
59
- pretium dapibus. Duis pretium erat dolor, vel luctus quam
60
- pretium eget. Fusce imperdiet est in quam semper, ac
61
- hendrerit risus hendrerit. Praesent convallis, risus
62
- tempor lacinia posuere, quam diam porttitor magna, eget
63
- pharetra turpis dui id est. Suspendisse pharetra mauris
64
- nulla, eget sagittis risus cursus eget. Donec efficitur
65
- odio non risus luctus, nec posuere nulla fermentum.
66
-
67
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
68
- Donec magna sapien, dignissim at tellus lobortis, finibus
69
- pulvinar nulla. Nulla non ante ut mauris accumsan
70
- vulputate at sed tortor. Integer dignissim massa at elit
71
- pretium dapibus. Duis pretium erat dolor, vel luctus quam
72
- pretium eget. Fusce imperdiet est in quam semper, ac
73
- hendrerit risus hendrerit. Praesent convallis, risus
74
- tempor lacinia posuere, quam diam porttitor magna, eget
75
- pharetra turpis dui id est. Suspendisse pharetra mauris
76
- nulla, eget sagittis risus cursus eget. Donec efficitur
77
- odio non risus luctus, nec posuere nulla fermentum.
78
-
79
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
80
- Donec magna sapien, dignissim at tellus lobortis, finibus
81
- pulvinar nulla. Nulla non ante ut mauris accumsan
82
- vulputate at sed tortor. Integer dignissim massa at elit
83
- pretium dapibus. Duis pretium erat dolor, vel luctus quam
84
- pretium eget. Fusce imperdiet est in quam semper, ac
85
- hendrerit risus hendrerit. Praesent convallis, risus
86
- tempor lacinia posuere, quam diam porttitor magna, eget
87
- pharetra turpis dui id est. Suspendisse pharetra mauris
88
- nulla, eget sagittis risus cursus eget. Donec efficitur
89
- odio non risus luctus, nec posuere nulla fermentum.
data/docs/layout.html DELETED
@@ -1,61 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <title>tynn | %{title}</title>
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
- <link href="/css/styles.css" rel="stylesheet" media="screen">
8
- <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
9
- <link href="//fonts.googleapis.com/css?family=Roboto:400,500" rel="stylesheet">
10
- </head>
11
- <body>
12
- <div class="container">
13
- <header>
14
- <div class="wrap">
15
- <a class="nav-home" href="/">TYNN</a>
16
- <a class="nav-github" href="https://github.com/frodsan/tynn">
17
- <i class="fa fa-github"></i>
18
- </a>
19
- </div>
20
- </header>
21
-
22
- <section class="content wrap">
23
- <div class="nav-docs">
24
- <div class="nav-docs-section">
25
- <h3>QUICK START</h3>
26
- <ul>
27
- <li><a href="#">Getting Started</a></li>
28
- <li><a href="#">Tutorial</a></li>
29
- </ul>
30
- </div>
31
- <div class="nav-docs-section">
32
- <h3>Guides</h3>
33
- <ul>
34
- <li><a href="#">Link To Something</a></li>
35
- <li><a href="#">Link to Something</a>
36
- <ul>
37
- <li><a href="#">Sublink</a></li>
38
- <li><a href="#">Sublink</a></li>
39
- </ul>
40
- </li>
41
- <li><a href="#">Link to Something</a></li>
42
- <li><a href="#">Link to Something</a></li>
43
- </ul>
44
- </div>
45
- <div class="nav-docs-section">
46
- <h3>Community</h3>
47
- <ul>
48
- <li><a href="#">Slack</a></li>
49
- <li><a href="#">Link to Something</a></li>
50
- <li><a href="#">Link to Something</a></li>
51
- </ul>
52
- </div>
53
- </div>
54
-
55
- <div class="inner-content">
56
- %{content}
57
- </div>
58
- </section>
59
- </div>
60
- </body>
61
- </html>
@@ -1 +0,0 @@
1
- *.html