plezi 0.7.0
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 +7 -0
 - data/.gitignore +22 -0
 - data/CHANGELOG.md +450 -0
 - data/Gemfile +4 -0
 - data/KNOWN_ISSUES.md +13 -0
 - data/LICENSE.txt +22 -0
 - data/README.md +341 -0
 - data/Rakefile +2 -0
 - data/TODO.md +19 -0
 - data/bin/plezi +301 -0
 - data/lib/plezi.rb +125 -0
 - data/lib/plezi/base/cache.rb +77 -0
 - data/lib/plezi/base/connections.rb +33 -0
 - data/lib/plezi/base/dsl.rb +177 -0
 - data/lib/plezi/base/engine.rb +85 -0
 - data/lib/plezi/base/events.rb +84 -0
 - data/lib/plezi/base/io_reactor.rb +41 -0
 - data/lib/plezi/base/logging.rb +62 -0
 - data/lib/plezi/base/rack_app.rb +89 -0
 - data/lib/plezi/base/services.rb +57 -0
 - data/lib/plezi/base/timers.rb +71 -0
 - data/lib/plezi/handlers/controller_magic.rb +383 -0
 - data/lib/plezi/handlers/http_echo.rb +27 -0
 - data/lib/plezi/handlers/http_host.rb +215 -0
 - data/lib/plezi/handlers/http_router.rb +69 -0
 - data/lib/plezi/handlers/magic_helpers.rb +43 -0
 - data/lib/plezi/handlers/route.rb +272 -0
 - data/lib/plezi/handlers/stubs.rb +143 -0
 - data/lib/plezi/server/README.md +33 -0
 - data/lib/plezi/server/helpers/http.rb +169 -0
 - data/lib/plezi/server/helpers/mime_types.rb +999 -0
 - data/lib/plezi/server/protocols/http_protocol.rb +318 -0
 - data/lib/plezi/server/protocols/http_request.rb +133 -0
 - data/lib/plezi/server/protocols/http_response.rb +294 -0
 - data/lib/plezi/server/protocols/websocket.rb +208 -0
 - data/lib/plezi/server/protocols/ws_response.rb +92 -0
 - data/lib/plezi/server/services/basic_service.rb +224 -0
 - data/lib/plezi/server/services/no_service.rb +196 -0
 - data/lib/plezi/server/services/ssl_service.rb +193 -0
 - data/lib/plezi/version.rb +3 -0
 - data/plezi.gemspec +26 -0
 - data/resources/404.erb +68 -0
 - data/resources/404.haml +64 -0
 - data/resources/404.html +67 -0
 - data/resources/404.slim +63 -0
 - data/resources/500.erb +68 -0
 - data/resources/500.haml +63 -0
 - data/resources/500.html +67 -0
 - data/resources/500.slim +63 -0
 - data/resources/Gemfile +85 -0
 - data/resources/anorexic_gray.png +0 -0
 - data/resources/anorexic_websockets.html +47 -0
 - data/resources/code.rb +8 -0
 - data/resources/config.ru +39 -0
 - data/resources/controller.rb +139 -0
 - data/resources/db_ac_config.rb +58 -0
 - data/resources/db_dm_config.rb +51 -0
 - data/resources/db_sequel_config.rb +42 -0
 - data/resources/en.yml +204 -0
 - data/resources/environment.rb +41 -0
 - data/resources/haml_config.rb +6 -0
 - data/resources/i18n_config.rb +14 -0
 - data/resources/rakefile.rb +22 -0
 - data/resources/redis_config.rb +35 -0
 - data/resources/routes.rb +26 -0
 - data/resources/welcome_page.html +72 -0
 - data/websocket chatroom.md +639 -0
 - metadata +141 -0
 
    
        data/resources/500.erb
    ADDED
    
    | 
         @@ -0,0 +1,68 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <!DOCTYPE html>
         
     | 
| 
      
 2 
     | 
    
         
            +
            <head>
         
     | 
| 
      
 3 
     | 
    
         
            +
              <style>
         
     | 
| 
      
 4 
     | 
    
         
            +
                body, html
         
     | 
| 
      
 5 
     | 
    
         
            +
                {
         
     | 
| 
      
 6 
     | 
    
         
            +
                	background-color: #eee;
         
     | 
| 
      
 7 
     | 
    
         
            +
                	padding: 0; margin: 0;
         
     | 
| 
      
 8 
     | 
    
         
            +
                	width: 100%;
         
     | 
| 
      
 9 
     | 
    
         
            +
                }
         
     | 
| 
      
 10 
     | 
    
         
            +
                h1
         
     | 
| 
      
 11 
     | 
    
         
            +
                {
         
     | 
| 
      
 12 
     | 
    
         
            +
                	background-color: #ddd;
         
     | 
| 
      
 13 
     | 
    
         
            +
                	color: #008;
         
     | 
| 
      
 14 
     | 
    
         
            +
                	text-align: center;
         
     | 
| 
      
 15 
     | 
    
         
            +
                	border-bottom: 1px solid #000;
         
     | 
| 
      
 16 
     | 
    
         
            +
                	margin: 0;
         
     | 
| 
      
 17 
     | 
    
         
            +
                	padding: 0.5em;
         
     | 
| 
      
 18 
     | 
    
         
            +
                	width: auto;
         
     | 
| 
      
 19 
     | 
    
         
            +
                }
         
     | 
