flame 2.2.0 → 3.2.1
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/lib/flame/application.rb +44 -16
 - data/lib/flame/controller.rb +49 -0
 - data/lib/flame/dispatcher.rb +52 -64
 - data/lib/flame/errors.rb +15 -2
 - data/lib/flame/render.rb +6 -2
 - data/lib/flame/route.rb +6 -1
 - data/lib/flame/router.rb +53 -27
 - data/lib/flame/validators.rb +3 -3
 - data/lib/flame.rb +1 -0
 - metadata +3 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: c72f15f6e82b2b169b8e8db77fe10d1d3674e217
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 319e24d36eacdbda8cd2454270cf6dea293d9d55
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 414b88f416bc9ba7d7723d5df9d419c36865f3c08ce55f7f800e52f4b0371f8243d19800ccc37ef9194080be88296e0d832f0a95e3a4e4d76ddfcc6842b1b581
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 96c70734f79a4a12040a3895445d18d97cad4a858b093a858d9f46399ebcf9aeb028526840238e5b9e860f4491263c2ace2368d36460fef9858fe8dc48916e61
         
     | 
    
        data/lib/flame/application.rb
    CHANGED
    
    | 
         @@ -1,32 +1,35 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require_relative 'router'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require_relative 'request'
         
     | 
| 
       2 
3 
     | 
    
         
             
            require_relative 'dispatcher'
         
     | 
| 
       3 
4 
     | 
    
         | 
| 
       4 
5 
     | 
    
         
             
            module Flame
         
     | 
| 
       5 
6 
     | 
    
         
             
            	## Core class, like Framework::Application
         
     | 
| 
       6 
7 
     | 
    
         
             
            	class Application
         
     | 
| 
       7 
     | 
    
         
            -
            		 
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            			@config ||= {}
         
     | 
| 
      
 8 
     | 
    
         
            +
            		class << self
         
     | 
| 
      
 9 
     | 
    
         
            +
            			attr_accessor :config
         
     | 
| 
       10 
10 
     | 
    
         
             
            		end
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
      
 12 
     | 
    
         
            +
            		## Framework configuration
         
     | 
| 
       12 
13 
     | 
    
         
             
            		def config
         
     | 
| 
       13 
14 
     | 
    
         
             
            			self.class.config
         
     | 
| 
       14 
15 
     | 
    
         
             
            		end
         
     | 
| 
       15 
16 
     | 
    
         | 
| 
       16 
17 
     | 
    
         
             
            		def self.inherited(app)
         
     | 
| 
       17 
     | 
    
         
            -
            			 
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
            				 
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
            				 
     | 
| 
      
 18 
     | 
    
         
            +
            			app.config = Config.new(
         
     | 
| 
      
 19 
     | 
    
         
            +
            				app,
         
     | 
| 
      
 20 
     | 
    
         
            +
            				default_config_dirs(
         
     | 
| 
      
 21 
     | 
    
         
            +
            					root_dir: File.dirname(caller[0].split(':')[0])
         
     | 
| 
      
 22 
     | 
    
         
            +
            				)
         
     | 
| 
       22 
23 
     | 
    
         
             
            			)
         
     | 
| 
       23 
     | 
    
         
            -
            			app.use Rack::Session::Pool
         
     | 
| 
      
 24 
     | 
    
         
            +
            			# app.use Rack::Session::Pool
         
     | 
| 
       24 
25 
     | 
    
         
             
            		end
         
     | 
| 
       25 
26 
     | 
    
         | 
| 
       26 
27 
     | 
    
         
             
            		def initialize
         
     | 
| 
       27 
28 
     | 
    
         
             
            			app = self
         
     | 
| 
       28 
29 
     | 
    
         
             
            			@builder = Rack::Builder.new do
         
     | 
| 
       29 
     | 
    
         
            -
            				app.class.middlewares.each  
     | 
| 
      
 30 
     | 
    
         
            +
            				app.class.middlewares.each do |m|
         
     | 
| 
      
 31 
     | 
    
         
            +
            					use m[:class], *m[:args], &m[:block]
         
     | 
| 
      
 32 
     | 
    
         
            +
            				end
         
     | 
| 
       30 
33 
     | 
    
         
             
            				run app
         
     | 
| 
       31 
34 
     | 
    
         
             
            			end
         
     | 
| 
       32 
35 
     | 
    
         
             
            		end
         
     | 
| 
         @@ -34,7 +37,7 @@ module Flame 
     | 
|
| 
       34 
37 
     | 
    
         
             
            		## Init function
         
     | 
| 
       35 
38 
     | 
    
         
             
            		def call(env)
         
     | 
| 
       36 
39 
     | 
    
         
             
            			if env[:FLAME_CALL]
         
     | 
| 
       37 
     | 
    
         
            -
            				Dispatcher.new(self, env).run!
         
     | 
| 
      
 40 
     | 
    
         
            +
            				Flame::Dispatcher.new(self, env).run!
         
     | 
| 
       38 
41 
     | 
    
         
             
            			else
         
     | 
| 
       39 
42 
     | 
    
         
             
            				env[:FLAME_CALL] = true
         
     | 
| 
       40 
43 
     | 
    
         
             
            				@builder.call env
         
     | 
| 
         @@ -45,21 +48,46 @@ module Flame 
     | 
|
| 
       45 
48 
     | 
    
         
             
            			router.add_controller(ctrl, path, block)
         
     | 
| 
       46 
49 
     | 
    
         
             
            		end
         
     | 
| 
       47 
50 
     | 
    
         | 
| 
      
 51 
     | 
    
         
            +
            		def self.middlewares
         
     | 
| 
      
 52 
     | 
    
         
            +
            			@middlewares ||= []
         
     | 
| 
      
 53 
     | 
    
         
            +
            		end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
       48 
55 
     | 
    
         
             
            		def self.use(middleware, *args, &block)
         
     | 
| 
       49 
56 
     | 
    
         
             
            			middlewares << { class: middleware, args: args, block: block }
         
     | 
