plezi 0.9.2 → 0.10.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +30 -0
  3. data/README.md +44 -31
  4. data/bin/plezi +3 -3
  5. data/lib/plezi.rb +21 -43
  6. data/lib/plezi/common/defer.rb +21 -0
  7. data/lib/plezi/common/dsl.rb +115 -91
  8. data/lib/plezi/common/redis.rb +44 -0
  9. data/lib/plezi/common/settings.rb +58 -0
  10. data/lib/plezi/handlers/controller_core.rb +132 -0
  11. data/lib/plezi/handlers/controller_magic.rb +85 -259
  12. data/lib/plezi/handlers/http_router.rb +139 -60
  13. data/lib/plezi/handlers/route.rb +9 -178
  14. data/lib/plezi/handlers/stubs.rb +2 -2
  15. data/lib/plezi/helpers/http_sender.rb +72 -0
  16. data/lib/plezi/helpers/magic_helpers.rb +12 -0
  17. data/lib/plezi/{server → helpers}/mime_types.rb +0 -0
  18. data/lib/plezi/version.rb +1 -1
  19. data/plezi.gemspec +3 -11
  20. data/resources/Gemfile +20 -21
  21. data/resources/controller.rb +2 -2
  22. data/resources/oauth_config.rb +1 -1
  23. data/resources/redis_config.rb +2 -0
  24. data/test/plezi_tests.rb +39 -46
  25. metadata +24 -33
  26. data/lib/plezi/common/logging.rb +0 -60
  27. data/lib/plezi/eventmachine/connection.rb +0 -190
  28. data/lib/plezi/eventmachine/em.rb +0 -98
  29. data/lib/plezi/eventmachine/io.rb +0 -272
  30. data/lib/plezi/eventmachine/protocol.rb +0 -54
  31. data/lib/plezi/eventmachine/queue.rb +0 -51
  32. data/lib/plezi/eventmachine/ssl_connection.rb +0 -144
  33. data/lib/plezi/eventmachine/timers.rb +0 -117
  34. data/lib/plezi/eventmachine/workers.rb +0 -33
  35. data/lib/plezi/handlers/http_echo.rb +0 -27
  36. data/lib/plezi/handlers/http_host.rb +0 -214
  37. data/lib/plezi/handlers/magic_helpers.rb +0 -32
  38. data/lib/plezi/server/http.rb +0 -129
  39. data/lib/plezi/server/http_protocol.rb +0 -319
  40. data/lib/plezi/server/http_request.rb +0 -146
  41. data/lib/plezi/server/http_response.rb +0 -319
  42. data/lib/plezi/server/websocket.rb +0 -251
  43. data/lib/plezi/server/websocket_client.rb +0 -178
  44. data/lib/plezi/server/ws_response.rb +0 -161
@@ -94,7 +94,7 @@ module Plezi
94
94
  end
95
95
 
96
96
  # called immediately after a WebSocket connection has been established.
97
- def on_connect
97
+ def on_open
98
98
  true
99
99
  end
100
100
 
@@ -108,7 +108,7 @@ module Plezi
108
108
 
109
109
  # called when a disconnect packet has been recieved or the connection has been cut
110
110
  # (ISN'T called after a disconnect message has been sent).
111
- def on_disconnect
111
+ def on_close
112
112
  end
113
113
 
114
114
  # a demo event method that recieves a broadcast from instance siblings.
@@ -0,0 +1,72 @@
1
+ module Plezi
2
+ module Base
3
+
4
+ # Sends common basic HTTP responses.
5
+ module HTTPSender
6
+ module_function
7
+
8
+ ######
9
+ ## basic responses
10
+ ## (error codes and static files)
11
+
12
+ # sends a response for an error code, rendering the relevent file (if exists).
13
+ def send_by_code request, response, code, headers = {}
14
+ begin
15
+ base_code_path = request.io[:params][:templates] || File.expand_path('.')
16
+ if defined?(::Slim) && Plezi.file_exists?(fn = File.join(base_code_path, "#{code}.html.slim"))
17
+ Plezi.cache_data fn, Slim::Template.new( fn ) unless Plezi.cached? fn
18
+ return send_raw_data request, response, Plezi.get_cached( fn ).render( self, request: request ), 'text/html', code, headers
19
+ elsif defined?(::Haml) && Plezi.file_exists?(fn = File.join(base_code_path, "#{code}.html.haml"))
20
+ Plezi.cache_data fn, Haml::Engine.new( IO.read( fn ) ) unless Plezi.cached? fn
21
+ return send_raw_data request, response, Plezi.get_cached( File.join(base_code_path, "#{code}.html.haml") ).render( self ), 'text/html', code, headers
22
+ elsif defined?(::ERB) && Plezi.file_exists?(fn = File.join(base_code_path, "#{code}.html.erb"))
23
+ return send_raw_data request, response, ERB.new( Plezi.load_file( fn ) ).result(binding), 'text/html', code, headers
24
+ elsif Plezi.file_exists?(fn = File.join(base_code_path, "#{code}.html"))
25
+ return send_file(request, response, fn, code, headers)
26
+ end
27
+ return true if send_raw_data(request, response, GRHttp::HTTPResponse::STATUS_CODES[code], 'text/plain', code, headers)
28
+ rescue Exception => e
29
+ Plezi.error e
30
+ end
31
+ false
32
+ end
33
+
34
+ # attempts to send a static file by the request path (using `send_file` and `send_raw_data`).
35
+ #
36
+ # returns true if data was sent.
37
+ def send_static_file request, response
38
+ root = request.io[:params][:root]
39
+ return false unless root
40
+ file_requested = request[:path].to_s.split('/')
41
+ unless file_requested.include? '..'
42
+ file_requested.shift
43
+ file_requested = File.join(root, *file_requested)
44
+ return true if send_file request, response, file_requested
45
+ return send_file request, response, File.join(file_requested, request.io[:params][:index_file])
46
+ end
47
+ false
48
+ end
49
+
50
+ # sends a file/cacheed data if it exists. otherwise returns false.
51
+ def send_file request, response, filename, status_code = 200, headers = {}
52
+ if Plezi.file_exists?(filename) && !::File.directory?(filename)
53
+ return send_raw_data request, response, Plezi.load_file(filename), MimeTypeHelper::MIME_DICTIONARY[::File.extname(filename)], status_code, headers
54
+ end
55
+ return false
56
+ end
57
+ # sends raw data through the connection. always returns true (data send).
58
+ def send_raw_data request, response, data, mime, status_code = 200, headers = {}
59
+ headers.each {|k, v| response[k] = v}
60
+ response.status = status_code
61
+ response['content-type'] = mime
62
+ response['cache-control'] ||= 'public, max-age=86400'
63
+ response << data
64
+ response['content-length'] = data.bytesize
65
+ true
66
+ end##########
67
+
68
+
69
+ end
70
+
71
+ end
72
+ end
@@ -0,0 +1,12 @@
1
+ module Plezi
2
+
3
+ module Base
4
+ module Helpers
5
+ # a proc that allows Hashes to search for key-value pairs while also converting keys from objects to symbols and from symbols to strings.
6
+ #
7
+ # (key type agnostic search Hash proc)
8
+ HASH_SYM_PROC = Proc.new {|h,k| k = (Symbol === k ? k.to_s : k.to_s.to_sym); h[k] if h.has_key?(k) }
9
+ end
10
+ end
11
+
12
+ end
@@ -1,3 +1,3 @@
1
1
  module Plezi
2
- VERSION = "0.9.2"
2
+ VERSION = "0.10.1"
3
3
  end
@@ -18,19 +18,11 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.add_dependency "grhttp", "~> 0.0.6"
21
22
  spec.add_development_dependency "bundler", "~> 1.7"
22
23
  spec.add_development_dependency "rake", "~> 10.0"
23
24
 
