wayfarer 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yaml +1 -1
  3. data/Gemfile.lock +20 -15
  4. data/docs/cookbook/user_agent.md +1 -1
  5. data/docs/guides/browser_automation/capybara.md +64 -1
  6. data/docs/guides/browser_automation/custom_adapters.md +100 -0
  7. data/docs/guides/browser_automation/ferrum.md +3 -3
  8. data/docs/guides/browser_automation/selenium.md +7 -5
  9. data/docs/guides/callbacks.md +117 -10
  10. data/docs/guides/configuration.md +16 -10
  11. data/docs/guides/error_handling.md +9 -5
  12. data/docs/guides/networking.md +77 -3
  13. data/docs/index.md +9 -1
  14. data/docs/reference/api/base.md +4 -4
  15. data/docs/reference/configuration_keys.md +42 -0
  16. data/docs/reference/environment_variables.md +25 -27
  17. data/lib/wayfarer/base.rb +7 -17
  18. data/lib/wayfarer/callbacks.rb +71 -0
  19. data/lib/wayfarer/cli/base.rb +5 -1
  20. data/lib/wayfarer/cli/job.rb +7 -3
  21. data/lib/wayfarer/cli/route.rb +2 -2
  22. data/lib/wayfarer/cli/route_printer.rb +7 -7
  23. data/lib/wayfarer/config/capybara.rb +10 -0
  24. data/lib/wayfarer/config/ferrum.rb +11 -0
  25. data/lib/wayfarer/config/networking.rb +26 -0
  26. data/lib/wayfarer/config/redis.rb +14 -0
  27. data/lib/wayfarer/config/root.rb +11 -0
  28. data/lib/wayfarer/config/selenium.rb +21 -0
  29. data/lib/wayfarer/config/strconv.rb +45 -0
  30. data/lib/wayfarer/config/struct.rb +72 -0
  31. data/lib/wayfarer/gc.rb +3 -7
  32. data/lib/wayfarer/middleware/fetch.rb +7 -3
  33. data/lib/wayfarer/middleware/router.rb +2 -2
  34. data/lib/wayfarer/middleware/worker.rb +12 -9
  35. data/lib/wayfarer/networking/capybara.rb +28 -0
  36. data/lib/wayfarer/networking/context.rb +36 -0
  37. data/lib/wayfarer/networking/ferrum.rb +17 -52
  38. data/lib/wayfarer/networking/http.rb +34 -0
  39. data/lib/wayfarer/networking/pool.rb +15 -10
  40. data/lib/wayfarer/networking/result.rb +1 -1
  41. data/lib/wayfarer/networking/selenium.rb +20 -47
  42. data/lib/wayfarer/networking/strategy.rb +38 -0
  43. data/lib/wayfarer/page.rb +2 -3
  44. data/lib/wayfarer/redis/pool.rb +3 -1
  45. data/lib/wayfarer/routing/dsl.rb +8 -8
  46. data/lib/wayfarer/routing/matchers/custom.rb +23 -0
  47. data/lib/wayfarer/routing/matchers/host.rb +19 -0
  48. data/lib/wayfarer/routing/matchers/path.rb +48 -0
  49. data/lib/wayfarer/routing/matchers/query.rb +63 -0
  50. data/lib/wayfarer/routing/matchers/scheme.rb +17 -0
  51. data/lib/wayfarer/routing/matchers/suffix.rb +17 -0
  52. data/lib/wayfarer/routing/matchers/url.rb +17 -0
  53. data/lib/wayfarer/routing/route.rb +1 -1
  54. data/lib/wayfarer.rb +9 -9
  55. data/spec/base_spec.rb +14 -0
  56. data/spec/callbacks_spec.rb +102 -0
  57. data/spec/cli/job_spec.rb +6 -6
  58. data/spec/config/capybara_spec.rb +18 -0
  59. data/spec/config/ferrum_spec.rb +24 -0
  60. data/spec/config/networking_spec.rb +73 -0
  61. data/spec/config/redis_spec.rb +32 -0
  62. data/spec/config/root_spec.rb +31 -0
  63. data/spec/config/selenium_spec.rb +56 -0
  64. data/spec/config/strconv_spec.rb +58 -0
  65. data/spec/config/struct_spec.rb +66 -0
  66. data/spec/gc_spec.rb +8 -6
  67. data/spec/middleware/fetch_spec.rb +20 -8
  68. data/spec/middleware/router_spec.rb +7 -0
  69. data/spec/middleware/worker_spec.rb +64 -27
  70. data/spec/networking/capybara_spec.rb +12 -0
  71. data/spec/networking/context_spec.rb +127 -0
  72. data/spec/networking/ferrum_spec.rb +6 -22
  73. data/spec/networking/http_spec.rb +12 -0
  74. data/spec/networking/pool_spec.rb +37 -12
  75. data/spec/networking/selenium_spec.rb +6 -22
  76. data/spec/networking/strategy.rb +170 -0
  77. data/spec/redis/pool_spec.rb +1 -1
  78. data/spec/routing/dsl_spec.rb +10 -10
  79. data/spec/routing/integration_spec.rb +22 -22
  80. data/spec/routing/{custom_matcher_spec.rb → matchers/custom_spec.rb} +4 -4
  81. data/spec/routing/{host_matcher_spec.rb → matchers/host_spec.rb} +6 -6
  82. data/spec/routing/{path_matcher_spec.rb → matchers/path_spec.rb} +6 -6
  83. data/spec/routing/{query_matcher_spec.rb → matchers/query_spec.rb} +15 -15
  84. data/spec/routing/{scheme_matcher_spec.rb → matchers/scheme_spec.rb} +4 -4
  85. data/spec/routing/{suffix_matcher_spec.rb → matchers/suffix_spec.rb} +4 -4
  86. data/spec/routing/{uri_matcher_spec.rb → matchers/uri_spec.rb} +4 -4
  87. data/spec/routing/path_finder_spec.rb +1 -1
  88. data/spec/routing/root_route_spec.rb +2 -2
  89. data/spec/routing/route_spec.rb +2 -2
  90. data/spec/spec_helpers.rb +13 -5
  91. data/spec/wayfarer_spec.rb +1 -1
  92. data/wayfarer.gemspec +8 -7
  93. metadata +74 -33
  94. data/lib/wayfarer/config.rb +0 -67
  95. data/lib/wayfarer/networking/healer.rb +0 -21
  96. data/lib/wayfarer/networking/net_http.rb +0 -52
  97. data/lib/wayfarer/routing/custom_matcher.rb +0 -21
  98. data/lib/wayfarer/routing/host_matcher.rb +0 -23
  99. data/lib/wayfarer/routing/path_matcher.rb +0 -46
  100. data/lib/wayfarer/routing/query_matcher.rb +0 -67
  101. data/lib/wayfarer/routing/scheme_matcher.rb +0 -21
  102. data/lib/wayfarer/routing/suffix_matcher.rb +0 -21
  103. data/lib/wayfarer/routing/url_matcher.rb +0 -21
  104. data/spec/config_spec.rb +0 -144
  105. data/spec/networking/adapter.rb +0 -135
  106. data/spec/networking/healer_spec.rb +0 -46
  107. data/spec/networking/net_http_spec.rb +0 -37
