buildbox 0.6.2 → 0.7.beta1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 68dea0dd1dfaec341eed5d652a08e0f8c56c6396
4
- data.tar.gz: f550979f04882945338cf64901ad5efa9e971850
3
+ metadata.gz: 8c826fa8d512aa4840866a5c42d71739e8e7a5f5
4
+ data.tar.gz: 0c8573bf2fed15b3a1b1a9985186e1cad0a94269
5
5
  SHA512:
6
- metadata.gz: 607416e91d377076dbe612f29adc2c66022db3d18afccdfef186f9664a7fdfdc76770ddaa1437fbb84b05e700fdeaa6927c304288ddceab322f256f867a6a68e
7
- data.tar.gz: f7994c33e995b7fd07b50c2bf43e499c3cb23b190b0eaaac68891b7d2b21e72114e8526516230c9ee1ec6bd73a6fd8d295e8a606d827c4f0f4974aee6a34960d
6
+ metadata.gz: 80fe44701584eceef7d1876cda79d8da7421023eb3c52644f1e54adf232f2322e474e69b5c2ed722fc1e36a3a8e65b7a07e798d6166473c24ebe855939426748
7
+ data.tar.gz: 1e4bbd814110f6f5ade70580876447567cb1736bb537e87999577195f1f0aa1d0adaf00bee96153ab2db38facd877249555a21bf87aabac2b7b009f0888e16a8
@@ -1,14 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- buildbox (0.6.1)
5
- celluloid (~> 0.14)
4
+ buildbox (0.6)
5
+ celluloid (~> 0.15)
6
6
  childprocess (~> 0.3)
7
- faraday (~> 0.8.0)
8
- faraday_middleware (~> 0.9)
9
- hashie (~> 2.0)
10
- mime-types (~> 2.0)
11
- multi_json (~> 1.7)
7
+ mime-types (~> 2)
8
+ multipart-post (~> 2)
9
+ oj (~> 2.5)
12
10
 
13
11
  GEM
14
12
  remote: https://rubygems.org/
@@ -16,23 +14,18 @@ GEM
16
14
  addressable (2.3.5)
17
15
  celluloid (0.15.2)
18
16
  timers (~> 1.1.0)
19
- childprocess (0.4.2)
17
+ childprocess (0.4.0)
20
18
  ffi (~> 1.0, >= 1.0.11)
21
19
  crack (0.4.1)
22
20
  safe_yaml (~> 0.9.0)
23
21
  diff-lcs (1.2.5)
24
22
  docile (1.1.0)
25
- faraday (0.8.9)
26
- multipart-post (~> 1.2.0)
27
- faraday_middleware (0.9.0)
28
- faraday (>= 0.7.4, < 0.9)
29
23
  ffi (1.9.3)
30
- ffi (1.9.3-x86-mingw32)
31
- hashie (2.0.5)
32
24
  lockfile (2.1.0)
33
- mime-types (2.1)
25
+ mime-types (2.0)
34
26
  multi_json (1.8.2)
35
- multipart-post (1.2.0)
27
+ multipart-post (2.0.0)
28
+ oj (2.5.4)
36
29
  rake (10.1.0)
37
30
  rspec (2.14.1)
38
31
  rspec-core (~> 2.14.0)
@@ -18,13 +18,11 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency 'faraday', '~> 0.8.0'
22
- spec.add_dependency 'faraday_middleware', '~> 0.9'
23
- spec.add_dependency 'hashie', '~> 2.0'
24
- spec.add_dependency 'multi_json', '~> 1.7'
25
- spec.add_dependency 'celluloid', '~> 0.14'
26
- spec.add_dependency 'childprocess', '~> 0.3'
27
- spec.add_dependency 'mime-types', '~> 2.0'
21
+ spec.add_dependency 'oj', '~> 2.5'
22
+ spec.add_dependency 'celluloid', '~> 0.15'
23
+ spec.add_dependency 'childprocess', '~> 0.3'
24
+ spec.add_dependency 'multipart-post', '~> 2'
25
+ spec.add_dependency 'mime-types', '~> 2'
28
26
 