24
- # spec.post_install_message = "Thank you for installing Plezi, the native Ruby Framework for real time web-apps."
25
- spec.post_install_message = "** Deprecation Warning:\n
26
- V.0.10.0 will be a major revision. It will also change the Websocket API so that it conforms to the Javascript API, making it clearer.
27
-
28
- Also, V. 0.10.0 will utilize the GReactor IO reactor and the GRHttp HTTP and Websocket server gems. Both are native Ruby, so no C or Java extentions should be introduced.
29
-
30
- This means that asynchronous tasking will now be handled by GReactor's API.
31
-
32
- Make sure to test your app before upgrading to the 0.10.0 version.
33
-
34
- Thank you for installing Plezi, the native Ruby Framework for real time web-apps."
25
+ spec.post_install_message = "Thank you for installing Plezi, the native Ruby Framework for real time web-apps."
26
+ # spec.post_install_message = "** Deprecation Warning:\n\nThank you for installing Plezi, the native Ruby Framework for real time web-apps."
35
27
 
36
28
  end
@@ -8,15 +8,6 @@
8
8
  ## use rake tasks with bundle exec?
9
9
  # gem 'rake'
10
10
 
11
- ## active support can run without rails and extends the Ruby language.
12
- ## it might be heavy, be warned.
13
- ## see: http://guides.rubyonrails.org/active_support_core_extensions.html
14
- #
15
- # gem 'activesupport', :require => ['active_support', 'active_support/core_ext']
16
- ## or:
17
- # gem 'activesupport', :require => ['active_support', 'active_support/all']
18
-
19
-
20
11
  ####################
21
12
  # gems for easy markup
22
13
 
@@ -26,29 +17,22 @@
26
17
  ## Sass makes CSS easy
27
18
  # gem "sass"
28
19
 
29
- ## erb for HTML fanatics:
30
- # gem 'erb'
31
-
32
20
  ## we love Haml, even though it can be slow:
33
21
  # gem 'haml'
34
22
 
35
- ## and maybe coffee script? (although, we just use javascript, really)
23
+ ## Coffee Script makes Javascript more fun to code.
36
24
  # gem "coffee-script"
37
25
 
38
26
  ####################
39
27
  # Internationalization
40
28
 
41
- ## I18n is the only one I know of.
42
29
  # gem 'i18n'
43
30
 
44
31
  ####################
45
32
  # WebSocket Scaling
46
33
 
47
- ## redis servers are used to allow websocket scaling.
48
- ## the Controller#collect method will work only for the current process.
49
- ## the Controller#broadcast can be configured to automatically use Redis, but some inter-process limitation apply.
50
- ## using Redis, we can publish messages and subscribe to 'chunnels' across processes
51
- ## (limited support for :broadcast and NO support for :collect while Redis is running).
34
+ ## Redis servers are used to allow websocket scaling.
35
+ ## Plezi can be configured to automatically use Redis for easy scaling.
52
36
 
53
37
  # gem 'redis'
54
38
 
@@ -62,21 +46,36 @@
62
46
 
63
47
  ## MongoDB is a very well known NoSQL DB
64
48
  ## https://github.com/mongodb/mongo-ruby-driver
49
+ #
65
50
  # gem 'mongo'
51
+ #
66
52
  ## for a performance boost, the C extentions can be used (NOT JRuby - bson_ext isn't used with JRuby).
53
+ #
67
54
  # gem 'bson_ext'
55
+ #
68
56
  ## you can also have a look at the Mongo Mapper ORM
69
57
  ## http://mongomapper.com
58
+ #
70
59
  # gem 'mongo_mapper'
71
60
 
72
- ## someone told me good things about sequel:
61
+ ## Sequel:
73
62
  ## http://sequel.jeremyevans.net/rdoc/files/README_rdoc.html
74
63
  ## http://sequel.jeremyevans.net/rdoc/files/doc/cheat_sheet_rdoc.html
75
64
  ## this seems greate, but we left out any auto-config for this one... seems to work out of the box.
65
+ #
76
66
  # gem 'sequel'
77
67
 
78
68
  ## if you want to use ActiveRecord, uncomment the following line(s)...