| 
       50 
57 
     | 
    
         
             
            		end
         
     | 
| 
       51 
58 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
            		def self. 
     | 
| 
       53 
     | 
    
         
            -
            			@ 
     | 
| 
      
 59 
     | 
    
         
            +
            		def self.helpers(*modules)
         
     | 
| 
      
 60 
     | 
    
         
            +
            			modules.empty? ? (@helpers ||= []) : @helpers = modules
         
     | 
| 
       54 
61 
     | 
    
         
             
            		end
         
     | 
| 
       55 
62 
     | 
    
         | 
| 
       56 
63 
     | 
    
         
             
            		## Router for routing
         
     | 
| 
       57 
64 
     | 
    
         
             
            		def self.router
         
     | 
| 
       58 
     | 
    
         
            -
            			@router ||= Flame::Router.new
         
     | 
| 
      
 65 
     | 
    
         
            +
            			@router ||= Flame::Router.new(self)
         
     | 
| 
      
 66 
     | 
    
         
            +
            		end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
            		def self.default_config_dirs(root_dir:)
         
     | 
| 
      
 69 
     | 
    
         
            +
            			{
         
     | 
| 
      
 70 
     | 
    
         
            +
            				root_dir: File.realpath(root_dir),
         
     | 
| 
      
 71 
     | 
    
         
            +
            				public_dir: proc { File.join(config[:root_dir], 'public') },
         
     | 
| 
      
 72 
     | 
    
         
            +
            				views_dir: proc { File.join(config[:root_dir], 'views') },
         
     | 
| 
      
 73 
     | 
    
         
            +
            				config_dir: proc { File.join(config[:root_dir], 'config') }
         
     | 
| 
      
 74 
     | 
    
         
            +
            			}
         
     | 
| 
       59 
75 
     | 
    
         
             
            		end
         
     | 
| 
       60 
76 
     | 
    
         | 
| 
       61 
     | 
    
         
            -
            		 
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
      
 77 
     | 
    
         
            +
            		## Class for Flame::Application.config
         
     | 
| 
      
 78 
     | 
    
         
            +
            		class Config < Hash
         
     | 
| 
      
 79 
     | 
    
         
            +
            			def initialize(app, hash = {})
         
     | 
| 
      
 80 
     | 
    
         
            +
            				@app = app
         
     | 
| 
      
 81 
     | 
    
         
            +
            				replace(hash)
         
     | 
| 
      
 82 
     | 
    
         
            +
            			end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
            			def [](key)
         
     | 
| 
      
 85 
     | 
    
         
            +
            				result = super(key)
         
     | 
| 
      
 86 
     | 
    
         
            +
            				if result.class <= Proc && result.parameters.empty?
         
     | 
| 
      
 87 
     | 
    
         
            +
            					result = @app.class_exec(&result)
         
     | 
| 
      
 88 
     | 
    
         
            +
            				end
         
     | 
| 
      
 89 
     | 
    
         
            +
            				result
         
     | 
| 
      
 90 
     | 
    
         
            +
            			end
         
     | 
| 
       63 
91 
     | 
    
         
             
            		end
         
     | 
| 
       64 
92 
     | 
    
         
             
            	end
         
     | 
| 
       65 
93 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,49 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rack'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require_relative 'render'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Flame
         
     | 
| 
      
 5 
     | 
    
         
            +
            	## Class initialize when Dispatcher found route with it
         
     | 
| 
      
 6 
     | 
    
         
            +
            	## For new request and response
         
     | 
| 
      
 7 
     | 
    
         
            +
            	class Controller
         
     | 
| 
      
 8 
     | 
    
         
            +
            		def initialize(dispatcher)
         
     | 
| 
      
 9 
     | 
    
         
            +
            			@dispatcher = dispatcher
         
     | 
| 
      
 10 
     | 
    
         
            +
            		end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            		## Helpers
         
     | 
| 
      
 13 
     | 
    
         
            +
            		def path_to(*args)
         
     | 
| 
      
 14 
     | 
    
         
            +
            			args.unshift self.class if args[0].is_a? Symbol
         
     | 
| 
      
 15 
     | 
    
         
            +
            			@dispatcher.path_to(*args)
         
     | 
| 
      
 16 
     | 
    
         
            +
            		end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            		def redirect(*params)
         
     | 
| 
      
 19 
     | 
    
         
            +
            			response.redirect(
         
     | 
| 
      
 20 
     | 
    
         
            +
            				params[0].is_a?(String) ? params[0] : path_to(*params)
         
     | 
| 
      
 21 
     | 
    
         
            +
            			)
         
     | 
| 
      
 22 
     | 
    
         
            +
            		end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            		def view(path = nil, options = {})
         
     | 
| 
      
 25 
     | 
    
         
            +
            			Flame::Render.new(
         
     | 
| 
      
 26 
     | 
    
         
            +
            				self,
         
     | 
| 
      
 27 
     | 
    
         
            +
            				(path || caller_locations(1, 1)[0].label.to_sym),
         
     | 
| 
      
 28 
     | 
    
         
            +
            				options
         
     | 
| 
      
 29 
     | 
    
         
            +
            			).render
         
     | 
| 
      
 30 
     | 
    
         
            +
            		end
         
     | 
| 
      
 31 
     | 
    
         
            +
            		alias_method :render, :view
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            		## Helpers from Flame::Dispatcher
         
     | 
| 
      
 34 
     | 
    
         
            +
            		def method_missing(m, *args, &block)
         
     | 
| 
      
 35 
     | 
    
         
            +
            			return super unless @dispatcher.respond_to?(m)
         
     | 
| 
      
 36 
     | 
    
         
            +
            			@dispatcher.send(m, *args, &block)
         
     | 
| 
      
 37 
     | 
    
         
            +
            		end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            		private
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            		using GorillaPatch::StringExt
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            		def self.default_path(last = false)
         
     | 
| 
      
 44 
     | 
    
         
            +
            			(name.split('::').last.underscore.split('_') - %w(controller ctrl))
         
     | 
