plezi 0.7.1 → 0.7.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/CHANGELOG.md +13 -5
- data/bin/plezi +6 -6
- data/lib/plezi.rb +1 -1
- data/lib/plezi/base/dsl.rb +3 -3
- data/lib/plezi/base/events.rb +1 -1
- data/lib/plezi/base/services.rb +6 -6
- data/lib/plezi/handlers/controller_magic.rb +1 -1
- data/lib/plezi/handlers/route.rb +22 -22
- data/lib/plezi/server/helpers/http.rb +1 -3
- data/lib/plezi/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c99bfcd9b6a94d36a2fa750a98c0c7316e24845c
|
4
|
+
data.tar.gz: 078b931cef17cedb26f6ff8e7de28da62601164d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82e261621440b280c9a50e95b96c3ea0621a2097a1780a5da76889fc374aa094449e7c1bd262266d64839238eafb982e05f2455aee16f264ff45caaa1fb230da
|
7
|
+
data.tar.gz: 2540f2e21dc643fd5395617841a6c3d3e5aa1da294461eab4db0c919355fe5c2771bfa346061e5556df9a646916cb9f39fae99a20a97c3a971198cc3a5a4bd93
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,14 @@
|
|
2
2
|
|
3
3
|
***
|
4
4
|
|
5
|
+
Change log v.0.7.2
|
6
|
+
|
7
|
+
**fix**: fixed the template's Proc file for Heroku integration. There was a issue due to the main app file name convention change (the app file no longer has the .rb extention, and now the Proc file correctly reflects that change).
|
8
|
+
|
9
|
+
**fix**: recognition of floats caused conversion errors for stings that are nomeric with multiple dots (i.e. 1.1.2015). Also, float recognition was discovered to be non-reversable (i.e `"1.10".to_f.to_s #==> "1.1"`). For this reason, float recognition has been removed. Fixnum recognition is still active.
|
10
|
+
|
11
|
+
***
|
12
|
+
|
5
13
|
Change log v.0.7.1 - OLDER CODE MIGHT BREAK!
|
6
14
|
|
7
15
|
**feature**: ruby objects (Integers, Floats, true & false) are now automatically converted from strings to Ruby objects (notice that 'true' and 'false' ARE case sensative, to preserve the value in case of a #to_s method call)
|
@@ -276,7 +284,7 @@ Change log v.0.5.1
|
|
276
284
|
|
277
285
|
Change log v.0.5.0
|
278
286
|
|
279
|
-
**feature:** Multiple (virtual) hosts on the same port are now available `listen port, host: 'foo', file_root: 'public/'`, each host holds it's own route stack, file_root and special
|
287
|
+
**feature:** Multiple (virtual) hosts on the same port are now available `listen port, host: 'foo', file_root: 'public/'`, each host holds it's own route stack, file_root and special parameters (i.e. `:debug` etc'). greate for different namespaces (admin.foo.com, www.foo.com, etc').
|
280
288
|
|
281
289
|
**fix**: Magic params have full featured Regex capabilities for the optional routes (`(:optional){(regex)|([7]{3})}`).
|
282
290
|
|
@@ -325,15 +333,15 @@ the following features are added
|
|
325
333
|
|
326
334
|
- magic routes:
|
327
335
|
|
328
|
-
it is now possible to set required
|
336
|
+
it is now possible to set required parameters inside the route:
|
329
337
|
```ruby
|
330
338
|
route "/version/:number/", Controller
|
331
339
|
# => accepts only paths styled "/version/foo".
|
332
|
-
# => if no version paramater exists, path will not be called and
|
340
|
+
# => if no version paramater exists, path will not be called and parameters will not be set.
|
333
341
|
# => (this: "/version" fails).
|
334
342
|
```
|
335
343
|
|
336
|
-
it is now possible to set optional
|
344
|
+
it is now possible to set optional parameters inside the route:
|
337
345
|
```ruby
|
338
346
|
route "/user/(:id)/(:visitor_id)", Controller
|
339
347
|
# => accepts any of the following paths:
|
@@ -353,7 +361,7 @@ route "/user/(:id)/*", Controller
|
|
353
361
|
|
354
362
|
- re-write routes:
|
355
363
|
|
356
|
-
re-write routes allow us to extract
|
364
|
+
re-write routes allow us to extract parameters from the route without any controller, rewriting the request's path.
|
357
365
|
|
358
366
|
they can be extreamly powerful in fairly rare but interesting circumstances.
|
359
367
|
|
data/bin/plezi
CHANGED
@@ -56,7 +56,7 @@ class AppTemplate
|
|
56
56
|
app_tree["routes.rb"] ||= IO.read ::File.expand_path(File.join("..", "..", "resources" ,"routes.rb"), __FILE__)
|
57
57
|
app_tree["rakefile.rb"] ||= IO.read ::File.expand_path(File.join("..", "..", "resources" ,"rakefile.rb"), __FILE__)
|
58
58
|
app_tree["Procfile"] ||= ""
|
59
|
-
app_tree["Procfile"] << "\nweb: bundle exec ./#{ARGV[1]}
|
59
|
+
app_tree["Procfile"] << "\nweb: bundle exec ./#{ARGV[1]} -p $PORT\n"
|
60
60
|
app_tree["Gemfile"] ||= IO.read ::File.expand_path(File.join("..", "..", "resources" ,"Gemfile"), __FILE__)
|
61
61
|
|
62
62
|
# set up config files
|
@@ -123,7 +123,7 @@ class AppTemplate
|
|
123
123
|
@app_tree["#{ARGV[1]}"] ||= IO.read ::File.expand_path(File.join("..", "..", "resources" ,"code.rb"), __FILE__)
|
124
124
|
write_files app_tree
|
125
125
|
File.chmod 0775, "#{ARGV[1]}"
|
126
|
-
puts "tried to update execution permissions. this
|
126
|
+
puts "tried to update execution permissions. this is system dependent and might have failed.".pink
|
127
127
|
puts "use: chmod +x ./#{ARGV[1]} to set execution permissions on Unix machines."
|
128
128
|
puts ""
|
129
129
|
puts "done."
|
@@ -277,10 +277,10 @@ else
|
|
277
277
|
puts "n alias for new."
|
278
278
|
puts "new app with gem 'new' accepts the 'with' paramater (or w for short)."
|
279
279
|
puts "starting up an app:".pink
|
280
|
-
puts "start runs the app. accepts any
|
280
|
+
puts "start runs the app. accepts any parameters the app supports."
|
281
281
|
puts "s alias for start/server."
|
282
282
|
puts "start console innsead of services:".pink
|
283
|
-
puts "console runs the app. accepts any
|
283
|
+
puts "console runs the app. accepts any parameters the app supports."
|
284
284
|
puts "c alias for start/server."
|
285
285
|
puts "==============================".green
|
286
286
|
puts "create an app with specific plugins:".pink
|
@@ -291,9 +291,9 @@ else
|
|
291
291
|
puts "plezi n app w all"
|
292
292
|
puts "loads the all available gem(s) and allows them to update the template before building the app.".green
|
293
293
|
puts ""
|
294
|
-
puts "start the application with any
|
294
|
+
puts "start the application with any parameters it supports:".pink
|
295
295
|
puts "plezi s -p 80"
|
296
|
-
puts "loads the app with
|
296
|
+
puts "loads the app with parameters -p 80".green
|
297
297
|
puts ""
|
298
298
|
end
|
299
299
|
|
data/lib/plezi.rb
CHANGED
@@ -105,7 +105,7 @@ end
|
|
105
105
|
# # client requests: /1
|
106
106
|
# # => Plezi::StubRESTCtrl.new.show() # where params[:id] == 1
|
107
107
|
#
|
108
|
-
# it is possible to use "magic" routes (i.e. `/resource/:type/(:id)/(:date){/[0-9]{8}}/:foo`) and it is also possible to set the appropriate
|
108
|
+
# it is possible to use "magic" routes (i.e. `/resource/:type/(:id)/(:date){/[0-9]{8}}/:foo`) and it is also possible to set the appropriate parameters within the `before` method of the Conltroller.
|
109
109
|
#
|
110
110
|
# Routes are handled in the order they are created. If overlapping routes exist, the first will execute first:
|
111
111
|
#
|
data/lib/plezi/base/dsl.rb
CHANGED
@@ -80,7 +80,7 @@ PL = Plezi
|
|
80
80
|
# creates a server object and waits for routes to be set.
|
81
81
|
#
|
82
82
|
# port:: the port to listen to. the first port defaults to 3000 and increments by 1 with every `listen` call. it's possible to set the first port number by running the app with the -p paramater.
|
83
|
-
# params:: a Hash of serever
|
83
|
+
# params:: a Hash of serever parameters, as listed in the Plezi#add_service documentation.
|
84
84
|
#
|
85
85
|
# The different keys in the params hash control the server's behaviour, as follows:
|
86
86
|
#
|
@@ -114,7 +114,7 @@ end
|
|
114
114
|
# path:: the path for the route
|
115
115
|
# controller:: The controller class which will accept the route.
|
116
116
|
#
|
117
|
-
# `path`
|
117
|
+
# `path` parameters has a few options:
|
118
118
|
#
|
119
119
|
# * `path` can be a Regexp object, forcing the all the logic into controller (typically using the before method).
|
120
120
|
#
|
@@ -140,7 +140,7 @@ end
|
|
140
140
|
#
|
141
141
|
# magic routes make for difficult debugging - the smarter the routes, the more difficult the debugging.
|
142
142
|
# use with care and avoid complex routes when possible. RESTful routes are recommended when possible.
|
143
|
-
# json serving apps are advised to use required
|
143
|
+
# json serving apps are advised to use required parameters, empty sections indicating missing required parameters (i.e. /path///foo/bar///).
|
144
144
|
#
|
145
145
|
def route(path, controller = nil, &block)
|
146
146
|
Plezi::DSL.route(path, controller, &block)
|
data/lib/plezi/base/events.rb
CHANGED
@@ -38,7 +38,7 @@ module Plezi
|
|
38
38
|
# `callback( Kernel, :sleep, 1 ) { puts "this is a demo" }`
|
39
39
|
# callback sets an asynchronous method call with a callback.
|
40
40
|
#
|
41
|
-
#
|
41
|
+
# parameters:
|
42
42
|
# object:: the object holding the method to be called (use `Kernel` for global methods).
|
43
43
|
# method:: the method's name (Symbol). this is the method that will be called.
|
44
44
|
# *arguments:: any additional arguments that should be sent to the method (the main method, not the callback).
|
data/lib/plezi/base/services.rb
CHANGED
@@ -14,7 +14,7 @@ module Plezi
|
|
14
14
|
# public API to add a service to the framework.
|
15
15
|
# accepts:
|
16
16
|
# port:: port number
|
17
|
-
# parameters:: a hash of
|
17
|
+
# parameters:: a hash of parameters that are passed on to the service for handling (and from there, service dependent, to the protocol and/or handler).
|
18
18
|
#
|
19
19
|
# parameters are any of the following:
|
20
20
|
# host:: the host name. defaults to any host not explicitly defined (a catch-all).
|
@@ -38,12 +38,12 @@ module Plezi
|
|
38
38
|
#
|
39
39
|
# templates can be either an ERB file on a Haml file.
|
40
40
|
#
|
41
|
-
def add_service port,
|
42
|
-
|
43
|
-
|
41
|
+
def add_service port, parameters = {}
|
42
|
+
parameters[:port] ||= port
|
43
|
+
parameters[:service_type] ||= ( parameters[:ssl] ? SSLService : BasicService)
|
44
44
|
service = nil
|
45
|
-
service =
|
46
|
-
S_LOCKER.synchronize {SERVICES[service] =
|
45
|
+
service = parameters[:service_type].create_service(port, parameters) unless ( defined?(BUILDING_PLEZI_TEMPLATE) || defined?(PLEZI_ON_RACK) )
|
46
|
+
S_LOCKER.synchronize {SERVICES[service] = parameters}
|
47
47
|
info "Started listening on port #{port}."
|
48
48
|
true
|
49
49
|
end
|
@@ -26,7 +26,7 @@ module Plezi
|
|
26
26
|
# the request object, class: HTTPRequest.
|
27
27
|
attr_reader :request
|
28
28
|
|
29
|
-
# the ::params variable contains all the
|
29
|
+
# the ::params variable contains all the parameters set by the request (/path?locale=he => params["locale"] == "he").
|
30
30
|
attr_reader :params
|
31
31
|
|
32
32
|
# a cookie-jar to get and set cookies (set: `cookie\[:name] = data` or get: `cookie\[:name]`).
|
data/lib/plezi/handlers/route.rb
CHANGED
@@ -14,9 +14,9 @@ module Plezi
|
|
14
14
|
|
15
15
|
# lets the route answer the request. returns false if no response has been sent.
|
16
16
|
def on_request request
|
17
|
-
|
18
|
-
return false unless
|
19
|
-
|
17
|
+
fill_parameters = match request.path
|
18
|
+
return false unless fill_parameters
|
19
|
+
fill_parameters.each {|k,v| HTTP.add_param_to_hash k, v, request.params }
|
20
20
|
response = HTTPResponse.new request
|
21
21
|
if controller
|
22
22
|
ret = controller.new(request, response, params)._route_path_to_methods_and_set_the_response_
|
@@ -35,9 +35,9 @@ module Plezi
|
|
35
35
|
|
36
36
|
# handles Rack requests (dresses up as Rack).
|
37
37
|
def call request
|
38
|
-
|
39
|
-
return false unless
|
40
|
-
|
38
|
+
fill_parameters = match request.path_info
|
39
|
+
return false unless fill_parameters
|
40
|
+
fill_parameters.each {|k,v| HTTP.add_param_to_hash k, v, request.params }
|
41
41
|
response = HTTPResponse.new request
|
42
42
|
if controller
|
43
43
|
ret = controller.new(request, response, params)._route_path_to_methods_and_set_the_response_
|
@@ -55,7 +55,7 @@ module Plezi
|
|
55
55
|
#
|
56
56
|
# Regexp paths will be left unchanged
|
57
57
|
#
|
58
|
-
# a string can be either a simple string `"/users"` or a string with
|
58
|
+
# a string can be either a simple string `"/users"` or a string with parameters:
|
59
59
|
# `"/static/:required/(:optional)/(:optional_with_format){[\d]*}/:optional_2"`
|
60
60
|
def initialize path, controller, params={}, &block
|
61
61
|
@path_sections , @params = false, params
|
@@ -78,7 +78,7 @@ module Plezi
|
|
78
78
|
# initializes the path by converting the string into a Regexp
|
79
79
|
# and noting any parameters that might need to be extracted for RESTful routes.
|
80
80
|
def initialize_path path
|
81
|
-
@
|
81
|
+
@fill_parameters = {}
|
82
82
|
if path.is_a? Regexp
|
83
83
|
@path = path
|
84
84
|
elsif path.is_a? String
|
@@ -119,34 +119,34 @@ module Plezi
|
|
119
119
|
@path = /#{@path}$/
|
120
120
|
return
|
121
121
|
|
122
|
-
# check for routes formatted: /:paramater - required
|
122
|
+
# check for routes formatted: /:paramater - required parameters
|
123
123
|
elsif section.match /^\:([^\(\)\{\}\:]*)$/
|
124
124
|
#create a simple section catcher
|
125
125
|
@path << section_search
|
126
126
|
# add paramater recognition value
|
127
|
-
@
|
127
|
+
@fill_parameters[param_num += 1] = section.match(/^\:([^\(\)\{\}\:]*)$/)[1]
|
128
128
|
|
129
|
-
# check for routes formatted: /:paramater{regexp} - required
|
129
|
+
# check for routes formatted: /:paramater{regexp} - required parameters
|
130
130
|
elsif section.match /^\:([^\(\)\{\}\:\/]*)\{(.*)\}$/
|
131
131
|
#create a simple section catcher
|
132
132
|
@path << ( "(\/(" + section.match(/^\:([^\(\)\{\}\:\/]*)\{(.*)\}$/)[2] + "))" )
|
133
133
|
# add paramater recognition value
|
134
|
-
@
|
134
|
+
@fill_parameters[param_num += 1] = section.match(/^\:([^\(\)\{\}\:\/]*)\{(.*)\}$/)[1]
|
135
135
|
param_num += 1 # we are using two spaces
|
136
136
|
|
137
|
-
# check for routes formatted: /(:paramater) - optional
|
137
|
+
# check for routes formatted: /(:paramater) - optional parameters
|
138
138
|
elsif section.match /^\(\:([^\(\)\{\}\:]*)\)$/
|
139
139
|
#create a optional section catcher
|
140
140
|
@path << optional_section_search
|
141
141
|
# add paramater recognition value
|
142
|
-
@
|
142
|
+
@fill_parameters[param_num += 1] = section.match(/^\(\:([^\(\)\{\}\:]*)\)$/)[1]
|
143
143
|
|
144
|
-
# check for routes formatted: /(:paramater){regexp} - optional
|
144
|
+
# check for routes formatted: /(:paramater){regexp} - optional parameters
|
145
145
|
elsif section.match /^\(\:([^\(\)\{\}\:]*)\)\{(.*)\}$/
|
146
146
|
#create a optional section catcher
|
147
147
|
@path << ( "(\/(" + section.match(/^\(\:([^\(\)\{\}\:]*)\)\{(.*)\}$/)[2] + "))?" )
|
148
148
|
# add paramater recognition value
|
149
|
-
@
|
149
|
+
@fill_parameters[param_num += 1] = section.match(/^\(\:([^\(\)\{\}\:]*)\)\{(.*)\}$/)[1]
|
150
150
|
param_num += 1 # we are using two spaces
|
151
151
|
|
152
152
|
else
|
@@ -154,9 +154,9 @@ module Plezi
|
|
154
154
|
@path << section
|
155
155
|
end
|
156
156
|
end
|
157
|
-
unless @
|
157
|
+
unless @fill_parameters.values.include?("id")
|
158
158
|
@path << optional_section_search
|
159
|
-
@
|
159
|
+
@fill_parameters[param_num += 1] = "id"
|
160
160
|
end
|
161
161
|
@path = /#{@path}$/
|
162
162
|
else
|
@@ -165,11 +165,11 @@ module Plezi
|
|
165
165
|
return
|
166
166
|
end
|
167
167
|
|
168
|
-
# this performs the match and assigns the
|
168
|
+
# this performs the match and assigns the parameters, if required.
|
169
169
|
def match path
|
170
170
|
hash = {}
|
171
171
|
m = nil
|
172
|
-
# unless @
|
172
|
+
# unless @fill_parameters.values.include?("format")
|
173
173
|
# if (m = path.match /([^\.]*)\.([^\.\/]+)$/)
|
174
174
|
# HTTP.add_param_to_hash 'format', m[2], hash
|
175
175
|
# path = m[1]
|
@@ -177,7 +177,7 @@ module Plezi
|
|
177
177
|
# end
|
178
178
|
m = @path.match path
|
179
179
|
return false unless m
|
180
|
-
@
|
180
|
+
@fill_parameters.each { |k, v| hash[v] = m[k][1..-1] if m[k] && m[k] != '/' }
|
181
181
|
hash
|
182
182
|
end
|
183
183
|
|
@@ -190,7 +190,7 @@ module Plezi
|
|
190
190
|
#
|
191
191
|
# adds the `redirect_to` and `send_data` methods to the controller class, as well as the properties:
|
192
192
|
# env:: the env recieved by the Rack server.
|
193
|
-
# params:: the request's
|
193
|
+
# params:: the request's parameters.
|
194
194
|
# cookies:: the request's cookies.
|
195
195
|
# flash:: an amazing Hash object that sets temporary cookies for one request only - greate for saving data between redirect calls.
|
196
196
|
#
|
@@ -79,7 +79,7 @@ module Plezi
|
|
79
79
|
p.each_index { |i| p[i].strip! ; n = p[i].match(/^[0-9]+$/) ? p[i].to_i : p[i].to_sym ; p[i+1] ? [ ( a[n] ||= ( p[i+1] == ' ' ? [] : {} ) ), ( a = a[n]) ] : ( a.is_a?(Hash) ? (a[n] ? (a[n].is_a?(Array) ? (a << val) : a[n] = [a[n], val] ) : (a[n] = val) ) : (a << val) ) }
|
80
80
|
rescue Exception => e
|
81
81
|
Plezi.error e
|
82
|
-
Plezi.error "(Silent):
|
82
|
+
Plezi.error "(Silent): parameters parse error for #{param_name} ... maybe conflicts with a different set?"
|
83
83
|
target_hash[param_name] = rubyfy! param_value
|
84
84
|
end
|
85
85
|
end
|
@@ -174,8 +174,6 @@ module Plezi
|
|
174
174
|
string = false
|
175
175
|
elsif string.match(/[0-9]/) && !string.match(/[^0-9]/)
|
176
176
|
string = string.to_i
|
177
|
-
elsif string.match(/[0-9]/) && !string.match(/[^0-9\.]/)
|
178
|
-
string = string.to_f
|
179
177
|
end
|
180
178
|
string
|
181
179
|
end
|
data/lib/plezi/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: plezi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Boaz Segev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|