kiss 1.1 → 1.7
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +1 -1
- data/Rakefile +2 -1
- data/VERSION +1 -1
- data/bin/kiss +151 -34
- data/data/scaffold.tgz +0 -0
- data/lib/kiss.rb +389 -742
- data/lib/kiss/accessors/controller.rb +47 -0
- data/lib/kiss/accessors/request.rb +106 -0
- data/lib/kiss/accessors/template.rb +23 -0
- data/lib/kiss/action.rb +502 -132
- data/lib/kiss/bench.rb +14 -5
- data/lib/kiss/debug.rb +14 -6
- data/lib/kiss/exception_report.rb +22 -299
- data/lib/kiss/ext/core.rb +700 -0
- data/lib/kiss/ext/rack.rb +33 -0
- data/lib/kiss/ext/sequel_database.rb +47 -0
- data/lib/kiss/ext/sequel_mysql_dataset.rb +23 -0
- data/lib/kiss/form.rb +404 -179
- data/lib/kiss/form/field.rb +183 -307
- data/lib/kiss/form/field_types.rb +239 -0
- data/lib/kiss/format.rb +88 -70
- data/lib/kiss/html/exception_report.css +222 -0
- data/lib/kiss/html/exception_report.html +210 -0
- data/lib/kiss/iterator.rb +14 -12
- data/lib/kiss/login.rb +8 -8
- data/lib/kiss/mailer.rb +68 -66
- data/lib/kiss/model.rb +323 -36
- data/lib/kiss/rack/bench.rb +16 -8
- data/lib/kiss/rack/email_errors.rb +25 -15
- data/lib/kiss/rack/errors_ok.rb +2 -2
- data/lib/kiss/rack/facebook.rb +6 -6
- data/lib/kiss/rack/file_not_found.rb +10 -8
- data/lib/kiss/rack/log_exceptions.rb +3 -3
- data/lib/kiss/rack/recorder.rb +2 -2
- data/lib/kiss/rack/show_debug.rb +2 -2
- data/lib/kiss/rack/show_exceptions.rb +2 -2
- data/lib/kiss/request.rb +435 -0
- data/lib/kiss/sequel_session.rb +15 -14
- data/lib/kiss/static_file.rb +20 -13
- data/lib/kiss/template.rb +327 -0
- metadata +60 -25
- data/lib/kiss/controller_accessors.rb +0 -81
- data/lib/kiss/hacks.rb +0 -188
- data/lib/kiss/sequel_mysql.rb +0 -25
- data/lib/kiss/template_methods.rb +0 -167
metadata
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kiss
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 7
|
8
|
+
version: "1.7"
|
5
9
|
platform: ruby
|
6
10
|
authors:
|
7
11
|
- Shawn Van Ittersum
|
@@ -9,39 +13,61 @@ autorequire:
|
|
9
13
|
bindir: bin
|
10
14
|
cert_chain: []
|
11
15
|
|
12
|
-
date:
|
16
|
+
date: 2012-01-28 00:00:00 -08:00
|
13
17
|
default_executable:
|
14
18
|
dependencies:
|
15
19
|
- !ruby/object:Gem::Dependency
|
16
20
|
name: rack
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
21
|
+
prerelease: false
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
23
|
requirements:
|
21
24
|
- - "="
|
22
25
|
- !ruby/object:Gem::Version
|
26
|
+
segments:
|
27
|
+
- 0
|
28
|
+
- 4
|
29
|
+
- 0
|
23
30
|
version: 0.4.0
|
24
|
-
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
25
33
|
- !ruby/object:Gem::Dependency
|
26
34
|
name: sequel
|
27
|
-
|
28
|
-
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
35
|
+
prerelease: false
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
37
|
requirements:
|
31
38
|
- - ">="
|
32
39
|
- !ruby/object:Gem::Version
|
33
|
-
|
34
|
-
|
40
|
+
segments:
|
41
|
+
- 3
|
42
|
+
- 0
|
43
|
+
- 0
|
44
|
+
version: 3.0.0
|
45
|
+
type: :runtime
|
46
|
+
version_requirements: *id002
|
35
47
|
- !ruby/object:Gem::Dependency
|
36
48
|
name: erubis
|
49
|
+
prerelease: false
|
50
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
segments:
|
55
|
+
- 0
|
56
|
+
version: "0"
|
37
57
|
type: :runtime
|
38
|
-
|
39
|
-
|
58
|
+
version_requirements: *id003
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: tzinfo
|
61
|
+
prerelease: false
|
62
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
40
63
|
requirements:
|
41
64
|
- - ">="
|
42
65
|
- !ruby/object:Gem::Version
|
66
|
+
segments:
|
67
|
+
- 0
|
43
68
|
version: "0"
|
44
|
-
|
69
|
+
type: :runtime
|
70
|
+
version_requirements: *id004
|
45
71
|
description:
|
46
72
|
email: shawn @nospam@ multiwidget.com
|
47
73
|
executables:
|
@@ -56,22 +82,27 @@ files:
|
|
56
82
|
- LICENSE
|
57
83
|
- bin/kiss
|
58
84
|
- data/scaffold.tgz
|
59
|
-
- lib/kiss
|
85
|
+
- lib/kiss/accessors/controller.rb
|
86
|
+
- lib/kiss/accessors/request.rb
|
87
|
+
- lib/kiss/accessors/template.rb
|
60
88
|
- lib/kiss/action.rb
|
61
89
|
- lib/kiss/bench.rb
|
62
|
-
- lib/kiss/controller_accessors.rb
|
63
90
|
- lib/kiss/debug.rb
|
64
91
|
- lib/kiss/exception_report.rb
|
65
|
-
- lib/kiss/
|
92
|
+
- lib/kiss/ext/core.rb
|
93
|
+
- lib/kiss/ext/rack.rb
|
94
|
+
- lib/kiss/ext/sequel_database.rb
|
95
|
+
- lib/kiss/ext/sequel_mysql_dataset.rb
|
66
96
|
- lib/kiss/form/field.rb
|
97
|
+
- lib/kiss/form/field_types.rb
|
67
98
|
- lib/kiss/form.rb
|
68
99
|
- lib/kiss/format.rb
|
69
|
-
- lib/kiss/
|
100
|
+
- lib/kiss/html/exception_report.css
|
101
|
+
- lib/kiss/html/exception_report.html
|
70
102
|
- lib/kiss/iterator.rb
|
71
103
|
- lib/kiss/login.rb
|
72
104
|
- lib/kiss/mailer.rb
|
73
105
|
- lib/kiss/model.rb
|
74
|
-
- lib/kiss/rack
|
75
106
|
- lib/kiss/rack/bench.rb
|
76
107
|
- lib/kiss/rack/email_errors.rb
|
77
108
|
- lib/kiss/rack/errors_ok.rb
|
@@ -81,13 +112,15 @@ files:
|
|
81
112
|
- lib/kiss/rack/recorder.rb
|
82
113
|
- lib/kiss/rack/show_debug.rb
|
83
114
|
- lib/kiss/rack/show_exceptions.rb
|
84
|
-
- lib/kiss/
|
115
|
+
- lib/kiss/request.rb
|
85
116
|
- lib/kiss/sequel_session.rb
|
86
117
|
- lib/kiss/static_file.rb
|
87
|
-
- lib/kiss/
|
118
|
+
- lib/kiss/template.rb
|
88
119
|
- lib/kiss.rb
|
89
120
|
has_rdoc: true
|
90
121
|
homepage: http://www.rubykiss.org
|
122
|
+
licenses: []
|
123
|
+
|
91
124
|
post_install_message:
|
92
125
|
rdoc_options:
|
93
126
|
- --main
|
@@ -100,20 +133,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
100
133
|
requirements:
|
101
134
|
- - ">="
|
102
135
|
- !ruby/object:Gem::Version
|
136
|
+
segments:
|
137
|
+
- 0
|
103
138
|
version: "0"
|
104
|
-
version:
|
105
139
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
140
|
requirements:
|
107
141
|
- - ">="
|
108
142
|
- !ruby/object:Gem::Version
|
143
|
+
segments:
|
144
|
+
- 0
|
109
145
|
version: "0"
|
110
|
-
version:
|
111
146
|
requirements: []
|
112
147
|
|
113
148
|
rubyforge_project: kiss
|
114
|
-
rubygems_version: 1.3.
|
149
|
+
rubygems_version: 1.3.6
|
115
150
|
signing_key:
|
116
|
-
specification_version:
|
151
|
+
specification_version: 3
|
117
152
|
summary: An MVC web application framework using Rack, Sequel, and Erubis.
|
118
153
|
test_files: []
|
119
154
|
|
@@ -1,81 +0,0 @@
|
|
1
|
-
class Kiss
|
2
|
-
module KissAccessors
|
3
|
-
def environment
|
4
|
-
Kiss.environment
|
5
|
-
end
|
6
|
-
|
7
|
-
def project_dir
|
8
|
-
Kiss.project_dir
|
9
|
-
end
|
10
|
-
|
11
|
-
def public_dir
|
12
|
-
Kiss.public_dir
|
13
|
-
end
|
14
|
-
|
15
|
-
def upload_dir
|
16
|
-
Kiss.upload_dir
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
module ControllerAccessors
|
21
|
-
def debug(object)
|
22
|
-
controller.debug(object, Kernel.caller[0])
|
23
|
-
end
|
24
|
-
alias_method :trace, :debug
|
25
|
-
|
26
|
-
def bench(label = nil)
|
27
|
-
controller.bench(label, Kernel.caller[0])
|
28
|
-
end
|
29
|
-
|
30
|
-
def models
|
31
|
-
controller.models
|
32
|
-
end
|
33
|
-
alias_method :dbm, :models
|
34
|
-
|
35
|
-
def database
|
36
|
-
controller.database
|
37
|
-
end
|
38
|
-
|
39
|
-
def file_cache(*args,&block)
|
40
|
-
controller.file_cache(*args,&block)
|
41
|
-
end
|
42
|
-
|
43
|
-
def session
|
44
|
-
controller.session
|
45
|
-
end
|
46
|
-
|
47
|
-
def login
|
48
|
-
controller.login
|
49
|
-
end
|
50
|
-
|
51
|
-
def request
|
52
|
-
controller.request
|
53
|
-
end
|
54
|
-
|
55
|
-
def app(*args)
|
56
|
-
controller.app_url(*args)
|
57
|
-
end
|
58
|
-
|
59
|
-
def pub(*args)
|
60
|
-
controller.pub_url(*args)
|
61
|
-
end
|
62
|
-
|
63
|
-
def env
|
64
|
-
controller.env
|
65
|
-
end
|
66
|
-
|
67
|
-
def protocol
|
68
|
-
controller.protocol
|
69
|
-
end
|
70
|
-
|
71
|
-
def host
|
72
|
-
controller.host
|
73
|
-
end
|
74
|
-
|
75
|
-
def new_email
|
76
|
-
controller.new_email
|
77
|
-
end
|
78
|
-
|
79
|
-
include KissAccessors
|
80
|
-
end
|
81
|
-
end
|
data/lib/kiss/hacks.rb
DELETED
@@ -1,188 +0,0 @@
|
|
1
|
-
# This is a collection of hacks to enable various Ruby lnaguage enhancements
|
2
|
-
# and other features of Kiss.
|
3
|
-
|
4
|
-
# Placeholder; to be overloaded by Kiss Rack builder option MultiBench
|
5
|
-
# (not yet implemented).
|
6
|
-
# def multibench(*args); end
|
7
|
-
|
8
|
-
# This gets called outside of controller contexts; used mainly for debugging
|
9
|
-
# during Kiss framework development.
|
10
|
-
def force_debug(object)
|
11
|
-
print "Content-type: text/html\n\n" unless $debug
|
12
|
-
$debug = true
|
13
|
-
|
14
|
-
puts object.inspect + '<br/>' + '<small>at ' + Kernel.caller[0] + '</small><br/>'
|
15
|
-
object
|
16
|
-
end
|
17
|
-
alias :debug :force_debug
|
18
|
-
|
19
|
-
def trace(object)
|
20
|
-
debug(object)
|
21
|
-
end
|
22
|
-
|
23
|
-
class Kiss
|
24
|
-
# Used when Kiss#file_cache called from Kiss::Action#file_cache.
|
25
|
-
# Caught by Kiss's Rack builder option FileNotFound.
|
26
|
-
class TemplateFileNotFound < LoadError; end
|
27
|
-
class FileNotFound < LoadError; end
|
28
|
-
end
|
29
|
-
|
30
|
-
|
31
|
-
# Methods to enable hash.attr == hash[attr] syntax,
|
32
|
-
# including hash.id and hash.type
|
33
|
-
class Hash
|
34
|
-
def method_missing(meth,*args)
|
35
|
-
if /=$/=~(meth=meth.id2name) then
|
36
|
-
self[meth[0...-1]] = (args.length<2 ? args[0] : args)
|
37
|
-
else
|
38
|
-
self[meth] || self[meth.to_sym]
|
39
|
-
end
|
40
|
-
end
|
41
|
-
def id
|
42
|
-
self['id'] || self [:id]
|
43
|
-
end
|
44
|
-
def type
|
45
|
-
self['type'] || self [:type] || Hash
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
# Enables FixNum conversion to time duration values (in seconds).
|
50
|
-
class Fixnum
|
51
|
-
# 2.weeks = 14.days
|
52
|
-
def weeks
|
53
|
-
self * 7.days
|
54
|
-
end
|
55
|
-
# 1.days = 24.hours
|
56
|
-
def days
|
57
|
-
self * 24.hours
|
58
|
-
end
|
59
|
-
# 1.hours = 60.minutes = 3600 (seconds)
|
60
|
-
def hours
|
61
|
-
self * 60.minutes
|
62
|
-
end
|
63
|
-
# 1.minutes = 60 (seconds)
|
64
|
-
# 5.minutes = 300 (seconds)
|
65
|
-
def minutes
|
66
|
-
self * 60
|
67
|
-
end
|
68
|
-
# 5.minutes.ago = Time.now - 300
|
69
|
-
def ago
|
70
|
-
Time.now - self
|
71
|
-
end
|
72
|
-
|
73
|
-
# format thousands
|
74
|
-
def format_thousands
|
75
|
-
to_s.reverse.gsub(/(\d{3})/,'\1,').sub(/\,(-?)$/,'\1').reverse
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
class Date
|
80
|
-
# Returns string representing date in m/d/yyyy format
|
81
|
-
def mdy
|
82
|
-
strftime("%m/%d/%Y")
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
class NilClass
|
87
|
-
def mdy
|
88
|
-
''
|
89
|
-
end
|
90
|
-
def size
|
91
|
-
0
|
92
|
-
end
|
93
|
-
def length
|
94
|
-
0
|
95
|
-
end
|
96
|
-
# Ruby default: nil.id == 4 (now deprecated, but still present in 1.8)
|
97
|
-
# can cause unexpected results when using id from nil Sequel results
|
98
|
-
# so we'll raise an error instead, effectively undefining 'id' method
|
99
|
-
def id
|
100
|
-
raise NoMethodError, "undefined method `id' for nil:NilClass"
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
class String
|
105
|
-
def to_const
|
106
|
-
begin
|
107
|
-
parts = self.split(/::/)
|
108
|
-
klass = Kernel
|
109
|
-
while (next_part = parts.shift)
|
110
|
-
klass = klass.const_get(next_part)
|
111
|
-
end
|
112
|
-
|
113
|
-
klass
|
114
|
-
rescue
|
115
|
-
raise "Constant '#{self}' not defined"
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
class Symbol
|
121
|
-
def to_const
|
122
|
-
self.to_s.to_const
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
module Rack
|
127
|
-
class Request
|
128
|
-
def server
|
129
|
-
url = scheme + "://"
|
130
|
-
url << host
|
131
|
-
|
132
|
-
if scheme == "https" && port != 443 ||
|
133
|
-
scheme == "http" && port != 80
|
134
|
-
url << ":#{port}"
|
135
|
-
end
|
136
|
-
|
137
|
-
url
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
class SequelZeroTime < String
|
143
|
-
def initialize(value = '0000-00-00 00:00',*args,&block)
|
144
|
-
super(value,*args,&block)
|
145
|
-
end
|
146
|
-
|
147
|
-
# arithmetic operators
|
148
|
-
def +(*args)
|
149
|
-
self
|
150
|
-
end
|
151
|
-
def -(*args)
|
152
|
-
self
|
153
|
-
end
|
154
|
-
|
155
|
-
# comparision operators
|
156
|
-
def ==(value)
|
157
|
-
(value == 0 || value.is_a?(SequelZeroTime)) ? true : false
|
158
|
-
end
|
159
|
-
def >(*args)
|
160
|
-
return false
|
161
|
-
end
|
162
|
-
def >=(*args)
|
163
|
-
(value == 0 || value.is_a?(SequelZeroTime)) ? true : false
|
164
|
-
end
|
165
|
-
def <(*args)
|
166
|
-
return true
|
167
|
-
end
|
168
|
-
def <=(*args)
|
169
|
-
return true
|
170
|
-
end
|
171
|
-
|
172
|
-
# format conversion
|
173
|
-
def to_f
|
174
|
-
0
|
175
|
-
end
|
176
|
-
def to_i
|
177
|
-
0
|
178
|
-
end
|
179
|
-
def to_s
|
180
|
-
''
|
181
|
-
end
|
182
|
-
def strftime(*args)
|
183
|
-
''
|
184
|
-
end
|
185
|
-
def mdy
|
186
|
-
''
|
187
|
-
end
|
188
|
-
end
|
data/lib/kiss/sequel_mysql.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
module Sequel
|
2
|
-
module MySQL
|
3
|
-
class Dataset < Sequel::Dataset
|
4
|
-
# Returns results from dataset query as array of arrays,
|
5
|
-
# instead of array of hashes.
|
6
|
-
def all_arrays(opts = nil, &block)
|
7
|
-
a = []
|
8
|
-
fetch_arrays(select_sql(opts)) {|r| a << r}
|
9
|
-
a.each(&block) if block
|
10
|
-
a
|
11
|
-
end
|
12
|
-
|
13
|
-
# Fixes bug in Sequel 1.5; shouldn't be needed for Sequel 2.x
|
14
|
-
# (need to double-check, however).
|
15
|
-
def fetch_arrays(sql)
|
16
|
-
execute(sql) do |r|
|
17
|
-
while row = r.fetch_row
|
18
|
-
yield row
|
19
|
-
end
|
20
|
-
end
|
21
|
-
self
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|