dizby 1.5.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.rubocop.yml +2 -47
  4. data/.travis.yml +7 -7
  5. data/.yardopts +1 -16
  6. data/Gemfile +2 -17
  7. data/Rakefile +2 -8
  8. data/dizby.gemspec +9 -2
  9. data/lib/dizby.rb +0 -1
  10. data/lib/dizby/access/control_list.rb +1 -2
  11. data/lib/dizby/access/entry.rb +1 -2
  12. data/lib/dizby/access/insecure.rb +4 -5
  13. data/lib/dizby/access/list.rb +0 -1
  14. data/lib/dizby/converter/simple.rb +0 -1
  15. data/lib/dizby/converter/timed.rb +0 -1
  16. data/lib/dizby/distributed/array.rb +0 -1
  17. data/lib/dizby/distributed/object.rb +9 -9
  18. data/lib/dizby/distributed/proxy.rb +7 -7
  19. data/lib/dizby/distributed/semi_proxy.rb +2 -2
  20. data/lib/dizby/distributed/undumpable.rb +1 -2
  21. data/lib/dizby/distributed/unknown.rb +0 -1
  22. data/lib/dizby/error.rb +0 -1
  23. data/lib/dizby/protocol/basic.rb +0 -1
  24. data/lib/dizby/protocol/manager.rb +17 -20
  25. data/lib/dizby/protocol/refined.rb +0 -1
  26. data/{gemfiles/Gemfile.ci → lib/dizby/protocol/structs.rb} +4 -5
  27. data/lib/dizby/protocols/dead.rb +3 -4
  28. data/lib/dizby/protocols/secure.rb +18 -12
  29. data/lib/dizby/protocols/tcp.rb +19 -15
  30. data/lib/dizby/protocols/unix.rb +15 -15
  31. data/lib/dizby/server/abstract.rb +7 -5
  32. data/lib/dizby/server/basic.rb +5 -9
  33. data/lib/dizby/server/registration.rb +0 -1
  34. data/lib/dizby/service.rb +10 -8
  35. data/lib/dizby/stream/client.rb +0 -1
  36. data/lib/dizby/stream/connection.rb +2 -3
  37. data/lib/dizby/stream/messenger.rb +0 -1
  38. data/lib/dizby/stream/query_ref.rb +0 -1
  39. data/lib/dizby/stream/readable.rb +5 -6
  40. data/lib/dizby/stream/writable.rb +0 -1
  41. data/lib/dizby/tunnel/abstract.rb +10 -18
  42. data/lib/dizby/tunnel/basic.rb +2 -3
  43. data/lib/dizby/tunnel/basic_spawn.rb +4 -5
  44. data/lib/dizby/tunnel/bidirectional_strategy.rb +0 -1
  45. data/lib/dizby/tunnel/factory.rb +0 -1
  46. data/lib/dizby/tunnel/local_strategy.rb +0 -1
  47. data/lib/dizby/tunnel/spawn_command.rb +0 -1
  48. data/lib/dizby/tunnel/spawned.rb +0 -1
  49. data/lib/dizby/tunnel/tunnelable_local.rb +0 -1
  50. data/lib/dizby/tunnel/tunnelable_remote.rb +1 -2
  51. data/lib/dizby/utility/configurable.rb +0 -1
  52. data/lib/dizby/utility/io_barrier.rb +0 -1
  53. data/lib/dizby/utility/log.rb +0 -1
  54. data/lib/dizby/utility/monitor.rb +0 -1
  55. data/lib/dizby/utility/self_pipe.rb +0 -1
  56. data/lib/dizby/utility/semi_built.rb +0 -1
  57. data/lib/dizby/utility/string.rb +0 -1
  58. data/lib/dizby/utility/timed_collection.rb +0 -1
  59. data/lib/dizby/utility/timed_state.rb +0 -1
  60. data/lib/dizby/version.rb +1 -2
  61. data/lib/dizby/worker/connection.rb +0 -1
  62. data/lib/dizby/worker/invoke_method.rb +1 -2
  63. data/lib/dizby/worker/server.rb +0 -1
  64. data/test/test_helper.rb +1 -14
  65. metadata +93 -19
  66. data/gemfiles/Gemfile.doc +0 -12
  67. data/lib/dizby/utility/classic_access.rb +0 -31
  68. data/lib/dizby/utility/delegator.rb +0 -34
  69. data/lib/dizby/utility/force_bind.rb +0 -27
  70. data/lib/dizby/utility/polymorphic_delegated.rb +0 -65
  71. data/tasks/ghpages.rake +0 -33
  72. data/tasks/rubocop.rake +0 -14
  73. data/tasks/test.rake +0 -25
  74. data/tasks/yard.rake +0 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1f2f90893529a4323259e9ab3834e85cba493f52
