lydia 0.1.0 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bf7ff0ab21d348d83cab7edbf2fc60dc0d2742fa
4
- data.tar.gz: 9160af15569f5469cb8f02c30b44cbbe489e196e
3
+ metadata.gz: 90fa262cf72761e1c2ac13b898504e3216950b23
4
+ data.tar.gz: 637bc940ba3a7cb2a6fe46594315d63c8c233cd2
5
5
  SHA512:
6
- metadata.gz: 9a5fcbdeddb34ef8ab94d6408af99f37ddb2bd453196748e578612bb4e5cf821be42d1c074e7a65cc581dec33c8e46315ceeeee00cadb24bf3bf4c638700d9af
7
- data.tar.gz: 2415bbd84f8af49363d86877ab5750984594b3581303d32f21a14699ba865e3331fc57bed6690c84db3900f25e991b24a2662ba0e499a5d70ec684523309ab1c
6
+ metadata.gz: 97f5a3dc0bdcf5baf7d5c3d52ce39b247142bf364d43604f2d0c1c3367aff5f18acd2db943b69b9c916f8a1106c1454bce1afcb2230aa131c2c7d2fdb397860c
7
+ data.tar.gz: 5b104d388ce7ebd061cd01fbdff890365f8fa39c922955263702b9d930c13be6e13779be281d29c678d49d5428d456c9fecef3e40b642739d7a181d806173086
data/README.md CHANGED
@@ -1,6 +1,9 @@
1
1
  [![Build Status](https://travis-ci.org/MirkoMignini/lydia.svg)](https://travis-ci.org/MirkoMignini/lydia)
2
2
  [![Coverage Status](https://coveralls.io/repos/MirkoMignini/lydia/badge.svg?branch=master&service=github)](https://coveralls.io/github/MirkoMignini/lydia?branch=master)
3
3
  [![Code Climate](https://codeclimate.com/github/MirkoMignini/lydia/badges/gpa.svg)](https://codeclimate.com/github/MirkoMignini/lydia)
4
+ [![Gem Version](https://badge.fury.io/rb/lydia.svg)](https://badge.fury.io/rb/lydia)
5
+ [![Dependency Status](https://gemnasium.com/MirkoMignini/lydia.svg)](https://gemnasium.com/MirkoMignini/lydia)
6
+ [![security](https://hakiri.io/github/MirkoMignini/lydia/master.svg)](https://hakiri.io/github/MirkoMignini/lydia/master)
4
7
 
5
8
  # Lydia
6
9
 
@@ -40,7 +43,74 @@ The goals of this project are:
40
43
 
41
44
  ## Usage
42
45
 
43
- Usage instructions soon available!
46
+ ### First example
47
+ Create a ruby file, fior example hello_world.rb, require 'lydia' and using the routing functions without creating an application object.
48
+
49
+ require 'lydia'
50
+
51
+ get '/' do
52
+ 'Hello world!'
53
+ end
54
+
55
+ Just run it to start a webrick server that responds hello world to root.
56
+
57
+ $ ruby hello_world.rb
58
+
59
+ ### Application
60
+ If preferred it's possible to create an application object and run using rackup command, in this case don't require lydia but lydia/application to avoid the server auto start. For example a minimal config.ru file can be:
61
+
62
+ require 'lydia/application'
63
+
64
+ class App < Lydia::Application
65
+ get '/' do
66
+ 'Hello world!'
67
+ end
68
+ end
69
+
70
+ run App.new
71
+
72
+ Start the server using rackup command:
73
+
74
+ $ rackup
75
+
76
+ ### Router
77
+
78
+ #### Stand alone router
79
+ If needed the router can be used stand alone, for example if best performances are needed, or used via the application class, slower but with a lot of more features.
80
+ Stand alone example, note that the return type must be in rack standard format, an array of three that is status, header, body (as array):
81
+
82
+ require 'lydia/router'
83
+
84
+ class App < Lydia::Router
85
+ get '/' do
86
+ body = 'Hellow world!'
87
+ [200, { 'Content-Type' => 'text/html', 'Content-Length' => body.length.to_s }, [body]]
88
+ end
89
+ end
90
+
91
+ #### HTTP verbs
92
+
93
+ #### Parameters
94
+
95
+ #### Wildcards
96
+
97
+ #### Named route parameters
98
+
99
+ #### Regular expressions
100
+
101
+ #### Not found routes and errors
102
+
103
+ #### Skip to next route
104
+
105
+ #### Halting
106
+
107
+ ### Return types
108
+
109
+ ### Filters
110
+
111
+ ### Templates
112
+
113
+ ### Helpers
44
114
 
45
115
  ## Contributing
46
116
 
@@ -0,0 +1,8 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'lydia/application'
3
+
4
+ class App < Lydia::Application
5
+ get '/' do
6
+ 'Hello world!'
7
+ end
8
+ end
data/lib/lydia/filters.rb CHANGED
@@ -13,13 +13,13 @@ module Lydia
13
13
 
14
14
  %w(before after).each do |filter|
15
15
  define_method(filter) do |pattern = '/*', options = {}, &block|
16
- filters[filter.to_sym] << Route.new(@namespace || '', pattern, options, &block)
16
+ filters[filter.to_sym] << Route.new(filter, @namespace || '', pattern, options, &block)
17
17
  end
18
18
  end
19
19
 
20
20
  def redirect(pattern, options = {})
21
21
  return ArgumentError.new('Options must contains :to') unless options.include?(:to)
22
- filters[:redirect] << Route.new(@namespace || '', pattern, options)
22
+ filters[:redirect] << Route.new('redirect', @namespace || '', pattern, options)
23
23
  end
24
24
  end
25
25
 
data/lib/lydia/helpers.rb CHANGED
@@ -12,7 +12,7 @@ module Lydia
12
12
  @request.params
13
13
  end
14
14
 
15
- def send_file(path, mime_type = nil)
15
+ def send_file(_path, _mime_type = nil)
16
16
  raise NotImplementedError.new
17
17
  end
18
18
  end
@@ -1,4 +1,5 @@
1
1
  require 'rack/response'
2
+ require 'json'
2
3
 
3
4
  module Lydia
4
5
  class Response < Rack::Response
data/lib/lydia/route.rb CHANGED
@@ -1,11 +1,12 @@
1
1
  module Lydia
2
2
  class Route
3
- attr_reader :regexp, :params, :namespace, :pattern, :options, :block
3
+ attr_reader :regexp, :params, :request_method, :namespace, :pattern, :options, :block
4
4
 
5
5
  WILDCARD_REGEX = /\/\*(.*)/.freeze
6
6
  NAMED_SEGMENTS_REGEX = /\/([^\/]*):([^:$\/]+)/.freeze
7
7
 
8
- def initialize(namespace, pattern, options = {}, &block)
8
+ def initialize(request_method, namespace, pattern, options = {}, &block)
9
+ @request_method = request_method
9
10
  @namespace = namespace
10
11
  @pattern = pattern
11
12
  @options = options
@@ -21,7 +22,7 @@ module Lydia
21
22
  end
22
23
  @regexp = Regexp.new("\\A#{result}\\z")
23
24
  elsif pattern.is_a?(Regexp)
24
- @regexp = pattern
25
+ @regexp = Regexp.new((namespace || '') + pattern.to_s)
25
26
  else
26
27
  raise ArgumentError.new('Pattern must be a string or a regex')
27
28
  end
data/lib/lydia/router.rb CHANGED
@@ -18,20 +18,16 @@ module Lydia
18
18
 
19
19
  %w(HEAD GET PATCH PUT POST DELETE OPTIONS).each do |request_method|
20
20
  define_method(request_method.downcase) do |pattern, options = {}, &block|
21
- routes[request_method] << Route.new(@namespace, pattern, options, &block)
21
+ routes[request_method] << Route.new(request_method, @namespace, pattern, options, &block)
22
22
  end
23
23
  end
24
24
 
25
- def namespace(pattern, options = {})
25
+ def namespace(pattern, _options = {})
26
26
  prev_namespace = @namespace ||= ''
27
27
  @namespace += pattern
28
28
  yield
29
29
  @namespace = prev_namespace
30
30
  end
31
-
32
- def call(env)
33
- new.call(env)
34
- end
35
31
  end
36
32
 
37
33
  def next_route
@@ -71,8 +67,12 @@ module Lydia
71
67
  internal_server_error(env, exception)
72
68
  end
73
69
 
70
+ def routes
71
+ self.class.routes
72
+ end
73
+
74
74
  def dispatch(env)
75
- self.class.routes[env['REQUEST_METHOD']].each do |route|
75
+ routes[env['REQUEST_METHOD']].each do |route|
76
76
  if route.match?(env)
77
77
  @request.params.merge!(route.params) if route.params
78
78
  catch(:next_route) do
data/lib/lydia/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Lydia
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/lydia.gemspec CHANGED
@@ -25,7 +25,8 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency 'coveralls'
26
26
  spec.add_development_dependency 'rake'
27
27
  spec.add_development_dependency 'rack-test'
28
+ spec.add_development_dependency 'haml'
28
29
 
29
- spec.add_dependency 'rack'
30
+ spec.add_dependency 'rack', '~> 1.6.4'
30
31
  spec.add_dependency 'tilt'
31
32
  end
@@ -17,7 +17,7 @@ describe "Application" do
17
17
  use Rack::Lint
18
18
 
19
19
  map '/api' do
20
- run API
20
+ run API.new
21
21
  end
22
22
 
23
23
  get '/response' do
@@ -33,7 +33,7 @@ describe "Application" do
33
33
  end
34
34
 
35
35
  def app
36
- TestApplication
36
+ TestApplication.new
37
37
  end
38
38
 
39
39
  context 'Composition' do
data/spec/helpers_spec.rb CHANGED
@@ -18,6 +18,10 @@ describe "Helpers" do
18
18
  get '/params' do
19
19
  params['key']
20
20
  end
21
+
22
+ get '/file' do
23
+ send_file('test.png')
24
+ end
21
25
  end
22
26
 
23
27
  def app
@@ -42,4 +46,10 @@ describe "Helpers" do
42
46
  expect(last_response.status).to eq(200)
43
47
  expect(last_response.body).to eq('value')
44
48
  end
49
+
50
+ it 'sends a file' do
51
+ expect {
52
+ get '/file'
53
+ }.to raise_error(NotImplementedError)
54
+ end
45
55
  end
data/spec/router_spec.rb CHANGED
@@ -30,6 +30,10 @@ describe "Router" do
30
30
  get '/hello' do
31
31
  get_response('Hello from namespace')
32
32
  end
33
+
34
+ get %r{/regular$}i do
35
+ get_response('Regexp inside namespace')
36
+ end
33
37
 
34
38
  namespace '/nested' do
35
39
  get '/hello' do
@@ -180,6 +184,11 @@ describe "Router" do
180
184
  expect(last_response.status).to eq(200)
181
185
  expect(last_response.body).to eq('Namespace api version 3')
182
186
  end
187
+
188
+ it 'GET /namespace/regular' do
189
+ get '/namespace/regular'
190
+ expect(last_response.status).to eq(200)
191
+ end
183
192
  end
184
193
 
185
194
  context 'Wildcards' do
@@ -283,11 +292,7 @@ describe "Router" do
283
292
  end
284
293
  end
285
294
 
286
- context 'Class methods' do
287
- it 'responds to call' do
288
- expect(Lydia::Router).to respond_to(:call)
289
- end
290
-
295
+ context 'Class methods' do
291
296
  it 'is initialized' do
292
297
  get '/'
293
298
  expect(last_response.status).to eq(200)
@@ -0,0 +1 @@
1
+ = message
@@ -6,9 +6,13 @@ describe "Templates" do
6
6
  include Rack::Test::Methods
7
7
 
8
8
  class TemplatesHelpers < Lydia::Application
9
- get '/render' do
9
+ get '/render_erb' do
10
10
  render 'spec/templates/template.erb', nil, message: 'template'
11
11
  end
12
+
13
+ get '/render_haml' do
14
+ render 'spec/templates/template.haml', Object.new, message: 'template'
15
+ end
12
16
  end
13
17
 
14
18
  def app
@@ -16,8 +20,14 @@ describe "Templates" do
16
20
  end
17
21
 
18
22
  it 'render an erb template' do
19
- get '/render'
23
+ get '/render_erb'
20
24
  expect(last_response.status).to eq(200)
21
25
  expect(last_response.body).to include('template')
22
26
  end
23
- end
27
+
28
+ it 'render an haml template' do
29
+ get '/render_haml'
30
+ expect(last_response.status).to eq(200)
31
+ expect(last_response.body).to include('template')
32
+ end
33
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lydia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mirko Mignini
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-12-11 00:00:00.000000000 Z
11
+ date: 2015-12-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -81,19 +81,33 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rack
84
+ name: haml
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
- type: :runtime
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
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rack
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 1.6.4
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 1.6.4
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: tilt
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -124,6 +138,7 @@ files:
124
138
  - Rakefile
125
139
  - bin/console
126
140
  - bin/setup
141
+ - examples/example2.rb
127
142
  - examples/hello_world.rb
128
143
  - lib/lydia.rb
129
144
  - lib/lydia/application.rb
@@ -149,6 +164,7 @@ files:
149
164
  - spec/router_spec.rb
150
165
  - spec/spec_helper.rb
151
166
  - spec/templates/template.erb
167
+ - spec/templates/template.haml
152
168
  - spec/templates_spec.rb
153
169
  homepage: https://github.com/MirkoMignini/lydia
154
170
  licenses:
@@ -170,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
170
186
  version: '0'
171
187
  requirements: []
172
188
  rubyforge_project:
173
- rubygems_version: 2.5.0
189
+ rubygems_version: 2.5.1
174
190
  signing_key:
175
191
  specification_version: 4
176
192
  summary: Lightweight, fast and easy to use small ruby web framework.
@@ -184,4 +200,5 @@ test_files:
184
200
  - spec/router_spec.rb
185
201
  - spec/spec_helper.rb
186
202
  - spec/templates/template.erb
203
+ - spec/templates/template.haml
187
204
  - spec/templates_spec.rb