@@ -10,7 +10,7 @@ describe Wayfarer::Routing::DSL do
10
10
  it "adds a child with an always-matching matcher" do
11
11
  expect(root.to(:foobar)).to be_a(Wayfarer::Routing::Route)
12
12
  expect(child.action).to be(:foobar)
13
- expect(child.matcher).to be_a(Wayfarer::Routing::CustomMatcher)
13
+ expect(child.matcher).to be_a(Wayfarer::Routing::Matchers::Custom)
14
14
  expect(child.parent).to be(root)
15
15
 
16
16
  %w[http://example.com http://w3c.org http://google.com].each do |url|
@@ -22,7 +22,7 @@ describe Wayfarer::Routing::DSL do
22
22
  describe "#url" do
23
23
  it "adds a child with an URL matcher" do
24
24
  expect(root.url("http://example.com")).to be_a(Wayfarer::Routing::Route)
25
- expect(child.matcher).to be_a(Wayfarer::Routing::URLMatcher)
25
+ expect(child.matcher).to be_a(Wayfarer::Routing::Matchers::URL)
26
26
  expect(child.matcher.url).to eq("http://example.com")
27
27
  expect(child.parent).to be(root)
28
28
  end
@@ -31,7 +31,7 @@ describe Wayfarer::Routing::DSL do
31
31
  describe "#host" do
32
32
  it "adds a child with a host matcher" do
33
33
  expect(root.host("example.com")).to be_a(Wayfarer::Routing::Route)
34
- expect(child.matcher).to be_a(Wayfarer::Routing::HostMatcher)
34
+ expect(child.matcher).to be_a(Wayfarer::Routing::Matchers::Host)
35
35
  expect(child.matcher.host).to eq("example.com")
36
36
  expect(child.parent).to be(root)
37
37
  end
@@ -40,7 +40,7 @@ describe Wayfarer::Routing::DSL do
40
40
  describe "#path" do
41
41
  it "adds a child with a path matcher" do
42
42
  expect(root.path("/foo/bar")).to be_a(Wayfarer::Routing::Route)
43
- expect(child.matcher).to be_a(Wayfarer::Routing::PathMatcher)
43
+ expect(child.matcher).to be_a(Wayfarer::Routing::Matchers::Path)
44
44
  expect(child.matcher.path).to eq("/foo/bar")
45
45
  expect(child.parent).to be(root)
46
46
  end
@@ -49,7 +49,7 @@ describe Wayfarer::Routing::DSL do
49
49
  describe "#query" do
50
50
  it "adds a child with a query matcher" do
51
51
  expect(root.query(foo: "bar")).to be_a(Wayfarer::Routing::Route)
52
- expect(child.matcher).to be_a(Wayfarer::Routing::QueryMatcher)
52
+ expect(child.matcher).to be_a(Wayfarer::Routing::Matchers::Query)
53
53
  expect(child.matcher.fields).to eq({ foo: "bar" })
54
54
  expect(child.parent).to be(root)
55
55
  end
@@ -58,7 +58,7 @@ describe Wayfarer::Routing::DSL do
58
58
  describe "#scheme" do
59
59
  it "adds a child with a scheme matcher" do
60
60
  expect(root.scheme(:https)).to be_a(Wayfarer::Routing::Route)
61
- expect(child.matcher).to be_a(Wayfarer::Routing::SchemeMatcher)
61
+ expect(child.matcher).to be_a(Wayfarer::Routing::Matchers::Scheme)
62
62
  expect(child.matcher.scheme).to be(:https)
63
63
  expect(child.parent).to be(root)
64
64
  end
@@ -67,7 +67,7 @@ describe Wayfarer::Routing::DSL do
67
67
  describe "#suffix" do
68
68
  it "adds a child with a suffix matcher" do
69
69
  expect(root.suffix(".png")).to be_a(Wayfarer::Routing::Route)
70
- expect(child.matcher).to be_a(Wayfarer::Routing::SuffixMatcher)
70
+ expect(child.matcher).to be_a(Wayfarer::Routing::Matchers::Suffix)
71
71
  expect(child.matcher.suffix).to eq(".png")
72
72
  expect(child.parent).to be(root)
73
73
  end
@@ -76,7 +76,7 @@ describe Wayfarer::Routing::DSL do
76
76
  describe "#custom" do
77
77
  it "adds a child with a custom matcher" do
78
78
  expect(root.custom(->(_) { true })).to be_a(Wayfarer::Routing::Route)
79
- expect(child.matcher).to be_a(Wayfarer::Routing::CustomMatcher)
79
+ expect(child.matcher).to be_a(Wayfarer::Routing::Matchers::Custom)
80
80
  expect(child.matcher.delegate).to be_a(Proc)
81
81
  expect(child.parent).to be(root)
82
82
  end
@@ -89,10 +89,10 @@ describe Wayfarer::Routing::DSL do
89
89
  end
90
90
 
91
91
  expect(root.children.count).to be(1)
92
- expect(root.children.first.matcher).to be_a(Wayfarer::Routing::HostMatcher)
92
+ expect(root.children.first.matcher).to be_a(Wayfarer::Routing::Matchers::Host)
93
93
 
94
94
  expect(root.children.first.children.count).to be(1)
95
- expect(root.children.first.children.first.matcher).to be_a(Wayfarer::Routing::PathMatcher)
95
+ expect(root.children.first.children.first.matcher).to be_a(Wayfarer::Routing::Matchers::Path)
96
96
  end
97
97
  end
98
98
  end
@@ -8,17 +8,17 @@ describe Wayfarer::Routing::DSL do
8
8
  it "matches URLs" do
9
9
  route.path "/"
10
10
 
11
- result = route.invoke(URI("https://example.com/"))
11
+ result = route.invoke(Addressable::URI.parse("https://example.com/"))
12
12
  expect(result).to be_a(Wayfarer::Routing::Result::Match)
13
13
 
14
- result = route.invoke(URI("https://example.com/foo"))
14
+ result = route.invoke(Addressable::URI.parse("https://example.com/foo"))
15
15
  expect(result).to be_a(Wayfarer::Routing::Result::Mismatch)
16
16
  end
17
17
 
18
18
  it "matches URLs" do
19
19
  route.host "example.com", path: "/foo"
20
20
 
21
- result = route.invoke(URI("https://example.com/foo"))
21
+ result = route.invoke(Addressable::URI.parse("https://example.com/foo"))
22
22
  expect(result).to be_a(Wayfarer::Routing::Result::Match)
23
23
  end
24
24
 
@@ -27,16 +27,16 @@ describe Wayfarer::Routing::DSL do
27
27
  query page: 1..10
28
28
  end
29
29
 
30
- result = route.invoke(URI("https://example.com/foo?page=4"))
30
+ result = route.invoke(Addressable::URI.parse("https://example.com/foo?page=4"))
31
31
  expect(result).to be_a(Wayfarer::Routing::Result::Match)
32
32
 
33
- result = route.invoke(URI("https://example.com/foo?page=11"))
33
+ result = route.invoke(Addressable::URI.parse("https://example.com/foo?page=11"))
34
34
  expect(result).to be_a(Wayfarer::Routing::Result::Mismatch)
35
35
 
36
- result = route.invoke(URI("https://example.com/foo"))
36
+ result = route.invoke(Addressable::URI.parse("https://example.com/foo"))
37
37
  expect(result).to be_a(Wayfarer::Routing::Result::Mismatch)
38
38
 
39
- result = route.invoke(URI("https://example.com?page=2"))
39
+ result = route.invoke(Addressable::URI.parse("https://example.com?page=2"))
40
40
  expect(result).to be_a(Wayfarer::Routing::Result::Mismatch)
41
41
  end
42
42
 
@@ -45,16 +45,16 @@ describe Wayfarer::Routing::DSL do
45
45
  query page: 1..10
46
46
  end
47
47
 
48
- result = route.invoke(URI("https://example.com/foo?page=4"))
48
+ result = route.invoke(Addressable::URI.parse("https://example.com/foo?page=4"))
49
49
  expect(result).to be_a(Wayfarer::Routing::Result::Match)
50
50
 
51
- result = route.invoke(URI("https://example.com/foo?page=11"))
51
+ result = route.invoke(Addressable::URI.parse("https://example.com/foo?page=11"))
52
52
  expect(result).to be_a(Wayfarer::Routing::Result::Mismatch)
53
53
 
54
- result = route.invoke(URI("https://example.com/foo"))
54
+ result = route.invoke(Addressable::URI.parse("https://example.com/foo"))
55
55
  expect(result).to be_a(Wayfarer::Routing::Result::Mismatch)
56
56
 
57
- result = route.invoke(URI("https://example.com?page=2"))
57
+ result = route.invoke(Addressable::URI.parse("https://example.com?page=2"))
58
58
  expect(result).to be_a(Wayfarer::Routing::Result::Mismatch)
59
59
  end
60
60
 
@@ -64,19 +64,19 @@ describe Wayfarer::Routing::DSL do
64
64
  path "/users/:id"
65
65
  end
66
66
 
67
- result = route.invoke(URI("https://example.com/contact"))
67
+ result = route.invoke(Addressable::URI.parse("https://example.com/contact"))
68
68
  expect(result).to be_a(Wayfarer::Routing::Result::Match)
69
69
 
70
- result = route.invoke(URI("https://example.com/contact/foo"))
70
+ result = route.invoke(Addressable::URI.parse("https://example.com/contact/foo"))
71
71
  expect(result).to be_a(Wayfarer::Routing::Result::Mismatch)
72
72
 
73
- result = route.invoke(URI("https://example.com/users/123"))
73
+ result = route.invoke(Addressable::URI.parse("https://example.com/users/123"))
74
74
  expect(result).to be_a(Wayfarer::Routing::Result::Match)
75
75
 
76
- result = route.invoke(URI("https://example.com/users/123/images"))
76
+ result = route.invoke(Addressable::URI.parse("https://example.com/users/123/images"))
77
77
  expect(result).to be_a(Wayfarer::Routing::Result::Mismatch)
78
78
 
79
- result = route.invoke(URI("https://example.com/users"))
79
+ result = route.invoke(Addressable::URI.parse("https://example.com/users"))
80
80
  expect(result).to be_a(Wayfarer::Routing::Result::Mismatch)
81
81
  end
82
82
 
@@ -89,22 +89,22 @@ describe Wayfarer::Routing::DSL do
89
89
  end
90
90
  end
91
91
 
92
- result = route.invoke(URI("https://example.com/contact"))
92
+ result = route.invoke(Addressable::URI.parse("https://example.com/contact"))
93
93
  expect(result).to be_a(Wayfarer::Routing::Result::Match)
94
94
 
95
- result = route.invoke(URI("https://example.com/users/123"))
95
+ result = route.invoke(Addressable::URI.parse("https://example.com/users/123"))
96
96
  expect(result).to be_a(Wayfarer::Routing::Result::Mismatch)
97
97
 
98
- result = route.invoke(URI("https://example.com/users/123/images/23"))
98
+ result = route.invoke(Addressable::URI.parse("https://example.com/users/123/images/23"))
99
99
  expect(result).to be_a(Wayfarer::Routing::Result::Match)
100
100
 
101
- result = route.invoke(URI("https://example.com/users/123/images/23/foo"))
101
+ result = route.invoke(Addressable::URI.parse("https://example.com/users/123/images/23/foo"))
102
102
  expect(result).to be_a(Wayfarer::Routing::Result::Mismatch)
103
103
 
104
- result = route.invoke(URI("https://example.com/users/123/friends"))
104
+ result = route.invoke(Addressable::URI.parse("https://example.com/users/123/friends"))
105
105
  expect(result).to be_a(Wayfarer::Routing::Result::Match)
106
106
 
107
- result = route.invoke(URI("https://example.com/users/123/foobar"))
107
+ result = route.invoke(Addressable::URI.parse("https://example.com/users/123/foobar"))
108
108
  expect(result).to be_a(Wayfarer::Routing::Result::Mismatch)
109
109
  end
110
110
  end
@@ -2,14 +2,14 @@
2
2
 
3
3
  require "spec_helpers"
4
4
 
5
- describe Wayfarer::Routing::CustomMatcher do
6
- let(:url) { URI("http://example.com") }
5
+ describe Wayfarer::Routing::Matchers::Custom do
6
+ let(:url) { Addressable::URI.parse("http://example.com") }
7
7
 
8
8
  describe "#match" do
9
9
  context "with a block" do
10
10
  context "when block is truthy" do
11
11
  subject(:matcher) do
12
- Wayfarer::Routing::CustomMatcher.new ->(_) { true }
12
+ Wayfarer::Routing::Matchers::Custom.new ->(_) { true }
13
13
  end
14
14
 
15
15
  it "returns true" do
@@ -19,7 +19,7 @@ describe Wayfarer::Routing::CustomMatcher do
19
19
 
20
20
  context "when block is falsy" do
21
21
  subject(:matcher) do
22
- Wayfarer::Routing::CustomMatcher.new ->(_) { false }
22
+ Wayfarer::Routing::Matchers::Custom.new ->(_) { false }
23
23
  end
24
24
 
25
25
  it "returns true" do
@@ -2,15 +2,15 @@
2
2
 
3
3
  require "spec_helpers"
4
4
 
5
- describe Wayfarer::Routing::HostMatcher do
6
- subject(:matcher) { Wayfarer::Routing::HostMatcher.new(str_or_regexp) }
5
+ describe Wayfarer::Routing::Matchers::Host do
6
+ subject(:matcher) { Wayfarer::Routing::Matchers::Host.new(str_or_regexp) }
7
7
 
8
8
  describe "#matches?" do
9
9
  describe "String matching" do
10
10
  let(:str_or_regexp) { "example.com" }
11
11
 
12
12
  context "with matching URL" do
13
- let(:url) { URI("http://example.com/foo/bar") }
13
+ let(:url) { Addressable::URI.parse("http://example.com/foo/bar") }
14
14
 
15
15
  it "returns true" do
16
16
  expect(matcher).to match(url)
@@ -18,7 +18,7 @@ describe Wayfarer::Routing::HostMatcher do
18
18
  end
19
19
 
20
20
  context "with mismatching URL" do
21
- let(:url) { URI("http://google.com/bar/qux") }
21
+ let(:url) { Addressable::URI.parse("http://google.com/bar/qux") }
22
22
 
23
23
  it "returns false" do
24
24
  expect(matcher).not_to match(url)
@@ -30,7 +30,7 @@ describe Wayfarer::Routing::HostMatcher do
30
30
  let(:str_or_regexp) { /example.com/ }
31
31
 
32
32
  context "with matching URL" do
33
- let(:url) { URI("http://sub.example.com") }
33
+ let(:url) { Addressable::URI.parse("http://sub.example.com") }
34
34
 
35
35
  it "returns true" do
36
36
  expect(matcher).to match(url)
@@ -38,7 +38,7 @@ describe Wayfarer::Routing::HostMatcher do
38
38
  end
39
39
 
40
40
  context "with mismatching URL" do
41
- let(:url) { URI("http://example.sub.com") }
41
+ let(:url) { Addressable::URI.parse("http://example.sub.com") }
42
42
 
43
43
  it "returns false" do
44
44
  expect(matcher).not_to match(url)
@@ -2,16 +2,16 @@
2
2
 
3
3
  require "spec_helpers"
4
4
 
5
- describe Wayfarer::Routing::PathMatcher, mri: true do
5
+ describe Wayfarer::Routing::Matchers::Path, mri: true do
6
6
  let(:route) { Wayfarer::Routing::RootRoute.new }
7
- subject(:matcher) { Wayfarer::Routing::PathMatcher.new(path, route) }
7
+ subject(:matcher) { Wayfarer::Routing::Matchers::Path.new(path, route) }
8
8
 
9
9
  describe "#match?" do
10
10
  context "with matching URL" do
11
11
  let(:path) { "/{alpha}/{beta}" }
12
12
 
13
13
  it "returns true" do
14
- expect(matcher).to match(URI("http://example.com/foo/bar"))
14
+ expect(matcher).to match(Addressable::URI.parse("http://example.com/foo/bar"))
15
15
  end
16
16
  end
17
17
 
@@ -19,7 +19,7 @@ describe Wayfarer::Routing::PathMatcher, mri: true do
19
19
  let(:path) { "/{alpha}/{beta}" }
20
20
 
21
21
  it "returns false" do
22
- expect(matcher).not_to match(URI("http://example.com/foo"))
22
+ expect(matcher).not_to match(Addressable::URI.parse("http://example.com/foo"))
23
23
  end
24
24
  end
25
25
 
@@ -27,7 +27,7 @@ describe Wayfarer::Routing::PathMatcher, mri: true do
27
27
  let(:path) { "/" }
28
28
 
29
29
  it "returns false" do
30
- expect(matcher).not_to match(URI("http://example.com/foo"))
30
+ expect(matcher).not_to match(Addressable::URI.parse("http://example.com/foo"))
31
31
  end
32
32
  end
33
33
  end
@@ -36,7 +36,7 @@ describe Wayfarer::Routing::PathMatcher, mri: true do
36
36
  let(:path) { "/{alpha}/{beta}" }
37
37
 
38
38
  it "returns the correct parameters" do
39
- url = URI("http://example.com/foo/bar")
39
+ url = Addressable::URI.parse("http://example.com/foo/bar")
40
40
  expect(matcher.params(url)).to eq("alpha" => "foo", "beta" => "bar")
41
41
  end
42
42
  end
@@ -2,14 +2,14 @@
2
2
 
3
3
  require "spec_helpers"
4
4
 
5
- describe Wayfarer::Routing::QueryMatcher do
6
- subject(:matcher) { Wayfarer::Routing::QueryMatcher.new(constraints) }
5
+ describe Wayfarer::Routing::Matchers::Query do
6
+ subject(:matcher) { Wayfarer::Routing::Matchers::Query.new(constraints) }
7
7
 
8
8
  describe "String constraints" do
9
9
  let(:constraints) { Hash[arg: "foo"] }
10
10
 
11
11
  context "with matching query field value" do
12
- let(:url) { URI("http://example.com?arg=foo") }
12
+ let(:url) { Addressable::URI.parse("http://example.com?arg=foo") }
13
13
 
14
14
  it "returns true" do
15
15
  expect(matcher).to match(url)
@@ -17,7 +17,7 @@ describe Wayfarer::Routing::QueryMatcher do
17
17
  end
18
18
 
19
19
  context "with mismatching query field value" do
20
- let(:url) { URI("http://example.com?arg=bar") }
20
+ let(:url) { Addressable::URI.parse("http://example.com?arg=bar") }
21
21
 
22
22
  it "returns false" do
23
23
  expect(matcher).not_to match(url)
@@ -29,7 +29,7 @@ describe Wayfarer::Routing::QueryMatcher do
29
29
  let(:constraints) { Hash[arg: 0] }
30
30
 
31
31
  context "with matching query field value" do
32
- let(:url) { URI("http://example.com?arg=0") }
32
+ let(:url) { Addressable::URI.parse("http://example.com?arg=0") }
33
33
 
34
34
  it "returns true" do
35
35
  expect(matcher).to match(url)
@@ -37,7 +37,7 @@ describe Wayfarer::Routing::QueryMatcher do
37
37
  end
38
38
 
39
39
  context "with mismatching query field value" do
40
- let(:url) { URI("http://example.com?arg=1") }
40
+ let(:url) { Addressable::URI.parse("http://example.com?arg=1") }
41
41
 
42
42
  it "returns false" do
43
43
  expect(matcher).not_to match(url)
@@ -45,7 +45,7 @@ describe Wayfarer::Routing::QueryMatcher do
45
45
  end
46
46
 
47
47
  context "with non-numeric query field value" do
48
- let(:url) { URI("http://example.com?arg=foo") }
48
+ let(:url) { Addressable::URI.parse("http://example.com?arg=foo") }
49
49
 
50
50
  it "returns false" do
51
51
  expect(matcher).not_to match(url)
@@ -57,7 +57,7 @@ describe Wayfarer::Routing::QueryMatcher do
57
57
  let(:constraints) { Hash[arg: /foo/] }
58
58
 
59
59
  context "with matching query field value" do
60
- let(:url) { URI("http://example.com?arg=foo") }
60
+ let(:url) { Addressable::URI.parse("http://example.com?arg=foo") }
61
61
 
62
62
  it "returns true" do
63
63
  expect(matcher).to match(url)
@@ -65,7 +65,7 @@ describe Wayfarer::Routing::QueryMatcher do
65
65
  end
66
66
 
67
67
  context "with mismatching query field value" do
68
- let(:url) { URI("http://example.com?arg=bar") }
68
+ let(:url) { Addressable::URI.parse("http://example.com?arg=bar") }
69
69
 
70
70
  it "returns false" do
71
71
  expect(matcher).not_to match(url)
@@ -77,7 +77,7 @@ describe Wayfarer::Routing::QueryMatcher do
77
77
  let(:constraints) { Hash[arg: 1..10] }
78
78
 
79
79
  context "with matching query field value" do
80
- let(:url) { URI("http://example.com?arg=5") }
80
+ let(:url) { Addressable::URI.parse("http://example.com?arg=5") }
81
81
 
82
82
  it "returns true" do
83
83
  expect(matcher).to match(url)
@@ -85,7 +85,7 @@ describe Wayfarer::Routing::QueryMatcher do
85
85
  end
86
86
 
87
87
  context "with mismatching query field value" do
88
- let(:url) { URI("http://example.com?arg=11") }
88
+ let(:url) { Addressable::URI.parse("http://example.com?arg=11") }
89
89
 
90
90
  it "returns false" do
91
91
  expect(matcher).not_to match(url)
@@ -93,7 +93,7 @@ describe Wayfarer::Routing::QueryMatcher do
93
93
  end
94
94
 
95
95
  context "with non-numeric query field value" do
96
- let(:url) { URI("http://example.com?arg=foo") }
96
+ let(:url) { Addressable::URI.parse("http://example.com?arg=foo") }
97
97
 
98
98
  it "returns false" do
99
99
  expect(matcher).not_to match(url)
@@ -107,7 +107,7 @@ describe Wayfarer::Routing::QueryMatcher do
107
107
  end
108
108
 
109
109
  context "with matching query field values" do
110
- let(:url) { URI("http://example.com?foo=4&bar=bazqux&qux=zot&toto=2") }
110
+ let(:url) { Addressable::URI.parse("http://example.com?foo=4&bar=bazqux&qux=zot&toto=2") }
111
111
 
112
112
  it "returns true" do
113
113
  expect(matcher).to match(url)
@@ -115,7 +115,7 @@ describe Wayfarer::Routing::QueryMatcher do
115
115
  end
116
116
 
117
117
  context "with mismatching query field values" do
118
- let(:url) { URI("http://example.com?foo=bar&bar=qux&qux=6toto=0") }
118
+ let(:url) { Addressable::URI.parse("http://example.com?foo=bar&bar=qux&qux=6toto=0") }
119
119
 
120
120
  it "returns false" do
121
121
  expect(matcher).not_to match(url)
@@ -129,7 +129,7 @@ describe Wayfarer::Routing::QueryMatcher do
129
129
  end
130
130
 
131
131
  it "returns the correct parameters" do
132
- url = URI("http://example.com?foo=4&bar=bazqux&qux=zot&toto=2")
132
+ url = Addressable::URI.parse("http://example.com?foo=4&bar=bazqux&qux=zot&toto=2")
133
133
  expect(matcher.params(url)).to \
134
134
  eq("foo" => "4", "bar" => "bazqux", "qux" => "zot", "toto" => "2")
135
135
  end
@@ -2,12 +2,12 @@
2
2
 
3
3
  require "spec_helpers"
4
4
 
5
- describe Wayfarer::Routing::SchemeMatcher do
5
+ describe Wayfarer::Routing::Matchers::Scheme do
6
6
  describe "#match" do
7
- subject(:matcher) { Wayfarer::Routing::SchemeMatcher.new(:http) }
7
+ subject(:matcher) { Wayfarer::Routing::Matchers::Scheme.new(:http) }
8
8
 
9
9
  context "with matching URL" do
10
- let(:url) { URI("http://example.com") }
10
+ let(:url) { Addressable::URI.parse("http://example.com") }
11
11
 
12
12
  it "returns true" do
13
13
  expect(matcher).to match(url)
@@ -15,7 +15,7 @@ describe Wayfarer::Routing::SchemeMatcher do
15
15
  end
16
16
 
17
17
  context "with mismatching URL" do
18
- let(:url) { URI("https://example.com") }
18
+ let(:url) { Addressable::URI.parse("https://example.com") }
19
19
 
20
20
  it "returns true" do
21
21
  expect(matcher).not_to match(url)
@@ -2,8 +2,8 @@
2
2
 
3
3
  require "spec_helpers"
4
4
 
5
- describe Wayfarer::Routing::SuffixMatcher do
6
- subject(:matcher) { Wayfarer::Routing::SuffixMatcher.new(".png") }
5
+ describe Wayfarer::Routing::Matchers::Suffix do
6
+ subject(:matcher) { Wayfarer::Routing::Matchers::Suffix.new(".png") }
7
7
 
8
8
  describe "#match" do
9
9
  context "with matching URL" do
@@ -13,7 +13,7 @@ describe Wayfarer::Routing::SuffixMatcher do
13
13
  https://example.com/a/b.png/c.png
14
14
  http://example.com/foobar.html.png
15
15
  https://example.com/foo.png/bar.png
16
- ].map { |u| URI(u) }
16
+ ].map { |u| Addressable::URI.parse(u) }
17
17
 
