flame 4.12.2 → 4.12.4

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