rau 0.0.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 +7 -0
- data/.gitignore +14 -0
- data/.rspec +3 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +13 -0
- data/README.md +3 -0
- data/Rakefile +2 -0
- data/lib/rau/app.rb +92 -0
- data/lib/rau/form.rb +50 -0
- data/lib/rau/html.rb +57 -0
- data/lib/rau/response_handler.rb +12 -0
- data/lib/rau/version.rb +3 -0
- data/lib/rau.rb +4 -0
- data/rau.gemspec +26 -0
- metadata +113 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c4ebce42ddc8d4fc59fcf3a6fc84d5c5314cda07
|
4
|
+
data.tar.gz: e815935b1bf79e93fc329c7b3c36aefa99360f05
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0d5422c264264f26444f7af508097b00146b4709c78acba40f19a60215343b8d00242ae41849822b1a67d9263e51b826da9e047df56c8aa60c58a026565d8ed5
|
7
|
+
data.tar.gz: 8e383451af6b602986a89413b6cca919ea94e84229d8224d56df58971a46d4ff68bf6626685574f7c1b600c113b78be40cf059cb4f9d90814f0fe4a1164d9640
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
2
|
+
Version 2, December 2004
|
3
|
+
|
4
|
+
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
5
|
+
|
6
|
+
Everyone is permitted to copy and distribute verbatim or modified
|
7
|
+
copies of this license document, and changing it is allowed as long
|
8
|
+
as the name is changed.
|
9
|
+
|
10
|
+
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
11
|
+
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
12
|
+
|
13
|
+
0. You just DO WHAT THE FUCK YOU WANT TO.
|
data/README.md
ADDED
data/Rakefile
ADDED
data/lib/rau/app.rb
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'rack/request'
|
2
|
+
require 'rack/response'
|
3
|
+
|
4
|
+
require 'rau/response_handler'
|
5
|
+
|
6
|
+
module Rau
|
7
|
+
class Route
|
8
|
+
attr_reader :method, :path_info
|
9
|
+
|
10
|
+
def initialize method, path_info
|
11
|
+
@method = method
|
12
|
+
@path_info = path_info
|
13
|
+
end
|
14
|
+
|
15
|
+
def == other
|
16
|
+
(@method == other.method) && \
|
17
|
+
(@path_info == other.path_info)
|
18
|
+
end
|
19
|
+
|
20
|
+
alias eql? ==
|
21
|
+
|
22
|
+
def hash
|
23
|
+
@method.hash ^ @path_info.hash
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
module App
|
28
|
+
def self.included(base)
|
29
|
+
base.extend(DSL)
|
30
|
+
end
|
31
|
+
|
32
|
+
def call env
|
33
|
+
@request = Rack::Request.new env
|
34
|
+
@response = Rack::Response.new
|
35
|
+
|
36
|
+
route = Route.new @request.request_method, @request.path_info
|
37
|
+
|
38
|
+
block = routes[route]
|
39
|
+
|
40
|
+
if block.nil?
|
41
|
+
@response.status = 404
|
42
|
+
else
|
43
|
+
@out = []
|
44
|
+
instance_eval &block
|
45
|
+
@response.write @out.join("\n")
|
46
|
+
end
|
47
|
+
|
48
|
+
@response.headers['Content-Type'] = 'text/html'
|
49
|
+
@response.finish
|
50
|
+
end
|
51
|
+
|
52
|
+
def display_form name
|
53
|
+
HTML::FormPrinter.new @out do |p|
|
54
|
+
p.print forms[name]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
module DSL
|
60
|
+
def self.extended(app_class)
|
61
|
+
app_class.instance_eval do
|
62
|
+
@@forms = Hash.new
|
63
|
+
@@routes = Hash.new
|
64
|
+
|
65
|
+
define_method :routes do
|
66
|
+
@@routes
|
67
|
+
end
|
68
|
+
|
69
|
+
define_method :forms do
|
70
|
+
@@forms
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def form name, action, &block
|
76
|
+
@@forms[name] = Rau::Form.new name, action, &block
|
77
|
+
end
|
78
|
+
|
79
|
+
def receive form_name, destination, &block
|
80
|
+
route = Route.new 'POST', @@forms[form_name].action
|
81
|
+
@@routes[route] = Proc.new do
|
82
|
+
block.call @request.POST
|
83
|
+
@response.redirect destination
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def get path, &block
|
88
|
+
route = Route.new 'GET', path
|
89
|
+
@@routes[route] = block
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
data/lib/rau/form.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
module Rau
|
2
|
+
class Field
|
3
|
+
attr_reader :type, :name, :label
|
4
|
+
|
5
|
+
def initialize type, name, label
|
6
|
+
@type = type
|
7
|
+
@name = name
|
8
|
+
@label = label
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class Form
|
13
|
+
attr_reader :name, :action, :fields
|
14
|
+
|
15
|
+
def initialize name, action, &block
|
16
|
+
@name = name
|
17
|
+
@action = action
|
18
|
+
|
19
|
+
@fields = []
|
20
|
+
|
21
|
+
if block
|
22
|
+
instance_eval &block
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def input params
|
27
|
+
@params = params
|
28
|
+
end
|
29
|
+
|
30
|
+
# The DSL should have no behavior.
|
31
|
+
#
|
32
|
+
# It is only a convenient wrapper around what would otherwise amount
|
33
|
+
# to manually instantiating objects such as Rau::Field.
|
34
|
+
#
|
35
|
+
# This way, things can be automated more easily later on.
|
36
|
+
|
37
|
+
FIELD_TYPES = [
|
38
|
+
:text,
|
39
|
+
:email,
|
40
|
+
:password,
|
41
|
+
:submit
|
42
|
+
]
|
43
|
+
|
44
|
+
FIELD_TYPES.each do |type|
|
45
|
+
define_method type do |name, label|
|
46
|
+
@fields.push Field.new(type, name, label)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/rau/html.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
module Rau
|
2
|
+
module HTML
|
3
|
+
class Printer
|
4
|
+
attr_reader :out
|
5
|
+
def initialize out = nil
|
6
|
+
if out.nil?
|
7
|
+
@out = []
|
8
|
+
else
|
9
|
+
@out = out
|
10
|
+
end
|
11
|
+
|
12
|
+
yield self
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class FormPrinter < Printer
|
17
|
+
def print form
|
18
|
+
@out.push %Q[<form id="#{form.name}" action="#{form.action}" method="POST">]
|
19
|
+
|
20
|
+
FieldPrinter.new @out do |p|
|
21
|
+
form.fields.each do |field|
|
22
|
+
p.print form, field
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
@out.push %Q[</form>]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class FieldPrinter < Printer
|
31
|
+
FIELD_TYPE_TAG_MAP = {
|
32
|
+
:submit => [:button_field, 'submit'],
|
33
|
+
:email => [:wrapped_input, 'text'],
|
34
|
+
:password => [:wrapped_input, 'password'],
|
35
|
+
:text => [:wrapped_input, 'text']
|
36
|
+
}
|
37
|
+
|
38
|
+
def print form, field
|
39
|
+
@form = form
|
40
|
+
@field = field
|
41
|
+
method_name, args = FIELD_TYPE_TAG_MAP[field.type]
|
42
|
+
send(method_name, *args)
|
43
|
+
end
|
44
|
+
|
45
|
+
def button_field type
|
46
|
+
@out.push %Q[<button type="#{type}" name="#{@field.name}" id="#{@field.name}">#{@field.label}</button>]
|
47
|
+
end
|
48
|
+
|
49
|
+
def wrapped_input type
|
50
|
+
@out.push %Q[<div class="input-wrapper" id="#{@form.name}-#{@field.name}-wrapper">]
|
51
|
+
@out.push %Q[<label for="#{@field.name}">#{@field.label}</label>]
|
52
|
+
@out.push %Q[<input type="#{type}" id="#{@field.name}" name="#{@field.name}" />]
|
53
|
+
@out.push %Q[</div>]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/rau/version.rb
ADDED
data/lib/rau.rb
ADDED
data/rau.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'rau/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'rau'
|
8
|
+
spec.version = Rau::VERSION
|
9
|
+
spec.authors = ['Max Cantor']
|
10
|
+
spec.email = ['max@maxcantor.net']
|
11
|
+
spec.summary = %q{A web application framework.}
|
12
|
+
spec.description = %q{Rau takes a data-driven, modular approach to web application programming.}
|
13
|
+
spec.homepage = 'http://github.com/mcantor/rau'
|
14
|
+
spec.license = 'WTFPL'
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
|
+
spec.bindir = 'exe'
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_dependency 'cantrips'
|
22
|
+
|
23
|
+
spec.add_development_dependency 'bundler', '~> 1.10'
|
24
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
25
|
+
spec.add_development_dependency 'rspec'
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rau
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Max Cantor
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-23 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: cantrips
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.10'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.10'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: Rau takes a data-driven, modular approach to web application programming.
|
70
|
+
email:
|
71
|
+
- max@maxcantor.net
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- ".gitignore"
|
77
|
+
- ".rspec"
|
78
|
+
- Gemfile
|
79
|
+
- LICENSE.txt
|
80
|
+
- README.md
|
81
|
+
- Rakefile
|
82
|
+
- lib/rau.rb
|
83
|
+
- lib/rau/app.rb
|
84
|
+
- lib/rau/form.rb
|
85
|
+
- lib/rau/html.rb
|
86
|
+
- lib/rau/response_handler.rb
|
87
|
+
- lib/rau/version.rb
|
88
|
+
- rau.gemspec
|
89
|
+
homepage: http://github.com/mcantor/rau
|
90
|
+
licenses:
|
91
|
+
- WTFPL
|
92
|
+
metadata: {}
|
93
|
+
post_install_message:
|
94
|
+
rdoc_options: []
|
95
|
+
require_paths:
|
96
|
+
- lib
|
97
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0'
|
107
|
+
requirements: []
|
108
|
+
rubyforge_project:
|
109
|
+
rubygems_version: 2.4.5
|
110
|
+
signing_key:
|
111
|
+
specification_version: 4
|
112
|
+
summary: A web application framework.
|
113
|
+
test_files: []
|