| 
      
 20 
     | 
    
         
            +
                p
         
     | 
| 
      
 21 
     | 
    
         
            +
                {
         
     | 
| 
      
 22 
     | 
    
         
            +
                	color:#004;
         
     | 
| 
      
 23 
     | 
    
         
            +
                	font-size: 1.2em;
         
     | 
| 
      
 24 
     | 
    
         
            +
                	padding: 0 1em;			
         
     | 
| 
      
 25 
     | 
    
         
            +
                }
         
     | 
| 
      
 26 
     | 
    
         
            +
                #wrapper
         
     | 
| 
      
 27 
     | 
    
         
            +
                {
         
     | 
| 
      
 28 
     | 
    
         
            +
                	background-color: #fff;
         
     | 
| 
      
 29 
     | 
    
         
            +
                	margin: 1em 5%;
         
     | 
| 
      
 30 
     | 
    
         
            +
                	padding: 0 0 2% 0;
         
     | 
| 
      
 31 
     | 
    
         
            +
                	border-radius: 20px;
         
     | 
| 
      
 32 
     | 
    
         
            +
                	min-height: 50%;
         
     | 
| 
      
 33 
     | 
    
         
            +
                	color: #007;
         
     | 
| 
      
 34 
     | 
    
         
            +
                }
         
     | 
| 
      
 35 
     | 
    
         
            +
                #wrapper h2
         
     | 
| 
      
 36 
     | 
    
         
            +
                {
         
     | 
| 
      
 37 
     | 
    
         
            +
                	background-color: #ddd;
         
     | 
| 
      
 38 
     | 
    
         
            +
                	color: #008;
         
     | 
| 
      
 39 
     | 
    
         
            +
                	text-align: center;
         
     | 
| 
      
 40 
     | 
    
         
            +
                	margin: 0 0 1em 0;
         
     | 
| 
      
 41 
     | 
    
         
            +
                	padding: 0.5em 0;
         
     | 
| 
      
 42 
     | 
    
         
            +
                	width: 100%;
         
     | 
| 
      
 43 
     | 
    
         
            +
                	border-radius: 20px;
         
     | 
| 
      
 44 
     | 
    
         
            +
                }
         
     | 
| 
      
 45 
     | 
    
         
            +
                #wrapper p{ padding: 0 2%;}
         
     | 
| 
      
 46 
     | 
    
         
            +
                #wrapper #missing
         
     | 
| 
      
 47 
     | 
    
         
            +
                {
         
     | 
| 
      
 48 
     | 
    
         
            +
                	color:#904;
         
     | 
| 
      
 49 
     | 
    
         
            +
                	font-size: 1.4em;
         
     | 
| 
      
 50 
     | 
    
         
            +
                	padding: 0.5em 0;
         
     | 
| 
      
 51 
     | 
    
         
            +
                	text-align: center;         
         
     | 
| 
      
 52 
     | 
    
         
            +
                	background-color: #fee;
         
     | 
| 
      
 53 
     | 
    
         
            +
                	border-bottom: 1px solid #800;
         
     | 
| 
      
 54 
     | 
    
         
            +
                	margin: 0;
         
     | 
| 
      
 55 
     | 
    
         
            +
                }
         
     | 
| 
      
 56 
     | 
    
         
            +
              </style>
         
     | 
| 
      
 57 
     | 
    
         
            +
            </head>
         
     | 
| 
      
 58 
     | 
    
         
            +
            <body>
         
     | 
| 
      
 59 
     | 
    
         
            +
              <h1>Plezi 500 error code (broken?!)...</h1>
         
     | 
| 
      
 60 
     | 
    
         
            +
              <div id='wrapper'>
         
     | 
| 
      
 61 
     | 
    
         
            +
                <h2 id='missing'>
         
     | 
| 
      
 62 
     | 
    
         
            +
                    something went wrong with:
         
     | 
| 
      
 63 
     | 
    
         
            +
                    <%= defined?(request) ? request.path : "what you're looking for..." %>
         
     | 
| 
      
 64 
     | 
    
         
            +
                </h2>
         
     | 
| 
      
 65 
     | 
    
         
            +
                  <p>Sorry, something went wrong trying to process your request...</p>
         
     | 
| 
      
 66 
     | 
    
         
            +
                  <p>.... Please try again soon and if this issue persists, please let us know.</p>
         
     | 
| 
      
 67 
     | 
    
         
            +
              </div>
         
     | 
| 
      
 68 
     | 
    
         
            +
            </body>
         
     | 
    
        data/resources/500.haml
    ADDED
    
    | 
         @@ -0,0 +1,63 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            !!!5
         
     | 
| 
      
 2 
     | 
    
         
            +
            %head
         
     | 
| 
      
 3 
     | 
    
         
            +
            	:css
         
     | 
| 
      
 4 
     | 
    
         
            +
            		body, html
         
     | 
