plezi 0.14.4 → 0.14.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,33 +1,33 @@
1
1
  require 'plezi/render/has_cache' unless defined? ::Plezi::Base::HasStore
2
2
  module Plezi
3
- module Base
4
- module RenderSlim
5
- extend ::Plezi::Base::HasStore
3
+ module Base
4
+ module RenderSlim
5
+ extend ::Plezi::Base::HasStore
6
6
 
7
- module_function
7
+ module_function
8
8
 
9
- def call(filename, context, &block)
10
- return unless defined? ::Slim
11
- return unless File.exist?(filename)
12
- engine = load_engine(filename)
13
- engine.render(context.receiver, &block)
9
+ def call(filename, context, &block)
10
+ return unless defined? ::Slim
11
+ return unless File.exist?(filename)
12
+ engine = load_engine(filename)
13
+ engine.render(context.receiver, &block)
14
+ end
15
+ if ENV['RACK_ENV'.freeze] == 'production'.freeze
16
+ def load_engine(filename)
17
+ engine = self[filename]
18
+ return engine if engine
19
+ self[filename] = (Slim::Template.new { ::Plezi.try_utf8!(IO.binread(filename)) })
20
+ end
21
+ else
22
+ def load_engine(filename)
23
+ engine, tm = self[filename]
24
+ return engine if engine && (tm == File.mtime(filename))
25
+ self[filename] = [(engine = Slim::Template.new { ::Plezi.try_utf8!(IO.binread(filename)) }), File.mtime(filename)]
26
+ engine
27
+ end
28
+ end
14
29
  end
15
- if ENV['RACK_ENV'.freeze] == 'production'.freeze
16
- def load_engine(filename)
17
- engine = self[filename]
18
- return engine if engine
19
- self[filename] = (Slim::Template.new { ::Plezi.try_utf8!(IO.binread(filename)) })
20
- end
21
- else
22
- def load_engine(filename)
23
- engine, tm = self[filename]
24
- return engine if engine && (tm == File.mtime(filename))
25
- self[filename] = [(engine = Slim::Template.new { ::Plezi.try_utf8!(IO.binread(filename)) }), File.mtime(filename)]
26
- engine
27
- end
28
- end
29
- end
30
- end
30
+ end
31
31
  end
32
32
 
33
33
  ::Plezi::Renderer.register :slim, ::Plezi::Base::RenderSlim
@@ -1,23 +1,22 @@
1
1
  require 'plezi/router/route'
2
2
  require 'plezi/router/errors'
3
3
  require 'plezi/router/assets'
4
- require 'rack'
5
4
 
6
5
  module Plezi
7
- module Base
8
- module Router
9
- class ADClient
10
- def index
11
- fname = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'resources', 'client.js'))
12
- response.body = File.open(fname)
13
- response['X-Sendfile'] = fname
14
- true
15
- end
6
+ module Base
7
+ module Router
8
+ class ADClient
9
+ def index
10
+ fname = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'resources', 'client.js'))
11
+ response.body = File.open(fname)
12
+ response['X-Sendfile'] = fname
13
+ true
14
+ end
16
15
 
17
- def show
18
- index
19
- end
16
+ def show
17
+ index
18
+ end
19
+ end
20
20
  end
21
- end
22
- end
21
+ end
23
22
  end
@@ -1,67 +1,65 @@
1
- require 'fileutils'
2
- require 'set'
3
1
  module Plezi
4
- module Base
5
- class Assets
6
- if ENV['RACK_ENV'.freeze] == 'production'.freeze
7
- def index
8
- name = File.join(Plezi.assets, *params['*'.freeze]).freeze
9
- data = ::Plezi::AssetBaker.bake(name)
10
- return false unless data
11
- name = File.join(Iodine::Rack.public, request.path_info[1..-1]).freeze if Iodine::Rack.public
12
- if data.is_a?(String)
13
- FileUtils.mkpath File.dirname(name)
14
- IO.binwrite(name, data)
15
- end
16
- response['X-Sendfile'.freeze] = name
17
- response.body = File.open(name)
18
- true
19
- end
20
- else
21
- def index
22
- name = File.join(Plezi.assets, *params['*'.freeze]).freeze
23
- data = ::Plezi::AssetBaker.bake(name)
24
- IO.binwrite(name, data) if data.is_a?(String)
25
- if File.exist? name
26
- response['X-Sendfile'.freeze] = name
27
- response.body = File.open(name)
28
- return true
29
- end
30
- false
31
- end
32
- end
2
+ module Base
3
+ class Assets
4
+ if ENV['RACK_ENV'.freeze] == 'production'.freeze
5
+ def index
6
+ name = File.join(Plezi.assets, *params['*'.freeze]).freeze
7
+ data = ::Plezi::AssetBaker.bake(name)
8
+ return false unless data
9
+ name = File.join(Iodine::Rack.public, request.path_info[1..-1]).freeze if Iodine::Rack.public
10
+ if data.is_a?(String)
11
+ FileUtils.mkpath File.dirname(name)
12
+ IO.binwrite(name, data)
13
+ end
14
+ response['X-Sendfile'.freeze] = name
15
+ response.body = File.open(name)
16
+ true
17
+ end
18
+ else
19
+ def index
20
+ name = File.join(Plezi.assets, *params['*'.freeze]).freeze
21
+ data = ::Plezi::AssetBaker.bake(name)
22
+ IO.binwrite(name, data) if data.is_a?(String)
23
+ if File.exist? name
24
+ response['X-Sendfile'.freeze] = name
25
+ response.body = File.open(name)
26
+ return true
27
+ end
28
+ false
29
+ end
30
+ end
33
31
 
