nginxbrew 0.0.6 → 0.0.7
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 +4 -4
- data/CHANGES.txt +6 -0
- data/bin/nginxbrew +1 -1
- data/lib/nginxbrew.rb +1 -1
- data/lib/nginxbrew/catalog.rb +141 -0
- data/lib/nginxbrew/tasks.rb +10 -10
- data/lib/nginxbrew/version.rb +1 -1
- data/spec/{nginxes_spec.rb → catalog_spec.rb} +58 -22
- data/spec/spec_helper.rb +4 -0
- metadata +5 -5
- data/lib/nginxbrew/nginxes.rb +0 -93
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 683c60590845811ab4de45a8032f7a1c8b3d88c6
|
4
|
+
data.tar.gz: aca6e131adc5ab8fa59e2e9d6d8c3265ef6604de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba7f63e4f0ec209a2b61fb66119349297d940f18dc4363708de44a61db93fa60845a213c8ee128bcdf81dc0e7c49dfb0b788f537bd25b6a166bce33815c56403
|
7
|
+
data.tar.gz: 4e70c1e80a9758d86c369f9eda988c1c40bc45735f2b89e0acfb02c7f257973e258f3068eb0e87dd98c8be772c1a173ddc77e727d43e2e17ba7d9d2ffc31dbc9
|
data/CHANGES.txt
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
Nginxbrew changes
|
2
2
|
|
3
|
+
Nginxbrew 0.0.7
|
4
|
+
- Cache result of nginxes/openresties.
|
5
|
+
- Limit min version of nginx to support to upper v0.5.38.
|
6
|
+
- Bug fixes.
|
7
|
+
|
8
|
+
|
3
9
|
Nginxbrew 0.0.6
|
4
10
|
- You can change ngx-user/group by config file which specified in env {NGINXBREW_CONFIG}.
|
5
11
|
- Add/update build options by hash in ruby.
|
data/bin/nginxbrew
CHANGED
@@ -61,7 +61,7 @@ begin
|
|
61
61
|
when "makeconf"
|
62
62
|
output_to = ARGV.shift
|
63
63
|
raise Exception.new("output directory/file for config is required!") unless output_to
|
64
|
-
Nginxbrew.run(:makeconf, envs={ "
|
64
|
+
Nginxbrew.run(:makeconf, envs={ "MAKECONF_OUTPUT_TO" => output_to })
|
65
65
|
else
|
66
66
|
raise Exception.new("Unknown command '#{command}'")
|
67
67
|
end
|
data/lib/nginxbrew.rb
CHANGED
@@ -0,0 +1,141 @@
|
|
1
|
+
require "net/http"
|
2
|
+
require "uri"
|
3
|
+
require "fileutils"
|
4
|
+
|
5
|
+
include Nginxbrew
|
6
|
+
|
7
|
+
|
8
|
+
module Nginxbrew
|
9
|
+
|
10
|
+
class VersionNotFoundError < StandardError
|
11
|
+
|
12
|
+
def initialize(v)
|
13
|
+
super("version '#{v}' is not found in all versions of nginxes/openresties")
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
class Catalog
|
19
|
+
|
20
|
+
TypeNginx = "nginx"
|
21
|
+
|
22
|
+
TypeOpenresty = "openresty"
|
23
|
+
|
24
|
+
CacheExpireDays = 1
|
25
|
+
|
26
|
+
attr_reader :ngx_type, :versions
|
27
|
+
|
28
|
+
def initialize(ngx_type, versions)
|
29
|
+
unless [TypeNginx, TypeOpenresty].include?(ngx_type)
|
30
|
+
raise Exception.new("Invalid ngx_type #{ngx_type}")
|
31
|
+
end
|
32
|
+
raise Exception.new("No versions of nginx!") if versions.size == 0
|
33
|
+
@ngx_type = ngx_type
|
34
|
+
@versions = versions.uniq.map do |v|
|
35
|
+
Gem::Version.new(v) # 1.15.x <> 1.8.x should be 1.15.x > 1.8.x
|
36
|
+
end.sort.reverse.map do |v|
|
37
|
+
v.to_s
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def unsupport_under!(version)
|
42
|
+
min_version = Gem::Version.new(version)
|
43
|
+
@versions = @versions.select do |v|
|
44
|
+
Gem::Version.new(v) >= min_version
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def size
|
49
|
+
@versions.size
|
50
|
+
end
|
51
|
+
|
52
|
+
def filter_versions(head_of)
|
53
|
+
src_numbers = head_of.split(".")
|
54
|
+
src_numbers_size = src_numbers.size
|
55
|
+
r = @versions.select do |v|
|
56
|
+
v.split(".").slice(0, src_numbers_size) == src_numbers
|
57
|
+
end
|
58
|
+
raise VersionNotFoundError.new(head_of) if r.size == 0
|
59
|
+
r
|
60
|
+
end
|
61
|
+
|
62
|
+
def head_of(version)
|
63
|
+
src_numbers = version.split(".")
|
64
|
+
src_numbers_size = src_numbers.size
|
65
|
+
r = @versions.detect do |v|
|
66
|
+
v.split(".").slice(0, src_numbers_size) == src_numbers
|
67
|
+
end
|
68
|
+
raise VersionNotFoundError.new(version) unless r
|
69
|
+
r
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.nginxes(cache_dir=nil)
|
73
|
+
catalog_cache_or(cache_dir, "nginxes") do
|
74
|
+
versions = html_body_of("http://nginx.org", "/download/").
|
75
|
+
gsub(/href="nginx\-([0-9\.]+?)\.tar\.gz"/).inject([]) do |memo, match|
|
76
|
+
memo << $1
|
77
|
+
memo
|
78
|
+
end
|
79
|
+
c = Catalog.new(TypeNginx, versions)
|
80
|
+
c.unsupport_under!("0.5.38") # can not build under this version
|
81
|
+
c
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.openresties(cache_dir=nil)
|
86
|
+
catalog_cache_or(cache_dir, "openresties") do
|
87
|
+
versions = html_body_of("http://openresty.org", "/").
|
88
|
+
gsub(/ngx_openresty\-([0-9\.]+?)\.tar\.gz/).inject([]) do |memo, match|
|
89
|
+
memo << $1
|
90
|
+
memo
|
91
|
+
end
|
92
|
+
Catalog.new(TypeOpenresty, versions)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
private
|
97
|
+
|
98
|
+
def self.catalog_cache_or(dir, key, &block)
|
99
|
+
return block.call if !dir || !key
|
100
|
+
|
101
|
+
cache_dir = File.join(dir, "catalog")
|
102
|
+
FileUtils.mkdir_p(cache_dir) unless FileTest.directory?(cache_dir)
|
103
|
+
|
104
|
+
cache_file = File.join(cache_dir, "#{key}.ca")
|
105
|
+
|
106
|
+
if FileTest.file?(cache_file)
|
107
|
+
expired = File.mtime(cache_file) + CacheExpireDays * 24 * 60 * 60
|
108
|
+
if Time.now < expired
|
109
|
+
$logger.debug("Cache file: #{cache_file}")
|
110
|
+
begin
|
111
|
+
return Marshal.load(File.binread(cache_file))
|
112
|
+
rescue Exception => e
|
113
|
+
File.delete(cache_file)
|
114
|
+
$logger.error("#{e}")
|
115
|
+
$logger.error("#{cache_file} removed")
|
116
|
+
end
|
117
|
+
else
|
118
|
+
File.delete(cache_file)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
dest = block.call
|
123
|
+
File.binwrite(cache_file, Marshal.dump(dest))
|
124
|
+
$logger.debug("Cache saved to #{cache_file}")
|
125
|
+
|
126
|
+
dest
|
127
|
+
end
|
128
|
+
|
129
|
+
def self.html_body_of(host, page)
|
130
|
+
url = URI.parse(host)
|
131
|
+
res = Net::HTTP.start(url.host, url.port) {|http|
|
132
|
+
http.get(page)
|
133
|
+
}
|
134
|
+
raise Exception.new("Failed get list of nginx") if res.code.to_i != 200
|
135
|
+
res.body
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
|
data/lib/nginxbrew/tasks.rb
CHANGED
@@ -9,15 +9,14 @@ $stdout.puts("using '#{HOME_DIR}' as nginxbrew home") if ENV["NGINXBREW_HOME"]
|
|
9
9
|
|
10
10
|
|
11
11
|
CONFIG_FILE = ENV["NGINXBREW_CONFIG"]
|
12
|
-
|
13
|
-
raise Exception.new("Specified configuration file #{CONFIG_FILE} is not found")
|
14
|
-
end
|
12
|
+
$stdout.puts("using '#{CONFIG_FILE}' as nginxbrew config") if CONFIG_FILE
|
15
13
|
|
16
14
|
|
17
15
|
SOURCE_DIR = "#{HOME_DIR}/.src"
|
18
16
|
DIST_DIR = "#{HOME_DIR}/versions"
|
19
17
|
BIN_DIR = "#{HOME_DIR}/bin"
|
20
18
|
NGINX_BIN = "#{BIN_DIR}/nginx"
|
19
|
+
CACHE_DIR = "#{HOME_DIR}/.cache"
|
21
20
|
|
22
21
|
|
23
22
|
[HOME_DIR, SOURCE_DIR, BIN_DIR, DIST_DIR].each do |dir|
|
@@ -30,7 +29,10 @@ if ENV["VERSION"]
|
|
30
29
|
|
31
30
|
$stdout.puts("checking version ...")
|
32
31
|
raw_version, is_openresty = NamingConvention.resolve(ENV["VERSION"])
|
33
|
-
|
32
|
+
|
33
|
+
nginxes = is_openresty ? Nginxbrew::Catalog.openresties(cache_dir=CACHE_DIR) :
|
34
|
+
Nginxbrew::Catalog.nginxes(cache_dir=CACHE_DIR)
|
35
|
+
|
34
36
|
raw_version = nginxes.head_of(raw_version)
|
35
37
|
package_name = NamingConvention.package_name_from(raw_version, is_openresty)
|
36
38
|
$stdout.puts("resolved version: [#{is_openresty ? 'openresty' : 'nginx'}-]#{raw_version}")
|
@@ -105,7 +107,6 @@ if ENV["VERSION"]
|
|
105
107
|
desc "switch nginx version"
|
106
108
|
task :use => [BIN_DIR, :chown] do
|
107
109
|
ngx = Nginxbrew::Local.find(config)
|
108
|
-
puts "ngx=#{ngx}"
|
109
110
|
unless FileTest.directory?(config.dist_to)
|
110
111
|
raise_abort "#{config.package_name} is not installed!"
|
111
112
|
end
|
@@ -149,7 +150,7 @@ end
|
|
149
150
|
desc "list nginx versions"
|
150
151
|
task :nginxes do
|
151
152
|
HEAD_VERSION = ENV["HEAD_VERSION"]
|
152
|
-
nginxes = Nginxbrew::
|
153
|
+
nginxes = Nginxbrew::Catalog.nginxes(cache_dir=CACHE_DIR)
|
153
154
|
((HEAD_VERSION) ? nginxes.filter_versions(HEAD_VERSION) : nginxes.versions).each do |v|
|
154
155
|
$stdout.puts("[nginx-]#{v}")
|
155
156
|
end
|
@@ -158,18 +159,17 @@ end
|
|
158
159
|
|
159
160
|
desc "list openresty versions"
|
160
161
|
task :openresties do
|
161
|
-
require "nginxbrew/nginxes"
|
162
162
|
HEAD_VERSION = ENV["HEAD_VERSION"]
|
163
|
-
nginxes = Nginxbrew::
|
163
|
+
nginxes = Nginxbrew::Catalog.openresties(cache_dir=CACHE_DIR)
|
164
164
|
((HEAD_VERSION) ? nginxes.filter_versions(HEAD_VERSION) : nginxes.versions).each do |v|
|
165
165
|
$stdout.puts("[ngx_openresty-]#{v}")
|
166
166
|
end
|
167
167
|
end
|
168
168
|
|
169
169
|
|
170
|
-
desc "Output new configfile for nginxbrew into specified path as {
|
170
|
+
desc "Output new configfile for nginxbrew into specified path as {MAKECONF_OUTPUT_TO}"
|
171
171
|
task :makeconf do
|
172
|
-
output_to = ENV["
|
172
|
+
output_to = ENV["MAKECONF_OUTPUT_TO"]
|
173
173
|
|
174
174
|
from_file = File.join(File.dirname(__FILE__), "config/default.rb")
|
175
175
|
abort "crit, #{from_file} is not found" unless FileTest.file?(from_file)
|
data/lib/nginxbrew/version.rb
CHANGED
@@ -1,31 +1,58 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
require "nginxbrew"
|
3
|
-
require "nginxbrew/
|
3
|
+
require "nginxbrew/catalog"
|
4
4
|
|
5
|
+
require "fileutils"
|
5
6
|
|
6
|
-
|
7
|
+
|
8
|
+
describe Nginxbrew::Catalog, "scraping ngx versions in their page" do
|
9
|
+
|
10
|
+
before(:each) do
|
11
|
+
@cache_dir = File.join("/tmp", File.dirname(__FILE__), "cache")
|
12
|
+
FileUtils.mkdir_p(@cache_dir)
|
13
|
+
end
|
14
|
+
|
15
|
+
after(:each) do
|
16
|
+
FileUtils.rm_rf(@cache_dir)
|
17
|
+
end
|
7
18
|
|
8
19
|
it "should return list of nginx versions" do
|
9
|
-
ret = Nginxbrew::
|
20
|
+
ret = Nginxbrew::Catalog.nginxes
|
10
21
|
expect(ret.size).to be > 0
|
11
|
-
expect(ret.ngx_type).to eq Nginxbrew::
|
22
|
+
expect(ret.ngx_type).to eq Nginxbrew::Catalog::TypeNginx
|
12
23
|
end
|
13
24
|
|
14
25
|
it "version text in nginxes is [0-9.]+" do
|
15
|
-
ret = Nginxbrew::
|
26
|
+
ret = Nginxbrew::Catalog.nginxes
|
16
27
|
ret.versions.each do |v|
|
17
28
|
expect(v).to match(/[0-9.]+/)
|
18
29
|
end
|
19
30
|
end
|
20
31
|
|
32
|
+
it "cache of nginxes should be created and can read it" do
|
33
|
+
Nginxbrew::Catalog.nginxes(cache_dir=@cache_dir)
|
34
|
+
expect(FileTest.file?(File.join(@cache_dir, "catalog/nginxes.ca"))).to be_truthy
|
35
|
+
|
36
|
+
ret = Nginxbrew::Catalog.nginxes
|
37
|
+
expect(ret.size).to be > 0
|
38
|
+
end
|
39
|
+
|
40
|
+
it "cache of openresties should be created and can read it" do
|
41
|
+
Nginxbrew::Catalog.openresties(cache_dir=@cache_dir)
|
42
|
+
expect(FileTest.file?(File.join(@cache_dir, "catalog/openresties.ca"))).to be_truthy
|
43
|
+
|
44
|
+
ret = Nginxbrew::Catalog.openresties
|
45
|
+
expect(ret.size).to be > 0
|
46
|
+
end
|
47
|
+
|
21
48
|
it "should return list of openresty versions" do
|
22
|
-
ret = Nginxbrew::
|
49
|
+
ret = Nginxbrew::Catalog.openresties
|
23
50
|
expect(ret.size).to be > 0
|
24
|
-
expect(ret.ngx_type).to eq Nginxbrew::
|
51
|
+
expect(ret.ngx_type).to eq Nginxbrew::Catalog::TypeOpenresty
|
25
52
|
end
|
26
53
|
|
27
54
|
it "version text in openresties is [0-9.]+" do
|
28
|
-
ret = Nginxbrew::
|
55
|
+
ret = Nginxbrew::Catalog.openresties
|
29
56
|
ret.versions.each do |v|
|
30
57
|
expect(v).to match(/[0-9.]+/)
|
31
58
|
end
|
@@ -34,40 +61,40 @@ describe Nginxbrew::Nginxes, "scraping ngx versions in their page" do
|
|
34
61
|
end
|
35
62
|
|
36
63
|
|
37
|
-
describe Nginxbrew::
|
64
|
+
describe Nginxbrew::Catalog, "version control" do
|
38
65
|
|
39
66
|
it "should be raised exception when input invalid ngx type" do
|
40
67
|
expect {
|
41
|
-
Nginxbrew::
|
68
|
+
Nginxbrew::Catalog.new("INVALID_NGX_TYPE", ["1", "2", "3"])
|
42
69
|
}.to raise_error
|
43
70
|
end
|
44
71
|
|
45
72
|
it "should be raised exception when version list is empty" do
|
46
73
|
expect {
|
47
|
-
Nginxbrew::
|
74
|
+
Nginxbrew::Catalog.new(Nginxbrew::Catalog::TypeNginx, [])
|
48
75
|
}.to raise_error
|
49
76
|
end
|
50
77
|
|
51
78
|
it "should be raised exception when version is not found in head_of" do
|
52
79
|
expect {
|
53
|
-
Nginxbrew::
|
80
|
+
Nginxbrew::Catalog.new(Nginxbrew::Catalog::TypeNginx, ["1", "2", "3"]).head_of("INVALID_VERSION")
|
54
81
|
}.to raise_error
|
55
82
|
end
|
56
83
|
|
57
84
|
it "should be raised exception when version is not found in filter_versions" do
|
58
85
|
expect {
|
59
|
-
Nginxbrew::
|
86
|
+
Nginxbrew::Catalog.new(Nginxbrew::Catalog::TypeNginx, ["1", "2", "3"]).filter_versions("INVALID_VERSION")
|
60
87
|
}.to raise_error
|
61
88
|
end
|
62
89
|
|
63
90
|
it "can know size of versions" do
|
64
|
-
nginxes = Nginxbrew::
|
91
|
+
nginxes = Nginxbrew::Catalog.new(Nginxbrew::Catalog::TypeNginx, ["0.0.0", "0.0.1"])
|
65
92
|
expect(nginxes.size).to eq 2
|
66
93
|
end
|
67
94
|
|
68
95
|
it "filter_versions should return list of active versions" do
|
69
|
-
nginxes = Nginxbrew::
|
70
|
-
Nginxbrew::
|
96
|
+
nginxes = Nginxbrew::Catalog.new(
|
97
|
+
Nginxbrew::Catalog::TypeNginx,
|
71
98
|
%w(0.1 0.2 0.3 1.1 1.2 1.3 2.0.0 2.0.1 2.1.0 2.1.1)
|
72
99
|
)
|
73
100
|
expect(nginxes.filter_versions("1")).to eq ["1.3", "1.2", "1.1"]
|
@@ -75,16 +102,16 @@ describe Nginxbrew::Nginxes, "version control" do
|
|
75
102
|
end
|
76
103
|
|
77
104
|
it "versions should be sorted order by version-number desc" do
|
78
|
-
nginxes = Nginxbrew::
|
79
|
-
Nginxbrew::
|
105
|
+
nginxes = Nginxbrew::Catalog.new(
|
106
|
+
Nginxbrew::Catalog::TypeNginx,
|
80
107
|
%w(0.0.1 0.0.2 0.1.0 0.1.1 1.0.0 1.0.1 1.1.0 2.15.1 2.8.15)
|
81
108
|
)
|
82
109
|
expect(nginxes.versions).to eq %w(2.15.1 2.8.15 1.1.0 1.0.1 1.0.0 0.1.1 0.1.0 0.0.2 0.0.1)
|
83
110
|
end
|
84
111
|
|
85
112
|
it "head_of should returns head of versions" do
|
86
|
-
nginxes = Nginxbrew::
|
87
|
-
Nginxbrew::
|
113
|
+
nginxes = Nginxbrew::Catalog.new(
|
114
|
+
Nginxbrew::Catalog::TypeNginx,
|
88
115
|
%w(0.0.0 0.0.1 0.1.0 0.1.1 1.0.0 2.0.0)
|
89
116
|
)
|
90
117
|
expect(nginxes.head_of("0.0")).to eq "0.0.1"
|
@@ -93,12 +120,21 @@ describe Nginxbrew::Nginxes, "version control" do
|
|
93
120
|
end
|
94
121
|
|
95
122
|
it "head_of is first element of versions which sorted by version number" do
|
96
|
-
nginxes = Nginxbrew::
|
97
|
-
Nginxbrew::
|
123
|
+
nginxes = Nginxbrew::Catalog.new(
|
124
|
+
Nginxbrew::Catalog::TypeNginx,
|
98
125
|
%w(1.5.8.1 1.5.12.1 1.5.11.1)
|
99
126
|
)
|
100
127
|
expect(nginxes.head_of("1.5")).to eq "1.5.12.1"
|
101
128
|
expect(nginxes.head_of("1")).to eq "1.5.12.1"
|
102
129
|
end
|
103
130
|
|
131
|
+
it "limit the active version" do
|
132
|
+
catalog = Nginxbrew::Catalog.new(
|
133
|
+
Nginxbrew::Catalog::TypeNginx,
|
134
|
+
%w(0.1 0.2 0.3)
|
135
|
+
)
|
136
|
+
catalog.unsupport_under!("0.2")
|
137
|
+
expect(catalog.versions).to eq %w(0.3 0.2)
|
138
|
+
end
|
139
|
+
|
104
140
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nginxbrew
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- takumakanari
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -69,17 +69,17 @@ files:
|
|
69
69
|
- Rakefile
|
70
70
|
- bin/nginxbrew
|
71
71
|
- lib/nginxbrew.rb
|
72
|
+
- lib/nginxbrew/catalog.rb
|
72
73
|
- lib/nginxbrew/config/base.rb
|
73
74
|
- lib/nginxbrew/config/default.rb
|
74
75
|
- lib/nginxbrew/convention.rb
|
75
76
|
- lib/nginxbrew/local.rb
|
76
|
-
- lib/nginxbrew/nginxes.rb
|
77
77
|
- lib/nginxbrew/rake_tools.rb
|
78
78
|
- lib/nginxbrew/tasks.rb
|
79
79
|
- lib/nginxbrew/version.rb
|
80
80
|
- nginxbrew.gemspec
|
81
|
+
- spec/catalog_spec.rb
|
81
82
|
- spec/convention_spec.rb
|
82
|
-
- spec/nginxes_spec.rb
|
83
83
|
- spec/spec_helper.rb
|
84
84
|
homepage: ''
|
85
85
|
licenses:
|
@@ -106,6 +106,6 @@ signing_key:
|
|
106
106
|
specification_version: 4
|
107
107
|
summary: Multi installation for nginx.
|
108
108
|
test_files:
|
109
|
+
- spec/catalog_spec.rb
|
109
110
|
- spec/convention_spec.rb
|
110
|
-
- spec/nginxes_spec.rb
|
111
111
|
- spec/spec_helper.rb
|
data/lib/nginxbrew/nginxes.rb
DELETED
@@ -1,93 +0,0 @@
|
|
1
|
-
require "net/http"
|
2
|
-
require "uri"
|
3
|
-
|
4
|
-
include Nginxbrew
|
5
|
-
|
6
|
-
|
7
|
-
module Nginxbrew
|
8
|
-
|
9
|
-
class VersionNotFoundError < StandardError
|
10
|
-
|
11
|
-
def initialize(v)
|
12
|
-
super("version '#{v}' is not found in all versions of nginxes/openresties")
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
|
17
|
-
class Nginxes
|
18
|
-
|
19
|
-
TypeNginx = "nginx"
|
20
|
-
TypeOpenresty = "openresty"
|
21
|
-
|
22
|
-
attr_reader :ngx_type, :versions
|
23
|
-
|
24
|
-
def initialize(ngx_type, versions)
|
25
|
-
unless [TypeNginx, TypeOpenresty].include?(ngx_type)
|
26
|
-
raise Exception.new("Invalid ngx_type #{ngx_type}")
|
27
|
-
end
|
28
|
-
raise Exception.new("No versions of nginx!") if versions.size == 0
|
29
|
-
@ngx_type = ngx_type
|
30
|
-
@versions = versions.uniq.map do |v|
|
31
|
-
Gem::Version.new(v) # 1.15.x <> 1.8.x should be 1.15.x > 1.8.x
|
32
|
-
end.sort.reverse.map do |v|
|
33
|
-
v.to_s
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def size
|
38
|
-
@versions.size
|
39
|
-
end
|
40
|
-
|
41
|
-
def filter_versions(head_of)
|
42
|
-
src_numbers = head_of.split(".")
|
43
|
-
src_numbers_size = src_numbers.size
|
44
|
-
r = @versions.select do |v|
|
45
|
-
v.split(".").slice(0, src_numbers_size) == src_numbers
|
46
|
-
end
|
47
|
-
raise VersionNotFoundError.new(head_of) if r.size == 0
|
48
|
-
r
|
49
|
-
end
|
50
|
-
|
51
|
-
def head_of(version)
|
52
|
-
src_numbers = version.split(".")
|
53
|
-
src_numbers_size = src_numbers.size
|
54
|
-
r = @versions.detect do |v|
|
55
|
-
v.split(".").slice(0, src_numbers_size) == src_numbers
|
56
|
-
end
|
57
|
-
raise VersionNotFoundError.new(version) unless r
|
58
|
-
r
|
59
|
-
end
|
60
|
-
|
61
|
-
def self.nginxes
|
62
|
-
versions = html_body_of("http://nginx.org", "/download/").
|
63
|
-
gsub(/href="nginx\-([0-9\.]+?)\.tar\.gz"/).inject([]) do |memo, match|
|
64
|
-
memo << $1
|
65
|
-
memo
|
66
|
-
end
|
67
|
-
Nginxes.new(TypeNginx, versions)
|
68
|
-
end
|
69
|
-
|
70
|
-
def self.openresties
|
71
|
-
versions = html_body_of("http://openresty.org", "/").
|
72
|
-
gsub(/ngx_openresty\-([0-9\.]+?)\.tar\.gz/).inject([]) do |memo, match|
|
73
|
-
memo << $1
|
74
|
-
memo
|
75
|
-
end
|
76
|
-
Nginxes.new(TypeOpenresty, versions)
|
77
|
-
end
|
78
|
-
|
79
|
-
private
|
80
|
-
|
81
|
-
def self.html_body_of(host, page)
|
82
|
-
url = URI.parse(host)
|
83
|
-
res = Net::HTTP.start(url.host, url.port) {|http|
|
84
|
-
http.get(page)
|
85
|
-
}
|
86
|
-
raise Exception.new("Failed get list of nginx") if res.code.to_i != 200
|
87
|
-
res.body
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
91
|
-
|
92
|
-
end
|
93
|
-
|