Extract AsciicastJSONDecorator from AsciicastDecorator

openid
Marcin Kulik 12 years ago
parent 9ac2c49180
commit 11bab12afb

@ -29,17 +29,16 @@ class AsciicastsController < ApplicationController
end
def show
@asciicast = AsciicastDecorator.new(@asciicast)
respond_to do |format|
format.html do
@asciicast = AsciicastDecorator.new(@asciicast)
@title = @asciicast.title
respond_with @asciicast
end
format.json do
if stale? @asciicast
respond_with @asciicast
respond_with AsciicastJSONDecorator.new(@asciicast)
end
end
end

@ -1,57 +1,9 @@
require 'base64'
class AsciicastDecorator < ApplicationDecorator
decorates :asciicast
decorates_association :user
THUMBNAIL_WIDTH = 20
THUMBNAIL_HEIGHT = 10
MAX_DELAY = 5.0
def as_json(*args)
data = model.as_json(*args)
data['escaped_stdout_data'] = escaped_stdout_data
data['stdout_timing_data'], saved_time = stdout_timing_data
data['duration'] = data['duration'] - saved_time
data
end
def escaped_stdout_data
if data = stdout.read
Base64.strict_encode64(data)
else
nil
end
end
def stdout_timing_data
saved_time = 0
if file = stdout_timing.file
f = IO.popen "bzip2 -d", "r+"
f.write file.read
f.close_write
lines = f.readlines
f.close
data = lines.map do |line|
delay, n = line.split
delay = delay.to_f
if time_compression && delay > MAX_DELAY
saved_time += (delay - MAX_DELAY)
delay = MAX_DELAY
end
[delay, n.to_i]
end
else
data = nil
end
[data, saved_time]
end
def os
return 'unknown' if uname.blank?

@ -0,0 +1,52 @@
require 'base64'
class AsciicastJSONDecorator < ApplicationDecorator
decorates :asciicast
MAX_DELAY = 5.0
def as_json(*args)
data = model.as_json(*args)
data['escaped_stdout_data'] = escaped_stdout_data
data['stdout_timing_data'], saved_time = stdout_timing_data
data['duration'] = data['duration'] - saved_time
data
end
def escaped_stdout_data
if data = stdout.read
Base64.strict_encode64(data)
else
nil
end
end
def stdout_timing_data
saved_time = 0
if file = stdout_timing.file
f = IO.popen "bzip2 -d", "r+"
f.write file.read
f.close_write
lines = f.readlines
f.close
data = lines.map do |line|
delay, n = line.split
delay = delay.to_f
if time_compression && delay > MAX_DELAY
saved_time += (delay - MAX_DELAY)
delay = MAX_DELAY
end
[delay, n.to_i]
end
else
data = nil
end
[data, saved_time]
end
end
Loading…
Cancel
Save