79
69
  ## but first, please remember that AcriveRecord needs extra attention when multi-threading
80
70
  # gem 'activerecord', :require => 'active_record'
81
71
  # gem 'bcrypt', '~> 3.1.7'
82
- # gem 'standalone_migrations' # will provide better rake tasks support for ActiveRecord
72
+ # gem 'standalone_migrations' # will more rake tasks support for ActiveRecord
73
+
74
+ ## active support can run without rails and extends the Ruby language.
75
+ ## it could be heavy, be warned.
76
+ ## see: http://guides.rubyonrails.org/active_support_core_extensions.html
77
+ #
78
+ # gem 'activesupport', :require => ['active_support', 'active_support/core_ext']
79
+ ## or:
80
+ # gem 'activesupport', :require => ['active_support', 'active_support/all']
81
+
@@ -107,7 +107,7 @@ class SampleController
107
107
  end
108
108
 
109
109
  # called immediately after a WebSocket connection has been established.
110
- def on_connect
110
+ def on_open
111
111
  # response.close
112
112
  # false
113
113
  end
@@ -125,7 +125,7 @@ class SampleController
125
125
 
126
126
  # called when a disconnect packet has been recieved or the connection has been cut
127
127
  # (ISN'T called after a disconnect message has been sent).
128
- def on_disconnect
128
+ def on_close
129
129
  end
130
130
 
131
131
  # a demo event method that recieves a broadcast from instance siblings.
@@ -20,5 +20,5 @@
20
20
  # create_auth_shared_route do |service_name, auth_token, remote_user_id, remote_user_email, remote_response|
21
21
  # # ...callback for authentication.
22
22
  # # This callback should return the app user object or false
23
- # # This callback hass access to the magic controller methods (request, cookies, etc')
23
+ # # This callback has access to the magic controller methods (request, cookies, etc')
24
24
  # end
@@ -2,6 +2,8 @@
2
2
 
3
3
  if defined? Redis
4
4
 
5
+ Plezi::Settings.redis_channel_name = 'appsecret'
6
+
5
7
  # ## Plezi Redis Automation
6
8
  # ## ====
7
9
  # ##
@@ -81,8 +81,7 @@ class TestCtrl
81
81
  end
82
82
  # path to test for chuncked encoding and response streaming.
83
83
  def streamer
84
- response.start_http_streaming
85
- PL.callback(self, :_stream_out) { PL.callback(response, :finish) }
84
+ response.stream_async &method(:_stream_out)
86
85
  true
87
86
  end
88
87
  def _stream_out
@@ -102,7 +101,7 @@ class TestCtrl
102
101
  ## WebSockets
103
102
 
104
103
  # called once the websocket was connected
105
- def on_connect
104
+ def on_open
106
105
  response << "connected"
107
106
  end
108
107
 
@@ -126,7 +125,7 @@ class TestCtrl
126
125
 
127
126
  # called when a disconnect packet has been recieved or the connection has been cut
128
127
  # (ISN'T called after a disconnect message has been sent).
129
- def on_disconnect
128
+ def on_close
130
129
  end
131
130
 
132
131
  # a demo event method that recieves a broadcast from instance siblings.
@@ -243,54 +242,54 @@ module PleziTestTasks
243
242
  def test_websocket
244
243
  connection_test = broadcast_test = echo_test = unicast_test = false
245
244
  begin
246
- ws4 = Plezi::WebsocketClient.connect_to("wss://localhost:3030") do |msg|
247
- if msg == "unicast"
245
+ ws4 = GRHttp::WSClient.connect_to("wss://localhost:3030") do |ws|
246
+ if ws.data == "unicast"
248
247
  puts " * Websocket unicast testing: #{RESULTS[false]}"
249
248
  unicast_test = :failed
250
249
  end
251
250
  end
252
- ws2 = Plezi::WebsocketClient.connect_to("wss://localhost:3030") do |msg|
251
+ ws2 = GRHttp::WSClient.connect_to("wss://localhost:3030") do |ws|
253
252
  next unless @is_connected || !(@is_connected = true)