4
- data.tar.gz: 668b5e640f0a6e3f8e4ea698201a78c3b4dc7f3f
3
+ metadata.gz: 38bb5b303f7f0773cd06e2cfaaa4f155444d046f
4
+ data.tar.gz: 72c687978802a978963575d4269c1f1dfa85eb9b
5
5
  SHA512:
6
- metadata.gz: 0e96381b0f3555d97144ffad8551055fb5c7afbaf3ecbbf19ea5af74a6c2e3b6e5c9c5af5a8a8357b3492641e57a7163fabd3483698fdd409e72d2d5d364d511
7
- data.tar.gz: f401cc1bcfbd3643c13b2a886c6d6660ee3cd2bc3e5be879164e4300365b7945423a2b3e962961262594e7ff0a18805fadfbb6a6561287de35a7f5fc7f1c128b
6
+ metadata.gz: a5a08a6e1f17ee01d269167cb3e1ffeec8a4dd32471ca6cd4965b3819681e4c1be564fafdca6ce58a0663ef96733d1560bd3f81c5c2d3b845d45eda9a8c86a36
7
+ data.tar.gz: c94f327e1100ee6eb4361686dbd5fe15f10e2961ad8ea0226657f2c95e0de2afbb6af32c4b7f7eb3815137baf0bafa00f4bf35043815c25430190c10abcdd98e
data/.gitignore CHANGED
@@ -1,4 +1,6 @@
1
- Gemfile*.lock
1
+ Gemfile.lock
2
+ /.bundle/
3
+ /vendor/bundle/
2
4
 
3
5
  *.gem
4
6
  /pkg/
data/.rubocop.yml CHANGED
@@ -1,52 +1,7 @@
1
1
  ---
2
2
 
3
- AllCops:
4
- Include:
5
- - 'gemfiles/*'
6
- - 'tasks/*'
7
-
8
- Style/Documentation:
9
- Enabled: false
3
+ inherit_gem:
4
+ rideliner: .rubocop.yml
10
5
 
11
6
  Metrics/MethodLength:
12
7
  Max: 12
13
-
14
- Style/SpecialGlobalVars:
15
- Enabled: false
16
-
17
- Style/AutoResourceCleanup:
18
- Enabled: true
19
-
20
- Style/CollectionMethods:
21
- Enabled: true
22
-
23
- Style/Copyright:
24
- Enabled: true
25
- Notice: '^# Copyright \(c\) 2\d{3} .+$'
26
-
27
- Style/Encoding:
28
- Enabled: true
29
-
30
- Style/MethodCalledOnDoEndBlock:
31
- Enabled: true
32
-
33
- Style/MultilineArrayBraceLayout:
34
- Enabled: true
35
-
36
- Style/MultilineAssignmentLayout:
37
- Enabled: true
38
-
39
- Style/OptionHash:
40
- Enabled: true
41
-
42
- Style/Send:
43
- Enabled: true
44
-
45
- Style/StringMethods:
46
- Enabled: true
47
-
48
- Style/SymbolArray:
49
- Enabled: true
50
-
51
- Lint/LiteralInInterpolation:
52
- Enabled: true
data/.travis.yml CHANGED
@@ -1,22 +1,22 @@
1
1
  language: ruby
2
- bundler_args: "--without lint --jobs=3 --retry=3"
3
2
  cache: bundler
3
+ dist: trusty
4
+ sudo: required
4
5
  before_install:
5
6
  - gem update --system
6
7
  - gem install bundler