| 
      
 5 
     | 
    
         
            +
            		{
         
     | 
| 
      
 6 
     | 
    
         
            +
            			background-color: #eee;
         
     | 
| 
      
 7 
     | 
    
         
            +
            			padding: 0; margin: 0;
         
     | 
| 
      
 8 
     | 
    
         
            +
            			width: 100%;
         
     | 
| 
      
 9 
     | 
    
         
            +
            		}
         
     | 
| 
      
 10 
     | 
    
         
            +
            		h1
         
     | 
| 
      
 11 
     | 
    
         
            +
            		{
         
     | 
| 
      
 12 
     | 
    
         
            +
            			background-color: #ddd;
         
     | 
| 
      
 13 
     | 
    
         
            +
            			color: #008;
         
     | 
| 
      
 14 
     | 
    
         
            +
            			text-align: center;
         
     | 
| 
      
 15 
     | 
    
         
            +
            			border-bottom: 1px solid #000;
         
     | 
| 
      
 16 
     | 
    
         
            +
            			margin: 0;
         
     | 
| 
      
 17 
     | 
    
         
            +
            			padding: 0.5em;
         
     | 
| 
      
 18 
     | 
    
         
            +
            			width: auto;
         
     | 
| 
      
 19 
     | 
    
         
            +
            		}
         
     | 
| 
      
 20 
     | 
    
         
            +
            		p
         
     | 
| 
      
 21 
     | 
    
         
            +
            		{
         
     | 
| 
      
 22 
     | 
    
         
            +
            			color:#004;
         
     | 
| 
      
 23 
     | 
    
         
            +
            			font-size: 1.2em;
         
     | 
| 
      
 24 
     | 
    
         
            +
            			padding: 0 1em;			
         
     | 
| 
      
 25 
     | 
    
         
            +
            		}
         
     | 
| 
      
 26 
     | 
    
         
            +
            		#wrapper
         
     | 
| 
      
 27 
     | 
    
         
            +
            		{
         
     | 
| 
      
 28 
     | 
    
         
            +
            			background-color: #fff;
         
     | 
| 
      
 29 
     | 
    
         
            +
            			margin: 1em 5%;
         
     | 
| 
      
 30 
     | 
    
         
            +
            			padding: 0 0 2% 0;
         
     | 
| 
      
 31 
     | 
    
         
            +
            			border-radius: 20px;
         
     | 
| 
      
 32 
     | 
    
         
            +
            			min-height: 50%;
         
     | 
| 
      
 33 
     | 
    
         
            +
            			color: #007;
         
     | 
| 
      
 34 
     | 
    
         
            +
            		}
         
     | 
| 
      
 35 
     | 
    
         
            +
            		#wrapper h2
         
     | 
| 
      
 36 
     | 
    
         
            +
            		{
         
     | 
| 
      
 37 
     | 
    
         
            +
            			background-color: #ddd;
         
     | 
| 
      
 38 
     | 
    
         
            +
            			color: #008;
         
     | 
| 
      
 39 
     | 
    
         
            +
            			text-align: center;
         
     | 
| 
      
 40 
     | 
    
         
            +
            			margin: 0 0 1em 0;
         
     | 
| 
      
 41 
     | 
    
         
            +
            			padding: 0.5em 0;
         
     | 
| 
      
 42 
     | 
    
         
            +
            			width: 100%;
         
     | 
| 
      
 43 
     | 
    
         
            +
            			border-radius: 20px;
         
     | 
| 
      
 44 
     | 
    
         
            +
            		}
         
     | 
| 
      
 45 
     | 
    
         
            +
            		#wrapper p{ padding: 0 2%;}
         
     | 
| 
      
 46 
     | 
    
         
            +
            		#wrapper #missing
         
     | 
| 
      
 47 
     | 
    
         
            +
            		{
         
     | 
| 
      
 48 
     | 
    
         
            +
            			color:#904;
         
     | 
| 
      
 49 
     | 
    
         
            +
            			font-size: 1.4em;
         
     | 
| 
      
 50 
     | 
    
         
            +
            			padding: 0.5em 0;
         
     | 
| 
      
 51 
     | 
    
         
            +
            			text-align: center;         
         
     | 
| 
      
 52 
     | 
    
         
            +
            			background-color: #fee;
         
     | 
| 
      
 53 
     | 
    
         
            +
            			border-bottom: 1px solid #800;
         
     | 
| 
      
 54 
     | 
    
         
            +
            			margin: 0;
         
     | 
| 
      
 55 
     | 
    
         
            +
            		}
         
     | 
| 
      
 56 
     | 
    
         
            +
            %body
         
     | 
| 
      
 57 
     | 
    
         
            +
            	%h1< Plezi 500 error code (broken?!)...
         
     | 
| 
      
 58 
     | 
    
         
            +
            	#wrapper
         
     | 
| 
      
 59 
     | 
    
         
            +
            		%h2#missing
         
     | 
| 
      
 60 
     | 
    
         
            +
            			something went wrong with:
         
     | 
| 
      
 61 
     | 
    
         
            +
            			= defined?(request) ? request.path : "what you're looking for..."
         
     | 
