kenji 0.3.1 → 0.4
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/bin/kenji-init +1 -1
- data/inited/.gitignore +0 -1
- data/lib/kenji/controller.rb +21 -10
- data/lib/kenji/version.rb +1 -1
- data/lib/kenji.rb +3 -0
- metadata +58 -39
data/bin/kenji-init
CHANGED
data/inited/.gitignore
CHANGED
data/lib/kenji/controller.rb
CHANGED
@@ -76,24 +76,35 @@ module Kenji
|
|
76
76
|
segments = segments.drop(1) if segments.first == '' # discard leading /'s empty segment
|
77
77
|
node = self.class.routes[method]
|
78
78
|
variables = []
|
79
|
+
searching = true
|
79
80
|
segments.each do |segment| # traverse tree to find
|
80
|
-
if node[segment.to_sym]
|
81
|
+
if searching && node[segment.to_sym]
|
81
82
|
node = node[segment.to_sym] # attempt to move down to the plain text segment
|
82
|
-
|
83
|
+
elsif searching && node[:':']
|
83
84
|
node = node[:':'] # attempt to find a variable segment
|
84
85
|
variables << segment # either we've found a variable, or the `unless` below will trigger
|
86
|
+
else
|
87
|
+
variables << segment # dump the remaining segments if we cannot drill down further
|
88
|
+
searching = false
|
85
89
|
end
|
86
|
-
break unless node # break if as an instance method nil, fallback below
|
87
90
|
end
|
88
91
|
if node && action = node[:@action] # the block is stored in the @action leaf
|
89
|
-
|
92
|
+
begin
|
93
|
+
return action.bind(self).call(*variables)
|
94
|
+
rescue ArgumentError # assuming argument error means route not defined
|
95
|
+
return attempt_fallback(path) # TODO: might want to check arity instead
|
96
|
+
end
|
90
97
|
else # or, fallback if necessary store the block for each method
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
98
|
+
return attempt_fallback(path)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def attempt_fallback(path)
|
103
|
+
if respond_to? :fallback
|
104
|
+
if self.class.instance_method(:fallback).arity == 1
|
105
|
+
return fallback(path)
|
106
|
+
else
|
107
|
+
return fallback
|
97
108
|
end
|
98
109
|
end
|
99
110
|
end
|
data/lib/kenji/version.rb
CHANGED
data/lib/kenji.rb
CHANGED
@@ -37,6 +37,9 @@ module Kenji
|
|
37
37
|
out = controller.call(@env['REQUEST_METHOD'].downcase.to_sym, '/'+segments.join('/')).to_json
|
38
38
|
rescue KenjiRespondControlFlowInterrupt => e
|
39
39
|
out = e.response
|
40
|
+
rescue Exception => e
|
41
|
+
p e, e.backtrace # log exceptions
|
42
|
+
raise e
|
40
43
|
end
|
41
44
|
break
|
42
45
|
end
|
metadata
CHANGED
@@ -1,46 +1,57 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: kenji
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 4
|
8
|
+
version: "0.4"
|
6
9
|
platform: ruby
|
7
|
-
authors:
|
10
|
+
authors:
|
8
11
|
- Kenneth Ballenegger
|
9
12
|
autorequire:
|
10
13
|
bindir: bin
|
11
14
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
+
|
16
|
+
date: 2012-04-05 00:00:00 -07:00
|
17
|
+
default_executable:
|
18
|
+
dependencies:
|
19
|
+
- !ruby/object:Gem::Dependency
|
15
20
|
name: json
|
16
|
-
|
21
|
+
prerelease: false
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
17
23
|
none: false
|
18
|
-
requirements:
|
19
|
-
- -
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
22
30
|
type: :runtime
|
23
|
-
|
24
|
-
|
25
|
-
- !ruby/object:Gem::Dependency
|
31
|
+
version_requirements: *id001
|
32
|
+
- !ruby/object:Gem::Dependency
|
26
33
|
name: rack
|
27
|
-
|
34
|
+
prerelease: false
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
28
36
|
none: false
|
29
|
-
requirements:
|
30
|
-
- -
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
segments:
|
41
|
+
- 0
|
42
|
+
version: "0"
|
33
43
|
type: :runtime
|
34
|
-
|
35
|
-
version_requirements: *70245025913560
|
44
|
+
version_requirements: *id002
|
36
45
|
description: A lightweight Ruby web framework.
|
37
|
-
email:
|
46
|
+
email:
|
38
47
|
- kenneth@ballenegger.com
|
39
|
-
executables:
|
48
|
+
executables:
|
40
49
|
- kenji-init
|
41
50
|
extensions: []
|
51
|
+
|
42
52
|
extra_rdoc_files: []
|
43
|
-
|
53
|
+
|
54
|
+
files:
|
44
55
|
- .gitignore
|
45
56
|
- Gemfile
|
46
57
|
- LICENSE
|
@@ -66,29 +77,37 @@ files:
|
|
66
77
|
- lib/kenji/controller.rb
|
67
78
|
- lib/kenji/string_extensions.rb
|
68
79
|
- lib/kenji/version.rb
|
80
|
+
has_rdoc: true
|
69
81
|
homepage: https://github.com/kballenegger/kenji
|
70
82
|
licenses: []
|
83
|
+
|
71
84
|
post_install_message:
|
72
85
|
rdoc_options: []
|
73
|
-
|
86
|
+
|
87
|
+
require_paths:
|
74
88
|
- lib
|
75
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
89
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
90
|
none: false
|
77
|
-
requirements:
|
78
|
-
- -
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
|
81
|
-
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
segments:
|
95
|
+
- 0
|
96
|
+
version: "0"
|
97
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
98
|
none: false
|
83
|
-
requirements:
|
84
|
-
- -
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
segments:
|
103
|
+
- 0
|
104
|
+
version: "0"
|
87
105
|
requirements: []
|
106
|
+
|
88
107
|
rubyforge_project:
|
89
|
-
rubygems_version: 1.
|
108
|
+
rubygems_version: 1.3.7
|
90
109
|
signing_key:
|
91
110
|
specification_version: 3
|
92
111
|
summary: Kenji
|
93
112
|
test_files: []
|
94
|
-
|
113
|
+
|