lydia 0.1.0

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.
@@ -0,0 +1,297 @@
1
+ require 'spec_helper'
2
+ require 'rack/test'
3
+ require 'lydia/router'
4
+
5
+ describe "Router" do
6
+ include Rack::Test::Methods
7
+
8
+ class TestRouter < Lydia::Router
9
+ get '/' do
10
+ get_response('<H1>Hello world!</H1>')
11
+ end
12
+
13
+ get '/204' do
14
+ get_response('', 204)
15
+ end
16
+
17
+ get '/500' do
18
+ raise StandardError.new('Error!')
19
+ end
20
+
21
+ head '/request' do get_response('head'); end
22
+ get '/request' do get_response('get'); end
23
+ patch '/request' do get_response('patch'); end
24
+ put '/request' do get_response('put'); end
25
+ post '/request' do get_response('post'); end
26
+ delete '/request' do get_response('delete'); end
27
+ options '/request' do get_response('options'); end
28
+
29
+ namespace '/namespace' do
30
+ get '/hello' do
31
+ get_response('Hello from namespace')
32
+ end
33
+
34
+ namespace '/nested' do
35
+ get '/hello' do
36
+ get_response('Hello from nested namespace')
37
+ end
38
+ end
39
+
40
+ namespace '/api/v:version' do
41
+ get '/posts' do
42
+ get_response("Namespace api version #{request.params[:version]}")
43
+ end
44
+ end
45
+ end
46
+
47
+ get '/querystring_params' do
48
+ get_response(request.params['name'])
49
+ end
50
+
51
+ get '/wildcard/*' do
52
+ get_response('')
53
+ end
54
+
55
+ get %r{/regexp$}i do
56
+ get_response('')
57
+ end
58
+
59
+ get '/users/:id/comments/:comment_id/edit' do
60
+ get_response("#{request.params[:id]}-#{request.params[:comment_id]}")
61
+ end
62
+
63
+ get '/api/v:version/users' do
64
+ get_response(request.params[:version])
65
+ end
66
+
67
+ get '/halt' do
68
+ halt
69
+ end
70
+
71
+ get '/custom_halt' do
72
+ halt get_response('', 204)
73
+ end
74
+
75
+ get '/next_route' do
76
+ next_route
77
+ end
78
+
79
+ get '/next_route' do
80
+ get_response('Next route works!')
81
+ end
82
+
83
+ def get_response(body, status = 200)
84
+ [status, { 'Content-Type' => 'text/html', 'Content-Length'=> body.length.to_s }, [body]]
85
+ end
86
+ end
87
+
88
+ def app
89
+ TestRouter.new
90
+ end
91
+
92
+ context 'Status codes' do
93
+ it 'returns 204' do
94
+ get '/204'
95
+ expect(last_response.status).to eq(204)
96
+ end
97
+
98
+ it 'returns 404' do
99
+ get '/not_found'
100
+ expect(last_response.status).to eq(404)
101
+ end
102
+
103
+ it 'returns 500' do
104
+ get '/500'
105
+ expect(last_response.status).to eq(500)
106
+ end
107
+ end
108
+
109
+ context 'Response' do
110
+ it "returns a valid response" do
111
+ get '/'
112
+ expect(last_response).to_not be_nil
113
+ expect(last_response.status).to eq(200)
114
+ expect(last_response.headers.to_hash).to eq({'Content-Type' => 'text/html', 'Content-Length' => '21'})
115
+ expect(last_response.body).to eq('<H1>Hello world!</H1>')
116
+ end
117
+ end
118
+
119
+ context 'HTTP methods' do
120
+ it 'HEAD /request' do
121
+ head '/request'
122
+ expect(last_response.status).to eq(200)
123
+ expect(last_response.body).to eq('head')
124
+ end
125
+
126
+ it 'GET /request' do
127
+ get '/request'
128
+ expect(last_response.status).to eq(200)
129
+ expect(last_response.body).to eq('get')
130
+ end
131
+
132
+ it 'PATCH /request' do
133
+ patch '/request'
134
+ expect(last_response.status).to eq(200)
135
+ expect(last_response.body).to eq('patch')
136
+ end
137
+
138
+ it 'PUT /request' do
139
+ put '/request'
140
+ expect(last_response.status).to eq(200)
141
+ expect(last_response.body).to eq('put')
142
+ end
143
+
144
+ it 'POST /request' do
145
+ post '/request'
146
+ expect(last_response.status).to eq(200)
147
+ expect(last_response.body).to eq('post')
148
+ end
149
+
150
+ it 'DELETE /request' do
151
+ delete '/request'
152
+ expect(last_response.status).to eq(200)
153
+ expect(last_response.body).to eq('delete')
154
+ end
155
+
156
+ it 'OPTIONS /request' do
157
+ options '/request'
158
+ expect(last_response.status).to eq(200)
159
+ expect(last_response.body).to eq('options')
160
+ end
161
+ end
162
+
163
+ context 'Routing' do
164
+
165
+ context 'Namespace' do
166
+ it 'GET /namespace/hello' do
167
+ get '/namespace/hello'
168
+ expect(last_response.status).to eq(200)
169
+ expect(last_response.body).to eq('Hello from namespace')
170
+ end
171
+
172
+ it 'GET /namespace/nested/hello' do
173
+ get '/namespace/nested/hello'
174
+ expect(last_response.status).to eq(200)
175
+ expect(last_response.body).to eq('Hello from nested namespace')
176
+ end
177
+
178
+ it 'GET /namespace/api/v3/posts' do
179
+ get '/namespace/api/v3/posts'
180
+ expect(last_response.status).to eq(200)
181
+ expect(last_response.body).to eq('Namespace api version 3')
182
+ end
183
+ end
184
+
185
+ context 'Wildcards' do
186
+ it 'GET wildcard' do
187
+ get '/wildcard'
188
+ expect(last_response.status).to eq(200)
189
+ end
190
+
191
+ it 'GET wildcard/' do
192
+ get '/wildcard/'
193
+ expect(last_response.status).to eq(200)
194
+ end
195
+
196
+ it 'GET wildcard/hello' do
197
+ get '/wildcard/hello'
198
+ expect(last_response.status).to eq(200)
199
+ end
200
+
201
+ it 'GET wildcard/hello/bob' do
202
+ get '/wildcard/hello/bob'
203
+ expect(last_response.status).to eq(200)
204
+ end
205
+ end
206
+
207
+ context 'Regular expressions' do
208
+ it 'GET /Regexp' do
209
+ get '/Regexp'
210
+ expect(last_response.status).to eq(200)
211
+ end
212
+ end
213
+
214
+ context 'Next route' do
215
+ it 'Goto next route' do
216
+ get '/next_route'
217
+ expect(last_response.status).to eq(200)
218
+ expect(last_response.body).to eq('Next route works!')
219
+ end
220
+ end
221
+
222
+ context 'Named parameters' do
223
+ it 'GET /users/3/comments/138/edit' do
224
+ get '/users/3/comments/138/edit'
225
+ expect(last_response.status).to eq(200)
226
+ expect(last_response.body).to eq('3-138')
227
+ end
228
+
229
+ it 'GET /api/v2/users' do
230
+ get '/api/v2/users'
231
+ expect(last_response.status).to eq(200)
232
+ expect(last_response.body).to eq('2')
233
+ end
234
+ end
235
+
236
+ context 'Query string params' do
237
+ it 'GET /querystring_params' do
238
+ get '/querystring_params', { name: 'bob' }
239
+ expect(last_response.status).to eq(200)
240
+ expect(last_response.body).to eq('bob')
241
+ end
242
+ end
243
+
244
+ context 'Route not valid' do
245
+ it 'returns ArgumentError' do
246
+ expect {
247
+ class WrongRoute < Lydia::Router
248
+ get Object do
249
+ end
250
+ end
251
+ }.to raise_error(ArgumentError)
252
+ end
253
+ end
254
+ end
255
+
256
+ let(:router) { Lydia::Router.new }
257
+
258
+ context 'Instance methods' do
259
+ it 'responds to request' do
260
+ expect(router).to respond_to(:request)
261
+ end
262
+
263
+ it 'responds to response' do
264
+ expect(router).to respond_to(:response)
265
+ end
266
+
267
+ it 'responds to env' do
268
+ expect(router).to respond_to(:env)
269
+ end
270
+ end
271
+
272
+ context 'Halt' do
273
+ it 'returns 500 (default halt)' do
274
+ get '/halt'
275
+ expect(last_response.status).to eq(500)
276
+ expect(last_response.body).to include('halted')
277
+ end
278
+
279
+ it 'returns 204 (custom halt)' do
280
+ get '/custom_halt'
281
+ expect(last_response.status).to eq(204)
282
+ expect(last_response.body).to eq('')
283
+ end
284
+ end
285
+
286
+ context 'Class methods' do
287
+ it 'responds to call' do
288
+ expect(Lydia::Router).to respond_to(:call)
289
+ end
290
+
291
+ it 'is initialized' do
292
+ get '/'
293
+ expect(last_response.status).to eq(200)
294
+ end
295
+ end
296
+
297
+ end
@@ -0,0 +1,4 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
4
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
@@ -0,0 +1 @@
1
+ <%= message %>
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+ require 'rack/test'
3
+ require 'lydia/application'
4
+
5
+ describe "Templates" do
6
+ include Rack::Test::Methods
7
+
8
+ class TemplatesHelpers < Lydia::Application
9
+ get '/render' do
10
+ render 'spec/templates/template.erb', nil, message: 'template'
11
+ end
12
+ end
13
+
14
+ def app
15
+ TemplatesHelpers.new
16
+ end
17
+
18
+ it 'render an erb template' do
19
+ get '/render'
20
+ expect(last_response.status).to eq(200)
21
+ expect(last_response.body).to include('template')
22
+ end
23
+ end
metadata ADDED
@@ -0,0 +1,187 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lydia
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Mirko Mignini
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-12-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: coveralls
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rack-test
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rack
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: tilt
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Lightweight, fast and easy to use small ruby web framework.
112
+ email:
113
+ - mirko.mignini@gmail.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".gitignore"
119
+ - ".rspec"
120
+ - ".travis.yml"
121
+ - Gemfile
122
+ - LICENSE.txt
123
+ - README.md
124
+ - Rakefile
125
+ - bin/console
126
+ - bin/setup
127
+ - examples/hello_world.rb
128
+ - lib/lydia.rb
129
+ - lib/lydia/application.rb
130
+ - lib/lydia/delegator.rb
131
+ - lib/lydia/filters.rb
132
+ - lib/lydia/halted.rb
133
+ - lib/lydia/helpers.rb
134
+ - lib/lydia/not_found.rb
135
+ - lib/lydia/request.rb
136
+ - lib/lydia/response.rb
137
+ - lib/lydia/route.rb
138
+ - lib/lydia/router.rb
139
+ - lib/lydia/standard_pages.rb
140
+ - lib/lydia/templates.rb
141
+ - lib/lydia/version.rb
142
+ - lydia.gemspec
143
+ - spec/application_spec.rb
144
+ - spec/delegator_spec.rb
145
+ - spec/filters_spec.rb
146
+ - spec/helpers_spec.rb
147
+ - spec/middleware_spec.rb
148
+ - spec/response_spec.rb
149
+ - spec/router_spec.rb
150
+ - spec/spec_helper.rb
151
+ - spec/templates/template.erb
152
+ - spec/templates_spec.rb
153
+ homepage: https://github.com/MirkoMignini/lydia
154
+ licenses:
155
+ - MIT
156
+ metadata: {}
157
+ post_install_message:
158
+ rdoc_options: []
159
+ require_paths:
160
+ - lib
161
+ required_ruby_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ required_rubygems_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ requirements: []
172
+ rubyforge_project:
173
+ rubygems_version: 2.5.0
174
+ signing_key:
175
+ specification_version: 4
176
+ summary: Lightweight, fast and easy to use small ruby web framework.
177
+ test_files:
178
+ - spec/application_spec.rb
179
+ - spec/delegator_spec.rb
180
+ - spec/filters_spec.rb
181
+ - spec/helpers_spec.rb
182
+ - spec/middleware_spec.rb
183
+ - spec/response_spec.rb
184
+ - spec/router_spec.rb
185
+ - spec/spec_helper.rb
186
+ - spec/templates/template.erb
187
+ - spec/templates_spec.rb