254
- if msg == "unicast"
253
+ if ws.data == "unicast"
255
254
  puts " * Websocket unicast message test: #{RESULTS[false]}"
256
255
  unicast_test = :failed
257
256
  next
258
257
  else
259
- puts " * Websocket broadcast message test: #{RESULTS[broadcast_test = (msg == 'echo test')]}"
258
+ puts " * Websocket broadcast message test: #{RESULTS[broadcast_test = (ws.data == 'echo test')]}"
260
259
  go_test = false
261
260
  end
262
261
  end
263
- ws3 = Plezi::WebsocketClient.connect_to("ws://localhost:3000") do |msg|
264
- if msg.match /uuid: ([^s]*)/
265
- ws2 << "to: #{msg.match(/^uuid: ([^s]*)/)[1]}"
266
- puts " * Websocket UUID for unicast testing: #{msg.match(/^uuid: ([^s]*)/)[1]}"
267
- elsif msg == "unicast"
262
+ ws3 = GRHttp::WSClient.connect_to("ws://localhost:3000") do |ws|
263
+ if ws.data.match /uuid: ([^s]*)/
264
+ ws2 << "to: #{ws.data.match(/^uuid: ([^s]*)/)[1]}"
265
+ puts " * Websocket UUID for unicast testing: #{ws.data.match(/^uuid: ([^s]*)/)[1]}"
266
+ elsif ws.data == "unicast"
268
267
  puts " * Websocket unicast testing: #{RESULTS[:waiting]}"
269
268
  unicast_test ||= true
270
269
  end
271
270
  end
272
271
  ws3 << 'get uuid'
273
272
  puts " * Websocket SSL client test: #{RESULTS[ws2 && true]}"
274
- ws1 = Plezi::WebsocketClient.connect_to("ws://localhost:3000") do |msg|
273
+ ws1 = GRHttp::WSClient.connect_to("ws://localhost:3000") do |ws|
275
274
  unless @connected
276
- puts " * Websocket connection message test: #{RESULTS[connection_test = (msg == 'connected')]}"
275
+ puts " * Websocket connection message test: #{RESULTS[connection_test = (ws.data == 'connected')]}"
277
276
  @connected = true
278
277
  response << "echo test"
279
278
  next
280
279
  end
281
- if msg == "unicast"
280
+ if ws.data == "unicast"
282
281
  puts " * Websocket unicast testing: #{RESULTS[false]}"
283
282
  unicast_test = :failed
284
283
  next
285
284
  end
286
- puts " * Websocket echo message test: #{RESULTS[echo_test = (msg == 'echo test')]}"
285
+ puts " * Websocket echo message test: #{RESULTS[echo_test = (ws.data == 'echo test')]}"
287
286
  end
288
287
 
289
288
  rescue => e
290
289
  puts " **** Websocket tests FAILED TO RUN!!!"
291
290
  puts e.message
292
291
  end
293
- remote = Plezi::WebsocketClient.connect_to("wss://echo.websocket.org/") {|msg| puts " * Extra Websocket Remote test (SSL: echo.websocket.org): #{RESULTS[msg == 'Hello websockets!']}"; response.close}
292
+ remote = GRHttp::WSClient.connect_to("wss://echo.websocket.org/") {|ws| puts " * Extra Websocket Remote test (SSL: echo.websocket.org): #{RESULTS[ws.data == 'Hello websockets!']}"; response.close}
294
293
  remote << "Hello websockets!"
295
294
  sleep 0.5
296
295
  [ws1, ws2, ws3, ws4, remote].each {|ws| ws.close}
@@ -301,23 +300,23 @@ module PleziTestTasks
301
300
  end
302
301
  def test_websocket_sizes
303
302
  should_disconnect = false
304
- ws = Plezi::WebsocketClient.connect_to("ws://localhost:3000/ws/size") do |msg|
303
+ ws = GRHttp::WSClient.connect_to("ws://localhost:3000/ws/size") do |ws|
305
304
  if should_disconnect
