File: test_server_context.rb

package info (click to toggle)
ruby-excon 1.3.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,240 kB
  • sloc: ruby: 7,970; makefile: 5
file content (83 lines) | stat: -rw-r--r-- 2,515 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# TODO: Clean up this doc and dry up the conditionals
#
# Required params:
#   plugin (e.g., webrick, unicorn, etc)
#   file (e.g. a rackup )
#
# Optional params:
# optional paramters may given as a hash
# opts may contain a bind argument
# opts may also contain before and after options
#
# In its simplest form:
# { :before => :start, :after => :stop }
#
# With lambdas, which recieve @server as an argument
# { before: lambda {|s| s.start }, after: lambda { |s| s.stop} }
#
# In both the cases above, before defaults to before(:all)
# This can be circumvented with a Hash
# { before: { :context => :start }, after: { :context => :stop } }
# or
# { before: { context: lambda { |s| s.start } }, after: { context: lambda { |s| s.stop } } }

shared_context "test server" do |plugin, file, opts = {}|
  plugin = plugin.to_sym unless plugin.is_a? Symbol
  if plugin == :unicorn && RUBY_PLATFORM == "java"
    before { skip("until unicorn supports jruby") }
  end
  abs_file = Object.send(:"#{plugin}_path", file)
  args = { plugin => abs_file}
  args[:bind] = opts[:bind] if opts.key? :bind


  before_hook = opts.key?(:before) && (opts[:before].is_a?(Symbol) || opts[:before].is_a?(Proc) || opts[:before].is_a?(Hash))

  if before_hook && opts[:before].is_a?(Hash)
    event = opts[:before].keys.first
    before(event) {
      @server = Excon::Test::Server.new(args)
      if opts[:before][event].is_a? Symbol
        @server.send(opts[:before][event])
      else
        opts[:before][event].call(@server)
      end
    }
  elsif
    before(:all) {
      @server = Excon::Test::Server.new(args)
      before_hook = opts.key?(:before) && (opts[:before].is_a?(Symbol) || opts[:before].is_a?(Proc) || opts[:before].is_a?(Hash))

      if before_hook
        if opts[:before].is_a? Symbol
          @server.send(opts[:before])
        else
          opts[:before].call(@server)
        end
      end
    }
  end

  after_hook = opts.key?(:after) && (opts[:after].is_a?(Symbol) || opts[:after].is_a?(Proc) || opts[:after].is_a?(Hash))

  if after_hook && opts[:after].is_a?(Hash)
      event = opts[:after].keys.first
      after(event) {
        if opts[:after][event].is_a? Symbol
          @server.send(opts[:after][event])
        else
          opts[:after][event].call(@server)
        end
      }
  elsif after_hook
    after(:all) {
      if opts[:after].is_a? Symbol
        @server.send(opts[:after])
      elsif opts[:after].is_a? Hash

      else
        opts[:after].call(@server)
      end
    }
  end
end