Module: Shine

Defined in:
lib/shine.rb

Defined Under Namespace

Modules: JS Classes: CompressionError

Constant Summary collapse

MIME =
{
  :js => "text/javascript",
  :css => "text/css"
}

Class Method Summary collapse

Class Method Details

.compress_css(filepaths, options = {}) ⇒ Object



33
34
35
# File 'lib/shine.rb', line 33

def self.compress_css(filepaths, options={})
  compress_files(filepaths, :css, options)
end

.compress_files(filepaths, format = nil, options = {}) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/shine.rb', line 37

def self.compress_files(filepaths, format=nil, options={})
  filepaths = [filepaths] unless filepaths.is_a?(Array)
  url = compress_url(format)
  params = {}
  begin
    files = filepaths.map {|f| File.open(f) }
    filepaths.each_with_index do |f, i|
      params["file#{i.to_s.rjust(4, "0")}"] = UploadIO.new(f, MIME[format], filepaths[i])
    end
    req = Net::HTTP::Post::Multipart.new(url.path, params)
    result = Net::HTTP.start(url.host, url.port) do |http|
      http.request(req)
    end
    case result
    when Net::HTTPSuccess
      result.body
    else
      concatenate_files(files)
    end
  ensure
    files.each { |f| f.close rescue nil }
  end
end

.compress_js(filepaths, options = {}) ⇒ Object



29
30
31
# File 'lib/shine.rb', line 29

def self.compress_js(filepaths, options={})
  compress_files(filepaths, :js, options)
end

.compress_string(source, format = nil, options = {}) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/shine.rb', line 65

def self.compress_string(source, format=nil, options={})
  url = compress_url(format)
  req = Net::HTTP::Post.new(url.path)
  req.set_form_data({'source' => source}.merge(options))
  result = Net::HTTP.start(url.host, url.port) do |http|
    http.request(req)
  end
  case result
  when Net::HTTPSuccess
    result.body
  else
    source
  end
end

.compress_url(format = :js) ⇒ Object



24
25
26
27
# File 'lib/shine.rb', line 24

def self.compress_url(format=:js)
  # URI.parse("http://shine.magnetised.info/#{format}")
  URI.parse("#{server}/#{format}")
end

.concatenate_files(files) ⇒ Object



61
62
63
# File 'lib/shine.rb', line 61

def self.concatenate_files(files)
  files.map {|f| f.read }.join("\n")
end

.default_serverObject



13
14
15
# File 'lib/shine.rb', line 13

def self.default_server
  "http://shine.magnetised.info"
end

.serverObject



16
17
18
# File 'lib/shine.rb', line 16

def self.server
  @_server || default_server
end

.server=(url) ⇒ Object



20
21
22
# File 'lib/shine.rb', line 20

def self.server=(url)
  @_server = url
end