rack-app 7.2.2 → 7.3.0

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: 5614e4c29acc3d192bebfc6d67a67c5b2ad862e3
4
- data.tar.gz: 3a78843a4bdcbccdd5adb9229f12a91251d7152a
3
+ metadata.gz: 470832cf00bcd28e1aba12840dea366381926732
4
+ data.tar.gz: 88c19a8414ba4a2ea6d1c45a420f0143869706b8
5
5
  SHA512:
6
- metadata.gz: 8176fac52e18bef41214a80e4bfd81a73d1c02f8c463a2f464ac9ffce842486d9bbe136148cdb48cb6de4caf51c081afa1caed5b71ed0c22fd0d5ad453df093c
7
- data.tar.gz: 80b38b35ed528638d952bd22b7aca152b1b85d4dbe53f7f5b536d939b3ae1388387db2ecb7716868d325b3c18772c51d1daffa9d212e893d8022b120c7450daf
6
+ metadata.gz: 9232cc283980236bce4ea88899ae68b442f8c75be15cc4d2318c2828646c1c19efee5c83a66ebb8a7d7424ea2f879cf5517501c6f27ac7b49c9c9cdd53983727
7
+ data.tar.gz: 126ab463a8bb939e0d5ad90514baaeec2bc3086f1d9164527bacece533f2b87c9665d4a46533a3b74c1818c39483d4808dc6aa65ee68daedf3f6c7a0b5a55999
data/.travis.yml CHANGED
@@ -6,18 +6,13 @@ install:
6
6
  - bundle install
7
7
 
8
8
  rvm:
9
-
10
- - 1.8
11
9
  - 1.9
12
10
  - 2.0.0
13
11
  - 2.1.1
14
12
  - 2.1.2
15
13
  - 2.2.2
16
14
  - 2.3.1
17
-
18
- - jruby-18mode
19
15
  - jruby-19mode
20
- - ree
21
16
 
22
17
  - ruby-head
23
18
  - jruby-head
data/VERSION CHANGED
@@ -1 +1 @@
1
- 7.2.2
1
+ 7.3.0
@@ -5,7 +5,7 @@ class Rack::App::CLI::Command
5
5
 
6
6
  class << self
7
7
 
8
- def option_definitions
8
+ def __option_definitions__
9
9
  @options_parser_options ||= []
10
10
  end
11
11
 
@@ -17,7 +17,7 @@ class Rack::App::CLI::Command
17
17
  alias desc description
18
18
 
19
19
  def option(*args, &block)
20
- option_definitions << {:args => args, :block => block}
20
+ __option_definitions__ << {:args => args, :block => block}
21
21
  end
22
22
 
23
23
  alias on option
@@ -28,11 +28,8 @@ class Rack::App::CLI::Command
28
28
 
29
29
  end
30
30
 
31
- def options
32
- @options ||= {}
33
- end
34
-
35
31
  def action(*argv)
32
+ raise NotImplementedError
36
33
  end
37
34
 
38
35
  def start(argv)
@@ -3,10 +3,8 @@ module Rack::App::CLI::Command::Configurator
3
3
  extend self
4
4
 
5
5
  def configure(command, name, options_parser)
6
-
7
- attach_definitions(command, options_parser, command.class.option_definitions)
6
+ attach_definitions(command, options_parser, command.class.__option_definitions__)
8
7
  update_banner(command, name, options_parser.banner)
9
-
10
8
  end
11
9
 
12
10
  protected
@@ -1,11 +1,11 @@
1
1
  module Rack::App::CLI::DefaultCommands::ListCommands
2
2
  extend self
3
3
 
4
- PRESERVED_KEYWORDS = %w[commands help routes irb].freeze
4
+ PRESERVED_KEYWORDS = %w[help routes irb].freeze
5
5
 
6
6
  DEFAULT_COMMANDS = {
7
- 'commands' => 'list all available command',
8
7
  'routes' => Rack::App::CLI::DefaultCommands::ShowRoutes.description,
8
+ 'help' => 'list all available command or describe a specific command',
9
9
  'irb' => Rack::App::CLI::DefaultCommands::IRB.description
10
10
  }.freeze
11
11
 
@@ -1,13 +1,106 @@
1
1
  class Rack::App::CLI::DefaultCommands::ShowRoutes < Rack::App::CLI::Command
2
-
3
2
  description 'list the routes for the application'
4
3
 
4
+ on '-v', '--verbose', 'print out everything' do
5
+ @verbose = true
6
+ end
7
+
8
+ on '-d', '--desc', '--description', 'include endpoint descriptions too' do
9
+ @description = true
10
+ end
11
+
12
+ on '-l', '--location', '--source-location', 'show endpoint definition locations' do
13
+ @source_location = true
14
+ end
15
+
16
+ on '-m', '--middlewares', 'show endpoint definition middleware stack' do
17
+ @middlewares = true
18
+ end
19
+
20
+ FIELD_FETCHERS = {
21
+ :request_method => proc { |endpoint| endpoint.request_method },
22
+ :request_path => proc { |endpoint| endpoint.request_path },
23
+ :description => proc { |endpoint| endpoint.description },
24
+ :source_location => proc do |endpoint|
25
+ callable = endpoint.properties[:callable]
26
+ callable = callable.method(:call) unless callable.is_a?(::Proc)
27
+ callable.source_location.join(':')
28
+ end
29
+ }.freeze
30
+
31
+ SORT_FIELDS = [:request_method, :request_path].freeze
32
+
5
33
  action do