29
27
  spec.add_development_dependency 'rake'
30
28
  spec.add_development_dependency 'rspec'
@@ -6,10 +6,12 @@ module Buildbox
6
6
  autoload :Artifact, "buildbox/artifact"
7
7
  autoload :Build, "buildbox/build"
8
8
  autoload :Command, "buildbox/command"
9
+ autoload :Connection, "buildbox/connection"
9
10
  autoload :Canceler, "buildbox/canceler"
10
11
  autoload :CLI, "buildbox/cli"
11
12
  autoload :Configuration, "buildbox/configuration"
12
13
  autoload :Monitor, "buildbox/monitor"
14
+ autoload :Model, "buildbox/model"
13
15
  autoload :Platform, "buildbox/platform"
14
16
  autoload :Runner, "buildbox/runner"
15
17
  autoload :Script, "buildbox/script"
@@ -1,29 +1,6 @@
1
- require 'faraday'
2
- require 'faraday_middleware'
3
- require 'hashie/mash'
4
- require 'delegate'
5
-
6
1
  module Buildbox
7
2
  class API
8
- # Faraday uses debug to show response information, but when the agent is in
9
- # DEBUG mode, it's kinda useless noise. So we use a ProxyLogger to only push
10
- # the information we care about to the logger.
11
- class ProxyLogger
12
- def initialize(logger)
13
- @logger = logger
14
- end
15
-
16
- def info(*args)
17
- @logger.debug(*args)
18
- end
19
-
20
- def debug(*args)
21
- # no-op
22
- end
23
- end
24
-
25
- class AgentNotFoundError < Faraday::Error::ClientError; end
26
- class ServerError < Faraday::Error::ClientError; end
3
+ class AgentNotFoundError < StandardError; end
27
4
 
28
5
  def initialize(config = Buildbox.config, logger = Buildbox.logger)
29
6
  @config = config
@@ -31,19 +8,15 @@ module Buildbox
31
8
  end
32
9
 
33
10
  def agent(access_token, options)
34
- put(access_token, options)
35
- rescue Faraday::Error::ClientError => e
36
- if e.response && e.response[:status] == 404
37
- raise AgentNotFoundError.new(e, e.response)
38
- else
39
- raise ServerError.new(e, e.response)
40
- end
11
+ connection.request(:put, access_token, options)
12
+ rescue Buildbox::Connection::NotFoundError => e
13
+ raise AgentNotFoundError.new(e.message)
41
14
  end
42
15
 
43
16
  def next_build(access_token)
44
- response = get("#{access_token}/builds/queue/next")
17
+ response = connection.request(:get, "#{access_token}/builds/queue/next")
45
18
 
46
- if build = response.build
19
+ if build = response['build']
47
20
  Buildbox::Build.new(build)
48
21
  else
49
22
  nil
@@ -51,56 +24,25 @@ module Buildbox
51
24
  end
52
25
 
53
26
  def update_build(access_token, build, options)
54
- put("#{access_token}/builds/#{build.id}", options)
27
+ connection.request(:put, "#{access_token}/builds/#{build.id}", options)
55
28
  end
56
29
 
57
30
  def create_artifacts(access_token, build, artifacts)
58
- post("#{access_token}/builds/#{build.id}/artifacts", :artifacts => artifacts.map(&:as_json))
31
+ connection.request(:post, "#{access_token}/builds/#{build.id}/artifacts", :artifacts => artifacts.map(&:as_json))
59
32
  end
60
33
 
61
34
  def update_artifact(access_token, build, artifact_id, options)
62
- put("#{access_token}/builds/#{build.id}/artifacts/#{artifact_id}", options)
35
+ connection.request(:put, "#{access_token}/builds/#{build.id}/artifacts/#{artifact_id}", options)
63
36
  end
64
37
 
65
38
  private
66
39
 
67
40
  def connection