| 
      
 62 
     | 
    
         
            +
            		%p Sorry, something went wrong trying to process your request...
         
     | 
| 
      
 63 
     | 
    
         
            +
            		%p ... Please try again soon and if this issue persists, please let us know.
         
     | 
    
        data/resources/500.html
    ADDED
    
    | 
         @@ -0,0 +1,67 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <!DOCTYPE html>
         
     | 
| 
      
 2 
     | 
    
         
            +
            <head>
         
     | 
| 
      
 3 
     | 
    
         
            +
              <style>
         
     | 
| 
      
 4 
     | 
    
         
            +
                body, html
         
     | 
| 
      
 5 
     | 
    
         
            +
                {
         
     | 
| 
      
 6 
     | 
    
         
            +
                    background-color: #eee;
         
     | 
| 
      
 7 
     | 
    
         
            +
                    padding: 0; margin: 0;
         
     | 
| 
      
 8 
     | 
    
         
            +
                    width: 100%;
         
     | 
| 
      
 9 
     | 
    
         
            +
                }
         
     | 
| 
      
 10 
     | 
    
         
            +
                h1
         
     | 
| 
      
 11 
     | 
    
         
            +
                {
         
     | 
| 
      
 12 
     | 
    
         
            +
                    background-color: #ddd;
         
     | 
| 
      
 13 
     | 
    
         
            +
                    color: #008;
         
     | 
| 
      
 14 
     | 
    
         
            +
                    text-align: center;
         
     | 
| 
      
 15 
     | 
    
         
            +
                    border-bottom: 1px solid #000;
         
     | 
| 
      
 16 
     | 
    
         
            +
                    margin: 0;
         
     | 
| 
      
 17 
     | 
    
         
            +
                    padding: 0.5em;
         
     | 
| 
      
 18 
     | 
    
         
            +
                    width: 100%;
         
     | 
| 
      
 19 
     | 
    
         
            +
                }
         
     | 
| 
      
 20 
     | 
    
         
            +
                p
         
     | 
| 
      
 21 
     | 
    
         
            +
                {
         
     | 
| 
      
 22 
     | 
    
         
            +
                    color:#004;
         
     | 
| 
      
 23 
     | 
    
         
            +
                    font-size: 1.2em;
         
     | 
| 
      
 24 
     | 
    
         
            +
                    padding: 0 1em;         
         
     | 
| 
      
 25 
     | 
    
         
            +
                }
         
     | 
| 
      
 26 
     | 
    
         
            +
                #wrapper
         
     | 
| 
      
 27 
     | 
    
         
            +
                {
         
     | 
| 
      
 28 
     | 
    
         
            +
                    background-color: #fff;
         
     | 
| 
      
 29 
     | 
    
         
            +
                    margin: 1em 5%;
         
     | 
| 
      
 30 
     | 
    
         
            +
                    padding: 0 0 2%;
         
     | 
| 
      
 31 
     | 
    
         
            +
                    border-radius: 20px;
         
     | 
| 
      
 32 
     | 
    
         
            +
                    height: auto;
         
     | 
| 
      
 33 
     | 
    
         
            +
                    color: #007;
         
     | 
| 
      
 34 
     | 
    
         
            +
                }
         
     | 
| 
      
 35 
     | 
    
         
            +
                #wrapper h2
         
     | 
| 
      
 36 
     | 
    
         
            +
                {
         
     | 
| 
      
 37 
     | 
    
         
            +
                    background-color: #ddd;
         
     | 
| 
      
 38 
     | 
    
         
            +
                    color: #008;
         
     | 
| 
      
 39 
     | 
    
         
            +
                    text-align: center;
         
     | 
| 
      
 40 
     | 
    
         
            +
                    margin: 0 0 1em 0;
         
     | 
| 
      
 41 
     | 
    
         
            +
                    padding: 0.5em 0;
         
     | 
| 
      
 42 
     | 
    
         
            +
                    width: 100%;
         
     | 
| 
      
 43 
     | 
    
         
            +
                    border-radius: 20px;
         
     | 
| 
      
 44 
     | 
    
         
            +
                }
         
     | 
| 
      
 45 
     | 
    
         
            +
                #wrapper p{ padding: 0 2%;}
         
     | 
| 
      
 46 
     | 
    
         
            +
                #wrapper #missing
         
     | 
| 
      
 47 
     | 
    
         
            +
                {
         
     | 
| 
      
 48 
     | 
    
         
            +
                    color:#904;
         
     | 
| 
      
 49 
     | 
    
         
            +
                    font-size: 1.4em;
         
     | 
| 
      
 50 
     | 
    
         
            +
                    padding: 0.5em 0;
         
     | 
| 
      
 51 
     | 
    
         
            +
                    text-align: center;         
         
     | 
| 
      
 52 
     | 
    
         
            +
                    background-color: #fee;
         
     | 
| 
      
 53 
     | 
    
         
            +
                    border-bottom: 1px solid #800;
         
     | 
| 
      
 54 
     | 
    
         
            +
                    margin: 0;
         
     | 
| 
      
 55 
     | 
    
         
            +
                }
         
     | 