18
18
  urls.each do |url|
19
19
  expect(matcher).to match(url)
@@ -30,7 +30,7 @@ describe Wayfarer::Routing::SuffixMatcher do
30
30
  http://example.com.html
31
31
  http://example.com/foobar.html
32
32
  https://example.com/foo.png/bar.png.html
33
- ].map { |u| URI(u) }
33
+ ].map { |u| Addressable::URI.parse(u) }
34
34
 
35
35
  urls.each do |url|
36
36
  expect(matcher).not_to match(url)
@@ -2,14 +2,14 @@
2
2
 
3
3
  require "spec_helpers"
4
4
 
5
- describe Wayfarer::Routing::URLMatcher do
5
+ describe Wayfarer::Routing::Matchers::URL do
6
6
  subject(:matcher) do
7
- Wayfarer::Routing::URLMatcher.new("http://example.com/foo/bar")
7
+ Wayfarer::Routing::Matchers::URL.new("http://example.com/foo/bar")
8
8
  end
9
9
 
10
10
  describe "#match" do
11
11
  context "with matching URL" do
12
- let(:url) { URI("http://example.com/foo/bar") }
12
+ let(:url) { Addressable::URI.parse("http://example.com/foo/bar") }
13
13
 
14
14
  it "returns true" do
15
15
  expect(matcher).to match(url)
