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 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
-