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 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
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format documentation
3
+ --require spec_helper
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
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
@@ -0,0 +1,3 @@
1
+ # Rau
2
+
3
+ A web application library.
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
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
@@ -0,0 +1,12 @@
1
+ module Rau
2
+ class ResponseHandler
3
+ def initialize request, response
4
+ @request = request
5
+ @response = response
6
+ end
7
+
8
+ def process
9
+ @response.write 'Lol hey'
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,3 @@
1
+ module Rau
2
+ VERSION = "0.0.1"
3
+ end
data/lib/rau.rb ADDED
@@ -0,0 +1,4 @@
1
+ require 'rau/app'
2
+ require 'rau/form'
3
+ require 'rau/html'
4
+ require 'rau/version'
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: []