306
305
  puts " * Websocket size disconnection test: #{RESULTS[false]}"
307
306
  else
308
- puts " * Websocket message size test: got #{msg.bytesize} bytes"
307
+ puts " * Websocket message size test: got #{ws.data.bytesize} bytes"
309
308
  end
310
309
 
311
310
  end
312
- ws.on_disconnect do
311
+ ws.on_close do
313
312
  puts " * Websocket size disconnection test: #{RESULTS[should_disconnect]}"
314
313
  end
315
314
  str = 'a'
316
315
  time_now = Time.now
317
- 6.times {|i| str = str * 2**i;puts " * Websocket message size test: sending #{str.bytesize} bytes"; ws.send str; sleep 0.2 }
316
+ 6.times {|i| str = str * 2**i;puts " * Websocket message size test: sending #{str.bytesize} bytes"; ws << str; sleep 0.2 }
318
317
  sleep (Time.now - time_now + 1)
319
318
  should_disconnect = true
320
- Plezi.ws_message_size_limit = 1024
319
+ Plezi::Settings.ws_message_size_limit = 1024
321
320
  ws << str
322
321
  end
323
322
  def test_404
@@ -328,24 +327,24 @@ module PleziTestTasks
328
327
  puts e
329
328
  end
330
329
  def test_500
331
- workers = Plezi::EventMachine.count_living_workers
332
- print " * 500 internal error test: #{RESULTS[ Net::HTTP.get_response(URI.parse "http://localhost:3000/fail" ).code == '500' ]}"
333
- # cause 10 more exceptions to be raised... testing thread survival.
334
- 10.times { putc "."; Net::HTTP.get_response(URI.parse "http://localhost:3000/fail" ).code }
335
- putc "\n"
336
- workers_after_test = Plezi::EventMachine.count_living_workers
337
- puts " * Worker survival test: #{RESULTS[workers_after_test == workers]} (#{workers_after_test} out of #{workers})"
338
-
339
- rescue => e
340
- puts " **** 500 internal error test FAILED TO RUN!!!"
341
- puts e
330
+ # workers = GReactor.instance_exec {@threads.select {|t| t.alive?} .count}
331
+ # print " * 500 internal error test: #{RESULTS[ Net::HTTP.get_response(URI.parse "http://localhost:3000/fail" ).code == '500' ]}"
332
+ # # cause 10 more exceptions to be raised... testing thread survival.
333
+ # 10.times { putc "."; Net::HTTP.get_response(URI.parse "http://localhost:3000/fail" ).code }
334
+ # putc "\n"
335
+ # workers_after_test = GReactor.instance_exec {@threads.select {|t| t.alive?} .count}
336
+ # puts " * Worker survival test: #{RESULTS[workers_after_test == workers]} (#{workers_after_test} out of #{workers})"
337
+
338
+ # rescue => e
339
+ # puts " **** 500 internal error test FAILED TO RUN!!!"
340
+ # puts e
342
341
  end
343
342
  end
344
343
 
345
344
  NO_PLEZI_AUTO_START = true
346
345
 
347
346
  PL.create_logger '/dev/null'
348
- # PL.max_threads = 4
347
+ # PL::Settings.max_threads = 4
349
348
 
350
349
  listen port: 3000
351
350
 
@@ -359,7 +358,9 @@ shared_route '/some/:multi{path|another_path}/(:option){route|test}/(:id)/(:opti
359
358
  shared_route '/', TestCtrl
360
359
 
361
360
 
362
- Plezi::EventMachine.start Plezi.max_threads
361
+ GRHttp.start Plezi::Settings.max_threads
362
+
363
+ # start_services
363
364
 
364
365
  shoutdown_test = false
365
366
  Plezi.on_shutdown { shoutdown_test = true }
@@ -373,15 +374,7 @@ PleziTestTasks.run_tests
373
374
 
374
375
  sleep PLEZI_TEST_TIME if defined? PLEZI_TEST_TIME
375
376
 
