rack-app 3.0.0.gamma → 3.0.0
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/VERSION +1 -1
- data/bin/rack-app +3 -0
- data/exec/rack-app +4 -0
- data/lib/rack/app.rb +1 -0
- data/lib/rack/app/cli.rb +48 -0
- data/lib/rack/app/cli/command.rb +93 -0
- data/lib/rack/app/cli/default_commands.rb +3 -0
- data/lib/rack/app/cli/default_commands/list_commands.rb +29 -0
- data/lib/rack/app/cli/runner.rb +50 -0
- data/lib/rack/app/error_handler.rb +1 -1
- data/lib/rack/app/extension.rb +24 -31
- data/lib/rack/app/file_server.rb +1 -1
- data/lib/rack/app/singleton_methods.rb +2 -0
- data/lib/rack/app/singleton_methods/extensions.rb +18 -0
- data/lib/rack/app/singleton_methods/inheritance.rb +1 -1
- data/lib/rack/app/singleton_methods/mounting.rb +5 -7
- data/lib/rack/app/singleton_methods/settings.rb +6 -22
- data/lib/rack/app/utils/deep_dup.rb +41 -6
- metadata +14 -6
- data/lib/rack/app/extension/factory.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54ad60f95e02d3a3d1cdd12869c110ebd8936c20
|
4
|
+
data.tar.gz: 7acb5847ee8f8a9b12939572a316e0bd2e543b62
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 434df103635f1c9376d83c6736652337156e685ded88130846b62371beac56a3b9dd620e730e1dbe52c5127985d7247c223a8f515061b9c097dc8625339262cf
|
7
|
+
data.tar.gz: 65712cce379e85a8183799f0d1aa0e37714c4e7e6642dce3005b83336812670afdaecd3f4431376d92f6f6d57d64e014a85ae7cce37a08c50da0c750a64d37c6
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.0.0
|
1
|
+
3.0.0
|
data/bin/rack-app
ADDED
data/exec/rack-app
ADDED
data/lib/rack/app.rb
CHANGED
data/lib/rack/app/cli.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'rack/app'
|
2
|
+
require 'optparse'
|
3
|
+
class Rack::App::CLI
|
4
|
+
|
5
|
+
require 'rack/app/cli/command'
|
6
|
+
require 'rack/app/cli/default_commands'
|
7
|
+
require 'rack/app/cli/runner'
|
8
|
+
|
9
|
+
class << self
|
10
|
+
|
11
|
+
def start(argv)
|
12
|
+
runner.start(argv)
|
13
|
+
end
|
14
|
+
|
15
|
+
def runner
|
16
|
+
Rack::App::CLI::Runner.new(rack_app)
|
17
|
+
end
|
18
|
+
|
19
|
+
def rack_app
|
20
|
+
@rack_app ||= lambda {
|
21
|
+
context = {}
|
22
|
+
Kernel.__send__(:define_method, :run) { |app, *_| context[:app]= app }
|
23
|
+
config_ru_file_path = Rack::App::Utils.pwd('config.ru')
|
24
|
+
load(config_ru_file_path) if File.exist?(config_ru_file_path)
|
25
|
+
context[:app]
|
26
|
+
}.call
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
def merge!(cli)
|
32
|
+
commands.merge!(cli.commands)
|
33
|
+
self
|
34
|
+
end
|
35
|
+
|
36
|
+
def commands
|
37
|
+
@commands ||= {}
|
38
|
+
end
|
39
|
+
|
40
|
+
protected
|
41
|
+
|
42
|
+
def command(name, &block)
|
43
|
+
command_prototype = Class.new(Rack::App::CLI::Command)
|
44
|
+
command_prototype.class_exec(&block)
|
45
|
+
commands[name.to_s.to_sym]= command_prototype.new(name.to_s.to_sym)
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
class Rack::App::CLI::Command
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def optparse_options
|
8
|
+
@options_parser_options ||= []
|
9
|
+
end
|
10
|
+
|
11
|
+
def description(message = nil)
|
12
|
+
@description = message unless message.nil?
|
13
|
+
@description || ''
|
14
|
+
end
|
15
|
+
|
16
|
+
alias desc description
|
17
|
+
|
18
|
+
def option(*args, &block)
|
19
|
+
optparse_options << {:args => args, :block => block}
|
20
|
+
end
|
21
|
+
|
22
|
+
alias on option
|
23
|
+
|
24
|
+
def action(&block)
|
25
|
+
define_method(:action, &block)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
attr_reader :name
|
31
|
+
|
32
|
+
def initialize(name)
|
33
|
+
@name = name.to_s
|
34
|
+
@option_parser = OptionParser.new
|
35
|
+
attach_definitions!
|
36
|
+
update_banner!
|
37
|
+
end
|
38
|
+
|
39
|
+
def help_message
|
40
|
+
@option_parser.help
|
41
|
+
end
|
42
|
+
|
43
|
+
def description
|
44
|
+
self.class.description
|
45
|
+
end
|
46
|
+
|
47
|
+
def start(argv)
|
48
|
+
@option_parser.parse!(argv)
|
49
|
+
action(*argv)
|
50
|
+
rescue ArgumentError => ex
|
51
|
+
$stderr.puts(ex.message)
|
52
|
+
end
|
53
|
+
|
54
|
+
def action(*argv)
|
55
|
+
end
|
56
|
+
|
57
|
+
protected
|
58
|
+
|
59
|
+
def attach_definitions!
|
60
|
+
self.class.optparse_options.each do |h|
|
61
|
+
@option_parser.on(*h[:args]) do |*args|
|
62
|
+
instance_exec(*args,&h[:block])
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def update_banner!
|
68
|
+
|
69
|
+
banner = @option_parser.banner
|
70
|
+
banner.sub!('[options]', "#{@name} [options]")
|
71
|
+
|
72
|
+
# [[:req, :a], [:opt, :b], [:rest, :c], [:keyreq, :d], [:keyrest, :e]]
|
73
|
+
(method(:action).parameters rescue []).each do |type, keyword|
|
74
|
+
case type
|
75
|
+
when :req
|
76
|
+
banner.concat(" <#{keyword}>")
|
77
|
+
|
78
|
+
when :opt
|
79
|
+
banner.concat(" [<#{keyword}>]")
|
80
|
+
|
81
|
+
when :rest, :keyrest
|
82
|
+
banner.concat(" [<#{keyword}> <#{keyword}> ...]")
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
banner.concat("\n\n")
|
88
|
+
banner.concat(description)
|
89
|
+
banner.concat("\n\n")
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Rack::App::CLI::DefaultCommands::ListCommands
|
2
|
+
|
3
|
+
extend self
|
4
|
+
|
5
|
+
def get_message(known_commands)
|
6
|
+
puts_collection = []
|
7
|
+
|
8
|
+
add_header(puts_collection)
|
9
|
+
|
10
|
+
list_command_name = 'commands'
|
11
|
+
rjust = known_commands.keys.push(list_command_name).map(&:to_s).map(&:length).max + 3
|
12
|
+
|
13
|
+
puts_collection << [list_command_name.to_s.rjust(rjust), 'list all available command'].join(' ')
|
14
|
+
known_commands.sort_by { |name, _| name.to_s }.each do |name, command|
|
15
|
+
puts_collection << [name.to_s.rjust(rjust), command.description].join(' ')
|
16
|
+
end
|
17
|
+
|
18
|
+
puts_collection
|
19
|
+
end
|
20
|
+
|
21
|
+
protected
|
22
|
+
|
23
|
+
def add_header(puts_collection)
|
24
|
+
cmd_file_name = File.basename($0)
|
25
|
+
puts_collection << "Usage: #{cmd_file_name} <command> [options] <args>\n\n"
|
26
|
+
puts_collection << "Some useful #{cmd_file_name} commands are:"
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
class Rack::App::CLI::Runner
|
2
|
+
|
3
|
+
def initialize(app)
|
4
|
+
@cli = app.respond_to?(:cli) ? app.cli : Rack::App::CLI.new
|
5
|
+
end
|
6
|
+
|
7
|
+
def start(argv)
|
8
|
+
command_name = argv.shift
|
9
|
+
start_command_for(command_name,argv)
|
10
|
+
end
|
11
|
+
|
12
|
+
protected
|
13
|
+
|
14
|
+
def show_commands
|
15
|
+
$stdout.puts(Rack::App::CLI::DefaultCommands::ListCommands.get_message(commands))
|
16
|
+
end
|
17
|
+
|
18
|
+
def show_help_message(argv)
|
19
|
+
command_name = argv.shift
|
20
|
+
command = command_for(command_name)
|
21
|
+
command ? $stdout.puts(command.help_message) : show_commands
|
22
|
+
end
|
23
|
+
|
24
|
+
def start_command_for(command_name, argv)
|
25
|
+
case command_name.to_s
|
26
|
+
|
27
|
+
when 'commands'
|
28
|
+
show_commands
|
29
|
+
|
30
|
+
when 'help'
|
31
|
+
show_help_message(argv)
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
command = command_for(command_name)
|
36
|
+
|
37
|
+
command && command.start(argv)
|
38
|
+
end
|
39
|
+
|
40
|
+
def command_for(name)
|
41
|
+
return if name.nil?
|
42
|
+
|
43
|
+
commands[name.to_s.to_sym]
|
44
|
+
end
|
45
|
+
|
46
|
+
def commands
|
47
|
+
@cli.commands
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -30,7 +30,7 @@ class Rack::App::ErrorHandler
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def parent(ex)
|
33
|
-
handler = @handlers.find { |exception_class,
|
33
|
+
handler = @handlers.find { |exception_class, _| ex.class <= exception_class }
|
34
34
|
return handler.nil? ? nil : handler.last
|
35
35
|
end
|
36
36
|
|
data/lib/rack/app/extension.rb
CHANGED
@@ -1,44 +1,37 @@
|
|
1
|
-
|
1
|
+
module Rack::App::Extension
|
2
2
|
|
3
|
-
|
3
|
+
extend self
|
4
4
|
|
5
|
-
|
5
|
+
def apply_extensions(app_class, applied_ext_names, apply_ext_names)
|
6
|
+
apply_ext_names.each do |extension_name|
|
7
|
+
extension_name = format_extension_name(extension_name)
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
def name(extension_name_alias)
|
12
|
-
names << extension_name_alias.to_s.to_sym
|
13
|
-
end
|
14
|
-
|
15
|
-
def inherited(klass)
|
16
|
-
klass.name(Rack::App::Utils.snake_case(klass.to_s.split('::').last).to_sym)
|
17
|
-
end
|
9
|
+
next if applied_ext_names.include?(extension_name)
|
10
|
+
applied_ext_names << extension_name
|
18
11
|
|
19
|
-
|
20
|
-
|
21
|
-
end
|
12
|
+
ext = find_extension_for(extension_name)
|
13
|
+
app_class.class_eval(&ext)
|
22
14
|
|
23
|
-
def extends
|
24
|
-
@extends ||= []
|
25
15
|
end
|
16
|
+
nil
|
17
|
+
end
|
26
18
|
|
27
|
-
|
28
|
-
|
29
|
-
|
19
|
+
def format_extension_name(extension_name)
|
20
|
+
extension_name.to_s.to_sym
|
21
|
+
end
|
30
22
|
|
31
|
-
|
32
|
-
|
33
|
-
|
23
|
+
def register(extension_name, &builder_block)
|
24
|
+
extensions[format_extension_name(extension_name)]= builder_block
|
25
|
+
end
|
34
26
|
|
35
|
-
|
36
|
-
extends << app_class_methods_module
|
37
|
-
end
|
27
|
+
protected
|
38
28
|
|
39
|
-
|
40
|
-
|
41
|
-
|
29
|
+
def extensions
|
30
|
+
@extensions ||= {}
|
31
|
+
end
|
42
32
|
|
33
|
+
def find_extension_for(sym_name)
|
34
|
+
return extensions[sym_name.to_s.to_sym] || raise("Not registered extension name requested: #{sym_name}")
|
43
35
|
end
|
36
|
+
|
44
37
|
end
|
data/lib/rack/app/file_server.rb
CHANGED
@@ -6,6 +6,7 @@ module Rack::App::SingletonMethods
|
|
6
6
|
require 'rack/app/singleton_methods/rack_interface'
|
7
7
|
require 'rack/app/singleton_methods/route_handling'
|
8
8
|
require 'rack/app/singleton_methods/settings'
|
9
|
+
require 'rack/app/singleton_methods/extensions'
|
9
10
|
|
10
11
|
include Rack::App::SingletonMethods::HttpMethods
|
11
12
|
include Rack::App::SingletonMethods::Inheritance
|
@@ -13,5 +14,6 @@ module Rack::App::SingletonMethods
|
|
13
14
|
include Rack::App::SingletonMethods::RackInterface
|
14
15
|
include Rack::App::SingletonMethods::RouteHandling
|
15
16
|
include Rack::App::SingletonMethods::Settings
|
17
|
+
include Rack::App::SingletonMethods::Extensions
|
16
18
|
|
17
19
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Rack::App::SingletonMethods::Extensions
|
2
|
+
|
3
|
+
protected
|
4
|
+
|
5
|
+
def applied_extensions
|
6
|
+
@applied_extensions ||= []
|
7
|
+
end
|
8
|
+
|
9
|
+
def apply_extensions(*extension_names)
|
10
|
+
Rack::App::Extension.apply_extensions(self,applied_extensions,extension_names)
|
11
|
+
end
|
12
|
+
|
13
|
+
def extensions(*extensions_names)
|
14
|
+
apply_extensions(*extensions_names)
|
15
|
+
applied_extensions
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -12,7 +12,7 @@ module Rack::App::SingletonMethods::Inheritance
|
|
12
12
|
|
13
13
|
child.serializer(&serializer.logic)
|
14
14
|
child.headers.merge!(headers)
|
15
|
-
child.
|
15
|
+
child.middlewares.push(*middlewares)
|
16
16
|
|
17
17
|
on_inheritance.each do |block|
|
18
18
|
block.call(self, child)
|
@@ -1,22 +1,20 @@
|
|
1
1
|
module Rack::App::SingletonMethods::Mounting
|
2
2
|
|
3
|
-
def mount(api_class,
|
4
|
-
mount_to_path = ::Rack::App::Utils.deep_dup(mount_prop[:to])
|
5
|
-
|
3
|
+
def mount(api_class, properties={})
|
6
4
|
unless api_class.is_a?(Class) and api_class <= Rack::App
|
7
5
|
raise(ArgumentError, 'Invalid class given for mount, must be a Rack::App')
|
8
6
|
end
|
9
7
|
|
10
8
|
duplication = ::Rack::App::Utils.deep_dup(api_class)
|
11
|
-
|
12
9
|
duplication.on_mounted.each do |on_mount|
|
13
|
-
duplication.class_exec(
|
10
|
+
duplication.class_exec(::Rack::App::Utils.deep_dup(properties), &on_mount)
|
14
11
|
end
|
15
12
|
|
16
|
-
|
13
|
+
cli.merge!(duplication.cli)
|
14
|
+
merge_prop = {:namespaces => [@namespaces, properties[:to]].flatten}
|
17
15
|
router.merge_router!(duplication.router, merge_prop)
|
18
16
|
|
19
|
-
|
17
|
+
nil
|
20
18
|
end
|
21
19
|
|
22
20
|
def mount_directory(directory_path, options={})
|
@@ -1,5 +1,11 @@
|
|
1
1
|
module Rack::App::SingletonMethods::Settings
|
2
2
|
|
3
|
+
def cli(&block)
|
4
|
+
@cli ||= Rack::App::CLI.new
|
5
|
+
@cli.instance_exec(&block) unless block.nil?
|
6
|
+
@cli
|
7
|
+
end
|
8
|
+
|
3
9
|
protected
|
4
10
|
|
5
11
|
def serializer(&definition_how_to_serialize)
|
@@ -18,26 +24,6 @@ module Rack::App::SingletonMethods::Settings
|
|
18
24
|
@headers
|
19
25
|
end
|
20
26
|
|
21
|
-
def extensions(*extensions)
|
22
|
-
extensions.each do |ext|
|
23
|
-
|
24
|
-
if ext.is_a?(Symbol)
|
25
|
-
ext = Rack::App::Extension::Factory::find_for(ext)
|
26
|
-
end
|
27
|
-
|
28
|
-
if ext.is_a?(::Class) && ext < ::Rack::App::Extension
|
29
|
-
|
30
|
-
ext.includes.each { |m| include(m) }
|
31
|
-
ext.extends.each { |m| extend(m) }
|
32
|
-
ext.inheritances.each { |block| on_inheritance(&block) }
|
33
|
-
|
34
|
-
else
|
35
|
-
raise("unsupported extension reference: #{ext.inspect}")
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
27
|
def error(*exception_classes, &block)
|
42
28
|
@error_handler ||= Rack::App::ErrorHandler.new
|
43
29
|
unless block.nil?
|
@@ -47,8 +33,6 @@ module Rack::App::SingletonMethods::Settings
|
|
47
33
|
return @error_handler
|
48
34
|
end
|
49
35
|
|
50
|
-
private
|
51
|
-
|
52
36
|
def middlewares(&block)
|
53
37
|
@middlewares ||= []
|
54
38
|
@middlewares << block unless block.nil?
|
@@ -21,6 +21,7 @@ module Rack::App::Utils::DeepDup
|
|
21
21
|
|
22
22
|
def dup(register, object)
|
23
23
|
|
24
|
+
return object unless registrable?(object)
|
24
25
|
return registered(object, register) if registered(object, register)
|
25
26
|
|
26
27
|
case object
|
@@ -37,7 +38,7 @@ module Rack::App::Utils::DeepDup
|
|
37
38
|
when Struct
|
38
39
|
dup_struct(register, object)
|
39
40
|
|
40
|
-
when NilClass, Symbol, Numeric, TrueClass, FalseClass
|
41
|
+
when NilClass, Symbol, Numeric, TrueClass, FalseClass, Method
|
41
42
|
register_duplication(register, object, object)
|
42
43
|
|
43
44
|
else
|
@@ -46,6 +47,13 @@ module Rack::App::Utils::DeepDup
|
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
50
|
+
def registrable?(object)
|
51
|
+
object.object_id
|
52
|
+
true
|
53
|
+
rescue NoMethodError
|
54
|
+
false
|
55
|
+
end
|
56
|
+
|
49
57
|
def dup_array(register, object)
|
50
58
|
duplication = dup_object(register, object)
|
51
59
|
duplication.map! { |e| dup(register, e) }
|
@@ -73,16 +81,43 @@ module Rack::App::Utils::DeepDup
|
|
73
81
|
end
|
74
82
|
|
75
83
|
def dup_object(register, object)
|
76
|
-
dup_instance_variables(register, object, register_duplication(register, object, object
|
84
|
+
dup_instance_variables(register, object, register_duplication(register, object, try_dup(object)))
|
77
85
|
end
|
78
86
|
|
79
|
-
def dup_instance_variables(register, object,
|
87
|
+
def dup_instance_variables(register, object, duplication)
|
88
|
+
return duplication unless respond_to_instance_variables?(object)
|
89
|
+
|
80
90
|
object.instance_variables.each do |instance_variable|
|
81
|
-
value = object
|
82
|
-
|
91
|
+
value = get_instance_variable(object, instance_variable)
|
92
|
+
|
93
|
+
set_instance_variable(duplication, instance_variable, dup(register, value))
|
83
94
|
end
|
84
95
|
|
85
|
-
return
|
96
|
+
return duplication
|
97
|
+
end
|
98
|
+
|
99
|
+
def get_instance_variable(object, instance_variable_name)
|
100
|
+
object.instance_variable_get(instance_variable_name)
|
101
|
+
rescue NoMethodError
|
102
|
+
object.instance_eval("#{instance_variable_name}")
|
103
|
+
end
|
104
|
+
|
105
|
+
def set_instance_variable(duplicate, instance_variable_name, value_to_set)
|
106
|
+
duplicate.instance_variable_set(instance_variable_name, value_to_set)
|
107
|
+
rescue NoMethodError
|
108
|
+
duplicate.instance_eval("#{instance_variable_name} = Marshal.load(#{Marshal.dump(value_to_set).inspect})")
|
109
|
+
end
|
110
|
+
|
111
|
+
def try_dup(object)
|
112
|
+
object.dup
|
113
|
+
rescue NoMethodError, TypeError
|
114
|
+
object
|
115
|
+
end
|
116
|
+
|
117
|
+
def respond_to_instance_variables?(object)
|
118
|
+
object.respond_to?(:instance_variables)
|
119
|
+
rescue NoMethodError
|
120
|
+
false
|
86
121
|
end
|
87
122
|
|
88
123
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-app
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Luzsi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -70,7 +70,8 @@ description: Your next favourite rack based micro framework that is totally addi
|
|
70
70
|
free! Have a cup of awesomeness with your to performance designed framework!
|
71
71
|
email:
|
72
72
|
- adamluzsi@gmail.com
|
73
|
-
executables:
|
73
|
+
executables:
|
74
|
+
- rack-app
|
74
75
|
extensions: []
|
75
76
|
extra_rdoc_files: []
|
76
77
|
files:
|
@@ -86,13 +87,19 @@ files:
|
|
86
87
|
- Rakefile
|
87
88
|
- VERSION
|
88
89
|
- Vagrantfile
|
90
|
+
- bin/rack-app
|
91
|
+
- exec/rack-app
|
89
92
|
- lib/rack/app.rb
|
93
|
+
- lib/rack/app/cli.rb
|
94
|
+
- lib/rack/app/cli/command.rb
|
95
|
+
- lib/rack/app/cli/default_commands.rb
|
96
|
+
- lib/rack/app/cli/default_commands/list_commands.rb
|
97
|
+
- lib/rack/app/cli/runner.rb
|
90
98
|
- lib/rack/app/constants.rb
|
91
99
|
- lib/rack/app/endpoint.rb
|
92
100
|
- lib/rack/app/endpoint/not_found.rb
|
93
101
|
- lib/rack/app/error_handler.rb
|
94
102
|
- lib/rack/app/extension.rb
|
95
|
-
- lib/rack/app/extension/factory.rb
|
96
103
|
- lib/rack/app/file_server.rb
|
97
104
|
- lib/rack/app/instance_methods.rb
|
98
105
|
- lib/rack/app/instance_methods/core.rb
|
@@ -109,6 +116,7 @@ files:
|
|
109
116
|
- lib/rack/app/router/static.rb
|
110
117
|
- lib/rack/app/serializer.rb
|
111
118
|
- lib/rack/app/singleton_methods.rb
|
119
|
+
- lib/rack/app/singleton_methods/extensions.rb
|
112
120
|
- lib/rack/app/singleton_methods/http_methods.rb
|
113
121
|
- lib/rack/app/singleton_methods/inheritance.rb
|
114
122
|
- lib/rack/app/singleton_methods/mounting.rb
|
@@ -137,9 +145,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
137
145
|
version: '0'
|
138
146
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
147
|
requirements:
|
140
|
-
- - "
|
148
|
+
- - ">="
|
141
149
|
- !ruby/object:Gem::Version
|
142
|
-
version:
|
150
|
+
version: '0'
|
143
151
|
requirements: []
|
144
152
|
rubyforge_project:
|
145
153
|
rubygems_version: 2.4.8
|
@@ -1,13 +0,0 @@
|
|
1
|
-
module Rack::App::Extension::Factory
|
2
|
-
|
3
|
-
extend self
|
4
|
-
|
5
|
-
def all
|
6
|
-
ObjectSpace.each_object(Class).select { |klass| klass < ::Rack::App::Extension }
|
7
|
-
end
|
8
|
-
|
9
|
-
def find_for(sym_name)
|
10
|
-
return all.find{|extension_class| extension_class.names.include?(sym_name) }
|
11
|
-
end
|
12
|
-
|
13
|
-
end
|