dolphy 0.1.5 → 0.1.6
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 +4 -4
- data/README.md +109 -17
- data/lib/dolphy/core.rb +9 -4
- data/lib/dolphy/version.rb +1 -1
- data/spec/dolphy_spec.rb +6 -0
- data/spec/spec_helper.rb +4 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1c96763e76f5fb25eed8c6b47adee4e5d3177a89
|
4
|
+
data.tar.gz: 2da58ef0dc58f3de39b0db392cbde6f4a913c9ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56e384596a888a55b481a6fd0bdaa51cffcd38b0205ea271875d8eb1f727fed0fb039e21e8830658ecc8cf54a1b8a81a6608d1602b32a6363223fd8b1c1aa424
|
7
|
+
data.tar.gz: e062e34a7e2e782db698c5a2dc9ea2c74d47e1ca851761573e3476e0cf38e0e1d3bce21ec144fd977f63ee35c870147d5a43b92ad8f1dd707bbfeb9e60bc2c22
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# Dolphy
|
2
|
-
[](https://magnum.travis-ci.com/majjoha/dolphy)
|
2
|
+
[](https://magnum.travis-ci.com/majjoha/dolphy)
|
3
3
|
[](https://codeclimate.com/repos/53cb2ea469568031fe01ad3f/feed)
|
4
4
|
|
5
5
|
Dolphy is an incredibly small (~200 LOC) web framework written in Ruby and based
|
@@ -13,7 +13,7 @@ used in production.
|
|
13
13
|
There are a lot of things I want to do to improve the code and functionality of
|
14
14
|
this project. I try to list these things in the
|
15
15
|
[issues](https://github.com/majjoha/dolphy/issues). Feel free to fork this
|
16
|
-
repository and contribute if you want to help me implement features or
|
16
|
+
repository and contribute if you want to help me implement features or fix
|
17
17
|
bugs.
|
18
18
|
|
19
19
|
## Requirements
|
@@ -38,47 +38,139 @@ Or simply install it yourself as:
|
|
38
38
|
gem install dolphy
|
39
39
|
```
|
40
40
|
|
41
|
+
Create a file `app.rb`:
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
require 'dolphy'
|
45
|
+
|
46
|
+
Dolphy.app do
|
47
|
+
Dolphy.router do
|
48
|
+
get '/' do
|
49
|
+
"Hello, world!"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end.serve!
|
53
|
+
```
|
54
|
+
|
55
|
+
Run the file:
|
56
|
+
|
57
|
+
```
|
58
|
+
ruby app.rb
|
59
|
+
```
|
60
|
+
|
61
|
+
Open the browser at [http://localhost:8080](http://localhost:8080).
|
62
|
+
|
41
63
|
## Usage
|
64
|
+
* [Setup blocks](#setup-blocks)
|
65
|
+
* [Template engines](#template-engines)
|
66
|
+
* [Routes](#routes)
|
67
|
+
|
68
|
+
## Setup blocks
|
69
|
+
A Dolphy application has a couple of default configurations that you can change
|
70
|
+
based on your needs through the `setup` block.
|
71
|
+
|
72
|
+
It uses the `Dolphy::TemplateEngines::ErbEngine` by default, and it uses
|
73
|
+
`./views/` to find the view files it needs. These can be configured in this way:
|
74
|
+
|
42
75
|
```ruby
|
43
76
|
require 'dolphy'
|
44
77
|
|
45
78
|
Dolphy.app do
|
46
79
|
setup do |app|
|
47
|
-
# It is possible to specify the template engine in the config block. If no
|
48
|
-
# template engine is specified, it will simply default to ERB.
|
49
80
|
app.settings[:template_engine] = Dolphy::TemplateEngines::HamlEngine
|
50
|
-
|
51
|
-
# You can also specify a view path where Dolphy will look for views. It is
|
52
|
-
# by default set to `./views/`.
|
53
81
|
app.settings[:view_path] = "./somewhere/else/views/"
|
82
|
+
end
|
54
83
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
84
|
+
Dolphy.router do
|
85
|
+
get '/' do
|
86
|
+
"Hello, world!"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end.serve!
|
90
|
+
```
|
91
|
+
|
92
|
+
Since the `Dolphy::Settings` is basically just a hash, we can read from and
|
93
|
+
write to, we can also define our own settings to use in the views. We could for
|
94
|
+
instance define a title for a page by adding `app.settings[:title] = "Building
|
95
|
+
things with Dolphy"` in the `setup` block, which we can access in this way:
|
96
|
+
|
97
|
+
```ruby
|
98
|
+
Dolphy.app do
|
99
|
+
setup do |app|
|
59
100
|
app.settings[:title] = "Building things with Dolphy"
|
60
101
|
end
|
61
102
|
|
62
103
|
Dolphy.router do
|
63
104
|
get '/' do
|
64
|
-
render :index,
|
105
|
+
render :index, title: settings[:title]
|
65
106
|
end
|
107
|
+
end
|
108
|
+
end.serve!
|
109
|
+
```
|
66
110
|
|
67
|
-
|
68
|
-
|
69
|
-
|
111
|
+
## Template engines
|
112
|
+
Dolphy supports Haml and ERB by default through the
|
113
|
+
`Dolphy::TemplateEngines::HamlEngine` and `Dolphy::TemplateEngine::ErbEngine`
|
114
|
+
(which relies on Tilt under the hood), but we can effortlessly build our own
|
115
|
+
template engines and use these in our application.
|
116
|
+
|
117
|
+
A template engine should have a `.render` method with three arguments: a
|
118
|
+
`template_name`, a hash with `locals` and finally a `view_path`.
|
119
|
+
|
120
|
+
Imagine we want our views to use [Liquid](http://liquidmarkup.org/), then we
|
121
|
+
just need to define a new `LiquidEngine` and make it our template engine in the
|
122
|
+
`setup` block:
|
70
123
|
|
71
|
-
|
72
|
-
|
124
|
+
```ruby
|
125
|
+
class LiquidEngine
|
126
|
+
def self.render(template_name, locals = {}, view_path = "./views/")
|
127
|
+
path = File.expand_path("#{view_path}#{template_name.to_s}.html", Dir.pwd)
|
128
|
+
template = Tilt::LiquidTemplate.new(path)
|
129
|
+
template.render(Object.new, locals)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
```
|
133
|
+
|
134
|
+
```ruby
|
135
|
+
Dolphy.app do
|
136
|
+
setup do |app|
|
137
|
+
app.settings[:template_engine] = LiquidEngine
|
138
|
+
end
|
139
|
+
|
140
|
+
Dolphy.router do
|
141
|
+
get '/' do
|
142
|
+
render :new_page
|
73
143
|
end
|
144
|
+
end
|
145
|
+
end.serve!
|
146
|
+
```
|
74
147
|
|
148
|
+
## Routes
|
149
|
+
The routing layer should look familiar if you've already worked with other Ruby
|
150
|
+
frameworks. We can override routes with variables by adding a new route, and we
|
151
|
+
use `:name` to access variables in the routes:
|
152
|
+
|
153
|
+
```ruby
|
154
|
+
require 'dolphy'
|
155
|
+
|
156
|
+
Dolphy.app do
|
157
|
+
Dolphy.router do
|
75
158
|
get '/hello/:name' do |name|
|
76
159
|
render :hello, name: name
|
77
160
|
end
|
161
|
+
|
162
|
+
get '/hello/you'
|
163
|
+
render :hello_you
|
164
|
+
end
|
78
165
|
end
|
79
166
|
end.serve!
|
80
167
|
```
|
81
168
|
|
169
|
+
In this case, any request to `/hello/bob` will render the `hello` template with
|
170
|
+
the `name` variable set to `"bob"`, while any request to `/hello/you` will
|
171
|
+
simply just render the `hello_you` template. The opposite order will not work,
|
172
|
+
so the ordering is quite important.
|
173
|
+
|
82
174
|
## Inspiration
|
83
175
|
I've been looking in my directions for inspiration. I probably owe some credit
|
84
176
|
to [Camping](http://camping.io), [Cuba](http://cuba.is),
|
data/lib/dolphy/core.rb
CHANGED
@@ -30,9 +30,7 @@ module Dolphy
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def render(template_name, locals = {})
|
33
|
-
|
34
|
-
settings[:view_path]).
|
35
|
-
render(template_name, locals)
|
33
|
+
template_engine.render(template_name, locals)
|
36
34
|
end
|
37
35
|
|
38
36
|
def redirect_to(path, status = 302)
|
@@ -54,7 +52,7 @@ module Dolphy
|
|
54
52
|
|
55
53
|
router.find_route_for(request).each do |matcher, block|
|
56
54
|
if match = router.find_match_data_for(request, with: matcher)
|
57
|
-
response.body
|
55
|
+
response.body = [block.call(*match.captures)]
|
58
56
|
end
|
59
57
|
end
|
60
58
|
|
@@ -65,6 +63,13 @@ module Dolphy
|
|
65
63
|
|
66
64
|
private
|
67
65
|
|
66
|
+
def template_engine
|
67
|
+
@template_engine ||= Dolphy::TemplateEngine.new(
|
68
|
+
settings[:template_engine],
|
69
|
+
settings[:view_path]
|
70
|
+
)
|
71
|
+
end
|
72
|
+
|
68
73
|
attr_accessor :response, :router, :request
|
69
74
|
end
|
70
75
|
end
|
data/lib/dolphy/version.rb
CHANGED
data/spec/dolphy_spec.rb
CHANGED
@@ -19,6 +19,12 @@ describe Dolphy do
|
|
19
19
|
expect(page).to have_content "hello world!"
|
20
20
|
end
|
21
21
|
|
22
|
+
it "returns the content of the last defined route" do
|
23
|
+
visit '/hello/login'
|
24
|
+
expect(page).to have_content "this is a login"
|
25
|
+
expect(page).to_not have_content "hello login"
|
26
|
+
end
|
27
|
+
|
22
28
|
it "returns a page using the input from the matcher" do
|
23
29
|
visit '/hello/davis'
|
24
30
|
expect(page).to have_content "hello davis"
|
data/spec/spec_helper.rb
CHANGED