Class: MasonServer::Build

Inherits:
Object
  • Object
show all
Includes:
DataMapper::Resource
Defined in:
lib/mason_server/build.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.run(request) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/mason_server/build.rb', line 17

def self.run(request)
  build = new(
    :repo     => request.repo,
    :ref      => request.ref,
    :command  => request.command,
    :callback => request.callback
  )

  unless build.save
    raise Error, "failed to create build for #{request.inspect}"
  end

  # TODO need aync
  build.run
  build.url
end

Instance Method Details

#completeObject



73
74
75
76
77
# File 'lib/mason_server/build.rb', line 73

def complete
  unless update(:completed_at => Time.now)
    raise Error, "failed to complete build"
  end
end

#notifyObject



79
80
81
# File 'lib/mason_server/build.rb', line 79

def notify
  Net::HTTP.post_form(URI(callback.to_s), "payload" => payload.to_json)
end

#output_handler(chunk) ⇒ Object



65
66
67
68
69
70
71
# File 'lib/mason_server/build.rb', line 65

def output_handler(chunk)
  # TODO StringIO
  @_output ||= ""
  @_output << chunk
  update(:output => @_output)
rescue DataObjects::ConnectionError
end

#payloadObject



83
84
85
# File 'lib/mason_server/build.rb', line 83

def payload
  { "url" => url, "callback" => callback, "status" => status }
end

#runObject



38
39
40
41
42
43
44
# File 'lib/mason_server/build.rb', line 38

def run
  start
  setup_checkout
  run_command
  complete
  notify
end

#run_commandObject



55
56
57
58
59
60
61
62
63
# File 'lib/mason_server/build.rb', line 55

def run_command
  status = CommandRunner.run(MasonServer.directory, command) do |chunk|
    output_handler(chunk)
  end

  unless update(:status => status)
    raise Error, "could not set status"
  end
end

#setup_checkoutObject



52
53
# File 'lib/mason_server/build.rb', line 52

def setup_checkout
end

#startObject



46
47
48
49
50
# File 'lib/mason_server/build.rb', line 46

def start
  unless update(:started_at => Time.now)
    raise Error, "failed to start build"
  end
end

#urlObject



34
35
36
# File 'lib/mason_server/build.rb', line 34

def url
  MasonServer.url + id.to_s
end