| 
      
 45 
     | 
    
         
            +
            			  .join('/').split('/')
         
     | 
| 
      
 46 
     | 
    
         
            +
            			  .unshift(nil)[(last ? -1 : 0)..-1].join('/')
         
     | 
| 
      
 47 
     | 
    
         
            +
            		end
         
     | 
| 
      
 48 
     | 
    
         
            +
            	end
         
     | 
| 
      
 49 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/flame/dispatcher.rb
    CHANGED
    
    | 
         @@ -1,14 +1,12 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'rack'
         
     | 
| 
       2 
     | 
    
         
            -
            require_relative 'request'
         
     | 
| 
       3 
     | 
    
         
            -
            require_relative 'render'
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
1 
     | 
    
         
             
            module Flame
         
     | 
| 
       6 
     | 
    
         
            -
            	##  
     | 
| 
       7 
     | 
    
         
            -
            	## For new request and response
         
     | 
| 
      
 2 
     | 
    
         
            +
            	## Helpers for dispatch Flame::Application#call
         
     | 
| 
       8 
3 
     | 
    
         
             
            	class Dispatcher
         
     | 
| 
      
 4 
     | 
    
         
            +
            		attr_reader :request, :response
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
       9 
6 
     | 
    
         
             
            		def initialize(app, env)
         
     | 
| 
       10 
7 
     | 
    
         
             
            			@app = app
         
     | 
| 
       11 
     | 
    
         
            -
            			@ 
     | 
| 
      
 8 
     | 
    
         
            +
            			@request = Flame::Request.new(env)
         
     | 
| 
      
 9 
     | 
    
         
            +
            			@response = Rack::Response.new
         
     | 
| 
       12 
10 
     | 
    
         
             
            		end
         
     | 
| 
       13 
11 
     | 
    
         | 
| 
       14 
12 
     | 
    
         
             
            		def run!
         
     | 
| 
         @@ -18,38 +16,41 @@ module Flame 
     | 
|
| 
       18 
16 
     | 
    
         
             
            				try_static(File.join(__dir__, '..', '..', 'public')) ||
         
     | 
| 
       19 
17 
     | 
    
         
             
            				halt(404)
         
     | 
| 
       20 
18 
     | 
    
         
             
            			end
         
     | 
| 
      
 19 
     | 
    
         
            +
            			# p body
         
     | 
| 
       21 
20 
     | 
    
         
             
            			response.write body
         
     | 
| 
       22 
21 
     | 
    
         
             
            			response.finish
         
     | 
| 
       23 
22 
     | 
    
         
             
            		end
         
     | 
| 
       24 
23 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
            		 
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
            			 
     | 
| 
      
 24 
     | 
    
         
            +
            		def status(value = nil)
         
     | 
| 
      
 25 
     | 
    
         
            +
            			response.status ||= 200
         
     | 
| 
      
 26 
     | 
    
         
            +
            			value ? response.status = value : response.status
         
     | 
| 
       28 
27 
     | 
    
         
             
            		end
         
     | 
| 
       29 
28 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
            		def  
     | 
| 
       31 
     | 
    
         
            -
            			 
     | 
| 
      
 29 
     | 
    
         
            +
            		def params
         
     | 
| 
      
 30 
     | 
    
         
            +
            			request.params
         
     | 
| 
       32 
31 
     | 
    
         
             
            		end
         
     | 
| 
       33 
32 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
            		def  
     | 
| 
       35 
     | 
    
         
            -
            			 
     | 
| 
      
 33 
     | 
    
         
            +
            		def session
         
     | 
| 
      
 34 
     | 
    
         
            +
            			request.session
         
     | 
| 
       36 
35 
     | 
    
         
             
            		end
         
     | 
| 
       37 
36 
     | 
    
         | 
| 
       38 
     | 
    
         
            -
            		def  
     | 
| 
       39 
     | 
    
         
            -
            			request. 
     | 
| 
      
 37 
     | 
    
         
            +
            		def cookies
         
     | 
| 
      
 38 
     | 
    
         
            +
            			@cookies ||= Cookies.new(request.cookies, response)
         
     | 
| 
       40 
39 
     | 
    
         
             
            		end
         
     | 
| 
       41 
40 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
            		def  
     | 
| 
       43 
     | 
    
         
            -
            			@ 
     | 
| 
      
 41 
     | 
    
         
            +
            		def config
         
     | 
| 
      
 42 
     | 
    
         
            +
            			@app.config
         
     | 
| 
       44 
43 
     | 
    
         
             
            		end
         
     | 
| 
       45 
44 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
            		def  
     | 
| 
       47 
     | 
    
         
            -
            			 
     | 
| 
       48 
     | 
    
         
            -
            			 
     | 
| 
      
 45 
     | 
    
         
            +
            		def path_to(ctrl, action, args = {})
         
     | 
| 
      
 46 
     | 
    
         
            +
            			route = @app.class.router.find_route(controller: ctrl, action: action)
         
     | 
| 
      
 47 
     | 
    
         
            +
            			fail RouteNotFoundError.new(ctrl, action) unless route
         
     | 
| 
      
 48 
     | 
    
         
            +
            			path = route.assign_arguments(args)
         
     | 
| 
      
 49 
     | 
    
         
            +
            			path.empty? ? '/' : path
         
     | 
| 
       49 
50 
     | 
    
         
             
            		end
         
     | 
| 
       50 
51 
     | 
    
         | 
| 
       51 
52 
     | 
    
         
             
            		def halt(new_status, body = '', new_headers = {})
         
     | 
| 
       52 
     | 
    
         
            -
            			status new_status
         
     | 
| 
      
 53 
     | 
    
         
            +
            			new_status.is_a?(String) ? (body = new_status) : (status new_status)
         
     | 
| 
       53 
54 
     | 
    
         
             
            			response.headers.merge!(new_headers)
         
     | 
| 
       54 
55 
     | 
    
         
             
            			# p response.body
         
     | 
