plezi 0.14.1 → 0.14.2
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 +4 -4
- data/.gitignore +2 -0
- data/CHANGELOG.md +8 -0
- data/README.md +7 -8
- data/lib/plezi/api.rb +1 -1
- data/lib/plezi/controller/controller.rb +6 -6
- data/lib/plezi/router/route.rb +14 -13
- data/lib/plezi/router/router.rb +11 -3
- data/lib/plezi/version.rb +1 -1
- data/plezi.gemspec +1 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 46dea93c274cc8c463747a8d91e46c4af6852a86
|
4
|
+
data.tar.gz: 56b9726006f702548770d2ea7beebbec6564ad8c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 30312ea6a47f7e8d9dc53a5c8c552046da2c064bdab79f15699507e8bd8628a9ce0c9fc47ea31d19073e271ec9394082e5066f301f5115ffeb10dfe08a31e59f
|
7
|
+
data.tar.gz: 0d275aa94313f9fe2bfe87a29eba26f31ad37ec9226c27a982fb86522404576aa65810f5575f211f160ed7d561de5bf12af3ce694e82f153d03b6e1e4e9212ef
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,14 @@
|
|
2
2
|
|
3
3
|
***
|
4
4
|
|
5
|
+
Change log v.0.14.2
|
6
|
+
|
7
|
+
**Dependencies**: updates to dependency version requirements.
|
8
|
+
|
9
|
+
**Performance**: minor performance updates, i.e.: in the router, moved a `case` statement from the live (app is running) stage to the prep (app is initializing) stage and saved the `call` method extraction result for faster middleware mode performance.
|
10
|
+
|
11
|
+
***
|
12
|
+
|
5
13
|
Change log v.0.14.1
|
6
14
|
|
7
15
|
**Update**: update due to Iodine's 0.2.1 version and the deprecation of the `uuid` method (replaced by `conn_id` to minimize collisions).
|
data/README.md
CHANGED
@@ -4,11 +4,11 @@
|
|
4
4
|
[](http://www.rubydoc.info/github/boazsegev/plezi/master/frames)
|
5
5
|
[](https://github.com/boazsegev/plezi)
|
6
6
|
|
7
|
-
Are microservices on your mind? Do you dream of a an SPA that's easy to scale? Did you wonder if you could write a whole Websockets, RESTful AJAX back-end with just a few lines of code (
|
7
|
+
Are microservices on your mind? Do you dream of a an SPA that's easy to scale? Did you wonder if you could write a whole Websockets, RESTful AJAX back-end with just a few lines of code (business logic not included)?
|
8
8
|
|
9
|
-
Welcome to your new home with [plezi.io](http://www.plezi.io), the Ruby real-time framework that assumes the
|
9
|
+
Welcome to your new home with [plezi.io](http://www.plezi.io), the Ruby real-time framework that assumes the business logic is *seperate* from the web service logic.
|
10
10
|
|
11
|
-
**NOTICE**: Plezi 0.14.
|
11
|
+
**NOTICE**: Plezi 0.14.x (this branch) is NOT an update, it's a total rewrite. Features were _removed_ as well as altered. For example, Plezi is now a Rack framework, with the limitations of CGI design and the advantages of using existing middleware. API changes abound.
|
12
12
|
|
13
13
|
## What does Plezi have to offer?
|
14
14
|
|
@@ -76,7 +76,7 @@ Or install it yourself as:
|
|
76
76
|
|
77
77
|
## Usage
|
78
78
|
|
79
|
-
A new application:
|
79
|
+
A new application (default applications include a simple chatroom demo):
|
80
80
|
|
81
81
|
$ plezi new app_name
|
82
82
|
|
@@ -96,17 +96,16 @@ Plezi.route '*', HelloWorld
|
|
96
96
|
exit # <= if running from terminal, this will start the server
|
97
97
|
```
|
98
98
|
|
99
|
-
##
|
99
|
+
## Documentation
|
100
100
|
|
101
|
-
|
101
|
+
Plezi is fairly well documented.
|
102
102
|
|
103
|
-
|
103
|
+
Documentation is available both in the forms of tutorials and explanations available on the [plezi.io website](http://www.plezi.io) as well as through [the YARD documentation](http://www.rubydoc.info/gems/plezi).
|
104
104
|
|
105
105
|
## Contributing
|
106
106
|
|
107
107
|
Bug reports and pull requests are welcome on GitHub at https://github.com/boazsegev/plezi.
|
108
108
|
|
109
|
-
|
110
109
|
## License
|
111
110
|
|
112
111
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/lib/plezi/api.rb
CHANGED
@@ -166,25 +166,25 @@ module Plezi
|
|
166
166
|
# puts "#{from} is available"
|
167
167
|
# end
|
168
168
|
#
|
169
|
-
# Methods invoked using {unicast}, {broadcast} or {multicast} will
|
169
|
+
# Methods invoked using {unicast}, {broadcast} or {multicast} will quietly fail if the connection was lost, the requested method is undefined or the 'target' was invalid.
|
170
170
|
def unicast(target, event_method, *args)
|
171
171
|
::Plezi::Base::MessageDispatch.unicast(id ? self : self.class, target, event_method, args)
|
172
172
|
end
|
173
173
|
|
174
|
-
# Invokes a method on every websocket connection that belongs to this Controller / Type. When using Iodine, the method is invoked asynchronously.
|
174
|
+
# Invokes a method on every websocket connection (except `self`) that belongs to this Controller / Type. When using Iodine, the method is invoked asynchronously.
|
175
175
|
#
|
176
176
|
# self.broadcast :my_method, "argument 1", "argument 2", 3
|
177
177
|
#
|
178
|
-
# Methods invoked using {unicast}, {broadcast} or {multicast} will
|
178
|
+
# Methods invoked using {unicast}, {broadcast} or {multicast} will quietly fail if the connection was lost, the requested method is undefined or the 'target' was invalid.
|
179
179
|
def broadcast(event_method, *args)
|
180
180
|
::Plezi::Base::MessageDispatch.broadcast(id ? self : self.class, event_method, args)
|
181
181
|
end
|
182
182
|
|
183
|
-
# Invokes a method on every websocket connection in the application.
|
183
|
+
# Invokes a method on every websocket connection in the application (except `self`).
|
184
184
|
#
|
185
185
|
# self.multicast :my_method, "argument 1", "argument 2", 3
|
186
186
|
#
|
187
|
-
# Methods invoked using {unicast}, {broadcast} or {multicast} will
|
187
|
+
# Methods invoked using {unicast}, {broadcast} or {multicast} will quietly fail if the connection was lost, the requested method is undefined or the 'target' was invalid.
|
188
188
|
def multicast(event_method, *args)
|
189
189
|
::Plezi::Base::MessageDispatch.multicast(id ? self : self.class, event_method, args)
|
190
190
|
end
|
@@ -239,7 +239,7 @@ module Plezi
|
|
239
239
|
# @private
|
240
240
|
# This function is used internally by Plezi, do not call.
|
241
241
|
def _pl_ad_httpreview(data)
|
242
|
-
|
242
|
+
return data.to_json if self.class._pl_is_ad? && data.is_a?(Hash)
|
243
243
|
data
|
244
244
|
end
|
245
245
|
|
data/lib/plezi/router/route.rb
CHANGED
@@ -22,7 +22,7 @@ module Plezi
|
|
22
22
|
@controller = controller
|
23
23
|
@param_names = []
|
24
24
|
@origial = path.dup.freeze
|
25
|
-
|
25
|
+
prep_params(m[2])
|
26
26
|
self.class.qp
|
27
27
|
case @controller
|
28
28
|
when Class
|
@@ -36,17 +36,8 @@ module Plezi
|
|
36
36
|
|
37
37
|
def call(request, response)
|
38
38
|
return nil unless match(request.path_info, request)
|
39
|
-
|
40
|
-
|
41
|
-
c = @controller.new
|
42
|
-
return c._pl_respond(request, response, Thread.current[@route_id])
|
43
|
-
when Regexp
|
44
|
-
params = Thread.current[@route_id]
|
45
|
-
return nil unless controller =~ params[@param_names[0]]
|
46
|
-
request.path_info = "/#{params.delete('*'.freeze).to_a.join '/'}"
|
47
|
-
request.params.update params
|
48
|
-
end
|
49
|
-
nil
|
39
|
+
c = @controller.new
|
40
|
+
c._pl_respond(request, response, Thread.current[@route_id])
|
50
41
|
end
|
51
42
|
|
52
43
|
def fits_params(path, request)
|
@@ -70,7 +61,7 @@ module Plezi
|
|
70
61
|
req_path.start_with?(@prefix) && fits_params(req_path, request)
|
71
62
|
end
|
72
63
|
|
73
|
-
def
|
64
|
+
def prep_params(postfix)
|
74
65
|
pfa = postfix.split '/'.freeze
|
75
66
|
start = 0; stop = 0
|
76
67
|
optional = false
|
@@ -108,5 +99,15 @@ module Plezi
|
|
108
99
|
@qp ||= ::Rack::QueryParser.new(Hash, 65_536, 100)
|
109
100
|
end
|
110
101
|
end
|
102
|
+
class RouteRewrite < Route
|
103
|
+
def call(request, _response)
|
104
|
+
return nil unless match(request.path_info, request)
|
105
|
+
params = Thread.current[@route_id]
|
106
|
+
return nil unless controller =~ params[@param_names[0]]
|
107
|
+
request.path_info = "/#{params.delete('*'.freeze).to_a.join '/'}"
|
108
|
+
request.params.update params
|
109
|
+
nil
|
110
|
+
end
|
111
|
+
end
|
111
112
|
end
|
112
113
|
end
|
data/lib/plezi/router/router.rb
CHANGED
@@ -13,8 +13,10 @@ module Plezi
|
|
13
13
|
module_function
|
14
14
|
|
15
15
|
def new(app)
|
16
|
-
|
17
|
-
|
16
|
+
if app && app != call_method
|
17
|
+
puts 'Plezi as Middleware'
|
18
|
+
@app = app
|
19
|
+
end
|
18
20
|
Plezi.app
|
19
21
|
end
|
20
22
|
|
@@ -36,6 +38,11 @@ module Plezi
|
|
36
38
|
return response.finish
|
37
39
|
end
|
38
40
|
|
41
|
+
# returns the `call` method. Used repeatedly in middleware mode and only once in application mode.
|
42
|
+
def call_method
|
43
|
+
@call_method ||= Plezi::Base::Router.method(:call)
|
44
|
+
end
|
45
|
+
|
39
46
|
def route(path, controller)
|
40
47
|
path = path.chomp('/'.freeze) unless path == '/'.freeze
|
41
48
|
case controller
|
@@ -46,6 +53,7 @@ module Plezi
|
|
46
53
|
path << '/*'.freeze unless path[-1] == '*'.freeze
|
47
54
|
when Regexp
|
48
55
|
path << '/*'.freeze unless path[-1] == '*'.freeze
|
56
|
+
return @routes << RouteRewrite.new(path, controller)
|
49
57
|
end
|
50
58
|
@routes << Route.new(path, controller)
|
51
59
|
end
|
@@ -111,7 +119,7 @@ module Plezi
|
|
111
119
|
while names.any? && params[name[0]]
|
112
120
|
url << "/#{Rack::Utils.escape params[names.shift]}"
|
113
121
|
end
|
114
|
-
url
|
122
|
+
url << '/'.freeze if url.empty?
|
115
123
|
(url << '?') << Rack::Utils.build_nested_query(params) if params.any?
|
116
124
|
url
|
117
125
|
end
|
data/lib/plezi/version.rb
CHANGED
data/plezi.gemspec
CHANGED
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
28
|
spec.require_paths = ['lib']
|
29
29
|
|
30
|
-
spec.add_dependency 'iodine', '~> 0.2.1'
|
30
|
+
spec.add_dependency 'iodine', '~> 0.2', '>= 0.2.1'
|
31
31
|
# spec.add_dependency 'redcarpet', '> 3.3.0'
|
32
32
|
# spec.add_dependency 'slim', '> 3.0.0'
|
33
33
|
|
metadata
CHANGED
@@ -1,20 +1,23 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: plezi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.14.
|
4
|
+
version: 0.14.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Boaz Segev
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: iodine
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.2'
|
20
|
+
- - ">="
|
18
21
|
- !ruby/object:Gem::Version
|
19
22
|
version: 0.2.1
|
20
23
|
type: :runtime
|
@@ -22,6 +25,9 @@ dependencies:
|
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
27
|
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.2'
|
30
|
+
- - ">="
|
25
31
|
- !ruby/object:Gem::Version
|
26
32
|
version: 0.2.1
|
27
33
|
- !ruby/object:Gem::Dependency
|