cramp 0.11 → 0.12
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/lib/cramp.rb +12 -1
- data/lib/cramp/abstract.rb +72 -0
- data/lib/cramp/action.rb +12 -0
- data/lib/cramp/body.rb +48 -0
- data/lib/cramp/callbacks.rb +48 -0
- data/lib/cramp/keep_connection_alive.rb +19 -0
- data/lib/cramp/periodic_timer.rb +49 -0
- data/lib/cramp/rendering.rb +11 -0
- data/lib/cramp/test_case.rb +54 -0
- data/lib/cramp/websocket.rb +84 -0
- data/lib/cramp/{controller/websocket → websocket}/rainbows_backend.rb +1 -1
- data/lib/cramp/{controller/websocket → websocket}/thin_backend.rb +1 -1
- metadata +37 -86
- data/lib/cramp/controller.rb +0 -15
- data/lib/cramp/controller/abstract.rb +0 -71
- data/lib/cramp/controller/action.rb +0 -14
- data/lib/cramp/controller/body.rb +0 -50
- data/lib/cramp/controller/callbacks.rb +0 -50
- data/lib/cramp/controller/keep_connection_alive.rb +0 -21
- data/lib/cramp/controller/periodic_timer.rb +0 -51
- data/lib/cramp/controller/rendering.rb +0 -13
- data/lib/cramp/controller/test_case.rb +0 -57
- data/lib/cramp/controller/websocket.rb +0 -63
- data/lib/cramp/model.rb +0 -40
- data/lib/cramp/model/arel_monkey_patches.rb +0 -66
- data/lib/cramp/model/attribute.rb +0 -104
- data/lib/cramp/model/attribute_methods.rb +0 -83
- data/lib/cramp/model/base.rb +0 -119
- data/lib/cramp/model/callbacks.rb +0 -41
- data/lib/cramp/model/column.rb +0 -72
- data/lib/cramp/model/emysql_ext.rb +0 -21
- data/lib/cramp/model/engine.rb +0 -75
- data/lib/cramp/model/engine/connection.rb +0 -32
- data/lib/cramp/model/evented_mysql.rb +0 -298
- data/lib/cramp/model/finders.rb +0 -27
- data/lib/cramp/model/quoting.rb +0 -104
- data/lib/cramp/model/relation.rb +0 -62
- data/lib/cramp/model/status.rb +0 -18
metadata
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cramp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 19
|
5
|
+
prerelease:
|
5
6
|
segments:
|
6
7
|
- 0
|
7
|
-
-
|
8
|
-
version: "0.
|
8
|
+
- 12
|
9
|
+
version: "0.12"
|
9
10
|
platform: ruby
|
10
11
|
authors:
|
11
12
|
- Pratik Naik
|
@@ -13,96 +14,58 @@ autorequire:
|
|
13
14
|
bindir: bin
|
14
15
|
cert_chain: []
|
15
16
|
|
16
|
-
date:
|
17
|
+
date: 2011-02-13 00:00:00 +00:00
|
17
18
|
default_executable:
|
18
19
|
dependencies:
|
19
20
|
- !ruby/object:Gem::Dependency
|
20
21
|
name: activesupport
|
21
22
|
prerelease: false
|
22
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
23
25
|
requirements:
|
24
26
|
- - ~>
|
25
27
|
- !ruby/object:Gem::Version
|
28
|
+
hash: 15
|
26
29
|
segments:
|
27
30
|
- 3
|
28
31
|
- 0
|
29
|
-
-
|
30
|
-
|
31
|
-
version: 3.0.0.beta3
|
32
|
+
- 4
|
33
|
+
version: 3.0.4
|
32
34
|
type: :runtime
|
33
35
|
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: activemodel
|
36
|
-
prerelease: false
|
37
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - ~>
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
segments:
|
42
|
-
- 3
|
43
|
-
- 0
|
44
|
-
- 0
|
45
|
-
- beta3
|
46
|
-
version: 3.0.0.beta3
|
47
|
-
type: :runtime
|
48
|
-
version_requirements: *id002
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: arel
|
51
|
-
prerelease: false
|
52
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
-
requirements:
|
54
|
-
- - "="
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
segments:
|
57
|
-
- 0
|
58
|
-
- 3
|
59
|
-
- 3
|
60
|
-
version: 0.3.3
|
61
|
-
type: :runtime
|
62
|
-
version_requirements: *id003
|
63
36
|
- !ruby/object:Gem::Dependency
|
64
37
|
name: rack
|
65
38
|
prerelease: false
|
66
|
-
requirement: &
|
67
|
-
|
68
|
-
- - ~>
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
segments:
|
71
|
-
- 1
|
72
|
-
- 1
|
73
|
-
- 0
|
74
|
-
version: 1.1.0
|
75
|
-
type: :runtime
|
76
|
-
version_requirements: *id004
|
77
|
-
- !ruby/object:Gem::Dependency
|
78
|
-
name: mysqlplus
|
79
|
-
prerelease: false
|
80
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
81
41
|
requirements:
|
82
42
|
- - ~>
|
83
43
|
- !ruby/object:Gem::Version
|
44
|
+
hash: 29
|
84
45
|
segments:
|
85
|
-
- 0
|
86
46
|
- 1
|
47
|
+
- 2
|
87
48
|
- 1
|
88
|
-
version:
|
49
|
+
version: 1.2.1
|
89
50
|
type: :runtime
|
90
|
-
version_requirements: *
|
51
|
+
version_requirements: *id002
|
91
52
|
- !ruby/object:Gem::Dependency
|
92
53
|
name: eventmachine
|
93
54
|
prerelease: false
|
94
|
-
requirement: &
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
95
57
|
requirements:
|
96
58
|
- - ~>
|
97
59
|
- !ruby/object:Gem::Version
|
60
|
+
hash: 59
|
98
61
|
segments:
|
99
62
|
- 0
|
100
63
|
- 12
|
101
64
|
- 10
|
102
65
|
version: 0.12.10
|
103
66
|
type: :runtime
|
104
|
-
version_requirements: *
|
105
|
-
description:
|
67
|
+
version_requirements: *id003
|
68
|
+
description: Cramp is a framework for developing asynchronous web applications.
|
106
69
|
email: pratiknaik@gmail.com
|
107
70
|
executables: []
|
108
71
|
|
@@ -112,33 +75,17 @@ extra_rdoc_files: []
|
|
112
75
|
|
113
76
|
files:
|
114
77
|
- MIT-LICENSE
|
115
|
-
- lib/cramp/
|
116
|
-
- lib/cramp/
|
117
|
-
- lib/cramp/
|
118
|
-
- lib/cramp/
|
119
|
-
- lib/cramp/
|
120
|
-
- lib/cramp/
|
121
|
-
- lib/cramp/
|
122
|
-
- lib/cramp/
|
123
|
-
- lib/cramp/
|
124
|
-
- lib/cramp/
|
125
|
-
- lib/cramp/
|
126
|
-
- lib/cramp/controller.rb
|
127
|
-
- lib/cramp/model/arel_monkey_patches.rb
|
128
|
-
- lib/cramp/model/attribute.rb
|
129
|
-
- lib/cramp/model/attribute_methods.rb
|
130
|
-
- lib/cramp/model/base.rb
|
131
|
-
- lib/cramp/model/callbacks.rb
|
132
|
-
- lib/cramp/model/column.rb
|
133
|
-
- lib/cramp/model/emysql_ext.rb
|
134
|
-
- lib/cramp/model/engine/connection.rb
|
135
|
-
- lib/cramp/model/engine.rb
|
136
|
-
- lib/cramp/model/evented_mysql.rb
|
137
|
-
- lib/cramp/model/finders.rb
|
138
|
-
- lib/cramp/model/quoting.rb
|
139
|
-
- lib/cramp/model/relation.rb
|
140
|
-
- lib/cramp/model/status.rb
|
141
|
-
- lib/cramp/model.rb
|
78
|
+
- lib/cramp/abstract.rb
|
79
|
+
- lib/cramp/action.rb
|
80
|
+
- lib/cramp/body.rb
|
81
|
+
- lib/cramp/callbacks.rb
|
82
|
+
- lib/cramp/keep_connection_alive.rb
|
83
|
+
- lib/cramp/periodic_timer.rb
|
84
|
+
- lib/cramp/rendering.rb
|
85
|
+
- lib/cramp/test_case.rb
|
86
|
+
- lib/cramp/websocket/rainbows_backend.rb
|
87
|
+
- lib/cramp/websocket/thin_backend.rb
|
88
|
+
- lib/cramp/websocket.rb
|
142
89
|
- lib/cramp.rb
|
143
90
|
has_rdoc: true
|
144
91
|
homepage: http://m.onkey.org
|
@@ -150,25 +97,29 @@ rdoc_options: []
|
|
150
97
|
require_paths:
|
151
98
|
- lib
|
152
99
|
required_ruby_version: !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
153
101
|
requirements:
|
154
102
|
- - ">="
|
155
103
|
- !ruby/object:Gem::Version
|
104
|
+
hash: 3
|
156
105
|
segments:
|
157
106
|
- 0
|
158
107
|
version: "0"
|
159
108
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
none: false
|
160
110
|
requirements:
|
161
111
|
- - ">="
|
162
112
|
- !ruby/object:Gem::Version
|
113
|
+
hash: 3
|
163
114
|
segments:
|
164
115
|
- 0
|
165
116
|
version: "0"
|
166
117
|
requirements: []
|
167
118
|
|
168
119
|
rubyforge_project:
|
169
|
-
rubygems_version: 1.
|
120
|
+
rubygems_version: 1.5.2
|
170
121
|
signing_key:
|
171
122
|
specification_version: 3
|
172
|
-
summary:
|
123
|
+
summary: Asynchronous web framework.
|
173
124
|
test_files: []
|
174
125
|
|
data/lib/cramp/controller.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'cramp'
|
2
|
-
require 'rack'
|
3
|
-
|
4
|
-
module Cramp
|
5
|
-
module Controller
|
6
|
-
autoload :Action, "cramp/controller/action"
|
7
|
-
autoload :Websocket, "cramp/controller/websocket"
|
8
|
-
autoload :Body, "cramp/controller/body"
|
9
|
-
autoload :PeriodicTimer, "cramp/controller/periodic_timer"
|
10
|
-
autoload :KeepConnectionAlive, "cramp/controller/keep_connection_alive"
|
11
|
-
autoload :Abstract, "cramp/controller/abstract"
|
12
|
-
autoload :Callbacks, "cramp/controller/callbacks"
|
13
|
-
autoload :TestCase, "cramp/controller/test_case"
|
14
|
-
end
|
15
|
-
end
|
@@ -1,71 +0,0 @@
|
|
1
|
-
require 'active_support/core_ext/hash/keys'
|
2
|
-
|
3
|
-
module Cramp
|
4
|
-
module Controller
|
5
|
-
class Abstract
|
6
|
-
|
7
|
-
include Callbacks
|
8
|
-
|
9
|
-
ASYNC_RESPONSE = [-1, {}, []].freeze
|
10
|
-
|
11
|
-
class << self
|
12
|
-
def call(env)
|
13
|
-
controller = new(env).process
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def initialize(env)
|
18
|
-
@env = env
|
19
|
-
end
|
20
|
-
|
21
|
-
def process
|
22
|
-
EM.next_tick { before_start }
|
23
|
-
ASYNC_RESPONSE
|
24
|
-
end
|
25
|
-
|
26
|
-
def continue
|
27
|
-
init_async_body
|
28
|
-
|
29
|
-
status, headers = respond_with
|
30
|
-
send_initial_response(status, headers, @body)
|
31
|
-
|
32
|
-
EM.next_tick { start } if respond_to?(:start)
|
33
|
-
EM.next_tick { on_start }
|
34
|
-
end
|
35
|
-
|
36
|
-
def respond_with
|
37
|
-
[200, {'Content-Type' => 'text/html'}]
|
38
|
-
end
|
39
|
-
|
40
|
-
def init_async_body
|
41
|
-
@body = Body.new
|
42
|
-
|
43
|
-
if self.class.on_finish_callbacks.any?
|
44
|
-
@body.callback { on_finish }
|
45
|
-
@body.errback { on_finish }
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def finish
|
50
|
-
@body.succeed
|
51
|
-
end
|
52
|
-
|
53
|
-
def send_initial_response(response_status, response_headers, response_body)
|
54
|
-
EM.next_tick { @env['async.callback'].call [response_status, response_headers, response_body] }
|
55
|
-
end
|
56
|
-
|
57
|
-
def halt(status, headers = {}, halt_body = '')
|
58
|
-
send_initial_response(status, headers, halt_body)
|
59
|
-
end
|
60
|
-
|
61
|
-
def request
|
62
|
-
@request ||= Rack::Request.new(@env)
|
63
|
-
end
|
64
|
-
|
65
|
-
def params
|
66
|
-
@params ||= request.params.update(@env['usher.params']).symbolize_keys
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
# Copyright 2008 James Tucker <raggi@rubyforge.org>.
|
2
|
-
|
3
|
-
module Cramp
|
4
|
-
module Controller
|
5
|
-
class Body
|
6
|
-
include EventMachine::Deferrable
|
7
|
-
|
8
|
-
def initialize
|
9
|
-
@queue = []
|
10
|
-
|
11
|
-
# Make sure to flush out the queue before closing the connection
|
12
|
-
callback { flush }
|
13
|
-
end
|
14
|
-
|
15
|
-
def call(body)
|
16
|
-
@queue << body
|
17
|
-
schedule_dequeue
|
18
|
-
end
|
19
|
-
|
20
|
-
def each &blk
|
21
|
-
@body_callback = blk
|
22
|
-
schedule_dequeue
|
23
|
-
end
|
24
|
-
|
25
|
-
def closed?
|
26
|
-
@deferred_status != :unknown
|
27
|
-
end
|
28
|
-
|
29
|
-
def flush
|
30
|
-
return unless @body_callback
|
31
|
-
|
32
|
-
until @queue.empty?
|
33
|
-
Array(@queue.shift).each {|chunk| @body_callback.call(chunk) }
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def schedule_dequeue
|
38
|
-
return unless @body_callback
|
39
|
-
|
40
|
-
EventMachine.next_tick do
|
41
|
-
next unless body = @queue.shift
|
42
|
-
|
43
|
-
Array(body).each {|chunk| @body_callback.call(chunk) }
|
44
|
-
schedule_dequeue unless @queue.empty?
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
module Cramp
|
2
|
-
module Controller
|
3
|
-
module Callbacks
|
4
|
-
|
5
|
-
extend ActiveSupport::Concern
|
6
|
-
|
7
|
-
included do
|
8
|
-
class_inheritable_accessor :before_start_callbacks, :on_finish_callbacks, :on_start_callback, :instance_reader => false
|
9
|
-
self.before_start_callbacks = []
|
10
|
-
self.on_finish_callbacks = []
|
11
|
-
self.on_start_callback = []
|
12
|
-
end
|
13
|
-
|
14
|
-
module ClassMethods
|
15
|
-
def before_start(*methods)
|
16
|
-
self.before_start_callbacks += methods
|
17
|
-
end
|
18
|
-
|
19
|
-
def on_finish(*methods)
|
20
|
-
self.on_finish_callbacks += methods
|
21
|
-
end
|
22
|
-
|
23
|
-
def on_start(*methods)
|
24
|
-
self.on_start_callback += methods
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def before_start(n = 0)
|
29
|
-
if callback = self.class.before_start_callbacks[n]
|
30
|
-
EM.next_tick { send(callback) { before_start(n+1) } }
|
31
|
-
else
|
32
|
-
continue
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def on_start
|
37
|
-
self.class.on_start_callback.each do |callback|
|
38
|
-
EM.next_tick { send(callback) }
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def on_finish
|
43
|
-
self.class.on_finish_callbacks.each do |callback|
|
44
|
-
EM.next_tick { send(callback) }
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module Cramp
|
2
|
-
module Controller
|
3
|
-
module KeepConnectionAlive
|
4
|
-
|
5
|
-
extend ActiveSupport::Concern
|
6
|
-
include PeriodicTimer
|
7
|
-
|
8
|
-
module ClassMethods
|
9
|
-
def keep_connection_alive(options = {})
|
10
|
-
options = { :every => 15 }.merge(options)
|
11
|
-
periodic_timer :keep_connection_alive, options
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def keep_connection_alive
|
16
|
-
render " "
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
module Cramp
|
2
|
-
module Controller
|
3
|
-
module PeriodicTimer
|
4
|
-
|
5
|
-
extend ActiveSupport::Concern
|
6
|
-
|
7
|
-
included do
|
8
|
-
class_inheritable_accessor :periodic_timers, :instance_reader => false
|
9
|
-
self.periodic_timers ||= []
|
10
|
-
end
|
11
|
-
|
12
|
-
module ClassMethods
|
13
|
-
def periodic_timer(method, options = {})
|
14
|
-
self.periodic_timers << [method, options]
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def initialize(*)
|
19
|
-
super
|
20
|
-
@timers = []
|
21
|
-
end
|
22
|
-
|
23
|
-
def continue
|
24
|
-
super
|
25
|
-
EM.next_tick { start_periodic_timers }
|
26
|
-
end
|
27
|
-
|
28
|
-
def init_async_body
|
29
|
-
super
|
30
|
-
|
31
|
-
if self.class.periodic_timers.any?
|
32
|
-
@body.callback { stop_periodic_timers }
|
33
|
-
@body.errback { stop_periodic_timers }
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
def start_periodic_timers
|
40
|
-
self.class.periodic_timers.each do |method, options|
|
41
|
-
@timers << EventMachine::PeriodicTimer.new(options[:every] || 1) { send(method) }
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def stop_periodic_timers
|
46
|
-
@timers.each {|t| t.cancel }
|
47
|
-
end
|
48
|
-
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|