@@ -17,7 +17,7 @@ describe Wayfarer::Routing::URLMatcher do
17
17
  end
18
18
 
19
19
  context "with mismatching URL" do
20
- let(:url) { URI("http://example.com/foo/qux") }
20
+ let(:url) { Addressable::URI.parse("http://example.com/foo/qux") }
21
21
 
22
22
  it "returns true" do
23
23
  expect(matcher).not_to match(url)
@@ -9,7 +9,7 @@ describe Wayfarer::Routing::PathFinder do
9
9
  end
10
10
  end
11
11
 
12
- subject(:result) { Wayfarer::Routing::PathFinder.result(route, URI(url)) }
12
+ subject(:result) { Wayfarer::Routing::PathFinder.result(route, Addressable::URI.parse(url)) }
13
13
 
14
14
  describe "::result" do
15
15
  context "with matching URL" do
@@ -13,7 +13,7 @@ describe Wayfarer::Routing::Route do
13
13
 
14
14
  it "returns true" do
15
15
  %w[http://example.com http://w3c.org http://google.com].each do |url|
16
- expect(matcher).to match(URI(url))
16
+ expect(matcher).to match(Addressable::URI.parse(url))
17
17
  end
18
18
  end
19
19
  end
@@ -21,7 +21,7 @@ describe Wayfarer::Routing::Route do
21
21
  context "without child routes" do
22
22
  it "returns false" do
23
23
  %w[http://example.com http://w3c.org http://google.com].each do |url|
24
- expect(matcher).not_to match(URI(url))
24
+ expect(matcher).not_to match(Addressable::URI.parse(url))
25
25
  end
26
26
  end
27
27
  end
@@ -14,7 +14,7 @@ describe Wayfarer::Routing::Route do
14
14
  end
15
15
  end
16
16
 
17
- result = root.invoke(URI("http://example.com/foo/bar?page=42"))
17
+ result = root.invoke(Addressable::URI.parse("http://example.com/foo/bar?page=42"))
18
18
 
19
19
  expect(result).to be_a(Wayfarer::Routing::Result::Match)
20
20
  expect(result.action).to be(:overrider)
@@ -34,7 +34,7 @@ describe Wayfarer::Routing::Route do
34
34
  end
35
35
  end
36
36
 
37
- result = root.invoke(URI("http://w3c.org/foo/bar?page=42"))
37
+ result = root.invoke(Addressable::URI.parse("http://w3c.org/foo/bar?page=42"))
38
38
 
39
39
  expect(result).to be_a(Wayfarer::Routing::Result::Mismatch)
40
40
  end
data/spec/spec_helpers.rb CHANGED
@@ -59,8 +59,8 @@ RSpec.configure do |config|
59
59
  end
60
60
 
61
61
  config.before do
62
- Wayfarer.config = Wayfarer::Config.from_environment
63
- Wayfarer.config.redis_url = redis_host
62
+ Wayfarer.config = Wayfarer::Config::Root.new
63
+ Wayfarer.config.redis.url = redis_host
64
64
 
65
65
  ::Redis.new(url: redis_host).flushall
66
66
 
@@ -73,9 +73,17 @@ RSpec.configure do |config|
73
73
  # For unknown reasons, Wayfarer::Networking::Ferrum#renew can take a very
74
74
  # long time to instantiate a new ::Ferrum::Browser and requires the 60s
75
75
  # timeout. TODO: Figure out what's going on
76
- Wayfarer.config.ferrum_options = { url: "http://chrome:3000", timeout: 60 }
77
- Wayfarer.config.selenium_argv = [:firefox, { url: "http://firefox:4444" }]
76
+ Wayfarer.config.ferrum.options = { url: "http://chrome:3000", timeout: 120 }
77
+ Wayfarer.config.selenium.driver = :firefox
78
+ Wayfarer.config.selenium.options = { url: "http://firefox:4444" }
79
+ Wayfarer.config.selenium.client_timeout = 10
78
80
  end
81
+
82
+ # TODO: Undo side-effect
83
+ Capybara.register_driver(:cuprite) do |app|
84
+ Capybara::Cuprite::Driver.new(app, Wayfarer.config.ferrum.options)
85
+ end
86
+ Wayfarer.config.capybara.driver = :cuprite
79
87
  end
80
88
 
81
89
  config.around(cli: true) do |example|
@@ -83,7 +91,7 @@ RSpec.configure do |config|
83
91
  tmp = Dir.mktmpdir
84
92
  Dir.chdir(tmp)
85
93
  example.run
86
- FileUtils.rm_r(tmp)
87
94
  Dir.chdir(origin)
95
+ FileUtils.rm_r(tmp)
88
96
  end
89
97
  end
@@ -8,6 +8,6 @@ describe Wayfarer do
8
8
  end
9
9
 
10
10
  describe "::config" do
11
- it("returns a config") { expect(Wayfarer.config).to be_a(Wayfarer::Config) }
11
+ it("returns a config") { expect(Wayfarer.config).to be_a(Wayfarer::Config::Root) }
12
12
  end
13
13
  end