68
- @connection ||= Faraday.new(:url => @config.api_endpoint,
69
- :ssl => { :ca_file => Buildbox.gem_path.join("lib", "certs", "cacert.pem").to_s }) do |faraday|
70
- faraday.request :retry
71
- faraday.request :json
72
-
73
- faraday.response :logger, ProxyLogger.new(@logger)
74
- faraday.response :mashify
75
-
76
- # JSON needs to come after mashify as it needs to run before the mashify
77
- # middleware.
78
- faraday.response :json
79
- faraday.response :raise_error
80
-
81
- faraday.adapter Faraday.default_adapter
82
-
83
- # Set some sensible defaults on the adapter.
84
- faraday.options[:timeout] = 60
85
- faraday.options[:open_timeout] = 60
86
- end
87
- end
88
-
89
- def post(path, body = {})
90
- connection.post(path) do |request|
91
- request.body = body
92
- request.headers['Content-Type'] = 'application/json'
93
- end.body
94
- end
95
-
96
- def put(path, body = {})
97
- connection.put(path) do |request|
98
- request.body = body
99
- end.body
100
- end
41
+ @connection ||= begin
42
+ ca_file = Buildbox.gem_path.join("lib", "certs", "cacert.pem").to_s
101
43
 
102
- def get(path)
103
- connection.get(path).body
44
+ Buildbox::Connection.new(@logger, @config.api_endpoint, ca_file)
45
+ end
104
46
  end
105
47
  end
106
48
  end
@@ -1,5 +1,6 @@
1
1
  require 'celluloid'
2
- require 'mime/types'
2
+ require 'net/http/post/multipart'
3
+ require 'mime-types'
3
4
 
4
5
  module Buildbox
5
6
  class Artifact::Poster
@@ -8,40 +9,36 @@ module Buildbox
8
9
 
9
10
  def post(api, access_token, build, artifact)
10
11
  upload_action = artifact.upload_instructions['action']
11
- form_data = artifact.upload_instructions['data'].to_hash.dup
12
-
13
- connection = Faraday.new(:url => upload_action['url']) do |faraday|
14
- faraday.request :multipart
15
-
16
- faraday.response :raise_error
17
-
18
- faraday.options[:timeout] = 60
19
- faraday.options[:open_timeout] = 60
20
-
21
- faraday.adapter Faraday.default_adapter
22
- end
12
+ form_data = artifact.upload_instructions['data']
23
13
 
24
14
  mime_type = MIME::Types.type_for(artifact.path)[0].to_s
25
15
 
16
+ # Assign the file to upload to the right key in the form
17
+ # data hash.
26
18
  file_input_key = upload_action['file_input']
27
- form_data[file_input_key] = Faraday::UploadIO.new(artifact.path, mime_type)
19
+ form_data[file_input_key] = UploadIO.new(artifact.path, mime_type)
28
20
 
21
+ # Let Buildbox know we've started the upload
29
22
  api.update_artifact(access_token, build, artifact.remote_id, :state => 'uploading')
30
23
 
31
- upload_exception = nil
32
- response = nil
24
+ # Do the file upload
25
+ response = begin
26
+ uri = URI.join(upload_action['url'], upload_action['path'])
33
27
 
34
- begin
35
- response = connection.post(upload_action['path'], form_data)
36
- rescue => e
37
- upload_exception = e
38
- end
28
+ http = Net::HTTP.new(uri.host, uri.port)
29
+ http.open_timeout = 64
30
+ http.read_timeout = 64
31
+ http.use_ssl = uri.scheme == "https"
32
+
33
+ http.request(Net::HTTP::Post::Multipart.new(uri.path, form_data))
34
+ rescue => upload_exception
35
+ end
39
36
 
40
37
  if upload_exception
41
38
  error "Error uploading #{artifact.basename} with a status of (#{upload_exception.class.name}: #{upload_exception.message})"
42
39
  finished_state = 'error'
43
40
  else
44
- info "Finished uploading #{artifact.basename} with a status of #{response.status}"
41
+ info "Finished uploading #{artifact.basename} with a status of #{response.code}"
45
42
  finished_state = 'finished'
46
43
  end
47
44
 
@@ -7,10 +7,10 @@ module Buildbox
7
7
  include Celluloid::Logger
8
8
 
