cramp 0.11 → 0.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. data/lib/cramp.rb +12 -1
  2. data/lib/cramp/abstract.rb +72 -0
  3. data/lib/cramp/action.rb +12 -0
  4. data/lib/cramp/body.rb +48 -0
  5. data/lib/cramp/callbacks.rb +48 -0
  6. data/lib/cramp/keep_connection_alive.rb +19 -0
  7. data/lib/cramp/periodic_timer.rb +49 -0
  8. data/lib/cramp/rendering.rb +11 -0
  9. data/lib/cramp/test_case.rb +54 -0
  10. data/lib/cramp/websocket.rb +84 -0
  11. data/lib/cramp/{controller/websocket → websocket}/rainbows_backend.rb +1 -1
  12. data/lib/cramp/{controller/websocket → websocket}/thin_backend.rb +1 -1
  13. metadata +37 -86
  14. data/lib/cramp/controller.rb +0 -15
  15. data/lib/cramp/controller/abstract.rb +0 -71
  16. data/lib/cramp/controller/action.rb +0 -14
  17. data/lib/cramp/controller/body.rb +0 -50
  18. data/lib/cramp/controller/callbacks.rb +0 -50
  19. data/lib/cramp/controller/keep_connection_alive.rb +0 -21
  20. data/lib/cramp/controller/periodic_timer.rb +0 -51
  21. data/lib/cramp/controller/rendering.rb +0 -13
  22. data/lib/cramp/controller/test_case.rb +0 -57
  23. data/lib/cramp/controller/websocket.rb +0 -63
  24. data/lib/cramp/model.rb +0 -40
  25. data/lib/cramp/model/arel_monkey_patches.rb +0 -66
  26. data/lib/cramp/model/attribute.rb +0 -104
  27. data/lib/cramp/model/attribute_methods.rb +0 -83
  28. data/lib/cramp/model/base.rb +0 -119
  29. data/lib/cramp/model/callbacks.rb +0 -41
  30. data/lib/cramp/model/column.rb +0 -72
  31. data/lib/cramp/model/emysql_ext.rb +0 -21
  32. data/lib/cramp/model/engine.rb +0 -75
  33. data/lib/cramp/model/engine/connection.rb +0 -32
  34. data/lib/cramp/model/evented_mysql.rb +0 -298
  35. data/lib/cramp/model/finders.rb +0 -27
  36. data/lib/cramp/model/quoting.rb +0 -104
  37. data/lib/cramp/model/relation.rb +0 -62
  38. 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
- prerelease: false
4
+ hash: 19
5
+ prerelease:
5
6
  segments:
6
7
  - 0
7
- - 11
8
- version: "0.11"
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: 2010-05-11 00:00:00 +01:00
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
- - 0
30
- - beta3
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: &id004 !ruby/object:Gem::Requirement
67
- requirements:
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: 0.1.1
49
+ version: 1.2.1
89
50
  type: :runtime
90
- version_requirements: *id005
51
+ version_requirements: *id002
91
52
  - !ruby/object:Gem::Dependency
92
53
  name: eventmachine
93
54
  prerelease: false
94
- requirement: &id006 !ruby/object:Gem::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: *id006
105
- description: " Cramp provides ORM and controller layers for developing asynchronous web applications.\n"
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/controller/abstract.rb
116
- - lib/cramp/controller/action.rb
117
- - lib/cramp/controller/body.rb
118
- - lib/cramp/controller/callbacks.rb
119
- - lib/cramp/controller/keep_connection_alive.rb
120
- - lib/cramp/controller/periodic_timer.rb
121
- - lib/cramp/controller/rendering.rb
122
- - lib/cramp/controller/test_case.rb
123
- - lib/cramp/controller/websocket/rainbows_backend.rb
124
- - lib/cramp/controller/websocket/thin_backend.rb
125
- - lib/cramp/controller/websocket.rb
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.3.6
120
+ rubygems_version: 1.5.2
170
121
  signing_key:
171
122
  specification_version: 3
172
- summary: Async ORM and controller layer.
123
+ summary: Asynchronous web framework.
173
124
  test_files: []
174
125
 
@@ -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,14 +0,0 @@
1
- module Cramp
2
- module Controller
3
- class Action < Abstract
4
-
5
- include PeriodicTimer
6
- include KeepConnectionAlive
7
-
8
- def render(body)
9
- @body.call(body)
10
- end
11
-
12
- end
13
- end
14
- 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