376
- Plezi::DSL.stop_services
377
- puts "#{Plezi::EventMachine::EM_IO.count} connections awaiting shutdown."
378
- Plezi::EventMachine.stop_connections
379
- puts "#{Plezi::EventMachine::EM_IO.count} connections awaiting shutdown after connection close attempt."
380
- if Plezi::EventMachine::EM_IO.count > 0
381
- Plezi::EventMachine.forget_connections
382
- puts "#{Plezi::EventMachine::EM_IO.count} connections awaiting shutdown after connections were forgotten."
383
- end
384
- Plezi::EventMachine.shutdown
377
+ Plezi.stop
385
378
 
386
379
 
387
380
  puts " * Shutdown test: #{ PleziTestTasks::RESULTS[shoutdown_test] }"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: plezi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Boaz Segev
@@ -10,6 +10,20 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2015-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: grhttp
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.6
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.6
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -56,33 +70,20 @@ files:
56
70
  - bin/plezi
57
71
  - lib/plezi.rb
58
72
  - lib/plezi/common/cache.rb
73
+ - lib/plezi/common/defer.rb
59
74
  - lib/plezi/common/dsl.rb
60
- - lib/plezi/common/logging.rb
61
- - lib/plezi/eventmachine/connection.rb
62
- - lib/plezi/eventmachine/em.rb
63
- - lib/plezi/eventmachine/io.rb
64
- - lib/plezi/eventmachine/protocol.rb
65
- - lib/plezi/eventmachine/queue.rb
66
- - lib/plezi/eventmachine/ssl_connection.rb
67
- - lib/plezi/eventmachine/timers.rb
68
- - lib/plezi/eventmachine/workers.rb
75
+ - lib/plezi/common/redis.rb
76
+ - lib/plezi/common/settings.rb
77
+ - lib/plezi/handlers/controller_core.rb
69
78
  - lib/plezi/handlers/controller_magic.rb
70
- - lib/plezi/handlers/http_echo.rb
71
- - lib/plezi/handlers/http_host.rb
72
79
  - lib/plezi/handlers/http_router.rb
73
- - lib/plezi/handlers/magic_helpers.rb
74
80
  - lib/plezi/handlers/route.rb
75
81
  - lib/plezi/handlers/stubs.rb
82
+ - lib/plezi/helpers/http_sender.rb
83
+ - lib/plezi/helpers/magic_helpers.rb
84
+ - lib/plezi/helpers/mime_types.rb
76
85
  - lib/plezi/oauth.rb
77
86
  - lib/plezi/oauth/auth_controller.rb
78
- - lib/plezi/server/http.rb
79
- - lib/plezi/server/http_protocol.rb
80
- - lib/plezi/server/http_request.rb
81
- - lib/plezi/server/http_response.rb
82
- - lib/plezi/server/mime_types.rb
83
- - lib/plezi/server/websocket.rb
84
- - lib/plezi/server/websocket_client.rb
85
- - lib/plezi/server/ws_response.rb
86
87
  - lib/plezi/version.rb
87
88
  - plezi.gemspec
88
89
  - resources/404.erb
@@ -118,18 +119,8 @@ homepage: http://boazsegev.github.io/plezi/
118
119
  licenses:
119
120
  - MIT
120
121
  metadata: {}
121
- post_install_message: |-
122
- ** Deprecation Warning:
123
-
124
- V.0.10.0 will be a major revision. It will also change the Websocket API so that it conforms to the Javascript API, making it clearer.
125
-
126
- Also, V. 0.10.0 will utilize the GReactor IO reactor and the GRHttp HTTP and Websocket server gems. Both are native Ruby, so no C or Java extentions should be introduced.
127
-
128
- This means that asynchronous tasking will now be handled by GReactor's API.
129
-
130
- Make sure to test your app before upgrading to the 0.10.0 version.
131
-
132
- Thank you for installing Plezi, the native Ruby Framework for real time web-apps.
122
+ post_install_message: Thank you for installing Plezi, the native Ruby Framework for
123
+ real time web-apps.
133
124
  rdoc_options: []
134
125
  require_paths:
135
126
  - lib