34
- def show
35
- index
32
+ def show
33
+ index
34
+ end
35
+ end
36
+ end
37
+ # This module is used for asset "baking" (or "belated baking"). It allows us to easily register and support new types of assets.
38
+ module AssetBaker
39
+ @drivers = {}
40
+ # Registers a new Asset Driver of a specific extension (i.e. "css", "js", etc')
41
+ #
42
+ # Multiple Asset Drivers can be registered for the same extension. The will be attempted in the order of their registration.
43
+ #
44
+ # An Asset Drivers is an object that responsd to `.call(target)`.
45
+ # If the traget is newly rendered, the driver should return the rendered text.
46
+ # If the asset didn't change since the last time `.call(target)` was called, the driver should return 'true' (meanning, yet, the asset exists, it's the same).
47
+ # If the driver doesn't locate the asset, it should return `nil` or `false`, indicating the next driver should be attempted.
48
+ def self.register(ext, driver)
49
+ (@drivers[".#{ext}".freeze] ||= [].to_set) << driver
36
50
  end
37
- end
38
- end
39
- # This module is used for asset "baking" (or "belated baking"). It allows us to easily register and support new types of assets.
40
- module AssetBaker
41
- @drivers = {}
42
- # Registers a new Asset Driver of a specific extension (i.e. "css", "js", etc')
43
- #
44
- # Multiple Asset Drivers can be registered for the same extension. The will be attempted in the order of their registration.
45
- #
46
- # An Asset Drivers is an object that responsd to `.call(target)`.
47
- # If the traget is newly rendered, the driver should return the rendered text.
48
- # If the asset didn't change since the last time `.call(target)` was called, the driver should return 'true' (meanning, yet, the asset exists, it's the same).
49
- # If the driver doesn't locate the asset, it should return `nil` or `false`, indicating the next driver should be attempted.
50
- def self.register(ext, driver)
51
- (@drivers[".#{ext}".freeze] ||= [].to_set) << driver
52
- end
53
51
 
54
- # @private
55
- # called by Plezi when in need of baking an asset.
56
- def self.bake(name)
57
- ret = nil
58
- ext = File.extname name
59
- return false if ext.empty?
60
- driver = @drivers[ext]
61
- return false if driver.nil?
62
- driver.each { |d| ret = d.call(name); return ret if ret }
63
- nil
64
- end
65
- end
52
+ # @private
53
+ # called by Plezi when in need of baking an asset.
54
+ def self.bake(name)
55
+ ret = nil
56
+ ext = File.extname name
57
+ return false if ext.empty?
58
+ driver = @drivers[ext]
59
+ return false if driver.nil?
60
+ driver.each { |d| ret = d.call(name); return ret if ret }
61
+ nil
62
+ end
63
+ end
66
64
  end
67
65
  require 'plezi/render/sass.rb'
@@ -1,29 +1,29 @@
1
1
  module Plezi
2
- module Base
3
- class Err404Ctrl
4
- def index
5
- response.status = 404
6
- render('404') || 'Error 404, not found.'
7
- end
2
+ module Base
3
+ class Err404Ctrl
4
+ def index
5
+ response.status = 404
6
+ render('404') || 'Error 404, not found.'
7
+ end
8
8
 
9
- def requested_method
10
- :index
11
- end
9
+ def requested_method
10
+ :index
11
+ end
12
12
 
