flame 4.12.2 → 4.12.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3b3c22d674ae570e3f8f2fd8874ec54f87dfb39b
4
- data.tar.gz: a8ab56284dc70eb6babcf86a2dd80281757278dd
3
+ metadata.gz: 4ed5d54f5f6821749a7324ead082677cb04d669e
4
+ data.tar.gz: 228dbe656d57d35ab38a75780ead602461a73827
5
5
  SHA512:
6
- metadata.gz: affe6a9c49a9eb2bd31ea0ed63540451e66a9986a35ed5a2d65cfd66363b13e0452eef7f8f194a00552203dfabfde31cd06550ac033256d04421b14d9398fe72
7
- data.tar.gz: c40433fa6ef393e1d3630ea4817aeb490639cdb2c16934849947c88705b063c18ca452db88d5b5ee8091ab5acd3e7dee37c3e2bae946e6d74b0dc82914a95e37
6
+ metadata.gz: d702039c0a51e0041d5bc41fb8b15c62bb1c9eb943fd2c6bfa74b88a8024f310921c9c22445fd8270e23a43815412fa9508ee42413aed7407a83b7efb89b93b2
7
+ data.tar.gz: 5347d0bc63a7c39d725369de0d1c8afa7707ef41cd95ea18aa282d8d61379903cb28b4353c0f731d6f45ddba853fc7603deb9c4a4cc41e19dd10004de2f8e5de
@@ -79,6 +79,10 @@ module Flame
79
79
  result
80
80
  end
81
81
 
82
+ def self.cached_tilts
83
+ @cached_tilts ||= {}
84
+ end
85
+
82
86
  ## Class for Flame::Application.config
83
87
  class Config < Hash
84
88
  def initialize(app, hash = {})
@@ -17,7 +17,7 @@ module Flame
17
17
  def_delegators(
18
18
  :@dispatcher,
19
19
  :config, :request, :params, :halt, :session, :response, :status, :body,
20
- :default_body
20
+ :default_body, :cached_tilts
21
21
  )
22
22
 
23
23
  ## Initialize the controller for request execution
@@ -44,19 +44,33 @@ module Flame
44
44
  ## @param path [String] path
45
45
  ## @example Redirect to '/hello'
46
46
  ## redirect '/hello'
47
+ ## @overload redirect(uri)
48
+ ## Redirect to the URI location
49
+ ## @param uri [URI] URI object
50
+ ## @example Redirect to 'http://example.com'
51
+ ## redirect URI::HTTP.build(host: 'example.com')
47
52
  ## @overload redirect(*args)
48
53
  ## Redirect to the path of `path_to` method
49
54
  ## @param args arguments for `path_to` method
50
55
  ## @example Redirect to `show` method of `ArticlesController` with id = 2
51
56
  ## redirect ArticlesController, :show, id: 2
52
57
  def redirect(*params)
58
+ probably_url = params.first
59
+ probably_url = probably_url.to_s if probably_url.is_a? URI
53
60
  response.redirect(
54
- params[0].is_a?(String) ? params[0] : path_to(*params)
61
+ probably_url.is_a?(String) ? probably_url : path_to(*params)
55
62
  )
56
63
  end
57
64
 
58
- # Set the Content-Disposition to "attachment" with the specified filename,
59
- # instructing the user agents to prompt to save.
65
+ ## Set the Content-Disposition to "attachment" with the specified filename,
66
+ ## instructing the user agents to prompt to save,
67
+ ## and set Content-Type by filename.
68
+ ## @param filename [String, nil] filename of attachment
69
+ ## @param disposition [Symbol, String] main content for Content-Disposition
70
+ ## @example Set Content-Disposition header without filename
71
+ ## attachment
72
+ ## @example Set Content-Disposition header with filename and Content-Type
73
+ ## attachment 'style.css'
60
74
  def attachment(filename = nil, disposition = :attachment)
61
75
  content_dis = 'Content-Disposition'
62
76
  response[content_dis] = disposition.to_s
@@ -88,7 +102,7 @@ module Flame
88
102
  ## @param method [Symbol] name of the controller method
89
103
  def execute(method)
90
104
  # send method
91
- body send(method, *select_args(method).values)
105
+ body send(method, *extract_params_for(method).values)
92
106
  end
93
107
 
94
108
  ## Default method for Internal Server Error, can be inherited
@@ -98,7 +112,7 @@ module Flame
98
112
 
99
113
  private
100
114
 
101
- def select_args(action)
115
+ def extract_params_for(action)
102
116
  # p action, params, parameters
103
117
  method(action).parameters.each_with_object({}) do |parameter, result|
104
118
  key = parameter.last
@@ -137,6 +137,11 @@ module Flame
137
137
  "<h1>#{Rack::Utils::HTTP_STATUS_CODES[status]}</h1>"
138
138
  end
139
139
 
140
+ ## All cached tilts (views) for application by Flame::Render
141
+ def cached_tilts
142
+ @app.class.cached_tilts
143
+ end
144
+
140
145
  private
141
146
 
142
147
  ## Find route and try execute it
@@ -161,7 +166,7 @@ module Flame
161
166
  # p 'rescue from dispatcher'
162
167
  dump_error(exception)
163
168
  status 500
164
- controller.send(:server_error, exception)
169
+ controller&.send(:server_error, exception)
165
170
  # p 're raise exception from dispatcher'
166
171
  # raise exception
167
172
  end
@@ -11,17 +11,17 @@ require 'gorilla-patch/inflections'
11
11
  module Flame
12
12
  ## Helper for render functionality
13
13
  class Render
14
- def initialize(ctrl, path, options = {})
14
+ def initialize(controller, path, options = {})
15
15
  ## Take options for rendering
16
- @ctrl = ctrl
17
- @scope = options.delete(:scope) || @ctrl
16
+ @controller = controller
17
+ @scope = options.delete(:scope) || @controller
18
18
  @layout = options.delete(:layout)
19
19
  @layout = 'layout.*' if @layout.nil?
20
20
  ## And get the rest variables to locals
21
21
  @locals = options.merge(options.delete(:locals) || {})
22
22
  ## Find filename
23
23
  @filename = find_file(path)
24
- # @ctrl.instance_exec { halt 404 } unless @filename
24
+ # @controller.instance_exec { halt 404 } unless @filename
25
25
  return unless @filename
26
26
  @layout = nil if File.basename(@filename)[0] == '_'
27
27
  end
@@ -39,25 +39,17 @@ module Flame
39
39
 
40
40
  private
41
41
 
42
- class << self
43
- # private
44
-
45
- def tilts
46
- @tilts ||= {}
47
- end
48
- end
49
-
50
42
  def views_dir
51
- @ctrl.config[:views_dir]
43
+ @controller.config[:views_dir]
52
44
  end
53
45
 
54
46
  ## Compile file with Tilt engine
55
47
  ## @param filename [String] filename
56
48
  def compile_file(filename = @filename)
57
- cached = self.class.tilts[filename]
49
+ cached = @controller.cached_tilts[filename]
58
50
  return cached if @cache && cached
59
51
  compiled = Tilt.new(filename)
60
- self.class.tilts[filename] ||= compiled if @cache
52
+ @controller.cached_tilts[filename] ||= compiled if @cache
61
53
  compiled
62
54
  end
63
55
 
@@ -95,8 +87,12 @@ module Flame
95
87
 
96
88
  ## Find possible directories for the controller
97
89
  def controller_dirs
98
- parts = @ctrl.class.underscore.split('/').map do |part|
99
- (part.split('_') - %w[controller controllers ctrl]).join('_')
90
+ parts = @controller.class.underscore.split('/').map do |part|
91
+ %w[_controller _ctrl]
92
+ .find { |suffix| part.chomp! suffix }
93
+ part
94
+ ## Alternative, but slower by ~50%:
95
+ # part.sub(/_(controller|ctrl)$/, '')
100
96
  end
101
97
  combine_parts(parts).map! { |path| path.join('/') }
102
98
  end
@@ -73,7 +73,15 @@ module Flame
73
73
 
74
74
  ## Compare by path parts count (more is matter)
75
75
  def <=>(other)
76
- other.path_parts.size <=> path_parts.size
76
+ self_parts, other_parts = [self, other].map(&:path_parts)
77
+ path_parts_size = other_parts.size <=> self_parts.size
78
+ return path_parts_size unless path_parts_size.zero?
79
+ other_parts.zip(self_parts)
80
+ .reduce(0) do |result, (other_part, self_part)|
81
+ break 1 if part_arg?(self_part) && !part_arg?(other_part)
82
+ break -1 if part_arg?(other_part) && !part_arg?(self_part)
83
+ result
84
+ end
77
85
  end
78
86
 
79
87
  def self.path_merge(*parts)
@@ -82,6 +90,10 @@ module Flame
82
90
 
83
91
  private
84
92
 
93
+ def part_arg?(part)
94
+ part.start_with? ARG_CHAR
95
+ end
96
+
85
97
  ## Helpers for `compare_attributes`
86
98
  def compare_attribute(name, value)
87
99
  case name
@@ -117,7 +129,7 @@ module Flame
117
129
  def request_contain_required_path_parts?(request_parts)
118
130
  req_path_parts = @path_parts.reject { |part| part[1] == ARG_CHAR_OPT }
119
131
  fixed_path_parts = @path_parts.reject { |part| part[0] == ARG_CHAR }
120
- (request_parts & fixed_path_parts) == fixed_path_parts &&
132
+ (fixed_path_parts - request_parts).empty? &&
121
133
  request_parts.count >= req_path_parts.count
122
134
  end
123
135
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Flame
4
- VERSION = '4.12.2'
4
+ VERSION = '4.12.4'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flame
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.12.2
4
+ version: 4.12.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Popov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-04 00:00:00.000000000 Z
11
+ date: 2017-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -127,6 +127,9 @@ dependencies:
127
127
  - - "~>"
128
128
  - !ruby/object:Gem::Version
129
129
  version: '1.1'
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: 1.1.1
130
133
  type: :development
131
134
  prerelease: false
132
135
  version_requirements: !ruby/object:Gem::Requirement
@@ -134,6 +137,9 @@ dependencies:
134
137
  - - "~>"
135
138
  - !ruby/object:Gem::Version
136
139
  version: '1.1'
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: 1.1.1
137
143
  - !ruby/object:Gem::Dependency
138
144
  name: rack-test
139
145
  requirement: !ruby/object:Gem::Requirement