varnisher 1.0.beta.4 → 1.0.beta.5

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: 6970ca63d063e52913d7fb4cb1f62379a2f6a9e7
4
- data.tar.gz: 8fca00dbbc319f4109290f84e3d9045ce21082be
3
+ metadata.gz: c0b5fd6898bd69ebb046e5b5ca5459ca0fd66ebb
4
+ data.tar.gz: cef950689b3c66b79ec4095b5508080ec2cc7ccf
5
5
  SHA512:
6
- metadata.gz: 8d67b7a793177c73ec0dd40f04114aff19fc6482944463eba56b7ae97e1a0250011fbd5e8889398da734668db136c7446281e283dadd7f5462d27ca6cebaa9c7
7
- data.tar.gz: 0f378591b1d15b1f9b6afb66dbb330b6a38a89b87e1a2505d3cf6ce8f1fb022652504f6c2cfcfda21bc46110ff6bada757bcce869c420084ffaedab4913e63cd
6
+ metadata.gz: b8068e477b2d6dc4bebaa2d908595c4728ad104447ea979ed829fd560ef8b700e4e605ebabadfcfae9bb3eba5044786a7aedff14ba8bc0788f140fa5dabdac8d
7
+ data.tar.gz: ce25a130d9709f8a6304e73e6e26bdbf69433992ed768c824be10b815f07ed74817d5b049b6f60b9939d13b9cdb67fe91504077c2d3dea593868dcbe09105437
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # varnisher
2
2
 
3
+ [![Build Status](https://travis-ci.org/robmiller/varnisher.png?branch=master)](https://travis-ci.org/robmiller/varnisher)
4
+
3
5
  Administering Varnish is generally a breeze, but sometimes you want to
4
6
  do one of the few things that aren't painless out of the box. Hopefully,
5
7
  that's where this toolbox comes in.
data/bin/varnisher CHANGED
@@ -59,7 +59,8 @@ Main {
59
59
  purger.purge
60
60
  # If target is a hostname, assume we want to purge an entire domain.
61
61
  elsif target =~ /^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$/
62
- Varnisher::DomainPurger.new target
62
+ purger = Varnisher::DomainPurger.new target
63
+ purger.purge
63
64
 
64
65
  if params['reindex'].given?
65
66
  spider = Varnisher::Spider.new "http://#{target}/"
data/lib/varnisher.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'net/http'
2
+
1
3
  require_relative 'varnisher/spider'
2
4
  require_relative 'varnisher/purger'
3
5
  require_relative 'varnisher/domainpurger'
@@ -30,7 +32,7 @@ module Varnisher
30
32
  end
31
33
 
32
34
  def self.options=(options)
33
- @options = options
35
+ @options = @options.merge(options)
34
36
 
35
37
  if options['hostname'].nil? && options['target']
36
38
  uri = URI.parse(options['target'])
@@ -12,16 +12,27 @@ module Varnisher
12
12
  # }
13
13
  # }
14
14
  class DomainPurger
15
- # Executes the purge request.
15
+ # Initialises the purger
16
16
  #
17
17
  # @param domain [String] The hostname to purge
18
18
  def initialize(domain)
19
- purged = Varnisher.purge(domain, :domain)
19
+ @domain = domain
20
+ end
21
+
22
+ # Executes the purge request
23
+ #
24
+ # @return [True, False] True of the purge was successful, false if
25
+ # it wasn't
26
+ def purge
27
+ purged = Varnisher.purge(@domain, :domain)
28
+
20
29
  if purged
21
- Varnisher.log.info "Purged #{domain}"
30
+ Varnisher.log.info "Purged #{@domain}"
22
31
  else
23
- Varnisher.log.info "Failed to purge #{domain}"
32
+ Varnisher.log.info "Failed to purge #{@domain}"
24
33
  end
34
+
35
+ purged
25
36
  end
26
37
  end
27
38
  end
@@ -6,8 +6,10 @@ require 'parallel'
6
6
  module Varnisher
7
7
  # Purges an individual URL from Varnish.
8
8
  class PagePurger
9
+ attr_reader :urls
10
+
9
11
  # A bash at an abstract representation of resources. All you need
10
- # is an XPath, and what attribute to select from the matched
12
+ # is a selector, and what attribute to select from the matched
11
13
  # elements.
12
14
  Resource = Struct.new :name, :selector, :attribute
13
15
  def self.resources
@@ -1,3 +1,23 @@
1
+ # Adds the custom verb "PURGE" to the Net::HTTP library, allowing calls
2
+ # to:
3
+ #
4
+ # Net::HTTP.new(host, port).request(Purge.new(uri))
5
+ class Purge < Net::HTTPRequest
6
+ METHOD = "PURGE"
7
+ REQUEST_HAS_BODY = false
8
+ RESPONSE_HAS_BODY = false
9
+ end
10
+
11
+ # Adds the custom verb "DOMAINPURGE" to the Net::HTTP library, allowing
12
+ # calls to:
13
+ #
14
+ # Net::HTTP.new(host, port).request(DomainPurge.new(uri))
15
+ class DomainPurge < Net::HTTPRequest
16
+ METHOD = "DOMAINPURGE"
17
+ REQUEST_HAS_BODY = false
18
+ RESPONSE_HAS_BODY = false
19
+ end
20
+
1
21
  module Varnisher
2
22
  # Sends a purge request to the Varnish server
3
23
  #
@@ -34,7 +54,7 @@ module Varnisher
34
54
  # use "/"
35
55
  # @param host [String] The hostname of the URL being purged
36
56
  def initialize(method, path, host)
37
- @method = method
57
+ @request_method = method == "PURGE" ? Purge : DomainPurge
38
58
  @path = path
39
59
  @host = host
40
60
  end
@@ -50,13 +70,17 @@ module Varnisher
50
70
  end
51
71
 
52
72
  def send
53
- hostname = Varnisher.options['hostname']
73
+ hostname = Varnisher.options['hostname'] || @host
54
74
  port = Varnisher.options['port']
55
75
 
56
- TCPSocket.open(hostname, port) do |s|
57
- s.print("#{@method} #{@path} HTTP/1.1\r\nHost: #{@host}\r\n\r\n")
58
- !!s.read.match(/HTTP\/1\.1 200 Purged\./)
76
+ begin
77
+ http = Net::HTTP.new(hostname, port)
78
+ response = http.request(@request_method.new(@path))
79
+ rescue Timeout::Error
80
+ return false
59
81
  end
82
+
83
+ response.code == "200"
60
84
  end
61
85
  end
62
86
  end
@@ -21,6 +21,7 @@ module Varnisher
21
21
  #
22
22
  #
23
23
  class Spider
24
+ attr_reader :to_visit, :visited
24
25
 
25
26
  # Starts a new spider instance.
26
27
  #
@@ -1,3 +1,3 @@
1
1
  module Varnisher
2
- VERSION = '1.0.beta.4'
2
+ VERSION = '1.0.beta.5'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: varnisher
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.beta.4
4
+ version: 1.0.beta.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Miller
@@ -52,6 +52,62 @@ dependencies:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.7.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 10.1.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 10.1.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 5.0.6
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 5.0.6
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 1.13.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 1.13.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: letters
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 0.4.1
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 0.4.1
55
111
  description: Some tools that make working with the Varnish HTTP cache easier, including
56
112
  things like doing mass purges of entire domains.
57
113
  email: rob@bigfish.co.uk
@@ -95,3 +151,4 @@ signing_key:
95
151
  specification_version: 4
96
152
  summary: Helpful tools for working with Varnish caches
97
153
  test_files: []
154
+ has_rdoc: