liquid-ext 3.2.0 → 3.3.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
  SHA1:
3
- metadata.gz: 60c594a5e6540ff912a888069e175df3df538689
4
- data.tar.gz: b7aad2df11ab4e395b6273f998328ce33e1cc983
3
+ metadata.gz: d1323dc768902ea05e69c01cb8548540daca2cb3
4
+ data.tar.gz: f36b10320132fb182ed9233f6eeb1b28c909a78e
5
5
  SHA512:
6
- metadata.gz: e32319504d77cb97d76b9f4d0b10f50fe978355d36001f8ca62b33cc30cc98ccb8afcca3669b069f34bdce7f96cadc0865b2081e278ae467a4ed6e480e707324
7
- data.tar.gz: 093c9039dde0b4c27323fe984906bd5970c827afded74e9c51ad4f0be8b0c07267bc5161b7842e864dca88fc25602e2991592237e52272a3d40747135ca590e6
6
+ metadata.gz: 1e6182e393fabdd026dc5447b29e6999cc2857ee82cd71c6c9532a77f6e00ad874f63c5954e93718e71ffffea22d9005429786d813968167a1ec1186d964c1cb
7
+ data.tar.gz: dd79fbd7bfb4d2f507b711174326a094833042e86b506fe4b715248ad0a73310d99a9f9e4121130c34f59c9e38579e548170d3c570f7fc623c52b82604fea014
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --require spec_helper
2
+ --color
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- liquid-ext (3.2.0)
4
+ liquid-ext (3.3.0)
5
5
  activesupport
6
6
  erubis
7
7
  jmx4r
@@ -11,8 +11,8 @@ PATH
11
11
  GEM
12
12
  remote: http://rubygems.org/
13
13
  specs:
14
- activesupport (4.0.3)
15
- i18n (~> 0.6, >= 0.6.4)
14
+ activesupport (4.0.4)
15
+ i18n (~> 0.6, >= 0.6.9)
16
16
  minitest (~> 4.2)
17
17
  multi_json (~> 1.3)
18
18
  thread_safe (~> 0.1)
@@ -110,7 +110,7 @@ GEM
110
110
  atomic (>= 1.1.7, < 2)
111
111
  timecop (0.7.1)
112
112
  tins (1.0.0)
113
- tzinfo (0.3.38)
113
+ tzinfo (0.3.39)
114
114
  yard (0.8.7.3)
115
115
 
116
116
  PLATFORMS
data/lib/liquid/boot.rb CHANGED
@@ -24,14 +24,6 @@ if RUBY_PLATFORM == 'java'
24
24
  Dir[File.join(File.dirname(__FILE__), '*.jar')].each do |f|
25
25
  require f
26
26
  end
27
-
28
- # some java libraries cannot be found on maven central, so we load all bundled
29
- # jar files here for convenience
30
- if defined?(ROOT)
31
- Dir[File.join(ROOT, 'jars', '*.jar')].each do |f|
32
- require f
33
- end
34
- end
35
27
  end
36
28
 
37
29
  # load a bunch of common classes here, so we don't have to track and repeat it
@@ -53,11 +45,13 @@ require 'liquid/cli'
53
45
  require 'liquid/environment'
54
46
  require 'liquid/from_file'
55
47
  require 'liquid/hash_helper'
48
+ require 'liquid/health_checks'
56
49
  require 'liquid/metrics'
57
50
  require 'liquid/server'
58
51
  require 'liquid/timing'
59
52
  require 'liquid/tracker'
60
53
  require 'liquid/transaction_id'
54
+ require 'liquid/trove'
61
55
  require 'liquid/zmq'
62
56
 
63
57
  # configuration callbacks