9
9
  def initialize(api, access_token, build, artifacts)
10
- @api = api
10
+ @api = api
11
11
  @access_token = access_token
12
- @build = build
13
- @artifacts = artifacts
12
+ @build = build
13
+ @artifacts = artifacts
14
14
  end
15
15
 
16
16
  def prepare_and_upload
@@ -20,7 +20,7 @@ module Buildbox
20
20
  responses.each do |response|
21
21
  artifact = @artifacts.find { |artifact| artifact.id == response['id'] }
22
22
 
23
- artifact.remote_id = response['artifact']['id']
23
+ artifact.remote_id = response['artifact']['id']
24
24
  artifact.upload_instructions = response['artifact']['uploader']
25
25
  end
26
26
 
@@ -1,7 +1,11 @@
1
- require 'hashie/mash'
2
-
3
1
  module Buildbox
4
- class Build < Hashie::Mash
2
+ class Build
3
+ include Buildbox::Model
4
+
5
+ attr_accessor :id, :script, :env, :namespace,
6
+ :started_at, :output, :exit_status, :finished_at,
7
+ :process, :artifact_paths
8
+
5
9
  def success?
6
10
  exit_status == 0
7
11
  end
@@ -59,8 +59,8 @@ module Buildbox
59
59
  end
60
60
 
61
61
  access_token = @argv.first
62
- new_access_tokens = Buildbox.config.agent_access_tokens + [access_token]
63
- Buildbox.config.update(:agent_access_tokens => new_access_tokens.uniq)
62
+ agent_access_tokens = Buildbox.config.agent_access_tokens
63
+ Buildbox.config.update(:agent_access_tokens => agent_access_tokens << access_token)
64
64
 
65
65
  puts "Successfully added agent access token"
66
66
  puts "You can now start the agent with: buildbox agent:start."
@@ -26,9 +26,9 @@ module Buildbox
26
26
  end
27
27
 
28
28
  def initialize(*args)
29
- @options = args.last.is_a?(Hash) ? args.pop : {}
29
+ @options = args.last.is_a?(Hash) ? args.pop : {}
30
30
  @arguments = args.dup
31
- @logger = Buildbox.logger
31
+ @logger = Buildbox.logger
32
32
  end
33
33
 
34
34
  def arguments
@@ -55,9 +55,9 @@ module Buildbox
55
55
  IO.pipe
56
56
  end
57
57
 
58
- process.io.stdout = write_pipe
59
- process.io.stderr = write_pipe
60
- process.duplex = true
58
+ process.io.stdout = write_pipe
59
+ process.io.stderr = write_pipe
60
+ process.duplex = true
61
61
 
62
62
  # Set the environment on the process
63
63
  if @options[:environment]
@@ -66,14 +66,20 @@ module Buildbox
66
66
  end
67
67
  end
68
68
 
69
+ # Record the start time for timeout purposes
70
+ start_time = Time.now.to_i
71
+
72
+ # Track the output as it goes
73
+ output = ""
74
+
69
75
  # Start the process
70
76
  process.start
71
77
 
78
+ @logger.debug("Process #{arguments} started with PID: #{process.pid}")
79
+
72
80
  # Make sure the stdin does not buffer
73
81
  process.io.stdin.sync = true
74
82
 
75
- @logger.debug("Process #{arguments} started with PID: #{process.pid}")
76
-
77
83
  if RUBY_PLATFORM != "java"
78
84
  # On Java, we have to close after. See down the method...
79
85
  # Otherwise, we close the writer right here, since we're
@@ -81,28 +87,18 @@ module Buildbox
81
87
  write_pipe.close
82
88
  end
83
89
 
84
- # Record the start time for timeout purposes
85
- start_time = Time.now.to_i
86
-
87
- # Track the output as it goes
88
- output = ""
89
-
90
- @logger.debug("Selecting on IO")
91
90
  while true
92
91
  results = IO.select([read_pipe], nil, nil, timeout || 0.1) || []
93
92
  readers = results[0]
94
93
 
95
94
  # Check if we have exceeded our timeout
