liquid-ext 3.2.0 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +2 -0
- data/Gemfile.lock +4 -4
- data/lib/liquid/boot.rb +7 -8
- data/lib/liquid/code_reloader.rb +28 -0
- data/lib/liquid/commons-codec-1.9.jar +0 -0
- data/lib/liquid/commons-io-2.4.jar +0 -0
- data/lib/liquid/curator-client-2.4.1.jar +0 -0
- data/lib/liquid/curator-framework-2.4.1.jar +0 -0
- data/lib/liquid/curator-recipes-2.4.1.jar +0 -0
- data/lib/liquid/ext/socket.rb +10 -0
- data/lib/liquid/ext/string.rb +13 -0
- data/lib/liquid/health_checks.rb +41 -9
- data/lib/liquid/logger.rb +14 -8
- data/lib/liquid/mapdb-0.9.3.jar +0 -0
- data/lib/liquid/metrics.rb +0 -3
- data/lib/liquid/server.rb +8 -0
- data/lib/liquid/tracker/kafka_tracker.rb +0 -6
- data/lib/liquid/trove.rb +71 -0
- data/lib/liquid/zmq.rb +22 -5
- data/lib/liquid/zookeeper-3.4.6.jar +0 -0
- data/liquid-ext.gemspec +2 -2
- data/spec/spec_helper.rb +15 -5
- metadata +16 -11
- data/lib/liquid/metrics-healthchecks-3.0.1.jar +0 -0
- data/lib/liquid/router.rb +0 -45
- data/lib/liquid/tasks/router.rake +0 -17
- data/lib/liquid/tasks/yard.rake +0 -8
- data/spec/lib/liquid/router_spec.rb +0 -75
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1323dc768902ea05e69c01cb8548540daca2cb3
|
4
|
+
data.tar.gz: f36b10320132fb182ed9233f6eeb1b28c909a78e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e6182e393fabdd026dc5447b29e6999cc2857ee82cd71c6c9532a77f6e00ad874f63c5954e93718e71ffffea22d9005429786d813968167a1ec1186d964c1cb
|
7
|
+
data.tar.gz: dd79fbd7bfb4d2f507b711174326a094833042e86b506fe4b715248ad0a73310d99a9f9e4121130c34f59c9e38579e548170d3c570f7fc623c52b82604fea014
|
data/.rspec
ADDED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
liquid-ext (3.
|
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.
|
15
|
-
i18n (~> 0.6, >= 0.6.
|
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.
|
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
|
Binary file
|
Binary file
|
data/lib/liquid/ext/string.rb
CHANGED
@@ -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
|
data/lib/liquid/health_checks.rb
CHANGED
@@ -1,20 +1,52 @@
|
|
1
1
|
require 'liquid/logger'
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
class HealthCheck
|
4
|
+
class Result
|
5
|
+
attr_reader :message
|
6
|
+
attr_reader :exception
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
+
def initialize(healthy, message, exception)
|
9
|
+
@healthy = healthy
|
10
|
+
@message = message
|
11
|
+
@exception = exception
|
12
|
+
end
|
8
13
|
|
9
|
-
|
10
|
-
|
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
|
-
|
14
|
-
|
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
|
-
|
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
|
-
|
14
|
+
unmute!
|
19
15
|
end
|
20
16
|
|
21
17
|
def reload!
|
22
18
|
root = org.apache.log4j.Logger.getRootLogger
|
23
|
-
appender =
|
24
|
-
appender.name = "
|
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
|
data/lib/liquid/metrics.rb
CHANGED
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
|
|
data/lib/liquid/trove.rb
ADDED
@@ -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.
|
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
|
-
|
2
|
-
require 'rspec'
|
1
|
+
ROOT = File.expand_path('../..', __FILE__)
|
3
2
|
|
4
|
-
require '
|
5
|
-
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'liquid/boot'
|
6
5
|
|
7
|
-
|
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.
|
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
|
+
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:
|
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:
|
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:
|
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:
|
Binary file
|
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
|
-
|
data/lib/liquid/tasks/yard.rake
DELETED
@@ -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
|
-
|