6
- $stdout.puts(app.router.show_endpoints)
34
+ STDOUT.puts(format(sort(Rack::App::CLI.rack_app.router.endpoints)))
35
+ end
36
+
37
+ private
38
+
39
+
40
+ def get_fields
41
+ if @verbose
42
+ return FIELD_FETCHERS.keys
43
+ end
44
+
45
+ fields = [:request_method, :request_path]
46
+ fields << :description if @description
47
+ fields << :source_location if @source_location
48
+ fields
7
49
  end
8
50
 
9
- def app
10
- Rack::App::CLI.rack_app
51
+ def width_by(endpoints, fields)
52
+ fields.reduce({}) do |widths, property|
53
+ widths[property] = endpoints.map { |endpoint| FIELD_FETCHERS[property].call(endpoint).to_s.length }.max
54
+ widths
55
+ end
56
+ end
57
+
58
+
59
+ def sort(endpoints)
60
+ endpoints.sort_by { |endpoint| SORT_FIELDS.map { |sf| FIELD_FETCHERS[sf].call(endpoint) } }
61
+ end
62
+
63
+ def format(endpoints)
64
+ fields = get_fields
65
+ widths = width_by(endpoints, fields)
66
+
67
+ endpoints.map do |endpoint|
68
+ outputs = []
69
+
70
+ outputs << fields.map do |field|
71
+ FIELD_FETCHERS[field].call(endpoint).to_s.ljust(widths[field])
72
+ end.join(' ')
73
+
74
+ if @middlewares
75
+ outputs << pretty_print_middlewares(endpoint)
76
+ end
77
+
78
+ outputs.join("\n")
79
+ end.join("\n")
80
+ end
81
+
82
+ class FakeBuilder
83
+ attr_reader :middlewares
84
+
85
+ def initialize
86
+ @middlewares = []
87
+ end
88
+
89
+ def use(middleware, *args)
90
+ @middlewares << middleware
91
+ end
92
+ end
93
+
94
+ def pretty_print_middlewares(endpoint)
95
+ builder = FakeBuilder.new
96
+
97
+ endpoint.config.middlewares.each do |builder_block|
98
+ builder.instance_exec(builder, &builder_block)
99
+ end
100
+
101
+ builder.middlewares.map do |middleware|
102
+ ["\t", '* ', middleware].join
103
+ end.join("\n")
11
104
  end
12
105
 
13
- end
106
+ end
@@ -27,14 +27,12 @@ class Rack::App::CLI::Runner
27
27
  def start_command_for(command_name, argv)
28
28
  case command_name.to_s
29
29
 
30
- when 'commands'
31
- show_commands
32
-
33
30
  when 'help'
34
31
  show_help_message(argv)
35
32
 
36
33
  when 'routes'
37
- Rack::App::CLI::DefaultCommands::ShowRoutes.new.start(argv)
34
+ command = Rack::App::CLI::DefaultCommands::ShowRoutes.new
35
+ run_command(argv, command, "routes")
38
36
 
39
37
  when 'irb'
40
38
  Rack::App::CLI::DefaultCommands::IRB.new.start(argv)
@@ -28,7 +28,7 @@ class Rack::App::Endpoint
28
28
  end
29
29
 
30
30
  def to_app
31
- self.class::Builder.new(@config).build
31
+ self.class::Builder.new(@config).to_app
32
32
  end
33
33
 
34
34
  def rack_app?
@@ -5,15 +5,19 @@ class Rack::App::Endpoint::Builder
5
5
  @config = config
6
6
  end
7
7
 
8
+ def to_app
9
+ build.to_app
10
+ end
11
+
12
+ protected
13
+
8
14
  def build
9
15
  builder = Rack::Builder.new
10
16
  apply_middleware_build_blocks(builder)
11
17
  builder.run(app)
12
- builder.to_app
18
+ builder
13
19
  end
14
20
 
15
- protected
16
-
17
21
  def app
18
22
  case @config.type
19
23
  when :endpoint
@@ -25,7 +29,7 @@ class Rack::App::Endpoint::Builder
25
29
 
26
30
  def apply_middleware_build_blocks(builder)
27
31
  @config.middlewares.each do |builder_block|
28
- builder_block.call(builder)
32
+ builder.instance_exec(builder, &builder_block)
29
33
  end
30
34
  builder.use(Rack::App::Middlewares::Configuration, @config)
31
35
 
@@ -6,12 +6,6 @@ module Rack::App::InstanceMethods::Params
6
6
  request.env[E::PARAMS].to_hash
7
7
  end
8
8
 
9
- def validated_params
10
- request.env[E::PARAMS].validated_params
11
- end
12
-
13
- Rack::App::Utils.deprecate(self, :validated_params, :params, 2017, 07)
14
-
15
9
  def path_segments_params
16
10
  request.env[E::PARAMS].path_segments_params
17
11
  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: 7.2.2
4
+ version: 7.3.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: 2017-07-31 00:00:00.000000000 Z
11
+ date: 2017-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler