class Nginxbrew::Catalog
Constants
- CacheExpireDays
- TypeNginx
- TypeOpenresty
Attributes
ngx_type[R]
versions[R]
Public Class Methods
new(ngx_type, versions)
click to toggle source
# File lib/nginxbrew/catalog.rb, line 28 def initialize(ngx_type, versions) unless [TypeNginx, TypeOpenresty].include?(ngx_type) raise Exception.new("Invalid ngx_type #{ngx_type}") end raise Exception.new("No versions of nginx!") if versions.size == 0 @ngx_type = ngx_type @versions = versions.uniq.map do |v| Gem::Version.new(v) # 1.15.x <> 1.8.x should be 1.15.x > 1.8.x end.sort.reverse.map do |v| v.to_s end end
nginxes(cache_dir=nil)
click to toggle source
# File lib/nginxbrew/catalog.rb, line 72 def self.nginxes(cache_dir=nil) catalog_cache_or(cache_dir, "nginxes") do versions = html_body_of("http://nginx.org", "/download/"). gsub(/href="nginx\-([0-9\.]+?)\.tar\.gz"/).inject([]) do |memo, match| memo << $1 memo end c = Catalog.new(TypeNginx, versions) c.unsupport_under!("0.5.38") # can not build under this version c end end
openresties(cache_dir=nil)
click to toggle source
# File lib/nginxbrew/catalog.rb, line 85 def self.openresties(cache_dir=nil) catalog_cache_or(cache_dir, "openresties") do versions = html_body_of("http://openresty.org", "/"). gsub(/ngx_openresty\-([0-9\.]+?)\.tar\.gz/).inject([]) do |memo, match| memo << $1 memo end Catalog.new(TypeOpenresty, versions) end end
Private Class Methods
catalog_cache_or(dir, key, &block)
click to toggle source
# File lib/nginxbrew/catalog.rb, line 98 def self.catalog_cache_or(dir, key, &block) return block.call if !dir || !key cache_dir = File.join(dir, "catalog") FileUtils.mkdir_p(cache_dir) unless FileTest.directory?(cache_dir) cache_file = File.join(cache_dir, "#{key}.ca") if FileTest.file?(cache_file) expired = File.mtime(cache_file) + CacheExpireDays * 24 * 60 * 60 if Time.now < expired $logger.debug("Cache file: #{cache_file}") begin return Marshal.load(File.binread(cache_file)) rescue Exception => e File.delete(cache_file) $logger.error("#{e}") $logger.error("#{cache_file} removed") end else File.delete(cache_file) end end dest = block.call File.binwrite(cache_file, Marshal.dump(dest)) $logger.debug("Cache saved to #{cache_file}") dest end
html_body_of(host, page)
click to toggle source
# File lib/nginxbrew/catalog.rb, line 129 def self.html_body_of(host, page) url = URI.parse(host) res = Net::HTTP.start(url.host, url.port) {|http| http.get(page) } raise Exception.new("Failed get list of nginx") if res.code.to_i != 200 res.body end
Public Instance Methods
filter_versions(head_of)
click to toggle source
# File lib/nginxbrew/catalog.rb, line 52 def filter_versions(head_of) src_numbers = head_of.split(".") src_numbers_size = src_numbers.size r = @versions.select do |v| v.split(".").slice(0, src_numbers_size) == src_numbers end raise VersionNotFoundError.new(head_of) if r.size == 0 r end
head_of(version)
click to toggle source
# File lib/nginxbrew/catalog.rb, line 62 def head_of(version) src_numbers = version.split(".") src_numbers_size = src_numbers.size r = @versions.detect do |v| v.split(".").slice(0, src_numbers_size) == src_numbers end raise VersionNotFoundError.new(version) unless r r end
size()
click to toggle source
# File lib/nginxbrew/catalog.rb, line 48 def size @versions.size end
unsupport_under!(version)
click to toggle source
# File lib/nginxbrew/catalog.rb, line 41 def unsupport_under!(version) min_version = Gem::Version.new(version) @versions = @versions.select do |v| Gem::Version.new(v) >= min_version end end