class PostCss::Socket

Constants

MAX_ATTEMPTS
POSTCSS_SCRIPT
START_SCRIPT

Public Class Methods

new() click to toggle source
# File lib/jekyll-postcss/socket.rb, line 12
def initialize
  start_dev_server if development?
end

Public Instance Methods

read() click to toggle source
# File lib/jekyll-postcss/socket.rb, line 26
def read
  if development?
    decode(@postcss.gets.chomp)
  else
    raise "You must call PostCss#write before calling PostCss#read" if @compiled_css.nil?

    decode(@compiled_css)
  end
end
write(data) click to toggle source
# File lib/jekyll-postcss/socket.rb, line 16
def write(data)
  if development?
    @postcss.puts encode(data)
  else
    @compiled_css = `#{POSTCSS_SCRIPT} '#{encode(data)}'`
  end

  nil
end

Private Instance Methods

decode(data) click to toggle source
# File lib/jekyll-postcss/socket.rb, line 42
def decode(data)
  JSON.parse(data)["compiled_css"]
end
development?() click to toggle source
# File lib/jekyll-postcss/socket.rb, line 46
def development?
  @env ||= Jekyll.env

  @env == "development"
end
encode(data) click to toggle source
# File lib/jekyll-postcss/socket.rb, line 38
def encode(data)
  JSON.dump(:raw_content => data)
end
start_dev_server() click to toggle source
# File lib/jekyll-postcss/socket.rb, line 54
def start_dev_server
  Thread.new do
    system "#{START_SCRIPT} #{POSTCSS_SCRIPT} --development"
  end

  attempts = 0
  @postcss =
    begin
      TCPSocket.open("localhost", 8124) 
    rescue StandardError => e
      attempts = attempts + 1

      if attempts < MAX_ATTEMPTS
        sleep 0.1
        retry 
      else
        raise "Could not connect to the PostCSS server"
      end
    end
end