@@ -119,3 +113,8 @@ $conf.mixin({
119
113
  $conf.callback(&reload_mixins)
120
114
  $conf.callback(&reload_logger)
121
115
  $conf.reload!
116
+
117
+ if defined?(ROOT) && $conf.code_reloader
118
+ require 'liquid/code_reloader'
119
+ CodeReloader.new(ROOT)
120
+ end
@@ -0,0 +1,28 @@
1
+ require 'listen'
2
+
3
+ class CodeReloader
4
+
5
+ def initialize(path)
6
+ $log.warn("code.reloader", active: true, path: path)
7
+ Listen.to(path) do |m, a, r|
8
+ Thread.name = "Code Reloader (#{path})"
9
+ (m + a).uniq.each do |file|
10
+ reload(file)
11
+ end
12
+ end.start
13
+ end
14
+
15
+ def reload(file)
16
+ if file =~ /\.rb$/
17
+ $log.info("code.reloader", reload: file)
18
+ begin
19
+ load(file)
20
+ rescue SyntaxError => e
21
+ $log.exception(e)
22
+ rescue => e
23
+ $log.exception(e)
24
+ end
25
+ end
26
+ end
27
+
28
+ end
Binary file
Binary file
Binary file
@@ -0,0 +1,10 @@
1
+ class Socket
2
+ def self.ipaddress
3
+ hostname = %x(hostname).chomp
4
+ getaddrinfo(hostname, nil).first[3]
5
+ end
6
+
7
+ def self.fqdn
8
+ Socket.gethostbyaddr(IPAddr.new(ipaddress).hton)[0]
9
+ end
10
+ end
@@ -8,4 +8,17 @@ class String
8
8
  self
9
9
  end
10
10
  end
11
+
12
+ # from: http://rubydoc.info/gems/extlib/0.9.15/String#camel_case-instance_method
13
+ def camel_case
14
+ return self if self !~ /_/ && self =~ /[A-Z]+.*/
15
+ split('_').map{|e| e.capitalize}.join
16
+ end
17
+
18
+ def snake_case
19
+ return downcase if match(/\A[A-Z]+\z/)
20
+ gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
21
+ gsub(/([a-z])([A-Z])/, '\1_\2').
22
+ downcase
23
+ end
11
24
  end
@@ -1,20 +1,52 @@
1
1
  require 'liquid/logger'
2
2
 
3
- require_relative './metrics-healthchecks-3.0.1.jar'
4
- java_import 'com.codahale.metrics.health.HealthCheckRegistry'
3
+ class HealthCheck
4
+ class Result
5
+ attr_reader :message
6
+ attr_reader :exception
5
7
 
6
- class HealthChecks
7
- @registry = HealthCheckRegistry.new
8
+ def initialize(healthy, message, exception)
9
+ @healthy = healthy
10
+ @message = message
11
+ @exception = exception
12
+ end
8
13
 
9
- def self.registry
10
- @registry
14
+ def healthy?
15
+ @healthy
16
+ end
17
+
18
+ def to_s
19
+ "Result{isHealthy=#{healthy?},message=#{message.inspect},exception=#{exception.inspect}}"
20
+ end
11
21
  end
12
22
 
13
- def self.register(name, handler)
14
- registry.register(name, handler)
23
+ @@checks = {}
24
+
25
+ def self.inherited(child)
26
+ @@checks[child.name.demodulize] = child
15
27
  end
16
28
 
17
29
  def self.run
18
- registry.run_health_checks
30
+ @@checks.inject({}) do |result, (name, handler)|
31
+ result[name] = handler.new.execute
32
+ result
33
+ end
34
+ end
35
+
36
+ def self.poll(interval = 5)
37
+ loop do
38
+ @healthy = run.values.all?(&:healthy?)
39
+ sleep(interval)
40
+ end
41
+ end
42
+
43
+ def self.healthy?
44
+ @healthy.nil? ? run.values.all?(&:healthy?) : @healthy
45
+ end
46
+
47
+ def execute
48
+ check
49
+ rescue => e
50
+ Result.new(false, "failed to execute check", e)
19
51
  end
20
52
  end
data/lib/liquid/logger.rb CHANGED
@@ -1,27 +1,23 @@
1
- require 'liquid/ext/string'
2
-
3
- require_relative './slf4j-api-1.7.6.jar'
4
- require_relative './slf4j-log4j12-1.7.6.jar'
5
- require_relative './log4j-1.2.17.jar'
6
1
  java_import 'org.slf4j.LoggerFactory'
7
2
 
8
3
  module Liquid
9
4
  class Logger
10
5
 
11
6
  attr_accessor :progname
7
+ attr_accessor :appender
12
8
 
13
9
  def initialize(name, progname = nil)
14
10
  @progname = progname || File.basename($0)
15
11
  @logger = LoggerFactory.getLogger(name)
16
12
  @exceptions = {}
17
13
  @exception_handlers = [method(:_log_error_exception)]
18
- reload!
14
+ unmute!
19
15
  end
20
16
 
21
17
  def reload!
22
18
  root = org.apache.log4j.Logger.getRootLogger
23
- appender = org.apache.log4j.ConsoleAppender.new
24
- appender.name = "console"
19
+ appender = @appender.new
20
+ appender.name = "default"
25
21
  appender.layout = org.apache.log4j.PatternLayout.new($conf.log.format)
26
22
  appender.threshold = org.apache.log4j.Level.toLevel($conf.log.level.to_s)
27
23
  appender.activateOptions
@@ -29,6 +25,16 @@ module Liquid
29
25
  root.addAppender(appender)
30
26
  end
31
27
 
28
+ def mute!
29
+ @appender = org.apache.log4j.varia.NullAppender
30
+ reload!
31
+ end
32
+
33
+ def unmute!
34
+ @appender = org.apache.log4j.ConsoleAppender
35
+ reload!
36
+ end
37
+
32
38
  def trace?
33
39
  @logger.trace_enabled?
34
40
  end
Binary file
@@ -1,6 +1,3 @@
1
- require 'liquid/logger'
2
-
3
- require_relative './metrics-core-3.0.1.jar'
4
1
  java_import 'com.codahale.metrics.Histogram'
5
2
  java_import 'com.codahale.metrics.JmxReporter'
6
3
  java_import 'com.codahale.metrics.MetricRegistry'
data/lib/liquid/server.rb CHANGED
@@ -9,6 +9,7 @@ module Liquid
9
9
  initialize_raven
10
10
  initialize_tracker
11
11
  initialize_metrics
12
+ initialize_health_checks
12
13
  end
13
14
 
14
15
  def initialize_raven
@@ -43,6 +44,13 @@ module Liquid
43
44
  Signal.register_shutdown_handler { ::Metrics.stop }
44
45
  end
45
46
 
47
+ def initialize_health_checks
48
+ Thread.new do
49
+ Thread.name = "Health Check"
50
+ HealthCheck.poll
51
+ end
52
+ end
53
+
46
54
  def initialize_zmachine
47
55
  require 'zmachine'
48
56
  ZMachine.logger = $log
@@ -1,11 +1,5 @@
1
1
  require 'liquid/tracker/base'
2
2
 
3
- require_relative '../scala-library-2.10.3.jar'
4
- require_relative '../metrics-core-2.2.0.jar'
5
- require_relative '../metrics-annotation-2.2.0.jar'
6
- require_relative '../kafka_2.10-0.8.0.jar'
7
- require_relative '../snappy-java-1.1.1-M1.jar'
8
-
9
3
  module Tracker
10
4
  class KafkaTracker < Base
11
5
 
@@ -0,0 +1,71 @@
1
+ java_import 'gnu.trove.TIntCollection'
2
+ java_import 'gnu.trove.set.hash.TIntHashSet'
3
+ java_import 'gnu.trove.set.hash.TLongHashSet'
4
+ java_import 'gnu.trove.map.hash.TIntObjectHashMap'
5
+ java_import 'gnu.trove.map.hash.TLongObjectHashMap'
6
+
7
+ module TMap
8
+ def each
9
+ it = iterator
10
+ while it.has_next
11
+ it.advance
12
+ yield it.key, it.value
13
+ end
14
+ end
15
+ end
16
+
17
+ module TSet
18
+ def each
19
+ it = iterator
20
+ while it.has_next
21
+ yield it.next
22
+ end
23
+ end
24
+
25
+ def inspect
26
+ if size > 1000
27
+ "#{self.class.name}{too large to display,l=#{size}}"
28
+ else
29
+ to_string
30
+ end
31
+ end
32
+ end
33
+
34
+ class TLongObjectHashMap
35
+ include TMap
36
+ alias :has_key? :containsKey
37
+ alias :[] :get
38
+ alias :[]= :put
39
+ alias :length :size
40
+ alias :delete :remove
41
+ end
42
+
43
+ class TIntObjectHashMap
44
+ include TMap
45
+ alias :has_key? :containsKey
46
+ alias :[] :get
47
+ alias :[]= :put
48
+ alias :length :size
49
+ alias :delete :remove
50
+ end
51
+
52
+ class TLongHashSet
53
+ include TSet
54
+ alias :include? :contains
55
+ alias :length :size
56
+ alias :delete :remove
57
+ end
58
+
59
+ class TIntHashSet
60
+ include TSet
61
+ alias :include? :contains
62
+ alias :length :size
63
+ alias :delete :remove
64
+
65
+ java_alias :concat_ints, :addAll, [TIntCollection.java_class]
66
+
67
+ def concat(list)
68
+ return if !list
69
+ concat_ints list
70
+ end
71
+ end
data/lib/liquid/zmq.rb CHANGED
@@ -1,4 +1,3 @@
1
- require_relative "./jeromq-0.3.3.jar"
2
1
  java_import "org.zeromq.ZContext"
3
2
  java_import "org.zeromq.ZFrame"
4
3
  java_import "org.zeromq.ZLoop"
@@ -8,11 +7,8 @@ java_import "org.zeromq.ZMQQueue"
8
7
  java_import "org.zeromq.ZMsg"
9
8
  java_import "org.zeromq.ZThread"
10
9
 
11
- java_import "java.nio.channels.AsynchronousCloseException"
12
- java_import "java.nio.channels.ClosedChannelException"
13
- java_import "java.nio.channels.ClosedSelectorException"
14
-
15
10
  class ZContext
11
+
16
12
  def create_socket_with_opts(type, opts = {})
17
13
  socket = create_socket(type)
18
14
  opts.each do |key, value|
@@ -62,12 +58,33 @@ class ZContext
62
58
  instance.destroy_socket(socket)
63
59
  end
64
60
 
61
+ # really incredible how many exceptions a simple shutdown can throw all over
62
+ # the place. if it's one thing ZMQ did never get right it is the shutdown
63
+ # logic ...
65
64
  def self.destroy
66
65
  instance.destroy
67
66
  rescue Java::JavaLang::IllegalStateException
68
67
  # ignore broken shutdown in zeromq
69
68
  end
70
69
 
70
+ DestroyExceptions = [
71
+ Java::JavaNioChannels::AsynchronousCloseException,
72
+ Java::JavaNioChannels::ClosedChannelException,
73
+ Java::JavaNioChannels::ClosedSelectorException,
74
+ ]
75
+
76
+ Exceptions = DestroyExceptions + [
77
+ Java::OrgZeromq::ZMQException,
78
+ Java::Zmq::ZError::IOException,
79
+ ]
80
+
81
+ def self.destroy_exception?(e)
82
+ return true if e.is_a?(Java::OrgZeromq::ZMQException) && ZMQ::Error::ETERM.getCode == e.getErrorCode
83
+ return true if e.is_a?(Java::Zmq::ZError::IOException) && DestroyExceptions.include?(e.cause.class)
84
+ return true if DestroyExceptions.include?(e.class)
85
+ return false
86
+ end
87
+
71
88
  def self.router(opts = {})
72
89
  instance.router(opts)
73
90
  end
Binary file
data/liquid-ext.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "liquid-ext"
5
- spec.version = "3.2.0"
5
+ spec.version = "3.3.0"
6
6
  spec.authors = ["LiquidM, Inc."]
7
7
  spec.email = ["opensource@liquidm.com"]
8
8
  spec.description = %q{Ruby core extensions and helper libraries}
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
17
17
 
18
18
  spec.add_dependency "activesupport"
19
19
  spec.add_dependency "erubis"
20
+ spec.add_dependency "jmx4r"
20
21
  spec.add_dependency "mixlib-cli"
21
22
  spec.add_dependency "terminal-table"
22
- spec.add_dependency "jmx4r"
23
23
  end
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,20 @@
1
- require 'rubygems'
2
- require 'rspec'
1
+ ROOT = File.expand_path('../..', __FILE__)
3
2
 
4
- require 'simplecov'
5
- SimpleCov.start
3
+ require 'bundler/setup'
4
+ require 'liquid/boot'
6
5
 
7
- $:.unshift(File.dirname(__FILE__) + '/../lib')
6
+ require 'rspec'
8
7
 
9
8
  RSpec.configure do |config|
9
+ # Run specs in random order to surface order dependencies. If you find an
10
+ # order dependency and want to debug it, you can fix the order by providing
11
+ # the seed, which is printed after each run.
12
+ # --seed 1234
13
+ config.order = 'random'
10
14
  end
15
+
16
+ # load helper classes & functions from files in spec/support/
17
+ Dir[File.join(ROOT, "spec/support/**/*.rb")].each { |f| require f }
18
+
19
+ # be silent
20
+ $log.mute!
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: liquid-ext
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - LiquidM, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-11 00:00:00.000000000 Z
11
+ date: 2014-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -39,7 +39,7 @@ dependencies:
39
39
  prerelease: false
40
40
  type: :runtime
41
41
  - !ruby/object:Gem::Dependency
42
- name: mixlib-cli
42
+ name: jmx4r
43
43
  version_requirements: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - '>='
@@ -53,7 +53,7 @@ dependencies:
53
53
  prerelease: false
54
54
  type: :runtime
55
55
  - !ruby/object:Gem::Dependency
56
- name: terminal-table
56
+ name: mixlib-cli
57
57
  version_requirements: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - '>='
@@ -67,7 +67,7 @@ dependencies:
67
67
  prerelease: false
68
68
  type: :runtime
69
69
  - !ruby/object:Gem::Dependency
70
- name: jmx4r
70
+ name: terminal-table
71
71
  version_requirements: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - '>='
@@ -89,6 +89,7 @@ extensions: []
89
89
  extra_rdoc_files: []
90
90
  files:
91
91
  - .gitignore
92
+ - .rspec
92
93
  - .ruby-version
93
94
  - .travis.yml
94
95
  - .yardopts
@@ -101,8 +102,14 @@ files:
101
102
  - lib/liquid/benchmark.rb
102
103
  - lib/liquid/boot.rb
103
104
  - lib/liquid/cli.rb
105
+ - lib/liquid/code_reloader.rb
106
+ - lib/liquid/commons-codec-1.9.jar
107
+ - lib/liquid/commons-io-2.4.jar
104
108
  - lib/liquid/configuration.rb
105
109
  - lib/liquid/console.rb
110
+ - lib/liquid/curator-client-2.4.1.jar
111
+ - lib/liquid/curator-framework-2.4.1.jar
112
+ - lib/liquid/curator-recipes-2.4.1.jar
106
113
  - lib/liquid/environment.rb
107
114
  - lib/liquid/ext/array.rb
108
115
  - lib/liquid/ext/enumerable.rb
@@ -112,6 +119,7 @@ files:
112
119
  - lib/liquid/ext/nil.rb
113
120
  - lib/liquid/ext/ordered_set.rb
114
121
  - lib/liquid/ext/signal.rb
122
+ - lib/liquid/ext/socket.rb
115
123
  - lib/liquid/ext/string.rb
116
124
  - lib/liquid/ext/thread.rb
117
125
  - lib/liquid/from_file.rb
@@ -122,16 +130,15 @@ files:
122
130
  - lib/liquid/kafka_2.10-0.8.0.jar
123
131
  - lib/liquid/log4j-1.2.17.jar
124
132
  - lib/liquid/logger.rb
133
+ - lib/liquid/mapdb-0.9.3.jar
125
134
  - lib/liquid/metrics-annotation-2.2.0.jar
126
135
  - lib/liquid/metrics-core-2.2.0.jar
127
136
  - lib/liquid/metrics-core-3.0.1.jar
128
- - lib/liquid/metrics-healthchecks-3.0.1.jar
129
137
  - lib/liquid/metrics.rb
130
138
  - lib/liquid/metrics/logger_reporter.rb
131
139
  - lib/liquid/metrics/reporter.rb
132
140
  - lib/liquid/metrics/tracker_reporter.rb
133
141
  - lib/liquid/priority_selector.rb
134
- - lib/liquid/router.rb
135
142
  - lib/liquid/scala-library-2.10.3.jar
136
143
  - lib/liquid/server.rb
137
144
  - lib/liquid/slf4j-api-1.7.6.jar
@@ -140,9 +147,7 @@ files:
140
147
  - lib/liquid/tasks.rb
141
148
  - lib/liquid/tasks/protoc.rake
142
149
  - lib/liquid/tasks/reek.rake
143
- - lib/liquid/tasks/router.rake
144
150
  - lib/liquid/tasks/rspec.rake
145
- - lib/liquid/tasks/yard.rake
146
151
  - lib/liquid/templates/Gemfile.tt
147
152
  - lib/liquid/templates/LICENSE.txt.tt
148
153
  - lib/liquid/templates/README.md.tt
@@ -162,11 +167,12 @@ files:
162
167
  - lib/liquid/tracker/logger_tracker.rb
163
168
  - lib/liquid/transaction_id.rb
164
169
  - lib/liquid/trove-3.0.3.jar
170
+ - lib/liquid/trove.rb
165
171
  - lib/liquid/weighted_selector.rb
166
172
  - lib/liquid/zmq.rb
173
+ - lib/liquid/zookeeper-3.4.6.jar
167
174
  - liquid-ext.gemspec
168
175
  - spec/lib/liquid/ext/enumerable_spec.rb
169
- - spec/lib/liquid/router_spec.rb
170
176
  - spec/lib/liquid/weighted_selector_spec.rb
171
177
  - spec/spec_helper.rb
172
178
  homepage: https://github.com/liquidm/ext
@@ -195,7 +201,6 @@ specification_version: 4
195
201
  summary: Ruby core extensions and helper libraries
196
202
  test_files:
197
203
  - spec/lib/liquid/ext/enumerable_spec.rb
198
- - spec/lib/liquid/router_spec.rb
199
204
  - spec/lib/liquid/weighted_selector_spec.rb
200
205
  - spec/spec_helper.rb
201
206
  has_rdoc:
data/lib/liquid/router.rb DELETED
@@ -1,45 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'liquid/from_file'
4
-
5
- class Router
6
- include FromFile
7
-
8
- attr_accessor :routes
9
-
10
- def initialize(request_handler)
11
- @request_handler = request_handler
12
- @routes = []
13
-
14
- @cache = Hash.new do |hash, path|
15
- hash[path] = nil
16
- @routes.each do |regex, block, args|
17
- match = path.match(regex)
18
- hash[path] = block.curry[match] if match
19
- end
20
- hash[path]
21
- end
22
- end
23
-
24
- def add(regexp, args, &block)
25
- @routes << [regexp, block, args]
26
- end
27
-
28
- # route %r(/foo/(.+)/(\w+)/(\d+)), AnyParser, :matches, :in, :order
29
- def route(regexp, parser, *args, &block)
30
- block = lambda do |match, env|
31
- params = args.each_with_index.inject({}) do |hash, (name, index)|
32
- hash[name] = match[index+1]
33
- hash
34
- end
35
-
36
- return @request_handler.handle(parser, env, params)
37
- end
38
-
39
- add(regexp, args, &block)
40
- end
41
-
42
- def handle(path, request)
43
- @cache[path].call(request) if @cache[path]
44
- end
45
- end
@@ -1,17 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'liquid/router'
4
- require 'terminal-table'
5
-
6
- desc "Show all ed routes"
7
- task :routes do
8
- root = File.expand_path(File.dirname(__FILE__))
9
- router = Router.new(lambda{})
10
- router.from_file(File.join(root, "../../../config/routes.rb"))
11
- routes = router.routes.map {|r| [r[0].inspect, r[1], r[2] ] }
12
- puts Terminal::Table.new({
13
- rows: routes.sort_by { |route| route[0] },
14
- headings: ['regex', 'handler', 'parameters'],
15
- })
16
- end
17
-
@@ -1,8 +0,0 @@
1
- begin
2
- require 'yard'
3
-
4
- YARD::Rake::YardocTask.new do |t|
5
- t.files = ['lib/**/*.rb', 'README.rdoc']
6
- end
7
- rescue LoadError
8
- end
@@ -1,75 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'liquid/router'
4
-
5
- class GeneralRequestHandler; end
6
-
7
- describe Router do
8
- let(:regex) { %r(foo(.*)bar) }
9
- let(:block) { Proc.new { 1+1 } }
10
- let(:router) { Router.new(GeneralRequestHandler) }
11
-
12
- describe '.add' do
13
- context 'add route' do
14
-
15
- before { router.add(regex, [:args], &block) }
16
-
17
- context 'regex' do
18
- subject { router.routes.last[0] }
19
- it { should eql regex }
20
- end
21
-
22
- context 'block' do
23
- subject { router.routes.last[1] }
24
- its(:call) { should eql block.call }
25
- end
26
-
27
- context 'args' do
28
- subject { router.routes.last[2] }
29
- it { should eql [:args] }
30
- end
31
- end
32
- end
33
-
34
- describe '.route' do
35
- let(:regex) { %r(/bar/) }
36
-
37
- let(:parser) { double('CustomRequestParser') }
38
- let(:env) { "env" }
39
-
40
- before { router.route(regex, parser, :foo, :bar) }
41
-
42
- subject { router.routes.last[0] }
43
-
44
- it { should be_a Regexp }
45
- it { should eql regex }
46
- it 'builds correct block' do
47
- GeneralRequestHandler.should_receive(:handle).with(parser, env, {foo: 1, bar: 2})
48
-
49
- _, block = router.routes.last
50
- block.call([0,1,2], env)
51
- end
52
- end
53
-
54
- describe '.handle' do
55
- let(:handler) { double('MockHandler') }
56
- let(:request) { double('request') }
57
- let(:url_re_1) { 'http://ad.madvertise.de/muchte/(.*?)' }
58
- let(:block) { Proc.new { |match, env| handler.handle(match, env) } }
59
-
60
- before do
61
- router.add url_re_1, [:foo], &block
62
- router.route %r(/new_adx_bidrequest/([\w.-]+)), GeneralRequestHandler, :site_token
63
- end
64
-
65
- it 'is not matching' do
66
- router.handle("http://ad.madvertise.de/muchtel", request).should == nil
67
- end
68
-
69
- it 'is matching' do
70
- handler.should_receive(:handle).and_return("bar")
71
- router.handle("http://ad.madvertise.de/muchte/foo", request).should == "bar"
72
- end
73
- end
74
- end
75
-