| 
      
 56 
     | 
    
         
            +
              </style>
         
     | 
| 
      
 57 
     | 
    
         
            +
            </head>
         
     | 
| 
      
 58 
     | 
    
         
            +
            <body>
         
     | 
| 
      
 59 
     | 
    
         
            +
              <h1>Plezi 500 error code (broken?!)...</h1>
         
     | 
| 
      
 60 
     | 
    
         
            +
              <div id='wrapper'>
         
     | 
| 
      
 61 
     | 
    
         
            +
                  <h2 id='missing'>
         
     | 
| 
      
 62 
     | 
    
         
            +
                    something went wrong with your request...
         
     | 
| 
      
 63 
     | 
    
         
            +
                  </h2>
         
     | 
| 
      
 64 
     | 
    
         
            +
                  <p>Sorry, something went wrong trying to process your request...</p>
         
     | 
| 
      
 65 
     | 
    
         
            +
                  <p>.... Please try again soon and if this issue persists, please let us know.</p>
         
     | 
| 
      
 66 
     | 
    
         
            +
              </div>
         
     | 
| 
      
 67 
     | 
    
         
            +
            </body>
         
     | 
    
        data/resources/500.slim
    ADDED
    
    | 
         @@ -0,0 +1,63 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            doctype html
         
     | 
| 
      
 2 
     | 
    
         
            +
            head
         
     | 
| 
      
 3 
     | 
    
         
            +
            	css:
         
     | 
| 
      
 4 
     | 
    
         
            +
            		body, html
         
     | 
| 
      
 5 
     | 
    
         
            +
            		{
         
     | 
| 
      
 6 
     | 
    
         
            +
            			background-color: #eee;
         
     | 
| 
      
 7 
     | 
    
         
            +
            			padding: 0; margin: 0;
         
     | 
| 
      
 8 
     | 
    
         
            +
            			width: 100%;
         
     | 
| 
      
 9 
     | 
    
         
            +
            		}
         
     | 
| 
      
 10 
     | 
    
         
            +
            		h1
         
     | 
| 
      
 11 
     | 
    
         
            +
            		{
         
     | 
| 
      
 12 
     | 
    
         
            +
            			background-color: #ddd;
         
     | 
| 
      
 13 
     | 
    
         
            +
            			color: #008;
         
     | 
| 
      
 14 
     | 
    
         
            +
            			text-align: center;
         
     | 
| 
      
 15 
     | 
    
         
            +
            			border-bottom: 1px solid #000;
         
     | 
| 
      
 16 
     | 
    
         
            +
            			margin: 0;
         
     | 
| 
      
 17 
     | 
    
         
            +
            			padding: 0.5em;
         
     | 
| 
      
 18 
     | 
    
         
            +
            			width: auto;
         
     | 
| 
      
 19 
     | 
    
         
            +
            		}
         
     | 
| 
      
 20 
     | 
    
         
            +
            		p
         
     | 
| 
      
 21 
     | 
    
         
            +
            		{
         
     | 
| 
      
 22 
     | 
    
         
            +
            			color:#004;
         
     | 
| 
      
 23 
     | 
    
         
            +
            			font-size: 1.2em;
         
     | 
| 
      
 24 
     | 
    
         
            +
            			padding: 0 1em;
         
     | 
| 
      
 25 
     | 
    
         
            +
            		}
         
     | 
| 
      
 26 
     | 
    
         
            +
            		#wrapper
         
     | 
| 
      
 27 
     | 
    
         
            +
            		{
         
     | 
| 
      
 28 
     | 
    
         
            +
            			background-color: #fff;
         
     | 
| 
      
 29 
     | 
    
         
            +
            			margin: 1em 5%;
         
     | 
| 
      
 30 
     | 
    
         
            +
            			padding: 0 0 2% 0;
         
     | 
| 
      
 31 
     | 
    
         
            +
            			border-radius: 20px;
         
     | 
| 
      
 32 
     | 
    
         
            +
            			min-height: 50%;
         
     | 
| 
      
 33 
     | 
    
         
            +
            			color: #007;
         
     | 
| 
      
 34 
     | 
    
         
            +
            		}
         
     | 
| 
      
 35 
     | 
    
         
            +
            		#wrapper h2
         
     | 
| 
      
 36 
     | 
    
         
            +
            		{
         
     | 
| 
      
 37 
     | 
    
         
            +
            			background-color: #ddd;
         
     | 
| 
      
 38 
     | 
    
         
            +
            			color: #008;
         
     | 
| 
      
 39 
     | 
    
         
            +
            			text-align: center;
         
     | 
| 
      
 40 
     | 
    
         
            +
            			margin: 0 0 1em 0;
         
     | 
| 
      
 41 
     | 
    
         
            +
            			padding: 0.5em 0;
         
     | 
| 
      
 42 
     | 
    
         
            +
            			width: 100%;
         
     | 
| 
      
 43 
     | 
    
         
            +
            			border-radius: 20px;
         
     | 
| 
      
 44 
     | 
    
         
            +
            		}
         
     | 
| 
      
 45 
     | 
    
         
            +
            		#wrapper p { padding: 0 2%; }
         
     | 
