watts 0.0.5 → 0.0.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.
- data/Rakefile +1 -1
- data/doc/examples/matching.ru +60 -0
- data/lib/watts.rb +1 -1
- metadata +8 -3
data/Rakefile
CHANGED
@@ -22,7 +22,7 @@ spec = Gem::Specification.new { |s|
|
|
22
22
|
"Resource-oriented, Rack-based, minimalist web framework."
|
23
23
|
s.homepage = "http://debu.gs/#{s.name}"
|
24
24
|
%w(metaid).each &s.method(:add_dependency)
|
25
|
-
s.version = '0.0.
|
25
|
+
s.version = '0.0.6'
|
26
26
|
}
|
27
27
|
|
28
28
|
Rake::RDocTask.new(:doc) { |t|
|
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# An illustration of the pattern-matching capabilities of Watts. Some URLs to
|
3
|
+
# try if you start this one up:
|
4
|
+
# http://localhost:8080/strlen/foo (Which should tell you '3'.)
|
5
|
+
# http://localhost:8080/fib/15 (Which should give you 987.)
|
6
|
+
# http://localhost:8080/fib/foo (Which is a 404. 'foo' isn't a number!)
|
7
|
+
# http://localhost:8080/fib/f (Which should give you 0x3db.)
|
8
|
+
# http://localhost:8080/fib/0x15 (Which should give you 0x452f.)
|
9
|
+
|
10
|
+
require 'watts'
|
11
|
+
|
12
|
+
class MatchingDemo < Watts::App
|
13
|
+
class Strlen < Watts::Resource
|
14
|
+
# Takes an argument, and just returns the length of the argument.
|
15
|
+
get { |str| str.length.to_s + "\n" }
|
16
|
+
end
|
17
|
+
|
18
|
+
class Fibonacci < Watts::Resource
|
19
|
+
# This resource takes an argument for GET. It is filled in by Watts
|
20
|
+
# according to the argument pattern passed into resource below.
|
21
|
+
get { |n| fib(n.to_i).to_s + "\n" }
|
22
|
+
|
23
|
+
# A naive, recursive, slow, text-book implementation of Fibonacci.
|
24
|
+
def fib(n)
|
25
|
+
if n < 2
|
26
|
+
1
|
27
|
+
else
|
28
|
+
fib(n - 1) + fib(n - 2)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# As above, but with a base-16 number.
|
34
|
+
class HexFibonacci < Fibonacci
|
35
|
+
get { |n| "0x" + fib(n.to_i(16)).to_s(16) + "\n" }
|
36
|
+
end
|
37
|
+
|
38
|
+
resource('/') {
|
39
|
+
# A symbol can be used to indicate an 'argument' component of a path,
|
40
|
+
# which is in turn passed to the resource's method as paths. It will
|
41
|
+
# match anything, making it almost equivalent to just using an empty
|
42
|
+
# regex (see below), except that it can serve as documentation.
|
43
|
+
resource(['strlen', :str], Strlen)
|
44
|
+
|
45
|
+
resource('fib') {
|
46
|
+
# You can match arguments based on a regex. The path component for
|
47
|
+
# the regex is passed to the resource's method as part of the
|
48
|
+
# argument list.
|
49
|
+
resource([/^[0-9]+$/], Fibonacci)
|
50
|
+
|
51
|
+
# As above, but here we use hexadecimal. If the pattern for
|
52
|
+
# Fibonacci doesn't match, then we'll end up hitting this one.
|
53
|
+
resource([/^(0x)?[0-9a-f]+$/i], HexFibonacci)
|
54
|
+
}
|
55
|
+
}
|
56
|
+
end
|
57
|
+
|
58
|
+
app = MatchingDemo.new
|
59
|
+
builder = Rack::Builder.new { run app }
|
60
|
+
run builder
|
data/lib/watts.rb
CHANGED
@@ -155,7 +155,7 @@ module Watts
|
|
155
155
|
rm = env['REQUEST_METHOD'].downcase.to_sym
|
156
156
|
return(Errors[400]) unless Resource::HTTPMethods.include?(rm)
|
157
157
|
|
158
|
-
req_path ||= decypher_path env['
|
158
|
+
req_path ||= decypher_path env['PATH_INFO']
|
159
159
|
resource_class, args = match req_path
|
160
160
|
|
161
161
|
if resource_class
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: watts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 19
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
9
|
+
- 6
|
10
|
+
version: 0.0.6
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Pete Elmore
|
@@ -14,7 +15,7 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2011-03-
|
18
|
+
date: 2011-03-15 00:00:00 -07:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
@@ -25,6 +26,7 @@ dependencies:
|
|
25
26
|
requirements:
|
26
27
|
- - ">="
|
27
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
28
30
|
segments:
|
29
31
|
- 0
|
30
32
|
version: "0"
|
@@ -48,6 +50,7 @@ files:
|
|
48
50
|
- doc/examples/README
|
49
51
|
- doc/examples/matching.rb
|
50
52
|
- doc/examples/hoshi.rb
|
53
|
+
- doc/examples/matching.ru
|
51
54
|
- doc/LICENSE
|
52
55
|
- Rakefile
|
53
56
|
has_rdoc: true
|
@@ -64,6 +67,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
64
67
|
requirements:
|
65
68
|
- - ">="
|
66
69
|
- !ruby/object:Gem::Version
|
70
|
+
hash: 3
|
67
71
|
segments:
|
68
72
|
- 0
|
69
73
|
version: "0"
|
@@ -72,6 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
72
76
|
requirements:
|
73
77
|
- - ">="
|
74
78
|
- !ruby/object:Gem::Version
|
79
|
+
hash: 3
|
75
80
|
segments:
|
76
81
|
- 0
|
77
82
|
version: "0"
|