plezi 0.14.4 → 0.14.5

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.
@@ -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