8
+ gemfile: Gemfile
9
+ rvm:
10
+ - 2.2.0
11
+ - rbx
12
+ script: bundle exec rake test
7
13
  matrix:
8
14
  include:
9
15
  - rvm: 2.3.0
10
- gemfile: gemfiles/Gemfile.ci
11
16
  script: bundle exec rake ci
12
- - rvm: rbx-3.14
13
- gemfile: Gemfile
14
- script: bundle exec rake test
15
17
  - rvm: 2.3.0
16
- gemfile: gemfiles/Gemfile.doc
17
18
  script: bundle exec rake yard:deploy
18
19
  env: DOCS=true
19
- sudo: false
20
20
  env:
21
21
  global:
22
22
  - secure: eYfZEZYiVMyeIJ9r3jAxgtF9vXDO2jMMJok9PL5tkKIDdi5XmkF2V1cwzzLI69DAPwuhfkPWVbiDgqjD0OHexOJMYipmdpgoZ/2AsSDnbzUDAbfuxjhGCvghD80U4lvb9B/VYWxhcubTsUXjBaivaik859wmajqLi0ROwD3jgm/0AF5oXpyHiIqEkFxQJ7E8D2pUm9kx4IH9uTP+lqrzBOdto2aGc+8XqgewcImC5Qp5ycikbZyPpvEKQDRYp6dHpcInrj+6TpiGW/HCs7R/Luf7BUILIgrV3NT4eFeGRvhdk2ON2v84ke0O8FDtrGje9uQWVn/dT2jL6wAekUyxS5CW225DzKjA6IIr54nQDizFjduFNPFDN4xWZr33e6EfWKe8uAJTOMepCVJ5Gr3jeGkT3xn8VXZLwZ0OZJ4BuKWzDcQqQZd0EQWKhOlhtm32jJ+YrSBWX4tLl8ma9qCLSy2dVKd5qVjIvX221Pg/rsGwO1MpNnV0OL3QUihKQxHPFbL/NNTGkGFnL/lMN85OdPXm6lmPYFS09GUYRYty7zOmBmQI53w7vsIxXjTKxE42od6smvWm3yicH/EKXzHcGmepPDILBWjazEsuXwvAi21y66fOTl1hWPE26+y9UWWmUEPU4uEq1oEFSjrM7qPhc1ZnLNUCY1gSFxQ5KCU1bXc=
data/.yardopts CHANGED
@@ -1,18 +1,3 @@
1
- --readme README.md
2
1
  --title Dizby Documentation
3
- --charset utf-8
4
-
5
- --markup markdown
6
- --markup-provider kramdown
7
- --output-dir _yardoc
8
-
9
- --protected
10
- --private
11
- --default-return ''
12
-
13
2
  --plugin yard_dizby
