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

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