| 
      
 46 
     | 
    
         
            +
            		#wrapper #missing
         
     | 
| 
      
 47 
     | 
    
         
            +
            		{
         
     | 
| 
      
 48 
     | 
    
         
            +
            			color:#904;
         
     | 
| 
      
 49 
     | 
    
         
            +
            			font-size: 1.4em;
         
     | 
| 
      
 50 
     | 
    
         
            +
            			padding: 0.5em 0;
         
     | 
| 
      
 51 
     | 
    
         
            +
            			text-align: center;
         
     | 
| 
      
 52 
     | 
    
         
            +
            			background-color: #fee;
         
     | 
| 
      
 53 
     | 
    
         
            +
            			border-bottom: 1px solid #800;
         
     | 
| 
      
 54 
     | 
    
         
            +
            			margin: 0;
         
     | 
| 
      
 55 
     | 
    
         
            +
            		}
         
     | 
| 
      
 56 
     | 
    
         
            +
            body
         
     | 
| 
      
 57 
     | 
    
         
            +
            	h1 Plezi 500 error code (broken?!)...
         
     | 
| 
      
 58 
     | 
    
         
            +
            	#wrapper
         
     | 
| 
      
 59 
     | 
    
         
            +
            		h2#missing
         
     | 
| 
      
 60 
     | 
    
         
            +
            			| something went wrong with: 
         
     | 
| 
      
 61 
     | 
    
         
            +
            			=< defined?(request) ? request.path : "what you're looking for..."
         
     | 
| 
      
 62 
     | 
    
         
            +
            		p Sorry, something went wrong trying to process your request...
         
     | 
| 
      
 63 
     | 
    
         
            +
            		p ... Please try again soon and if this issue persists, please let us know.
         
     | 
    
        data/resources/Gemfile
    ADDED
    
    | 
         @@ -0,0 +1,85 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            source "https://rubygems.org"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            ####################
         
     | 
| 
      
 4 
     | 
    
         
            +
            # core gems
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            # include the basic plezi framework and server
         
     | 
| 
      
 7 
     | 
    
         
            +
            gem 'plezi'
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            ####################
         
     | 
| 
      
 10 
     | 
    
         
            +
            # development gems
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            # use pry gem for basic debug ( put `binding.pry` at breake point )?
         
     | 
| 
      
 13 
     | 
    
         
            +
            # gem 'pry'
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            # active support can run without rails and extends the Ruby language.
         
     | 
| 
      
 17 
     | 
    
         
            +
            # it might be heavy, be warned.
         
     | 
| 
      
 18 
     | 
    
         
            +
            # see: http://guides.rubyonrails.org/active_support_core_extensions.html
         
     | 
| 
      
 19 
     | 
    
         
            +
            # 
         
     | 
| 
      
 20 
     | 
    
         
            +
            # gem 'activesupport', :require => ['active_support', 'active_support/core_ext'] 
         
     | 
| 
      
 21 
     | 
    
         
            +
            # or:
         
     | 
| 
      
 22 
     | 
    
         
            +
            # gem 'activesupport', :require => ['active_support', active_support/all'] 
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            ####################
         
     | 
| 
      
 26 
     | 
    
         
            +
            # gems for easy markup
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            ## Slim is very recommended for HTML markup, it's both easy and fast.
         
     | 
| 
      
 29 
     | 
    
         
            +
            # gem 'slim'
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            ## Sass makes CSS easy
         
     | 
| 
      
 32 
     | 
    
         
            +
            # gem "sass"
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            ## erb for HTML fanatics:
         
     | 
| 
      
 35 
     | 
    
         
            +
            # gem 'erb'
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            ## we love Haml, even though it can be slow:
         
     | 
| 
      
 38 
     | 
    
         
            +
            # gem 'haml'
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            ## and maybe coffee script? (although, we just use javascript, really)
         
     | 
| 
      
 41 
     | 
    
         
            +
            # gem "coffee-script"
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            ####################
         
     | 
| 
      
 44 
     | 
    
         
            +
            # Internationalization
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
            ## I18n is the only one I know of.
         
     | 
| 
      
 47 
     | 
    
         
            +
            # gem 'i18n'
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            ####################
         
     | 
| 
      
 50 
     | 
    
         
            +
            # WebSocket Scaling
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            ## redis servers are used to allow websocket scaling.
         
     | 
| 
      
 53 
     | 
    
         
            +
            ## the :broadcast and :collect methods will work only for the current process.
         
     | 
| 
      
 54 
     | 
    
         
            +
            ## using Redis, we can publish messages and subscribe to 'chunnels' across processes
         
     | 
| 
      
 55 
     | 
    
         
            +
            # (limited support for :broadcast and NO support for :collect while Redis is running).
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            # gem 'redis'
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
            ####################
         
     | 
| 
      
 60 
     | 
    
         
            +
            # gems for databases and models
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
            ## if you want to use a database, here are a few common enough options:
         
     | 
| 
      
 63 
     | 
    
         
            +
            # gem 'mysql2'
         
     | 
| 
      
 64 
     | 
    
         
            +
            # gem 'sqlite3'
         
     | 
| 
      
 65 
     | 
    
         
            +
            # gem 'pg'
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
            ## MongoDB is a very well known NoSQL DB
         
     | 
| 
      
 68 
     | 
    
         
            +
            ## https://github.com/mongodb/mongo-ruby-driver
         
     | 
| 
      
 69 
     | 
    
         
            +
            # gem 'mongo'
         
     | 
| 
      
 70 
     | 
    
         
            +
            ## for a performance boost, the C extentions can be used (NOT JRuby - bson_ext isn't used with JRuby).
         
     | 
| 
      
 71 
     | 
    
         
            +
            # gem 'bson_ext'
         
     | 
| 
      
 72 
     | 
    
         
            +
            ## you can also have a look at the Mongo Mapper ORM
         
     | 
| 
      
 73 
     | 
    
         
            +
            ## http://mongomapper.com
         
     | 
| 
      
 74 
     | 
    
         
            +
            # gem 'mongo_mapper'
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
            ## someone told me good things about sequel:
         
     | 
| 
      
 77 
     | 
    
         
            +
            ## http://sequel.jeremyevans.net/rdoc/files/README_rdoc.html
         
     | 
| 
      
 78 
     | 
    
         
            +
            ## http://sequel.jeremyevans.net/rdoc/files/doc/cheat_sheet_rdoc.html
         
     | 
| 
      
 79 
     | 
    
         
            +
            ## this seems greate, but we left out any auto-config for this one... seems to work out of the box.
         
     | 
| 
      
 80 
     | 
    
         
            +
            # gem 'sequel'
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
            ## if you want to use ActiveRecord, uncomment the following line(s)...
         
     | 
| 
      
 83 
     | 
    
         
            +
            ## but first, please remember that AcriveRecord needs extra attention when multi-threading
         
     | 
| 
      
 84 
     | 
    
         
            +
            # gem 'activerecord', :require => 'active_record'
         
     | 
| 
      
 85 
     | 
    
         
            +
            # gem 'bcrypt', '~> 3.1.7'
         
     | 
| 
         Binary file 
     | 
| 
         @@ -0,0 +1,47 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <!DOCTYPE html>
         
     | 
| 
      
 2 
     | 
    
         
            +
            <head>
         
     | 
| 
      
 3 
     | 
    
         
            +
              <meta charset='UTF-8'>
         
     | 
| 
      
 4 
     | 
    
         
            +
              <style>
         
     | 
| 
      
 5 
     | 
    
         
            +
              	html, body {width: 100%; height:100%;}
         
     | 
