georgi-kontrol 0.2 → 0.3
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.
- data/README.md +7 -0
- data/examples/git_app.ru +2 -1
- data/lib/kontrol/application.rb +27 -7
- data/lib/kontrol/route.rb +3 -1
- data/lib/kontrol/template.rb +1 -1
- data/test/application_spec.rb +16 -6
- metadata +3 -3
data/README.md
CHANGED
@@ -158,6 +158,10 @@ We create a Markdown file name `index.md`:
|
|
158
158
|
We have now a simple page, which should be rendered as response. We
|
159
159
|
create a simple app in a file `git_app.ru`:
|
160
160
|
|
161
|
+
require 'kontrol'
|
162
|
+
require 'bluecloth'
|
163
|
+
require 'git_store'
|
164
|
+
|
161
165
|
class GitApp < Kontrol::Application
|
162
166
|
|
163
167
|
def initialize(path)
|
@@ -172,6 +176,9 @@ create a simple app in a file `git_app.ru`:
|
|
172
176
|
end
|
173
177
|
end
|
174
178
|
|
179
|
+
run GitApp.new
|
180
|
+
|
181
|
+
|
175
182
|
Add all the page to your git repository:
|
176
183
|
|
177
184
|
git init
|
data/examples/git_app.ru
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'kontrol'
|
2
2
|
require 'bluecloth'
|
3
|
+
require 'git_store'
|
3
4
|
|
4
5
|
class GitApp < Kontrol::Application
|
5
6
|
|
@@ -10,7 +11,7 @@ class GitApp < Kontrol::Application
|
|
10
11
|
|
11
12
|
map do
|
12
13
|
page '/(.*)' do |name|
|
13
|
-
text BlueCloth.new(@store[name
|
14
|
+
text BlueCloth.new(@store[name]).to_html
|
14
15
|
end
|
15
16
|
end
|
16
17
|
end
|
data/lib/kontrol/application.rb
CHANGED
@@ -20,25 +20,29 @@ module Kontrol
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def load_template(file)
|
23
|
-
ERB.new(File.read("#{path}/templates/#{file}"))
|
23
|
+
ERB.new(File.read("#{self.path}/templates/#{file}"))
|
24
24
|
end
|
25
25
|
|
26
26
|
# Render template with given variables.
|
27
27
|
def render_template(file, vars)
|
28
|
-
|
28
|
+
template = load_template(file) or raise "not found: #{path}"
|
29
|
+
Template.render(template, self, "#{self.path}/templates/#{file}", vars)
|
29
30
|
end
|
30
31
|
|
31
32
|
# Render named template and insert into layout with given variables.
|
32
|
-
def render(name,
|
33
|
-
|
34
|
-
|
33
|
+
def render(name, options = {})
|
34
|
+
options = options.merge(:request => request, :params => params)
|
35
|
+
content = render_template(name, options)
|
36
|
+
layout = options.delete(:layout)
|
35
37
|
|
36
38
|
if name[0, 1] == '_'
|
37
39
|
return content
|
40
|
+
|
38
41
|
elsif layout == false
|
39
42
|
response.body = content
|
40
43
|
else
|
41
|
-
|
44
|
+
options.merge!(:content => content)
|
45
|
+
response.body = render_template(layout || "layout.rhtml", options)
|
42
46
|
end
|
43
47
|
|
44
48
|
response['Content-Length'] = response.body.size.to_s
|
@@ -77,6 +81,10 @@ module Kontrol
|
|
77
81
|
def get? ; request.get? end
|
78
82
|
def put? ; request.put? end
|
79
83
|
def delete? ; request.delete? end
|
84
|
+
def post ; request.post? and yield end
|
85
|
+
def get ; request.get? and yield end
|
86
|
+
def put ; request.put? and yield end
|
87
|
+
def delete ; request.delete? and yield end
|
80
88
|
|
81
89
|
def text(s)
|
82
90
|
response.body = s
|
@@ -121,9 +129,21 @@ module Kontrol
|
|
121
129
|
"#<#{self.class.name} @path=#{path}>"
|
122
130
|
end
|
123
131
|
|
132
|
+
def respond_to?(name)
|
133
|
+
if match = name.to_s.match(/^(.*)_path$/)
|
134
|
+
router.__find__(match[1])
|
135
|
+
else
|
136
|
+
super
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
124
140
|
def method_missing(name, *args, &block)
|
125
141
|
if match = name.to_s.match(/^(.*)_path$/)
|
126
|
-
router.__find__(match[1])
|
142
|
+
if route = router.__find__(match[1])
|
143
|
+
route.generate(*args)
|
144
|
+
else
|
145
|
+
super
|
146
|
+
end
|
127
147
|
else
|
128
148
|
super
|
129
149
|
end
|
data/lib/kontrol/route.rb
CHANGED
data/lib/kontrol/template.rb
CHANGED
data/test/application_spec.rb
CHANGED
@@ -7,6 +7,14 @@ describe Kontrol::Application do
|
|
7
7
|
@class = Class.new(Kontrol::Application)
|
8
8
|
@app = @class.new
|
9
9
|
@request = Rack::MockRequest.new(@app)
|
10
|
+
|
11
|
+
def @app.load_template(file)
|
12
|
+
if file == "layout.rhtml"
|
13
|
+
ERB.new '<html><%= @content %></html>'
|
14
|
+
else
|
15
|
+
ERB.new '<p><%= @body %></p>'
|
16
|
+
end
|
17
|
+
end
|
10
18
|
end
|
11
19
|
|
12
20
|
def get(*args)
|
@@ -90,15 +98,17 @@ describe Kontrol::Application do
|
|
90
98
|
get('/')['Content-Length'].should == '5'
|
91
99
|
end
|
92
100
|
|
93
|
-
it "should render
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
else
|
98
|
-
ERB.new '<p><%= @body %></p>'
|
101
|
+
it "should render no layout" do
|
102
|
+
map do
|
103
|
+
index '/' do
|
104
|
+
render 'index.rhtml', :body => 'BODY', :layout => false
|
99
105
|
end
|
100
106
|
end
|
101
107
|
|
108
|
+
get('/').body.should == '<p>BODY</p>'
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should render templates" do
|
102
112
|
map do
|
103
113
|
index '/' do
|
104
114
|
render 'index.rhtml', :body => 'BODY'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: georgi-kontrol
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: "0.
|
4
|
+
version: "0.3"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthias Georgi
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-04-08 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -65,6 +65,6 @@ rubyforge_project:
|
|
65
65
|
rubygems_version: 1.2.0
|
66
66
|
signing_key:
|
67
67
|
specification_version: 2
|
68
|
-
summary: a micro
|
68
|
+
summary: a micro framework
|
69
69
|
test_files: []
|
70
70
|
|