| 
       55 
56 
     | 
    
         
             
            			if body.empty? &&
         
     | 
| 
         @@ -59,36 +60,11 @@ module Flame 
     | 
|
| 
       59 
60 
     | 
    
         
             
            			throw :halt, body
         
     | 
| 
       60 
61 
     | 
    
         
             
            		end
         
     | 
| 
       61 
62 
     | 
    
         | 
| 
       62 
     | 
    
         
            -
            		def path_to(ctrl, action, args = {})
         
     | 
| 
       63 
     | 
    
         
            -
            			route = router.find_route(controller: ctrl, action: action)
         
     | 
| 
       64 
     | 
    
         
            -
            			fail RouteNotFoundError.new(ctrl, action) unless route
         
     | 
| 
       65 
     | 
    
         
            -
            			path = route.assign_arguments(args)
         
     | 
| 
       66 
     | 
    
         
            -
            			path.empty? ? '/' : path
         
     | 
| 
       67 
     | 
    
         
            -
            		end
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
            		def redirect(*params)
         
     | 
| 
       70 
     | 
    
         
            -
            			throw :halt, response.redirect(
         
     | 
| 
       71 
     | 
    
         
            -
            				params[0].is_a?(String) ? params[0] : path_to(*params)
         
     | 
| 
       72 
     | 
    
         
            -
            			)
         
     | 
| 
       73 
     | 
    
         
            -
            		end
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
            		def session
         
     | 
| 
       76 
     | 
    
         
            -
            			request.session
         
     | 
| 
       77 
     | 
    
         
            -
            		end
         
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
            		def cookies
         
     | 
| 
       80 
     | 
    
         
            -
            			@cookies ||= Cookies.new(request.cookies, response)
         
     | 
| 
       81 
     | 
    
         
            -
            		end
         
     | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
       83 
     | 
    
         
            -
            		def view(path, options = {})
         
     | 
| 
       84 
     | 
    
         
            -
            			Flame::Render.new(self, path, options).render
         
     | 
| 
       85 
     | 
    
         
            -
            		end
         
     | 
| 
       86 
     | 
    
         
            -
            		alias_method :render, :view
         
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
63 
     | 
    
         
             
            		private
         
     | 
| 
       89 
64 
     | 
    
         | 
| 
      
 65 
     | 
    
         
            +
            		## Find route and try execute it
         
     | 
| 
       90 
66 
     | 
    
         
             
            		def try_route
         
     | 