13
- include Plezi::Controller
14
- end
15
- class Err500Ctrl
16
- def index
17
- response.status = 500
18
- render('500') || 'Internal Error 500.'
19
- rescue
20
- 'Internal Error 500.'
13
+ include Plezi::Controller
21
14
  end
15
+ class Err500Ctrl
16
+ def index
17
+ response.status = 500
18
+ render('500') || 'Internal Error 500.'
19
+ rescue
20
+ 'Internal Error 500.'
21
+ end
22
22
 
23
- def requested_method
24
- :index
23
+ def requested_method
24
+ :index
25
+ end
26
+ include Plezi::Controller
25
27
  end
26
- include Plezi::Controller
27
- end
28
- end
28
+ end
29
29
  end
@@ -1,113 +1,111 @@
1
1
  require 'plezi/controller/controller'
2
- require 'thread'
3
- require 'rack'
4
- require 'rack/query_parser.rb'
5
2
 
6
3
  module Plezi
7
- module Base
8
- class Route
9
- attr_reader :prefix, :controller, :param_names
4
+ module Base
5
+ class Route
6
+ attr_reader :prefix, :controller, :param_names
10
7
 
11
- def initialize(path, controller)
12
- @route_id = "Route#{object_id.to_s(16)}".to_sym
13
- m = path.match(/([^\:\(\*]*)(.*)/)
14
- @prefix = m[1].chomp('/'.freeze)
15
- if @prefix.nil? || @prefix == ''.freeze
16
- @prefix = '/'.freeze
17
- @prefix_length = 1
18
- else
19
- @prefix = "/#{@prefix}" if @prefix[0] != '/'.freeze
20
- @prefix_length = @prefix.length + 1
21
- end
22
- @controller = controller
23
- @param_names = []
24
- @origial = path.dup.freeze
25
- prep_params(m[2])
26
- self.class.qp
27
- case @controller
28
- when Class
29
- prep_controller
30
- when Regexp
31
- raise "Rewrite Routes can't contain more then one parameter to collect" if @param_names.length > 1
32
- else
33
- raise 'Controller should be a class object' unless controller.is_a?(Class)
34
- end
35
- end
8
+ def initialize(path, controller)
9
+ @route_id = "Route#{object_id.to_s(16)}".to_sym
10
+ @params_range = (0..0)
11
+ m = path.match(/([^\:\(\*]*)(.*)/)
12
+ @prefix = m[1].chomp('/'.freeze)
13
+ if @prefix.nil? || @prefix == ''.freeze
14
+ @prefix = '/'.freeze
15
+ @prefix_length = 1
16
+ else
17
+ @prefix = "/#{@prefix}" if @prefix[0] != '/'.freeze
18
+ @prefix_length = @prefix.length + 1
19
+ end
20
+ @controller = controller
21
+ @param_names = []
22
+ @origial = path.dup.freeze
23
+ prep_params(m[2])
24
+ self.class.qp
25
+ case @controller
26
+ when Class
27
+ prep_controller
28
+ when Regexp
29
+ raise "Rewrite Routes can't contain more then one parameter to collect" if @param_names.length > 1
30
+ else
31
+ raise 'Controller should be a class object' unless controller.is_a?(Class)
32
+ end
33
+ end
36
34
 
37
- def call(request, response)
38
- return nil unless match(request.path_info, request)
39
- c = @controller.new
40
- c._pl_respond(request, response, Thread.current[@route_id])
41
- end
35
+ def call(request, response)
36
+ return nil unless match(request.path_info, request)
37
+ c = @controller.new
38
+ c._pl_respond(request, response, Thread.current[@route_id])
39
+ end
42
40
 
43
- def fits_params(path, request)
44
- params = (Thread.current[@route_id] ||= {}).clear
45
- params.update request.params.to_h if request && request.params
46
- # puts "cutting: #{path[(@prefix_length)..-1] ? path[(@prefix_length + 1)..-1] : 'nil'}"
47
- pa = (path[@prefix_length..-1] || ''.freeze).split('/'.freeze)
48
- # puts "check param count: #{pa}"
49
- return false unless @params_range.include?(pa.length)
50
- @param_names.each do |key|
51
- next if pa[0].nil?
52
- self.class.qp.normalize_params(params, Plezi.try_utf8!(Rack::Utils.unescape(key)),
53
- Plezi.try_utf8!(Rack::Utils.unescape(pa.shift)), 100)
54
- end
55
- params['*'.freeze] = pa unless pa.empty?
56
- true
57
- end
41
+ def fits_params(path, request)
42
+ params = (Thread.current[@route_id] ||= {}).clear
43
+ params.update request.params.to_h if request && request.params
44
+ # puts "cutting: #{path[(@prefix_length)..-1] ? path[(@prefix_length + 1)..-1] : 'nil'}"
45
+ pa = (path[@prefix_length..-1] || ''.freeze).split('/'.freeze)
46
+ # puts "check param count: #{pa}"
47
+ return false unless @params_range.include?(pa.length)
48
+ @param_names.each do |key|
49
+ next if pa[0].nil?
50
+ self.class.qp.normalize_params(params, Plezi.try_utf8!(Rack::Utils.unescape(key)),
51
+ Plezi.try_utf8!(Rack::Utils.unescape(pa.shift)), 100)
52
+ end
53
+ params['*'.freeze] = pa unless pa.empty?
54
+ true
55
+ end
58
56
 
59
- def match(req_path, request = nil)
60
- # puts "#{req_path} starts with #{@prefix}? #{req_path.start_with?(@prefix)}"
61
- req_path.start_with?(@prefix) && fits_params(req_path, request)
62
- end
57
+ def match(req_path, request = nil)
58
+ # puts "#{req_path} starts with #{@prefix}? #{req_path.start_with?(@prefix)}"
59
+ req_path.start_with?(@prefix) && fits_params(req_path, request)
60
+ end
63
61
 
64
- def prep_params(postfix)
65
- pfa = postfix.split '/'.freeze
66
- start = 0; stop = 0
67
- optional = false
68
- while pfa.any?
69
- name = pfa.shift
70
- raise "#{name} is not a valid path section in #{@origial}" if /^((\:[\w\.\[\]]+)|(\(\:[\w\.\[\]]+\))|(\*))$/.match(name).nil?
71
- if name[0] == ':'
72
- raise "Cannot have a required parameter after an optional parameter in #{@origial}" if optional
73
- @param_names << name[1..-1].freeze
74
- elsif name[0] == '('
75
- optional = true
76
- @param_names << name[2..-2].freeze
77
- elsif name[0] == '*'
78
- stop += 999_999
79
- break
80
- else
81
- raise "invalid path section #{name} in #{@origial}"
82
- end
83
- optional ? (stop += 1) : (start += 1)
84
- end
85
- unless (@param_names.include? 'id'.freeze) || stop >= 999_999
86
- @param_names << 'id'.freeze
87
- stop += 1
88
- end
89
- @params_range = (start..(start + stop))
90
- @param_names.freeze
91
- @params_range.freeze
92
- end
62
+ def prep_params(postfix)
63
+ pfa = postfix.split '/'.freeze
64
+ start = 0; stop = 0
65
+ optional = false
66
+ while pfa.any?
67
+ name = pfa.shift
68
+ raise "#{name} is not a valid path section in #{@origial}" unless /^((\:[\w\.\[\]]+)|(\(\:[\w\.\[\]]+\))|(\*))$/.match(name)
69
+ if name[0] == ':'
70
+ raise "Cannot have a required parameter after an optional parameter in #{@origial}" if optional
71
+ @param_names << name[1..-1].freeze
72
+ elsif name[0] == '('
73
+ optional = true
74
+ @param_names << name[2..-2].freeze
75
+ elsif name[0] == '*'
76
+ stop += 999_999
77
+ break
78
+ else
79
+ raise "invalid path section #{name} in #{@origial}"
80
+ end
81
+ optional ? (stop += 1) : (start += 1)
82
+ end
83
+ unless (@param_names.include? 'id'.freeze) || stop >= 999_999
84
+ @param_names << 'id'.freeze
85
+ stop += 1
86
+ end
87
+ @params_range = (start..(start + stop))
88
+ @param_names.freeze
89
+ @params_range.freeze
90
+ end
93
91
 
94
- def prep_controller
95
- @controller.include Plezi::Controller
96
- end
92
+ def prep_controller
93
+ @controller.include Plezi::Controller
94
+ end
97
95
 
98
- def self.qp
99
- @qp ||= ::Rack::QueryParser.new(Hash, 65_536, 100)
96
+ def self.qp
97
+ @qp ||= ::Rack::QueryParser.new(Hash, 65_536, 100)
98
+ end
100
99
  end
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
100
+ class RouteRewrite < Route
101
+ def call(request, _response)
102
+ return nil unless match(request.path_info, request)
103
+ params = Thread.current[@route_id]
104
+ return nil unless controller =~ params[@param_names[0]]
105
+ request.path_info = "/#{params.delete('*'.freeze).to_a.join '/'}"
106
+ request.params.update params
107
+ nil
108
+ end
110
109
  end
111
- end
112
- end
110
+ end
113
111
  end