96
95
  raise TimeoutExceeded if timeout && (Time.now.to_i - start_time) > timeout
97
- # Kill the process and wait a bit for it to disappear
98
- # Process.kill('KILL', process.pid)
99
- # Process.waitpid2(process.pid)
100
96
 
101
97
  # Check the readers to see if they're ready
102
98
  if readers && !readers.empty?
103
99
  readers.each do |r|
104
100
  # Read from the IO object
105
- data = read_io(r)
101
+ data = read_until_block(r)
106
102
 
107
103
  # We don't need to do anything if the data is empty
108
104
  next if data.empty?
@@ -136,7 +132,7 @@ module Buildbox
136
132
  # process exited.
137
133
 
138
134
  # Read the extra data
139
- extra_data = read_io(read_pipe)
135
+ extra_data = read_until_block(read_pipe)
140
136
 
141
137
  # If there's some that we missed
142
138
  if extra_data != ""
@@ -150,7 +146,7 @@ module Buildbox
150
146
  write_pipe.close
151
147
  end
152
148
 
153
- @output = output.chomp
149
+ @output = output.chomp
154
150
  @exit_status = process.exit_code
155
151
  end
156
152
 
@@ -161,7 +157,7 @@ module Buildbox
161
157
  # data.
162
158
  #
163
159
  # @return [String]
164
- def read_io(io)
160
+ def read_until_block(io)
165
161
  data = ""
166
162
 
167
163
  while true
@@ -1,20 +1,21 @@
1
- require 'hashie/mash'
2
1
  require 'json'
3
2
 
4
3
  module Buildbox
5
- class Configuration < Hashie::Mash
4
+ class Configuration
5
+ include Buildbox::Model
6
+
6
7
  def agent_access_tokens
7
8
  env_agents = ENV['BUILDBOX_AGENTS']
8
9
 
9
10
  if env_agents.nil?
10
- self[:agent_access_tokens] || []
11
+ @agent_access_tokens || []
11
12
  else
12
13
  env_agents.to_s.split(",")
13
14
  end
14
15
  end
15
16
 
16
17
  def api_endpoint
17
- endpoint = ENV['BUILDBOX_API_ENDPOINT'] || self[:api_endpoint] || "https://agent.buildbox.io/v1"
18
+ endpoint = ENV['BUILDBOX_API_ENDPOINT'] || @api_endpoint || "https://agent.buildbox.io/v1"
18
19
 
19
20
  # hack to update legacy endpoints
20
21
  if endpoint == "https://api.buildbox.io/v1"
@@ -27,7 +28,8 @@ module Buildbox
27
28
  end
28
29
 
29
30
  def update(attributes)
30
- attributes.each_pair { |key, value| self[key] = value }
31
+ self.attributes = attributes
32
+
31
33
  save
32
34
  end
33
35
 
@@ -46,11 +48,12 @@ module Buildbox
46
48
  private
47
49
 
48
50
  def pretty_json
49
- JSON.pretty_generate(self)
51
+ JSON.pretty_generate(:agent_access_tokens => agent_access_tokens,
52
+ :api_endpoint => api_endpoint)
50
53
  end
51
54
 
52
55
  def read_and_load
53
- merge! JSON.parse(path.read)
56
+ self.attributes = JSON.parse(path.read)
54
57
  end
55
58
 
56
59
  def path
@@ -0,0 +1,88 @@
1
+ require 'net/http'
2
+ require 'net/https'
3
+ require 'oj'
4
+
5
+ module Buildbox
6
+ class Connection
7
+ class Error < StandardError; end
8
+ class NotFoundError < Error; end
9
+ class UnexpectedResponseError < Error; end
10
+
11
+ def initialize(logger, endpoint, ca_file)
12
+ @logger = logger
13
+ @endpoint = URI.parse(endpoint)
14
+ @ca_file = ca_file
15
+ end
16
+
17
+ def request(method, path, body = nil)
18
+ # Poor mans URI concatination
19
+ path = File.join(@endpoint.request_uri, path)
20
+ attempts = 3
21
+
22
+ begin
23
+ @logger.debug "#{method} #{path}"
24
+
25
+ response = case method
26
+ when :get
27
+ http.get(path)
28
+ when :post
29
+ http.post(path, dump_request_json(body), headers)
30
+ when :put
31
+ http.put(path, dump_request_json(body), headers)
32
+ end
33
+
34
+ handle_response(response)
35
+ rescue => e
36
+ if (attempts -= 1).zero?
37
+ raise e
38
+ else
39
+ retry
40
+ end
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def headers
47
+ { "Content-Type" => "application/json" }
48
+ end
49
+
50
+ def dump_request_json(json)
51
+ # Compact ensures symbols get turned into strings
52
+ Oj.dump(json, :mode => :compat)
53
+ end
54
+
55
+ def parse_response_json(response)
56
+ if response.content_type == "application/json"
57
+ Oj.load(response.body)
58
+ else
59
+ raise UnexpectedResponseError.new(response.body[0..100])
60
+ end
61
+ end
62
+
63
+ def handle_response(response)
64
+ case response.code.to_i
65
+ when 200...300
66
+ parse_response_json(response)
67
+ when 404
68
+ raise NotFoundError.new(parse_response_json(response))
69
+ else
70
+ raise UnexpectedResponseError.new(response.body)
71
+ end
72
+ end
73
+
74
+ def http
75
+ http = Net::HTTP.new(@endpoint.host, @endpoint.port)
76
+ http.open_timeout = 64
77
+ http.read_timeout = 64
78
+
79
+ if @endpoint.scheme == "https"
80
+ http.use_ssl = true
81
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
82
+ end
83
+
84
+ http.ca_file = @ca_file
85
+ http
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,15 @@
1
+ module Buildbox
2
+ module Model
3
+ def initialize(attributes = {})
4
+ if attributes.kind_of?(Hash)
5
+ self.attributes = attributes
6
+ end
7
+ end
8
+
9
+ def attributes=(attributes)
10
+ attributes.each_pair do |key, value|
11
+ instance_variable_set("@#{key}", value)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -23,7 +23,7 @@ module Buildbox
23
23
  :output => @build.output,
24
24
  :exit_status => @build.exit_status)
25
25
 
26
- if updated_build.state == 'canceled' && !@build.cancelling?
26
+ if updated_build['state'] == 'canceled' && !@build.cancelling?
27
27
  Buildbox::Canceler.new(@build).async.cancel
28
28
  end
29
29
 
@@ -5,9 +5,10 @@ module Buildbox
5
5
  INTERVAL = 5
6
6
 
7
7
  def initialize(config = Buildbox.config, logger = Buildbox.logger)
8
- @config = config
9
- @logger = logger
8
+ @config = config
9
+ @logger = logger
10
10
  @supervisors = []
11
+ @iterations = 0
11
12
  end
12
13
 
13
14
  def start
@@ -25,6 +26,8 @@ module Buildbox
25
26
  supervisor.actors.first.async.process
26
27
  end
27
28
 
29
+ GC.start
30
+
28
31
  wait INTERVAL
29
32
  end
30
33
  end
@@ -1,3 +1,3 @@
1
1
  module Buildbox
2
- VERSION = "0.6.2"
2
+ VERSION = "0.7.beta1"
3
3
  end
@@ -6,7 +6,7 @@ describe 'running a build' do
6
6
  let(:commit) { "3e0c65433b241ff2c59220f80bcdcd2ebb7e4b96" }
7
7
  let(:command) { "rspec test_spec.rb" }
8
8
  let(:env) { { } }
9
- let(:build) { Buildbox::Build.new(:project => { :id => "test" }, :namespace => "test/test", :id => 1, :script => script, :env => env) }
9
+ let(:build) { Buildbox::Build.new(:namespace => "test/test", :id => 1, :script => script, :env => env) }
10
10
  let(:runner) { Buildbox::Runner.new(build) }
11
11
  let(:script) do
12
12
  <<-SCRIPT
@@ -19,7 +19,6 @@ fi
19
19
  git clean -fd
20
20
  git fetch -q
21
21
  git checkout -qf #{commit}
22
- bundle install --local
23
22
  #{command}
24
23
  SCRIPT
25
24
  end
metadata CHANGED
@@ -1,113 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: buildbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.7.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keith Pitt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-20 00:00:00.000000000 Z
11
+ date: 2014-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: faraday
14
+ name: oj
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.8.0
19
+ version: '2.5'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.8.0
26
+ version: '2.5'
27
27
  - !ruby/object:Gem::Dependency
28
- name: faraday_middleware
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '0.9'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '0.9'
41
- - !ruby/object:Gem::Dependency
42
- name: hashie
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '2.0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '2.0'
55
- - !ruby/object:Gem::Dependency
56
- name: multi_json
28
+ name: celluloid
57
29
  requirement: !ruby/object:Gem::Requirement
58
30
  requirements:
59
31
  - - "~>"
60
32
  - !ruby/object:Gem::Version
61
- version: '1.7'
33
+ version: '0.15'
62
34
  type: :runtime
63
35
  prerelease: false
64
36
  version_requirements: !ruby/object:Gem::Requirement
65
37
  requirements:
66
38
  - - "~>"
67
39
  - !ruby/object:Gem::Version
68
- version: '1.7'
40
+ version: '0.15'
69
41
  - !ruby/object:Gem::Dependency
70
- name: celluloid
42
+ name: childprocess
71
43
  requirement: !ruby/object:Gem::Requirement
72
44
  requirements:
73
45
  - - "~>"
74
46
  - !ruby/object:Gem::Version
75
- version: '0.14'
47
+ version: '0.3'
76
48
  type: :runtime
77
49
  prerelease: false
78
50
  version_requirements: !ruby/object:Gem::Requirement
79
51
  requirements:
80
52
  - - "~>"
81
53
  - !ruby/object:Gem::Version
82
- version: '0.14'
54
+ version: '0.3'
83
55
  - !ruby/object:Gem::Dependency
84
- name: childprocess
56
+ name: multipart-post
85
57
  requirement: !ruby/object:Gem::Requirement
86
58
  requirements:
87
59
  - - "~>"
88
60
  - !ruby/object:Gem::Version
89
- version: '0.3'
61
+ version: '2'
90
62
  type: :runtime
91
63
  prerelease: false
92
64
  version_requirements: !ruby/object:Gem::Requirement
93
65
  requirements:
94
66
  - - "~>"
95
67
  - !ruby/object:Gem::Version
96
- version: '0.3'
68
+ version: '2'
97
69
  - !ruby/object:Gem::Dependency
98
70
  name: mime-types
99
71
  requirement: !ruby/object:Gem::Requirement
100
72
  requirements:
101
73
  - - "~>"
102
74
  - !ruby/object:Gem::Version
103
- version: '2.0'
75
+ version: '2'
104
76
  type: :runtime
105
77
  prerelease: false
106
78
  version_requirements: !ruby/object:Gem::Requirement
107
79
  requirements:
108
80
  - - "~>"
109
81
  - !ruby/object:Gem::Version
110
- version: '2.0'
82
+ version: '2'
111
83
  - !ruby/object:Gem::Dependency
112
84
  name: rake
113
85
  requirement: !ruby/object:Gem::Requirement
@@ -193,6 +165,8 @@ files:
193
165
  - lib/buildbox/cli.rb
194
166
  - lib/buildbox/command.rb
195
167
  - lib/buildbox/configuration.rb
168
+ - lib/buildbox/connection.rb
169
+ - lib/buildbox/model.rb
196
170
  - lib/buildbox/monitor.rb
197
171
  - lib/buildbox/platform.rb
198
172
  - lib/buildbox/runner.rb
@@ -287,9 +261,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
287
261
  version: '0'
288
262
  required_rubygems_version: !ruby/object:Gem::Requirement
289
263
  requirements:
290
- - - ">="
264
+ - - ">"
291
265
  - !ruby/object:Gem::Version
292
- version: '0'
266
+ version: 1.3.1
293
267
  requirements: []
294
268
  rubyforge_project:
295
269
  rubygems_version: 2.2.0