| 
       91 
     | 
    
         
            -
            			route = router.find_route(
         
     | 
| 
      
 67 
     | 
    
         
            +
            			route = @app.class.router.find_route(
         
     | 
| 
       92 
68 
     | 
    
         
             
            				method: request.http_method,
         
     | 
| 
       93 
69 
     | 
    
         
             
            				path_parts: request.path_parts
         
     | 
| 
       94 
70 
     | 
    
         
             
            			)
         
     | 
| 
         @@ -101,28 +77,44 @@ module Flame 
     | 
|
| 
       101 
77 
     | 
    
         
             
            		end
         
     | 
| 
       102 
78 
     | 
    
         | 
| 
       103 
79 
     | 
    
         
             
            		def execute_route(route)
         
     | 
| 
       104 
     | 
    
         
            -
            			 
     | 
| 
       105 
     | 
    
         
            -
            			 
     | 
| 
       106 
     | 
    
         
            -
            			result = send(route[:action], *route.arranged_params(params))
         
     | 
| 
       107 
     | 
    
         
            -
            			 
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
      
 80 
     | 
    
         
            +
            			ctrl = route[:controller].new(self)
         
     | 
| 
      
 81 
     | 
    
         
            +
            			route[:befores].each { |before| ctrl.send(before) }
         
     | 
| 
      
 82 
     | 
    
         
            +
            			result = ctrl.send(route[:action], *route.arranged_params(params))
         
     | 
| 
      
 83 
     | 
    
         
            +
            			route[:afters].each { |after| result = execute_after(ctrl, after, result) }
         
     | 
| 
      
 84 
     | 
    
         
            +
            			result
         
     | 
| 
      
 85 
     | 
    
         
            +
            		end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
            		def execute_after(ctrl, after, result)
         
     | 
| 
      
 88 
     | 
    
         
            +
            			case after.class.to_s.to_sym
         
     | 
| 
      
 89 
     | 
    
         
            +
            			when :Symbol, :String
         
     | 
| 
      
 90 
     | 
    
         
            +
            				result = ctrl.send(after.to_sym, result)
         
     | 
| 
      
 91 
     | 
    
         
            +
            			when :Proc
         
     | 
| 
      
 92 
     | 
    
         
            +
            				ctrl.instance_exec(result, &after)
         
     | 
| 
      
 93 
     | 
    
         
            +
            			else
         
     | 
| 
      
 94 
     | 
    
         
            +
            				fail UnexpectedTypeOfAfterError.new(after, route)
         
     | 
| 
       109 
95 
     | 
    
         
             
            			end
         
     | 
| 
       110 
96 
     | 
    
         
             
            			result
         
     | 
| 
       111 
97 
     | 
    
         
             
            		end
         
     | 
| 
       112 
98 
     | 
    
         | 
| 
      
 99 
     | 
    
         
            +
            		## Find static files and try return it
         
     | 
| 
       113 
100 
     | 
    
         
             
            		def try_static(dir = config[:public_dir])
         
     | 
| 
       114 
     | 
    
         
            -
            			 
     | 
| 
      
 101 
     | 
    
         
            +
            			file = File.join(dir, request.path_info)
         
     | 
| 
       115 
102 
     | 
    
         
             
            			# p static_file
         
     | 
| 
       116 
     | 
    
         
            -
            			return nil unless File.exist?( 
     | 
| 
       117 
     | 
    
         
            -
            			return_static( 
     | 
| 
      
 103 
     | 
    
         
            +
            			return nil unless File.exist?(file) && File.file?(file)
         
     | 
| 
      
 104 
     | 
    
         
            +
            			return_static(file)
         
     | 
| 
      
 105 
     | 
    
         
            +
            		end
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
            		def static_cached?(file_time)
         
     | 
| 
      
 108 
     | 
    
         
            +
            			since = request.env['HTTP_IF_MODIFIED_SINCE']
         
     | 
| 
      
 109 
     | 
    
         
            +
            			since && Time.httpdate(since).to_i >= file_time.to_i
         
     | 
| 
       118 
110 
     | 
    
         
             
            		end
         
     | 
| 
       119 
111 
     | 
    
         | 
| 
       120 
112 
     | 
    
         
             
            		def return_static(file)
         
     | 
| 
       121 
     | 
    
         
            -
            			since = @env['HTTP_IF_MODIFIED_SINCE']
         
     | 
| 
       122 
113 
     | 
    
         
             
            			file_time = File.mtime(file)
         
     | 
| 
       123 
     | 
    
         
            -
            			halt 304 if  
     | 
| 
      
 114 
     | 
    
         
            +
            			halt 304 if static_cached?(file_time)
         
     | 
| 
      
 115 
     | 
    
         
            +
            			mime_type = Rack::Mime.mime_type(File.extname(file))
         
     | 
| 
       124 
116 
     | 
    
         
             
            			response.headers.merge!(
         
     | 
| 
       125 
     | 
    
         
            -
            				'Content-Type' =>  
     | 
| 
      
 117 
     | 
    
         
            +
            				'Content-Type' => mime_type,
         
     | 
| 
       126 
118 
     | 
    
         
             
            				'Last-Modified' => file_time.httpdate
         
     | 
| 
       127 
119 
     | 
    
         
             
            				# 'Content-Disposition' => 'attachment;' \
         
     | 
| 
       128 
120 
     | 
    
         
             
            				#	"filename=\"#{File.basename(static_file)}\"",
         
     | 
| 
         @@ -131,10 +123,6 @@ module Flame 
     | 
|
| 
       131 
123 
     | 
    
         
             
            			halt 200, File.read(file)
         
     | 
| 
       132 
124 
     | 
    
         
             
            		end
         
     | 
| 
       133 
125 
     | 
    
         | 
| 
       134 
     | 
    
         
            -
            		def file_mime_type(file)
         
     | 
| 
       135 
     | 
    
         
            -
            			Rack::Mime.mime_type(File.extname(file))
         
     | 
| 
       136 
     | 
    
         
            -
            		end
         
     | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
       138 
126 
     | 
    
         
             
            		## Helper class for cookies
         
     | 
| 
       139 
127 
     | 
    
         
             
            		class Cookies
         
     | 
| 
       140 
128 
     | 
    
         
             
            			def initialize(request_cookies, response)
         
     | 
    
        data/lib/flame/errors.rb
    CHANGED
    
    | 
         @@ -67,14 +67,27 @@ module Flame 
     | 
|
| 
       67 
67 
     | 
    
         
             
            	end
         
     | 
| 
       68 
68 
     | 
    
         | 
| 
       69 
69 
     | 
    
         
             
            	## Error for Flame::Controller.path_to
         
     | 
| 
       70 
     | 
    
         
            -
            	class  
     | 
| 
      
 70 
     | 
    
         
            +
            	class ArgumentNotAssignedError < StandardError
         
     | 
| 
       71 
71 
     | 
    
         
             
            		def initialize(path, path_part)
         
     | 
| 
       72 
72 
     | 
    
         
             
            			@path = path
         
     | 
| 
       73 
73 
     | 
    
         
             
            			@path_part = path_part
         
     | 
| 
       74 
74 
     | 
    
         
             
            		end
         
     | 
| 
       75 
75 
     | 
    
         | 
| 
       76 
76 
     | 
    
         
             
            		def message
         
     | 
| 
       77 
     | 
    
         
            -
            			"Argument '#{@path_part}' for '#{@path}' is not assigned"
         
     | 
| 
      
 77 
     | 
    
         
            +
            			"Argument '#{@path_part}' for path '#{@path}' is not assigned"
         
     | 
| 
      
 78 
     | 
    
         
            +
            		end
         
     | 
| 
      
 79 
     | 
    
         
            +
            	end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
            	## Error for Flame::Router.find_path
         
     | 
| 
      
 82 
     | 
    
         
            +
            	class UnexpectedTypeOfAfterError < StandardError
         
     | 
| 
      
 83 
     | 
    
         
            +
            		def initialize(after, route)
         
     | 
| 
      
 84 
     | 
    
         
            +
            			@after = after
         
     | 
| 
      
 85 
     | 
    
         
            +
            			@route = route
         
     | 
| 
      
 86 
     | 
    
         
            +
            		end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
            		def message
         
     | 
| 
      
 89 
     | 
    
         
            +
            			"Unexpected after-block class '#{@after.class}'" \
         
     | 
| 
      
 90 
     | 
    
         
            +
            			" in route '#{@route}'"
         
     | 
| 
       78 
91 
     | 
    
         
             
            		end
         
     | 
| 
       79 
92 
     | 
    
         
             
            	end
         
     | 
| 
       80 
93 
     | 
    
         
             
            end
         
     | 
    
        data/lib/flame/render.rb
    CHANGED
    
    | 
         @@ -52,9 +52,13 @@ module Flame 
     | 
|
| 
       52 
52 
     | 
    
         
             
            		def controller_dirs
         
     | 
| 
       53 
53 
     | 
    
         
             
            			## Build controller_dirs
         
     | 
| 
       54 
54 
     | 
    
         
             
            			controller_dir = (
         
     | 
| 
       55 
     | 
    
         
            -
            				@ctrl. 
     | 
| 
      
 55 
     | 
    
         
            +
            				@ctrl.class.name.underscore.split('_') - %w(controller ctrl)
         
     | 
| 
       56 
56 
     | 
    
         
             
            			).join('_')
         
     | 
| 
       57 
     | 
    
         
            -
            			 
     | 
| 
      
 57 
     | 
    
         
            +
            			controller_dir_parts = controller_dir.split('/')
         
     | 
| 
      
 58 
     | 
    
         
            +
            			[controller_dir,
         
     | 
| 
      
 59 
     | 
    
         
            +
            			 controller_dir_parts[1..-1].join('/'),
         
     | 
| 
      
 60 
     | 
    
         
            +
            			 controller_dir_parts[1..-2].join('/'),
         
     | 
| 
      
 61 
     | 
    
         
            +
            			 controller_dir_parts.last]
         
     | 
| 
       58 
62 
     | 
    
         
             
            		end
         
     | 
| 
       59 
63 
     | 
    
         | 
| 
       60 
64 
     | 
    
         
             
            		def layout_render(result)
         
     | 
    
        data/lib/flame/route.rb
    CHANGED
    
    | 
         @@ -13,6 +13,11 @@ module Flame 
     | 
|
| 
       13 
13 
     | 
    
         
             
            			@attributes[attribute]
         
     | 
| 
       14 
14 
     | 
    
         
             
            		end
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
      
 16 
     | 
    
         
            +
            		def merge(attrs)
         
     | 
| 
      
 17 
     | 
    
         
            +
            			dup.attributes.merge!(attrs)
         
     | 
| 
      
 18 
     | 
    
         
            +
            			self
         
     | 
| 
      
 19 
     | 
    
         
            +
            		end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
       16 
21 
     | 
    
         
             
            		## Compare attributes for `Router.find_route`
         
     | 
| 
       17 
22 
     | 
    
         
             
            		def compare_attributes(attrs)
         
     | 
| 
       18 
23 
     | 
    
         
             
            			attrs.each do |name, value|
         
     | 
| 
         @@ -90,7 +95,7 @@ module Flame 
     | 
|
| 
       90 
95 
     | 
    
         
             
            			## Required argument
         
     | 
| 
       91 
96 
     | 
    
         
             
            			param = args[path_part[1..-1].to_sym]
         
     | 
| 
       92 
97 
     | 
    
         
             
            			## Required argument is nil
         
     | 
| 
       93 
     | 
    
         
            -
            			fail  
     | 
| 
      
 98 
     | 
    
         
            +
            			fail ArgumentNotAssignedError.new(self[:path], path_part) if param.nil?
         
     | 
| 
       94 
99 
     | 
    
         
             
            			## All is ok
         
     | 
| 
       95 
100 
     | 
    
         
             
            			param
         
     | 
| 
       96 
101 
     | 
    
         
             
            		end
         
     | 
    
        data/lib/flame/router.rb
    CHANGED
    
    | 
         @@ -4,28 +4,31 @@ require_relative 'validators' 
     | 
|
| 
       4 
4 
     | 
    
         
             
            module Flame
         
     | 
| 
       5 
5 
     | 
    
         
             
            	## Router class for routing
         
     | 
| 
       6 
6 
     | 
    
         
             
            	class Router
         
     | 
| 
       7 
     | 
    
         
            -
            		 
     | 
| 
      
 7 
     | 
    
         
            +
            		attr_reader :app, :routes, :befores, :afters
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
            		def initialize
         
     | 
| 
      
 9 
     | 
    
         
            +
            		def initialize(app)
         
     | 
| 
      
 10 
     | 
    
         
            +
            			@app = app
         
     | 
| 
       10 
11 
     | 
    
         
             
            			@routes = []
         
     | 
| 
       11 
12 
     | 
    
         
             
            			@befores, @afters = Array.new(2) { {} }
         
     | 
| 
       12 
13 
     | 
    
         
             
            		end
         
     | 
| 
       13 
14 
     | 
    
         | 
| 
       14 
15 
     | 
    
         
             
            		def add_controller(ctrl, path, block = nil)
         
     | 
| 
       15 
16 
     | 
    
         
             
            			## TODO: Add Regexp paths
         
     | 
| 
       16 
     | 
    
         
            -
            			## TODO: Add `before` and `after` methods
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
            			## Add routes from controller to glob array
         
     | 
| 
       19 
     | 
    
         
            -
            			 
     | 
| 
       20 
     | 
    
         
            -
            			 
     | 
| 
       21 
     | 
    
         
            -
            			 
     | 
| 
       22 
     | 
    
         
            -
            			befores[ctrl] = ctrl_routes.befores
         
     | 
| 
       23 
     | 
    
         
            -
            			afters[ctrl] = ctrl_routes.afters
         
     | 
| 
      
 19 
     | 
    
         
            +
            			ctrl.include(*@app.helpers)
         
     | 
| 
      
 20 
     | 
    
         
            +
            			route_refine = RouteRefine.new(self, ctrl, path, block)
         
     | 
| 
      
 21 
     | 
    
         
            +
            			concat_routes(route_refine) if ActionsValidator.new(route_refine).valid?
         
     | 
| 
       24 
22 
     | 
    
         
             
            		end
         
     | 
| 
       25 
23 
     | 
    
         | 
| 
       26 
24 
     | 
    
         
             
            		## Find route by any attributes
         
     | 
| 
       27 
     | 
    
         
            -
            		def find_route(attrs)
         
     | 
| 
       28 
     | 
    
         
            -
            			routes.find { | 
     | 
| 
      
 25 
     | 
    
         
            +
            		def find_route(attrs, with_hooks = true)
         
     | 
| 
      
 26 
     | 
    
         
            +
            			route = routes.find { |r| r.compare_attributes(attrs) }
         
     | 
| 
      
 27 
     | 
    
         
            +
            			return route unless route && with_hooks
         
     | 
| 
      
 28 
     | 
    
         
            +
            			route.merge(
         
     | 
| 
      
 29 
     | 
    
         
            +
            				befores: find_befores(route),
         
     | 
| 
      
 30 
     | 
    
         
            +
            				afters: find_afters(route)
         
     | 
| 
      
 31 
     | 
    
         
            +
            			)
         
     | 
| 
       29 
32 
     | 
    
         
             
            		end
         
     | 
| 
       30 
33 
     | 
    
         | 
| 
       31 
34 
     | 
    
         
             
            		## Find before hook by Route
         
     | 
| 
         @@ -42,10 +45,16 @@ module Flame 
     | 
|
| 
       42 
45 
     | 
    
         | 
| 
       43 
46 
     | 
    
         
             
            		private
         
     | 
| 
       44 
47 
     | 
    
         | 
| 
      
 48 
     | 
    
         
            +
            		def concat_routes(route_refine)
         
     | 
| 
      
 49 
     | 
    
         
            +
            			routes.concat(route_refine.routes)
         
     | 
| 
      
 50 
     | 
    
         
            +
            			befores[route_refine.ctrl] = route_refine.befores
         
     | 
| 
      
 51 
     | 
    
         
            +
            			afters[route_refine.ctrl] = route_refine.afters
         
     | 
| 
      
 52 
     | 
    
         
            +
            		end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
       45 
54 
     | 
    
         
             
            		## Helper module for routing refine
         
     | 
| 
       46 
55 
     | 
    
         
             
            		class RouteRefine
         
     | 
| 
       47 
56 
     | 
    
         
             
            			attr_accessor :rest_routes
         
     | 
| 
       48 
     | 
    
         
            -
            			attr_reader :routes, :befores, :afters
         
     | 
| 
      
 57 
     | 
    
         
            +
            			attr_reader :ctrl, :routes, :befores, :afters
         
     | 
| 
       49 
58 
     | 
    
         | 
| 
       50 
59 
     | 
    
         
             
            			def self.http_methods
         
     | 
| 
       51 
60 
     | 
    
         
             
            				[:GET, :POST, :PUT, :DELETE]
         
     | 
| 
         @@ -61,31 +70,34 @@ module Flame 
     | 
|
| 
       61 
70 
     | 
    
         
             
            				]
         
     | 
| 
       62 
71 
     | 
    
         
             
            			end
         
     | 
| 
       63 
72 
     | 
    
         | 
| 
       64 
     | 
    
         
            -
            			def initialize(ctrl, path, block)
         
     | 
| 
      
 73 
     | 
    
         
            +
            			def initialize(router, ctrl, path, block)
         
     | 
| 
      
 74 
     | 
    
         
            +
            				@router = router
         
     | 
| 
       65 
75 
     | 
    
         
             
            				@ctrl = ctrl
         
     | 
| 
       66 
     | 
    
         
            -
            				@path = path ||  
     | 
| 
      
 76 
     | 
    
         
            +
            				@path = path || @ctrl.default_path
         
     | 
| 
       67 
77 
     | 
    
         
             
            				@routes = []
         
     | 
| 
       68 
78 
     | 
    
         
             
            				@befores, @afters = Array.new(2) { {} }
         
     | 
| 
       69 
     | 
    
         
            -
            				 
     | 
| 
       70 
     | 
    
         
            -
            				# p @routes
         
     | 
| 
       71 
     | 
    
         
            -
            				@routes.sort! { |a, b| b[:path] <=> a[:path] }
         
     | 
| 
      
 79 
     | 
    
         
            +
            				execute(&block)
         
     | 
| 
       72 
80 
     | 
    
         
             
            			end
         
     | 
| 
       73 
81 
     | 
    
         | 
| 
       74 
82 
     | 
    
         
             
            			http_methods.each do |request_method|
         
     | 
| 
       75 
     | 
    
         
            -
            				define_method(request_method.downcase) do |path, action|
         
     | 
| 
      
 83 
     | 
    
         
            +
            				define_method(request_method.downcase) do |path, action = nil|
         
     | 
| 
      
 84 
     | 
    
         
            +
            					if action.nil?
         
     | 
| 
      
 85 
     | 
    
         
            +
            						action = path.to_sym
         
     | 
| 
      
 86 
     | 
    
         
            +
            						path = "/#{path}"
         
     | 
| 
      
 87 
     | 
    
         
            +
            					end
         
     | 
| 
       76 
88 
     | 
    
         
             
            					ArgumentsValidator.new(@ctrl, path, action).valid?
         
     | 
| 
       77 
89 
     | 
    
         
             
            					add_route(request_method, path, action)
         
     | 
| 
       78 
90 
     | 
    
         
             
            				end
         
     | 
| 
       79 
91 
     | 
    
         
             
            			end
         
     | 
| 
       80 
92 
     | 
    
         | 
| 
       81 
     | 
    
         
            -
            			def before(actions, action)
         
     | 
| 
      
 93 
     | 
    
         
            +
            			def before(actions, action = nil, &block)
         
     | 
| 
       82 
94 
     | 
    
         
             
            				actions = [actions] unless actions.is_a?(Array)
         
     | 
| 
       83 
     | 
    
         
            -
            				actions.each { |a| (@befores[a] ||= []).push(action) }
         
     | 
| 
      
 95 
     | 
    
         
            +
            				actions.each { |a| (@befores[a] ||= []).push(action || block) }
         
     | 
| 
       84 
96 
     | 
    
         
             
            			end
         
     | 
| 
       85 
97 
     | 
    
         | 
| 
       86 
     | 
    
         
            -
            			def after(actions, action)
         
     | 
| 
      
 98 
     | 
    
         
            +
            			def after(actions, action = nil, &block)
         
     | 
| 
       87 
99 
     | 
    
         
             
            				actions = [actions] unless actions.is_a?(Array)
         
     | 
| 
       88 
     | 
    
         
            -
            				actions.each { |a| (@afters[a] ||= []).push(action) }
         
     | 
| 
      
 100 
     | 
    
         
            +
            				actions.each { |a| (@afters[a] ||= []).push(action || block) }
         
     | 
| 
       89 
101 
     | 
    
         
             
            			end
         
     | 
| 
       90 
102 
     | 
    
         | 
| 
       91 
103 
     | 
    
         
             
            			def defaults
         
     | 
| 
         @@ -106,13 +118,23 @@ module Flame 
     | 
|
| 
       106 
118 
     | 
    
         
             
            				end
         
     | 
| 
       107 
119 
     | 
    
         
             
            			end
         
     | 
| 
       108 
120 
     | 
    
         | 
| 
       109 
     | 
    
         
            -
            			 
     | 
| 
      
 121 
     | 
    
         
            +
            			def mount(ctrl, path = nil, &block)
         
     | 
| 
      
 122 
     | 
    
         
            +
            				path = path_merge(
         
     | 
| 
      
 123 
     | 
    
         
            +
            					@path,
         
     | 
| 
      
 124 
     | 
    
         
            +
            					(path || ctrl.default_path(true))
         
     | 
| 
      
 125 
     | 
    
         
            +
            				)
         
     | 
| 
      
 126 
     | 
    
         
            +
            				@router.add_controller(ctrl, path, block)
         
     | 
| 
      
 127 
     | 
    
         
            +
            			end
         
     | 
| 
       110 
128 
     | 
    
         | 
| 
       111 
     | 
    
         
            -
            			 
     | 
| 
      
 129 
     | 
    
         
            +
            			private
         
     | 
| 
       112 
130 
     | 
    
         | 
| 
       113 
     | 
    
         
            -
            			def  
     | 
| 
       114 
     | 
    
         
            -
            				 
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
      
 131 
     | 
    
         
            +
            			def execute(&block)
         
     | 
| 
      
 132 
     | 
    
         
            +
            				block.nil? ? defaults : instance_exec(&block)
         
     | 
| 
      
 133 
     | 
    
         
            +
            				@router.app.helpers.each do |helper|
         
     | 
| 
      
 134 
     | 
    
         
            +
            					instance_exec(&helper.mount) if helper.respond_to?(:mount)
         
     | 
| 
      
 135 
     | 
    
         
            +
            				end
         
     | 
| 
      
 136 
     | 
    
         
            +
            				# p @routes
         
     | 
| 
      
 137 
     | 
    
         
            +
            				@routes.sort! { |a, b| b[:path] <=> a[:path] }
         
     | 
| 
       116 
138 
     | 
    
         
             
            			end
         
     | 
| 
       117 
139 
     | 
    
         | 
| 
       118 
140 
     | 
    
         
             
            			def make_path(path, action = nil, force_params = false)
         
     | 
| 
         @@ -124,13 +146,17 @@ module Flame 
     | 
|
| 
       124 
146 
     | 
    
         
             
            					       .unshift(unshifted)
         
     | 
| 
       125 
147 
     | 
    
         
             
            					       .join('/')
         
     | 
| 
       126 
148 
     | 
    
         
             
            				end
         
     | 
| 
       127 
     | 
    
         
            -
            				 
     | 
| 
      
 149 
     | 
    
         
            +
            				path_merge(@path, path)
         
     | 
| 
       128 
150 
     | 
    
         
             
            			end
         
     | 
| 
       129 
151 
     | 
    
         | 
| 
       130 
152 
     | 
    
         
             
            			def action_path(action)
         
     | 
| 
       131 
153 
     | 
    
         
             
            				action == :index ? '/' : action
         
     | 
| 
       132 
154 
     | 
    
         
             
            			end
         
     | 
| 
       133 
155 
     | 
    
         | 
| 
      
 156 
     | 
    
         
            +
            			def path_merge(*parts)
         
     | 
| 
      
 157 
     | 
    
         
            +
            				parts.join('/').gsub(%r{\/{2,}}, '/')
         
     | 
| 
      
 158 
     | 
    
         
            +
            			end
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
       134 
160 
     | 
    
         
             
            			def add_route(method, path, action, force_params = false)
         
     | 
| 
       135 
161 
     | 
    
         
             
            				route = Route.new(
         
     | 
| 
       136 
162 
     | 
    
         
             
            					method: method,
         
     | 
    
        data/lib/flame/validators.rb
    CHANGED
    
    | 
         @@ -57,9 +57,9 @@ module Flame 
     | 
|
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
            	## Compare actions from routes and from controller
         
     | 
| 
       59 
59 
     | 
    
         
             
            	class ActionsValidator
         
     | 
| 
       60 
     | 
    
         
            -
            		def initialize( 
     | 
| 
       61 
     | 
    
         
            -
            			@routes = routes
         
     | 
| 
       62 
     | 
    
         
            -
            			@ctrl = ctrl
         
     | 
| 
      
 60 
     | 
    
         
            +
            		def initialize(route_refine)
         
     | 
| 
      
 61 
     | 
    
         
            +
            			@routes = route_refine.routes
         
     | 
| 
      
 62 
     | 
    
         
            +
            			@ctrl = route_refine.ctrl
         
     | 
| 
       63 
63 
     | 
    
         
             
            		end
         
     | 
| 
       64 
64 
     | 
    
         | 
| 
       65 
65 
     | 
    
         
             
            		def valid?
         
     | 
    
        data/lib/flame.rb
    CHANGED
    
    
    
        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 
     | 
    
         
            +
              version: 3.2.1
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Alexander Popov
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2015- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2015-12-07 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: rack
         
     | 
| 
         @@ -74,6 +74,7 @@ extra_rdoc_files: [] 
     | 
|
| 
       74 
74 
     | 
    
         
             
            files:
         
     | 
| 
       75 
75 
     | 
    
         
             
            - lib/flame.rb
         
     | 
| 
       76 
76 
     | 
    
         
             
            - lib/flame/application.rb
         
     | 
| 
      
 77 
     | 
    
         
            +
            - lib/flame/controller.rb
         
     | 
| 
       77 
78 
     | 
    
         
             
            - lib/flame/dispatcher.rb
         
     | 
| 
       78 
79 
     | 
    
         
             
            - lib/flame/errors.rb
         
     | 
| 
       79 
80 
     | 
    
         
             
            - lib/flame/render.rb
         
     |