14
-
15
- lib/**/*.rb
16
- -
17
- doc/*.md
18
- LICENSE.md
3
+ --plugin yard_rideliner
data/Gemfile CHANGED
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # Copyright (c) 2016 Nathan Currier
3
2
 
4
3
  # This Source Code Form is subject to the terms of the Mozilla Public
@@ -7,21 +6,7 @@
7
6
 
8
7
  source 'https://rubygems.org'
9
8
 
10
- gemspec path: __dir__
9
+ gemspec
11
10
 
12
11
  gem 'force_bind', require: false, platforms: :mri
13
-
14
- group :development do
15
- gem 'rake', require: false
16
-
17
- # lint
18
- gem 'rubocop', '>= 0.36.0', require: false
19
-
20
- # test
21
- gem 'minitest', require: false
22
- gem 'simplecov', require: false
23
-
24
- # doc
25
- gem 'yard_dizby', require: false
26
- gem 'kramdown', require: false
27
- end
12
+ gem 'force_bind_rbx', require: false, platforms: :rbx
data/Rakefile CHANGED
@@ -1,18 +1,12 @@
1
- # encoding: utf-8
2
1
  # Copyright (c) 2016 Nathan Currier
3
2
 
4
3
  # This Source Code Form is subject to the terms of the Mozilla Public
5
4
  # License, v. 2.0. If a copy of the MPL was not distributed with this
6
5
  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
7
6
 
8
- require 'rubygems'
9
7
  require 'bundler'
10
8
 
11
9
  Bundler.setup(:default, :development)
12
10
 
13
- require 'bundler/gem_tasks'
14
-
15
- Dir.glob('tasks/*.rake').each { |task| import task }
16
-
17
- task default: %i(rubocop test)
18
- task ci: 'test:coverage'
11
+ require 'rideliner/tasks'
12
+ require 'yard_rideliner/tasks'
data/dizby.gemspec CHANGED
@@ -25,7 +25,14 @@ Gem::Specification.new do |spec|
25
25
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
26
26
  spec.require_paths = ['lib']
27
27
 
28
- spec.add_runtime_dependency 'net-ssh'
28
+ spec.add_runtime_dependency 'net-ssh', '~> 4.0.beta'
29
+ spec.add_runtime_dependency 'poly_delegate'
29
30
 
30
- spec.add_dependency 'bundler', '>= 1.11.2'
31
+ spec.add_development_dependency 'rideliner'
32
+ spec.add_development_dependency 'yard_rideliner'
33
+ spec.add_development_dependency 'yard_dizby'
34
+
35
+ spec.add_runtime_dependency 'rbnacl', '~> 3.4.0'
36
+ spec.add_runtime_dependency 'rbnacl-libsodium', '~> 1.0.10'
37
+ spec.add_runtime_dependency 'bcrypt_pbkdf', '~> 1.0.0.alpha1'
31
38
  end
data/lib/dizby.rb CHANGED
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # Copyright (c) 2016 Nathan Currier
3
2
 
4
3
  # This Source Code Form is subject to the terms of the Mozilla Public
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # Copyright (c) 2016 Nathan Currier
3
2
 
4
3
  # This Source Code Form is subject to the terms of the Mozilla Public
@@ -51,7 +50,7 @@ module Dizby
51
50
  when 'deny'
52
51
  @deny.push(domain)
53
52
  else
54
- fail ArgumentError, "Invalid ACL entry #{list}"
53
+ raise ArgumentError, "Invalid ACL entry #{list}"
55
54
  end
56
55
  end
57
56
  end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # Copyright (c) 2016 Nathan Currier
3
2
 
4
3
  # This Source Code Form is subject to the terms of the Mozilla Public
@@ -44,7 +43,7 @@ module Dizby
44
43
 
45
44
  def pattern(str)
46
45
  pattern = str.split('.')
47
- pattern.map! { |segment| (segment == '*') ? '.+' : segment }
46
+ pattern.map! { |segment| segment == '*' ? '.+' : segment }
48
47
  /^#{pattern.join('\\.')}$/
49
48
  end
50
49
 
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # Copyright (c) 2016 Nathan Currier
3
2
 
4
3
  # This Source Code Form is subject to the terms of the Mozilla Public
@@ -12,11 +11,11 @@ module Dizby
12
11
 
13
12
  def self.check_insecure_method(obj, msg_id)
14
13
  unless msg_id.is_a?(Symbol)
15
- fail ArgumentError, "#{Dizby.any_to_s(msg_id)} is not a symbol"
14
+ raise ArgumentError, "#{Dizby.any_to_s(msg_id)} is not a symbol"
16
15
  end
17
16
 
18
17
  if INSECURE_METHODS.include?(msg_id)
19
- fail SecurityError, "insecure method `#{msg_id}'"
18
+ raise SecurityError, "insecure method `#{msg_id}'"
20
19
  end
21
20
 
22
21
  check_hidden_method(obj, msg_id)
@@ -25,10 +24,10 @@ module Dizby
25
24
  def self.check_hidden_method(obj, msg_id)
26
25
  if obj.private_methods.include?(msg_id)
27
26
  desc = Dizby.any_to_s(obj)
28
- fail NoMethodError, "private method `#{msg_id}' called for #{desc}"
27
+ raise NoMethodError, "private method `#{msg_id}' called for #{desc}"
29
28
  elsif obj.protected_methods.include?(msg_id)
30
29
  desc = Dizby.any_to_s(obj)
31
- fail NoMethodError, "protected method `#{msg_id}' called for #{desc}"
30
+ raise NoMethodError, "protected method `#{msg_id}' called for #{desc}"
32
31
  else
33
32
  true
34
33
  end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # Copyright (c) 2016 Nathan Currier
3
2
 
4
3
  # This Source Code Form is subject to the terms of the Mozilla Public
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # Copyright (c) 2016 Nathan Currier
3
2
 
4
3
  # This Source Code Form is subject to the terms of the Mozilla Public
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # Copyright (c) 2016 Nathan Currier
3
2
 
4
3
  # This Source Code Form is subject to the terms of the Mozilla Public
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # Copyright (c) 2016 Nathan Currier
3
2
 
4
3
  # This Source Code Form is subject to the terms of the Mozilla Public
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # Copyright (c) 2016 Nathan Currier
3
2
 
4
3
  # This Source Code Form is subject to the terms of the Mozilla Public
@@ -23,10 +22,15 @@ module Dizby
23
22
  @server = server
24
23
  end
25
24
 
26
- undef :to_s
27
- undef :to_a if respond_to?(:to_a)
25
+ # rubocop:disable Style/MethodMissing
26
+ def method_missing(msg_id, *args, &block)
27
+ @server.log.debug("calling: #{msg_id} #{args.join ', '}")
28
+ Dizby.check_insecure_method(@obj, msg_id)
29
+ @obj.__send__(msg_id, *args, &block)
30
+ end
31
+ # rubocop:enable Style/MethodMissing
28
32
 
29
- def respond_to?(msg_id, priv = false)
33
+ def respond_to_missing?(msg_id, priv = false)
30
34
  responds =
31
35
  case msg_id
32
36
  when :_dump
@@ -41,10 +45,6 @@ module Dizby
41
45
  responds
42
46
  end
43
47
 
44
- def method_missing(msg_id, *args, &block)
45
- @server.log.debug("calling: #{msg_id} #{args.join ', '}")
46
- Dizby.check_insecure_method(@obj, msg_id)
47
- @obj.__send__(msg_id, *args, &block)
48
- end
48
+ undef :to_s
49
49
  end
50
50
  end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # Copyright (c) 2016 Nathan Currier
3
2
 
4
3
  # This Source Code Form is subject to the terms of the Mozilla Public
@@ -14,25 +13,26 @@ module Dizby
14
13
  @conn = conn
15
14
  end
16
15
 
16
+ # rubocop:disable Style/MethodMissing
17
17
  def method_missing(msg_id, *args, &block)
18
18
  @conn.server.log.debug("calling through proxy: #{msg_id} #{args}")
19
19
  @conn.send_request(@ref, msg_id, *args, &block)
20
20
  succ, result = @conn.recv_reply
21
21
 
22
22
  return result if succ
23
- fail result if result.is_a?(UnknownObject)
23
+ raise result if result.is_a?(UnknownObject)
24
24
 
25
25
  bt = Dizby.proxy_backtrace(@conn.remote_uri, result)
26
26
  result.set_backtrace(bt + caller)
27
- fail result
27
+ raise result
28
28
  end
29
+ # rubocop:enable Style/MethodMissing
29
30
 
30
- undef :to_s
31
- undef :to_a if respond_to?(:to_a)
32
-
33
- def respond_to?(msg_id, priv = false)
31
+ def respond_to_missing?(msg_id, priv = false)
34
32
  method_missing(:respond_to?, msg_id, priv)
35
33
  end
34
+
35
+ undef :to_s
36
36
  end
37
37
 
38
38
  def self.proxy_backtrace(prefix, exception)
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # Copyright (c) 2016 Nathan Currier
3
2
 
4
3
  # This Source Code Form is subject to the terms of the Mozilla Public
@@ -7,6 +6,7 @@
7
6
 
8
7
  require 'dizby/server/registration'
9
8
  require 'dizby/distributed/proxy'
9
+ require 'dizby/protocol/structs'
10
10
 
11
11
  module Dizby
12
12
  class SemiObjectProxy
@@ -24,7 +24,7 @@ module Dizby
24
24
  obj
25
25
  else
26
26
  server.log.debug("creating proxy to #{@ref} on #{@uri}")
27
- client, = server.connect_to(@uri) # throw away the ref
27
+ client, _ref = server.connect_to(ClientArguments.new(@uri, {}))
28
28
  ObjectProxy.new(client, @ref)
29
29
  end
30
30
  end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # Copyright (c) 2016 Nathan Currier
3
2
 
4
3
  # This Source Code Form is subject to the terms of the Mozilla Public
@@ -8,7 +7,7 @@
8
7
  module Dizby
9
8
  module UndumpableObject
10
9
  def _dump(_)
11
- fail TypeError, 'can\'t dump'
10
+ raise TypeError, 'can\'t dump'
12
11
  end
13
12
  end
14
13
  end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # Copyright (c) 2016 Nathan Currier
3
2
 
4
3
  # This Source Code Form is subject to the terms of the Mozilla Public
data/lib/dizby/error.rb CHANGED
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # Copyright (c) 2016 Nathan Currier
3
2
 
4
3
  # This Source Code Form is subject to the terms of the Mozilla Public
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # Copyright (c) 2016 Nathan Currier
3
2
 
4
3
  # This Source Code Form is subject to the terms of the Mozilla Public
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  # Copyright (c) 2016 Nathan Currier
3
2
 
4
3
  # This Source Code Form is subject to the terms of the Mozilla Public
@@ -6,6 +5,7 @@
6
5
  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
7
6
 
8
7
  require 'dizby/error'
8
+ require 'dizby/protocol/structs'
9
9
 
10
10
  module Dizby
11
11
  class ProtocolManager
@@ -15,49 +15,46 @@ module Dizby
15
15
  @protocols << klass
16
16
  end
17
17
 
18
- def open_client(server, uri)
19
- call_refined(uri, :client, server)
18
+ def open_client(server, client_args)
19
+ call_refined(:client, client_args, server)
20
20
  end
21
21
 
22
- def open_server(uri, front, config)
23
- call_refined(uri, :server, front, config)
22
+ def open_server(server_args)
23
+ call_refined(:server, server_args)
24
24
  end
25
25
 
26
- def spawn_server(server, command, uri)
27
- call_refined(uri, :spawn, server, command)
26
+ def spawn_server(server, spawn_args)
27
+ call_refined(:spawn, spawn_args, server)
28
28
  end
29
29
 
30
30
  private
31
31
 
32
- def call_refined(uri, refiner, *base_args)
33
- klass = get_protocol(uri)
32
+ def call_refined(refiner, base_args, *bonus_args)
33
+ klass = get_protocol(base_args.uri)
34
34
  refined = refine_protocol(klass, refiner)
35
- args = get_arguments(refined, uri)
36
- refined.call(*base_args, args)
35
+ args = get_arguments(refined, base_args.uri)
36
+ refined.call(base_args, *bonus_args, args)
37
37
  end
38
38
 
39
39
  def get_protocol(uri)
40
40
  scheme = '' if uri.empty?
41
41
  scheme ||= uri.split(':').first
42
- fail BadScheme, "can't retrieve scheme: #{uri}" unless scheme
42
+ raise BadScheme, "can't retrieve scheme: #{uri}" unless scheme
43
43
 
44
44
  protocol = @protocols.find { |klass| klass.scheme == scheme }
45
- protocol || fail(BadScheme, "scheme not found: #{scheme}")
45
+ protocol || raise(BadScheme, "scheme not found: #{scheme}")
46
46
  end
47
47
 
48
48
  def refine_protocol(protocol, refinement)
49
49
  refined = protocol.get_refinement(refinement)
50
+ return refined if refined
50
51
 
51
- unless refined
52
- fail NotImplementedError,
53
- "#{refinement} refinement not supported for #{protocol}"
54
- end
55
-
56
- refined
52
+ raise NotImplementedError,
53
+ "#{refinement} refinement not supported for #{protocol}"
57
54
  end
58
55
 
59
56
  def get_arguments(refined, uri)
60
- fail BadURI, "can't parse uri: #{uri}" unless refined.regex =~ uri
57
+ raise BadURI, "can't parse uri: #{uri}" unless refined.regex =~ uri
61
58
 
62
59
  $~[1..-1]
63
60
  end