| 
      
 6 
     | 
    
         
            +
              	body {font-size: 1.5em; background-color: #eee;}
         
     | 
| 
      
 7 
     | 
    
         
            +
              	p {padding: 0.2em; margin: 0;}
         
     | 
| 
      
 8 
     | 
    
         
            +
                .received { color: #00f;}
         
     | 
| 
      
 9 
     | 
    
         
            +
                .sent { color: #f0f;}
         
     | 
| 
      
 10 
     | 
    
         
            +
                .connection { color: #0f0;}
         
     | 
| 
      
 11 
     | 
    
         
            +
                .error { color: #f00;}
         
     | 
| 
      
 12 
     | 
    
         
            +
                input, #output {font-size: 1em; width: 60%; margin: 0.5em 19%; padding: 0.5em 1%;}
         
     | 
| 
      
 13 
     | 
    
         
            +
                #output {height: 60%; overflow: auto; background-color: #fff;}
         
     | 
| 
      
 14 
     | 
    
         
            +
              </style>
         
     | 
| 
      
 15 
     | 
    
         
            +
              <script>
         
     | 
| 
      
 16 
     | 
    
         
            +
              	var websocket = NaN;
         
     | 
| 
      
 17 
     | 
    
         
            +
              	function connect() { websocket = new WebSocket('ws://' + window.location.hostname + (window.location.port == '' ? '' : (':' + window.location.port) ) + "/" ); }
         
     | 
| 
      
 18 
     | 
    
         
            +
            	function init()
         
     | 
| 
      
 19 
     | 
    
         
            +
            	{
         
     | 
| 
      
 20 
     | 
    
         
            +
            		connect()
         
     | 
| 
      
 21 
     | 
    
         
            +
            		websocket.onopen = function(evt) { WriteMessage("Connected.", "connection") };
         
     | 
| 
      
 22 
     | 
    
         
            +
            		websocket.onclose = function(evt) { WriteMessage("Disconnected.", "connection");connect();  };
         
     | 
| 
      
 23 
     | 
    
         
            +
            		websocket.onmessage = function(evt) {
         
     | 
| 
      
 24 
     | 
    
         
            +
            			WriteMessage(evt.data);
         
     | 
| 
      
 25 
     | 
    
         
            +
            		};
         
     | 
| 
      
 26 
     | 
    
         
            +
            		websocket.onerror = function(evt) { WriteMessage(evt.data, 'error'); };
         
     | 
| 
      
 27 
     | 
    
         
            +
            	}
         
     | 
| 
      
 28 
     | 
    
         
            +
            	function WriteMessage( message, message_type )
         
     | 
| 
      
 29 
     | 
    
         
            +
            	{
         
     | 
| 
      
 30 
     | 
    
         
            +
            		if (!message_type) message_type = 'received'
         
     | 
| 
      
 31 
     | 
    
         
            +
            		var msg = document.createElement("p");
         
     | 
| 
      
 32 
     | 
    
         
            +
            		msg.className = message_type;
         
     | 
| 
      
 33 
     | 
    
         
            +
            		msg.innerHTML = message;
         
     | 
| 
      
 34 
     | 
    
         
            +
            		document.getElementById("output").appendChild(msg);
         
     | 
| 
      
 35 
     | 
    
         
            +
            	}
         
     | 
| 
      
 36 
     | 
    
         
            +
            	function Send(message)
         
     | 
| 
      
 37 
     | 
    
         
            +
            	{
         
     | 
| 
      
 38 
     | 
    
         
            +
            		WriteMessage(message, 'sent'); 
         
     | 
| 
      
 39 
     | 
    
         
            +
            		websocket.send(message);
         
     | 
| 
      
 40 
     | 
    
         
            +
            	}
         
     | 
| 
      
 41 
     | 
    
         
            +
            	window.addEventListener("load", init, false);
         
     | 
| 
      
 42 
     | 
    
         
            +
              </script>
         
     | 
| 
      
 43 
     | 
    
         
            +
            </head>
         
     | 
| 
      
 44 
     | 
    
         
            +
            <body>
         
     | 
| 
      
 45 
     | 
    
         
            +
            	<div id='output'>test</div>
         
     | 
| 
      
 46 
     | 
    
         
            +
            	<input type='text' placeholder='your message goes here.' value='' />
         
     | 
| 
      
 47 
     | 
    
         
            +
            </body>
         
     | 
    
        data/resources/code.rb
    ADDED
    
    
    
        data/resources/config.ru
    ADDED
    
    | 
         @@ -0,0 +1,39 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ########################
         
     | 
| 
      
 2 
     | 
    
         
            +
            # RackServer rack interface
         
     | 
| 
      
 3 
     | 
    
         
            +
            #
         
     | 
| 
      
 4 
     | 
    
         
            +
            # using Rack with Plezi poses some limitations...:
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # 1. only the first service (and all it's virtual hosts) will be running.
         
     | 
| 
      
 7 
     | 
    
         
            +
            #    (only the first `listen` call and all it's related `host` calls)
         
     | 
| 
      
 8 
     | 
    
         
            +
            #
         
     | 
| 
      
 9 
     | 
    
         
            +
            # 2. there is NO WebSockets support for Rack apps.
         
     | 
| 
      
 10 
     | 
    
         
            +
            #
         
     | 
| 
      
 11 
     | 
    
         
            +
            # 3. this WILL BREAKE any streaming / asynchronous methods calls that use the Plezi events engine.
         
     | 
| 
      
 12 
     | 
    
         
            +
            #
         
     | 
| 
      
 13 
     | 
    
         
            +
            # 4. Plezi parameters and file uploads are different then Rack - HTML Form code might be incompatible!
         
     | 
| 
      
 14 
     | 
    
         
            +
            #    This MIGHT BREAKE YOUR CODE! (changing this requires Plezi to re-parse the HTML, and costs in performance).
         
     | 
| 
      
 15 
     | 
    
         
            +
            #
         
     | 
| 
      
 16 
     | 
    
         
            +
            # also, all Plezi server specific configuration will be ignored.
         
     | 
| 
      
 17 
     | 
    
         
            +
            #
         
     | 
| 
      
 18 
     | 
    
         
            +
            # on the other hand, there is an upside:
         
     | 
| 
      
 19 
     | 
    
         
            +
            #
         
     | 
| 
      
 20 
     | 
    
         
            +
            # 1. you can choose a well tested server written in C that might (or might not) bring a performance boost.
         
     | 
| 
      
 21 
     | 
    
         
            +
            #
         
     | 
| 
      
 22 
     | 
    
         
            +
            # 2. you have better control over Middleware then you could have with Plezi.
         
     | 
| 
      
 23 
     | 
    
         
            +
            # ("wait", you might say, "there is no Middleware in Plezi!"... "Ahhh", I will answer, "so much to discover...")
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            working_dir = ::File.expand_path(Dir.pwd)
         
     | 
| 
      
 27 
     | 
    
         
            +
            app_path = ::File.expand_path(File.join(".."),  __FILE__)
         
     | 
| 
      
 28 
     | 
    
         
            +
            app_file_name = app_path.split(/[\\\/]/).last + ".rb"
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            # # make sure plezi doesn't set up sockets nor starts the event cycle.
         
     | 
| 
      
 31 
     | 
    
         
            +
            PLEZI_ON_RACK = true
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            #load the Plezi application file
         
     | 
| 
      
 34 
     | 
    
         
            +
            Dir.chdir app_path
         
     | 
| 
      
 35 
     | 
    
         
            +
            require File.join(app_path, app_file_name)
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            Dir.chdir working_dir
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            run Plezi
         
     |