cotton-tail 0.4.1 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 790abb66e618fd55310f4acbca7b7d0498f158af153c454c696ee084e13257c4
4
- data.tar.gz: f12d3be7f5fbda32a435e161f95e672878e6a1a5b357880c23ee37defbd96a9f
3
+ metadata.gz: ea50d4559d3b22547293d0efb07f7841837e272b877a96646c948a2d125313a8
4
+ data.tar.gz: 640b18d1aefc48686535b9f1f3685c38c5fc1724492192bb766dfdd39573d0ca
5
5
  SHA512:
6
- metadata.gz: b07dfcbe78301c9e688b3b6616a5f054961d8d77c63f4ef8e3e6c0d604bb07f7382f39986ada745e451d216e3d3ac08d12565eded41de62259d0258facbc3405
7
- data.tar.gz: 0c09960c9c4733c3d9894db627e7d46edc431ba6c1c467236ee60dd52b0285ff6180ff76af80dc357e267503e3b3f6b4ec4f732879c5f34466cbd2e4b7676d4e
6
+ metadata.gz: 433de64af1c506e5f997e7cd24c70453110822662b6ba5139673b443bff235100a15d6dad2f1e3e23f0e429cab08dd927c0c47b614094b3f0160893ee6644541
7
+ data.tar.gz: 18a12763f6a88ab0940c20850e1110b0a4305f69451f5ef2ef2c7a5f82ec1f59bf48e41dccc8e9740da3854314c3c82c4c84a50d0878ae94c662617c2fa434bc
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cotton-tail (0.4.1)
4
+ cotton-tail (0.5.0)
5
5
  bunny (~> 2.12)
6
6
  ibsciss-middleware (~> 0.4.2)
7
7
 
data/lib/cotton_tail.rb CHANGED
@@ -9,6 +9,7 @@ module CottonTail
9
9
  autoload :DSL, 'cotton_tail/dsl'
10
10
  autoload :Middleware, 'cotton_tail/middleware'
11
11
  autoload :Queue, 'cotton_tail/queue'
12
+ autoload :Route, 'cotton_tail/route'
12
13
  autoload :Router, 'cotton_tail/router'
13
14
  autoload :Version, 'cotton_tail/version'
14
15
 
@@ -28,6 +29,9 @@ module CottonTail
28
29
 
29
30
  Response = Struct.new(:body)
30
31
 
32
+ class RouteConflictError < StandardError
33
+ end
34
+
31
35
  class UndefinedRouteError < StandardError
32
36
  end
33
37
  end
@@ -43,7 +43,7 @@ module CottonTail
43
43
 
44
44
  def handle(key, handler = nil, &block)
45
45
  handler ||= block
46
- handlers[key] = handler
46
+ handlers[Route.new(key)] = handler
47
47
  end
48
48
 
49
49
  def handlers
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'middleware'
4
- require 'logger'
5
4
 
6
5
  module CottonTail
7
6
  # Top level namespace for Middleware
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'json'
4
+
3
5
  module CottonTail
4
6
  module Middleware
5
7
  # Router Middleware
@@ -18,13 +20,26 @@ module CottonTail
18
20
 
19
21
  private
20
22
 
21
- def handler(route)
22
- handlers.fetch(route) { raise UndefinedRouteError }
23
+ def route(routing_key)
24
+ CottonTail::Route.new(routing_key)
23
25
  end
24
26
 
25
27
  def response(routing_key, message)
26
28
  CottonTail::Response.new handler(routing_key).call(message)
27
29
  end
30
+
31
+ def routes(routing_key)
32
+ handlers.keys.select { |route| route.match? routing_key }
33
+ end
34
+
35
+ def handler(routing_key)
36
+ route, *conflicts = routes(routing_key)
37
+ raise UndefinedRouteError if route.nil?
38
+
39
+ raise RouteConflictError unless conflicts.empty?
40
+
41
+ handlers[route]
42
+ end
28
43
  end
29
44
  end
30
45
  end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CottonTail
4
+ # Route value object
5
+ class Route
6
+ attr_reader :pattern
7
+
8
+ def initialize(pattern)
9
+ @pattern = pattern
10
+ end
11
+
12
+ def match?(routing_key)
13
+ return true if @pattern == routing_key
14
+
15
+ regex.match? routing_key
16
+ end
17
+
18
+ def to_s
19
+ @pattern
20
+ end
21
+
22
+ private
23
+
24
+ def regex
25
+ @regex ||= Regexp.new build_regex(@pattern)
26
+ end
27
+
28
+ def build_regex(pattern)
29
+ [
30
+ '^',
31
+ pattern.gsub('*', '([^.]+)').gsub(/\.?#\.?/, '([^.]{0,}\.?)+'),
32
+ '$'
33
+ ].join
34
+ end
35
+ end
36
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CottonTail
4
- VERSION = '0.4.1'
4
+ VERSION = '0.5.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cotton-tail
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Brennan
@@ -30,7 +30,7 @@ cert_chain:
30
30
  fXe/xr/Sc+2wCjHPVE2J+auN5hk3KCp1I4s2fKqyLIwyhTEF3shuYfCpC8rt/YdN
31
31
  cy9/lg5LCI3OvakzxL4Xt1Sq4h/xJZ06ydTVJ1wxfk6BXHrg
32
32
  -----END CERTIFICATE-----
33
- date: 2018-12-10 00:00:00.000000000 Z
33
+ date: 2018-12-13 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: bunny
@@ -219,6 +219,7 @@ files:
219
219
  - lib/cotton_tail/queue/memory.rb
220
220
  - lib/cotton_tail/queue/reader.rb
221
221
  - lib/cotton_tail/queue/supervisor.rb
222
+ - lib/cotton_tail/route.rb
222
223
  - lib/cotton_tail/version.rb
223
224
  homepage: https://github.com/jamesBrennan/cotton-tail
224
225
  licenses:
metadata.gz.sig CHANGED
Binary file