cloudfactory 0.0.13 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,10 +1,4 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- group :development do
4
- gem 'aruba', :git => 'git://github.com/cucumber/aruba.git'
5
- gem 'ruby-debug', :platforms => :mri_18
6
- gem 'ruby-debug19', :require => 'ruby-debug', :platforms => :mri_19
7
- end
8
-
9
3
  # All the gem's dependencies are specified in cloud_factory.gemspec
10
4
  gemspec
data/bin/cf CHANGED
@@ -1,5 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ ENV['BUNDLE_GEMFILE'] = File.expand_path('../../Gemfile', __FILE__)
4
+ require 'rubygems' unless defined?(Gem)
5
+ require 'bundler/setup'
6
+
3
7
  lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
4
8
  $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
5
9
 
data/cf.gemspec CHANGED
@@ -1,4 +1,4 @@
1
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
2
2
  $:.push File.expand_path("../lib", __FILE__)
3
3
  require "cf/version"
4
4
 
@@ -61,9 +61,13 @@ EOF
61
61
  s.add_dependency "rest-client"
62
62
  s.add_dependency "json"
63
63
  s.add_dependency "thor", "~> 0.14.6"
64
+ s.add_dependency "highline"
64
65
  s.add_dependency "httparty", "~> 0.7.8"
65
66
  s.add_dependency "terminal-table", "~> 1.4.2"
67
+ s.add_dependency "millisami-csv-hash"
66
68
 
69
+
70
+ s.add_development_dependency "aruba"
67
71
  s.add_development_dependency "rails", "~> 3.0.3"
68
72
  s.add_development_dependency "bundler", "~> 1.0.0"
69
73
  s.add_development_dependency "generator_spec", "~> 0.8.3"
@@ -0,0 +1,30 @@
1
+ Feature: Login credentials
2
+ In order to talk with cloud factory
3
+ As a CLI user
4
+ I want to setup login credentials
5
+
6
+ @announce, @moderate_slow_process
7
+ Scenario: Login
8
+ When I run `cf login` interactively
9
+ And I type "sachin@sproutify.com"
10
+ And I type "secret"
11
+ Then the output should match:
12
+ """
13
+ john@doe.com and secret
14
+ """
15
+
16
+ # Then the file ".cf_credentials" should contain exactly:
17
+ # """
18
+ # ---
19
+ # :target_url: http://sandbox.staging.cloudfactory.com/api/
20
+ # :api_version: v1
21
+ # :api_key: theapikey
22
+ #
23
+ # """
24
+ # Then the output should match:
25
+ # """
26
+ #
27
+ # Your cloudfactory credentials saved.
28
+ # All the best to run your factory on top of CloudFactory.com
29
+ #
30
+ # """
@@ -8,6 +8,11 @@ Before('@slow_process') do
8
8
  @aruba_timeout_seconds = 4
9
9
  end
10
10
 
11
+ Before('@moderate_slow_process') do
12
+ @aruba_io_wait_seconds = 2
13
+ @aruba_timeout_seconds = 2
14
+ end
15
+
11
16
  Before('@too_slow_process') do
12
17
  @aruba_io_wait_seconds = 4
13
18
  @aruba_timeout_seconds = 50
@@ -16,7 +16,7 @@ Feature: Target URL
16
16
  """
17
17
 
18
18
  Your cloudfactory target url is saved as http://sandbox.staging.cloudfactory.com/api/
19
- All the best to run your factory on top of CloudFactory.com
19
+ Since the target is changed, do cf login to set the valid api key.
20
20
 
21
21
  """
22
22
 
@@ -33,7 +33,7 @@ Feature: Target URL
33
33
  """
34
34
 
35
35
  Your cloudfactory target url is saved as http://lvh.me:3000/api/
36
- All the best to run your factory on top of CloudFactory.com
36
+ Since the target is changed, do cf login to set the valid api key.
37
37
 
38
38
  """
39
39
 
@@ -50,7 +50,7 @@ Feature: Target URL
50
50
  """
51
51
 
52
52
  Your cloudfactory target url is saved as http://sandbox.cloudfactory.com/api/
53
- All the best to run your factory on top of CloudFactory.com
53
+ Since the target is changed, do cf login to set the valid api key.
54
54
 
55
55
  """
56
56
 
@@ -76,7 +76,7 @@ Feature: Target URL
76
76
  """
77
77
 
78
78
  You have not set the target url yet.
79
- Set the target uri with: cf target --url=http://sandbox.staging.cloudfactory.com
79
+ Set it with: cf target staging or see the help.
80
80
 
81
81
  """
82
82
 
data/lib/cf/account.rb CHANGED
@@ -20,12 +20,8 @@ module CF
20
20
  end
21
21
 
22
22
  def login(email, passwd)
23
- resp = post('/api_login.json', {:email => email, :password => passwd})
24
-
25
- if resp.code != 200
26
- self.errors = resp.error.message
27
- end
28
- return resp
23
+ resp = post('/account_login.json', :user => {:email => email, :password => passwd})
24
+ resp
29
25
  end
30
26
  end
31
27
  end
data/lib/cf/cli.rb CHANGED
@@ -6,6 +6,8 @@ end
6
6
  require 'yaml'
7
7
  require 'fileutils'
8
8
  require 'thor'
9
+ require "highline/import"
10
+ require 'csv-hash'
9
11
 
10
12
  require File.expand_path('../../cf', __FILE__) #=> requiring the gem
11
13
  require 'active_support/core_ext/string/inflections'
@@ -17,26 +19,53 @@ require "#{cli_directory}/line"
17
19
  require "#{cli_directory}/form"
18
20
  require "#{cli_directory}/production"
19
21
 
22
+ if ENV['TEST']
23
+ require 'ruby-debug'
24
+ end
25
+
20
26
  module Cf
21
27
  class CLI < Thor
22
28
  include Thor::Actions
23
29
  include Cf::Config
24
30
 
25
- desc "target", "Setup the cloudfactory credentials. e.g. cf target staging #=> http://sandbox.staging.cloudfactory.com (options: staging/development/production)"
26
- def target(target_url=nil)
27
- if target_url.present?
28
- target_set_url = save_config(target_url)
29
- say("\nYour cloudfactory target url is saved as #{target_set_url}", :green)
30
- say("All the best to run your factory on top of CloudFactory.com\n", :green)
31
+ desc "login", "Setup the cloudfactory credentials"
32
+ def login
33
+ email = ask("Enter your email:")
34
+ passwd = ask_password("Enter the password: ")
35
+
36
+ set_target_uri(false)
37
+ resp = CF::Account.login(email, passwd)
38
+ if resp.error.blank? and resp.api_key.present?
39
+ File.open(config_file, 'w') {|f| f.write({ :target_url => CF.api_url, :api_version => CF.api_version, :api_key => resp.api_key }.to_yaml) }
40
+ say("\nNow you're logged in.\nTo get started, run cf help\n", :green)
31
41
  else
32
- if load_config
33
- say("\n#{load_config[:target_url]}\n", :green)
34
- else
35
- say("\nYou have not set the target url yet.", :yellow)
36
- say("Set the target uri with: cf target --url=http://sandbox.staging.cloudfactory.com\n", :yellow)
42
+ say("\n#{resp.error.message}\nTry again with valid one.\n", :red)
43
+ end
44
+ end
45
+
46
+ no_tasks do
47
+ def ask_password(message)
48
+ ::HighLine.new.ask(message) do |q|
49
+ q.echo = false
37
50
  end
38
51
  end
39
52
  end
53
+
54
+ # desc "target", "Setup the cloudfactory credentials. e.g. cf target staging #=> http://sandbox.staging.cloudfactory.com (options: staging/development/production)"
55
+ # def target(target_url=nil)
56
+ # if target_url.present?
57
+ # target_set_url = save_config(target_url)
58
+ # say("\nYour cloudfactory target url is saved as #{target_set_url}", :green)
59
+ # say("Since the target is changed, do cf login to set the valid api key.\n", :green)
60
+ # else
61
+ # if load_config
62
+ # say("\n#{load_config[:target_url]}\n", :green)
63
+ # else
64
+ # say("\nYou have not set the target url yet.", :red)
65
+ # say("Set it with: cf target staging or see the help.\n", :red)
66
+ # end
67
+ # end
68
+ # end
40
69
 
41
70
  desc "line", "Commands to manage the Lines. For more info, cf line help"
42
71
  subcommand "line", Cf::Line
@@ -48,5 +77,56 @@ module Cf
48
77
  # cannot use Run for the class name coz its a reserved word for Thor
49
78
  # later it can be replaced with hacked millisami-thor version of the thor library with run-time dependency via Bundler
50
79
  subcommand "production", Cf::Production
80
+
81
+ desc "output <run-title>", "Get the output of run. For more info, cf output help"
82
+ method_option :station_index, :type => :numeric, :aliases => "-s", :desc => "the index of the station"
83
+ def output(run_title=nil)
84
+ if run_title.present?
85
+ run_title = run_title.parameterize
86
+ line_source = Dir.pwd
87
+ yaml_source = "#{line_source}/line.yml"
88
+
89
+ unless File.exist?(yaml_source)
90
+ say "The line.yml file does not exist in this directory", :red
91
+ return
92
+ end
93
+
94
+ set_target_uri(false)
95
+ if set_api_key(yaml_source)
96
+ CF.account_name = CF::Account.info.name if CF.account_name.blank?
97
+ run = CF::Run.find(run_title)
98
+ if run.errors.blank?
99
+ say("Fetching output for run: #{run_title}", :green)
100
+
101
+ if options[:station_index].present?
102
+ # Output for specific station
103
+ output = CF::Run.output(:title => run_title, :station => options[:station_index])
104
+ else
105
+ # Ouput for the whole production run
106
+ output = CF::Run.final_output(run_title)
107
+ end
108
+ res_array = []
109
+ output.each do |o|
110
+ res_array << o.to_hash
111
+ end
112
+ csv_str = CSVHash(res_array,res_array.first.keys)
113
+
114
+ FileUtils.mkdir("#{line_source}/output") unless Dir.exist?("#{line_source}/output")
115
+ csv_file_name = "#{line_source}/output/#{run_title}-#{Time.now.strftime("%e %b %Y %H:%m-%S%p").parameterize}.csv"
116
+ File.open(csv_file_name, 'w') {|f| f.write(csv_str) }
117
+ say("Output saved at #{csv_file_name}\n", :yellow)
118
+ else
119
+ say("Error: #{run.errors.inspect}")
120
+ end
121
+
122
+ else
123
+ say("\nAPI key missing in line.yml file\n")
124
+ end
125
+ else
126
+ say("\nThe run title must be provided to get the output.", :red)
127
+ say("\te.g. cf output my-run-title\n", :yellow)
128
+ end
129
+ end
130
+
51
131
  end
52
132
  end
data/lib/cf/cli/config.rb CHANGED
@@ -25,33 +25,57 @@ module Cf
25
25
  CF.api_url = load_config[:target_url]
26
26
  CF.api_version = load_config[:api_version]
27
27
  else
28
- CF.api_url = "http://sandbox.cloudfactory.com/api"
28
+ CF.api_url = "http://sandbox.cloudfactory.com/api/"
29
29
  CF.api_version = "v1"
30
30
  end
31
31
 
32
32
  if live
33
- if CF.api_url == "http://sandbox.staging.cloudfactory.com/api"
34
- CF.api_url = "http://staging.cloudfactory.com/api"
33
+ if CF.api_url == "http://sandbox.staging.cloudfactory.com/api/"
34
+ CF.api_url = "http://staging.cloudfactory.com/api/"
35
35
  end
36
-
37
- if CF.api_url == "http://sandbox.cloudfactory.com/api"
38
- CF.api_url = "http://cloudfactory.com/api"
36
+
37
+ if CF.api_url == "http://sandbox.cloudfactory.com/api/"
38
+ CF.api_url = "http://cloudfactory.com/api/"
39
39
  end
40
40
  end
41
41
  end
42
42
 
43
- def get_api_key(line_yaml_file)
44
- line_yml = YAML::load(File.read(line_yaml_file))
45
- line_yml['api_key'].presence
43
+ def get_api_key(yaml_file)
44
+ yml = YAML::load(File.read(yaml_file))
45
+ yml['api_key'].presence
46
46
  end
47
47
 
48
48
  def set_api_key(yaml_source)
49
- # debugger
50
49
  api_key = get_api_key(yaml_source)
51
50
  if api_key.blank?
51
+
52
+ # api_key not found in line.yml file, so checking in the .cf_credentials
53
+ if File.exist?(config_file)
54
+ api_key = get_api_key(config_file)
55
+ if api_key.blank?
56
+ return false
57
+ else
58
+ CF.api_key = api_key if CF.api_key.blank?
59
+ raise "Error: Invalid api key => #{CF.api_key} for target #{CF.api_url}" unless CF::Account.valid?
60
+ return true
61
+ end
62
+ end
52
63
  return false
53
64
  else
54
65
  CF.api_key = api_key if CF.api_key.blank?
66
+ # Do check whether the api_key is valid by calling the CF::Account#valid?
67
+ # Cf::CliError.new("Error: Invalid api key => #{CF.api_key}") unless CF::Account.valid?
68
+ raise "Error: Invalid api key => #{CF.api_key} for target #{CF.api_url}" unless CF::Account.valid?
69
+
70
+ # Check the file ~/.cf_credentials. If it exists, check for the api_key line. If not set, then append it.
71
+ # This is needed for certain commands like cf line list, cf production list <line-title>
72
+ # if File.exist?(config_file)
73
+ # yaml_dump = YAML::load(File.read(config_file))
74
+ # unless yaml_dump.keys.include?(:api_key)
75
+ # open(config_file, 'a') {|f| f.puts ":api_key: #{api_key}"}
76
+ # end
77
+ # end
78
+
55
79
  return true
56
80
  end
57
81
  end
data/lib/cf/cli/line.rb CHANGED
@@ -228,10 +228,12 @@ module Cf
228
228
  end
229
229
 
230
230
  # helper function like in Rails
231
- def pluralize(number, text)
232
- return text.pluralize if number != 1
233
- text
234
- end
231
+ no_tasks {
232
+ def pluralize(number, text)
233
+ return text.pluralize if number != 1
234
+ text
235
+ end
236
+ }
235
237
 
236
238
  end
237
239
  end
@@ -42,17 +42,28 @@ module Cf
42
42
  CF.account_name = CF::Account.info.name
43
43
  line = CF::Line.info(line_title)
44
44
  input_data_path = "#{Dir.pwd}/#{input_data}"
45
+
45
46
  if line.error.blank?
46
47
  say "Creating a production run with title #{run_title}", :green
47
48
  run = CF::Run.create(line, run_title, input_data_path)
48
- say "A run with title #{run.title} created successfully."
49
+ if run.errors.blank?
50
+ say("A run with title #{run.title} created successfully.", :green)
51
+ say("View your run at http://#{CF.account_name}.#{CF.api_url.split("/")[-2]}/runs/#{CF.account_name}/#{run.title}", :yellow)
52
+ else
53
+ say("Error: #{run.errors}", :red)
54
+ end
49
55
  else
50
56
  # first create line
51
- say "Creating the line: #{line_title}", :green
57
+ say("Creating the line: #{line_title}", :green)
52
58
  Cf::Line.new.create
53
59
  # Now create a production run with the title run_title
54
60
  run = CF::Run.create(CF::Line.info(line_title), run_title, input_data_path)
55
- say "A run with title #{run.title} using the line #{line_title} was successfully created."
61
+ if run.errors.blank?
62
+ say("A run with title #{run.title} using the line #{line_title} was successfully created.", :red)
63
+ else
64
+ say("Error: #{run.errors}", :red)
65
+ end
66
+
56
67
  end
57
68
  else
58
69
  say "The api_key is missing in the line.yml file", :red
@@ -4,26 +4,26 @@
4
4
  # See docs at http://developers.cloudfactory.com/lines/yaml.html
5
5
  # See examples at http://developers.cloudfactory.com/lines/examples.html
6
6
  # Fill in your API key below! (See http://developers.cloudfactory.com/account#settings)
7
- api_key: fill_in_your_api_key
7
+ # api_key: fill_in_your_api_key #(optional) If this key is not in this file, then make sure that you did `cf login` after installing the gem.
8
8
  title: <%= title.underscore.dasherize %>
9
9
  description: A sample line generated via CLI to use both standard and custom form.
10
- department: Data Processing # Digitization, Web Research, etc
10
+ department: Data Processing #Digitization, Web Research, etc
11
11
 
12
- # Line Input Formats (see http://developers.cloudfactory.com/lines/yaml.html#line-input-formats)
12
+ ## Line Input Formats (see http://developers.cloudfactory.com/lines/yaml.html#line-input-formats)
13
13
  # input_formats:
14
14
  # - name: company
15
15
  # required: true
16
- # valid_type: general # general, url, date, email, ...
16
+ # valid_type: general #general, url, date, email, ...
17
17
 
18
- # Stations (see http://developers.cloudfactory.com/lines/yaml.html#stations)
18
+ ## Stations (see http://developers.cloudfactory.com/lines/yaml.html#stations)
19
19
  # stations:
20
20
  # # Sample Station #1: Human Worker
21
21
  # - station:
22
22
  # station_index: 1
23
- # station_type: work # work, improve, tournament
23
+ # station_type: work #work, improve, tournament
24
24
  # # Worker (see http://developers.cloudfactory.com/lines/yaml.html#workers)
25
25
  # worker:
26
- # worker_type: human # "human" or name of robot (google_translate_robot, etc)
26
+ # worker_type: human #"human" or name of robot (google_translate_robot, etc)
27
27
  # num_workers: 2
28
28
  # reward: 5
29
29
  # # Task Form (see http://developers.cloudfactory.com/lines/yaml.html#task-forms)
@@ -41,10 +41,10 @@ department: Data Processing # Digitization, Web Research, etc
41
41
  # # Sample Station #2: Robot Worker
42
42
  # - station:
43
43
  # station_index: 2
44
- # station_type: work # work, improve, tournament
44
+ # station_type: work #work, improve, tournament
45
45
  # # Worker (see http://developers.cloudfactory.com/lines/yaml.html#workers)
46
46
  # worker:
47
- # worker_type: google_translate_robot # "human" or name of robot (content_scraper_robot, etc)
47
+ # worker_type: google_translate_robot #"human" or name of robot (content_scraper_robot, etc)
48
48
  # # Robot Settings (see http://developers.cloudfactory.com/robots/)
49
49
  # settings:
50
50
  # data: ["{sentence}"]
@@ -1,7 +1,7 @@
1
1
  module CF
2
2
  class FinalOutput
3
3
  include Client
4
- attr_accessor :meta_data, :final_outputs, :unit_id, :final_output, :output
4
+ attr_accessor :final_outputs, :unit_id, :final_output, :output
5
5
 
6
6
  # def self.get_result(run_id)
7
7
  # resp = get("/runs/#{run_id}/results.json")
data/lib/cf/run.rb CHANGED
@@ -118,25 +118,28 @@ module CF
118
118
 
119
119
  def self.final_output(title)
120
120
  resp = get("/runs/#{CF.account_name}/#{title.downcase}/output.json")
121
- @final_output =[]
122
- resp['output'].each do |r|
123
- result = FinalOutput.new()
124
- r.to_hash.each_pair do |k,v|
125
- result.send("#{k}=",v) if result.respond_to?(k)
126
- end
127
- if result.final_output == nil
128
- result.final_output = resp.output
129
- end
130
- @final_output << result
131
- end
132
- return @final_output
121
+ return resp['output']
122
+ # debugger
123
+ # @final_output =[]
124
+ # resp['output'].each do |r|
125
+ # result = FinalOutput.new()
126
+ # r.to_hash.each_pair do |k,v|
127
+ # result.send("#{k}=",v) if result.respond_to?(k)
128
+ # end
129
+ # # if result.final_output == nil
130
+ # # result.final_output = resp.output
131
+ # # end
132
+ # @final_output << result
133
+ # end
134
+ # debugger
135
+ # return @final_output
133
136
  end
134
137
 
135
138
  def self.output(options={})
136
139
  station_no = options[:station]
137
140
  title = options[:title]
138
141
  resp = get("/runs/#{CF.account_name}/#{title.downcase}/output/#{station_no}.json")
139
- return resp['output'].first.to_hash
142
+ return resp['output']
140
143
  end
141
144
 
142
145
  def output(options={})
data/lib/cf/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module CF
2
- VERSION = "0.0.13"
2
+ VERSION = "0.1.5"
3
3
  end
@@ -4,4 +4,5 @@ CF.configure do |config|
4
4
  config.api_version = "v1"
5
5
  config.api_key = "<%= api_key %>"
6
6
  config.api_url = "http://cloudfactory.com/api/"
7
+ config.api_url = "your-account-name"
7
8
  end
data/spec/run_spec.rb CHANGED
@@ -170,8 +170,8 @@ module CF
170
170
  end
171
171
  end
172
172
  end
173
+
173
174
  run = CF::Run.create(line, "run-name-run", File.expand_path("../../fixtures/input_data/test.csv", __FILE__))
174
- # debugger
175
175
  @final_output = run.final_output
176
176
  @final_output.first.meta_data['company'].should eql("Apple")
177
177
  @final_output.first.final_outputs.last['first-name'].should eql("Bob")
data/spec/spec_helper.rb CHANGED
@@ -1,24 +1,19 @@
1
1
  require 'cf'
2
2
  require 'vcr'
3
3
  require 'webmock'
4
+ require 'ruby-debug'
4
5
 
5
6
  RSpec.configure do |config|
6
- config.before(:each) do
7
- # Configuring the defaults
8
- # Set ENV['TEST'] is true for testing against the api
9
- # TEST=true bundle exec rspec spec/.....
10
- if ENV['TEST']
11
- require 'ruby-debug'
12
- ::Debugger.start
13
- ::Debugger.settings[:autoeval] = true if ::Debugger.respond_to?(:settings)
7
+ config.before(:suite) do
8
+ ::Debugger.start
9
+ ::Debugger.settings[:autoeval] = true if ::Debugger.respond_to?(:settings)
14
10
 
15
- API_CONFIG = YAML.load_file(File.expand_path("../../fixtures/api_credentials.yml", __FILE__))
16
- CF.configure do |config|
17
- config.account_name = API_CONFIG['account_name']
18
- config.api_version = API_CONFIG['api_version']
19
- config.api_url = API_CONFIG['api_url']
20
- config.api_key = API_CONFIG['api_key']
21
- end
11
+ API_CONFIG = YAML.load_file(File.expand_path("../../fixtures/api_credentials.yml", __FILE__))
12
+ CF.configure do |config|
13
+ config.account_name = API_CONFIG['account_name']
14
+ config.api_version = API_CONFIG['api_version']
15
+ config.api_url = API_CONFIG['api_url']
16
+ config.api_key = API_CONFIG['api_key']
22
17
  end
23
18
  end
24
19
  config.filter_run :focus => true
metadata CHANGED
@@ -1,288 +1,244 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: cloudfactory
3
- version: !ruby/object:Gem::Version
4
- hash: 5
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.5
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 13
10
- version: 0.0.13
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - CloudFactory.com
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-08-04 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2011-08-08 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: i18n
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &2157320800 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
32
22
  type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: activesupport
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *2157320800
25
+ - !ruby/object:Gem::Dependency
26
+ name: activesupport
27
+ requirement: &2157320240 !ruby/object:Gem::Requirement
38
28
  none: false
39
- requirements:
29
+ requirements:
40
30
  - - ~>
41
- - !ruby/object:Gem::Version
42
- hash: 1
43
- segments:
44
- - 3
45
- - 0
46
- - 3
31
+ - !ruby/object:Gem::Version
47
32
  version: 3.0.3
48
33
  type: :runtime
49
- version_requirements: *id002
50
- - !ruby/object:Gem::Dependency
51
- name: hashie
52
34
  prerelease: false
53
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *2157320240
36
+ - !ruby/object:Gem::Dependency
37
+ name: hashie
38
+ requirement: &2157319700 !ruby/object:Gem::Requirement
54
39
  none: false
55
- requirements:
40
+ requirements:
56
41
  - - ~>
57
- - !ruby/object:Gem::Version
58
- hash: 23
59
- segments:
60
- - 1
61
- - 0
62
- - 0
42
+ - !ruby/object:Gem::Version
63
43
  version: 1.0.0
64
44
  type: :runtime
65
- version_requirements: *id003
66
- - !ruby/object:Gem::Dependency
67
- name: rest-client
68
45
  prerelease: false
69
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *2157319700
47
+ - !ruby/object:Gem::Dependency
48
+ name: rest-client
49
+ requirement: &2157319260 !ruby/object:Gem::Requirement
70
50
  none: false
71
- requirements:
72
- - - ">="
73
- - !ruby/object:Gem::Version
74
- hash: 3
75
- segments:
76
- - 0
77
- version: "0"
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
78
55
  type: :runtime
79
- version_requirements: *id004
80
- - !ruby/object:Gem::Dependency
81
- name: json
82
56
  prerelease: false
83
- requirement: &id005 !ruby/object:Gem::Requirement
57
+ version_requirements: *2157319260
58
+ - !ruby/object:Gem::Dependency
59
+ name: json
60
+ requirement: &2157318720 !ruby/object:Gem::Requirement
84
61
  none: false
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- hash: 3
89
- segments:
90
- - 0
91
- version: "0"
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
92
66
  type: :runtime
93
- version_requirements: *id005
94
- - !ruby/object:Gem::Dependency
95
- name: thor
96
67
  prerelease: false
97
- requirement: &id006 !ruby/object:Gem::Requirement
68
+ version_requirements: *2157318720
69
+ - !ruby/object:Gem::Dependency
70
+ name: thor
71
+ requirement: &2157318100 !ruby/object:Gem::Requirement
98
72
  none: false
99
- requirements:
73
+ requirements:
100
74
  - - ~>
101
- - !ruby/object:Gem::Version
102
- hash: 43
103
- segments:
104
- - 0
105
- - 14
106
- - 6
75
+ - !ruby/object:Gem::Version
107
76
  version: 0.14.6
108
77
  type: :runtime
109
- version_requirements: *id006
110
- - !ruby/object:Gem::Dependency
111
- name: httparty
112
78
  prerelease: false
113
- requirement: &id007 !ruby/object:Gem::Requirement
79
+ version_requirements: *2157318100
80
+ - !ruby/object:Gem::Dependency
81
+ name: highline
82
+ requirement: &2157317680 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: *2157317680
91
+ - !ruby/object:Gem::Dependency
92
+ name: httparty
93
+ requirement: &2157317080 !ruby/object:Gem::Requirement
114
94
  none: false
115
- requirements:
95
+ requirements:
116
96
  - - ~>
117
- - !ruby/object:Gem::Version
118
- hash: 19
119
- segments:
120
- - 0
121
- - 7
122
- - 8
97
+ - !ruby/object:Gem::Version
123
98
  version: 0.7.8
124
99
  type: :runtime
125
- version_requirements: *id007
126
- - !ruby/object:Gem::Dependency
127
- name: terminal-table
128
100
  prerelease: false
129
- requirement: &id008 !ruby/object:Gem::Requirement
101
+ version_requirements: *2157317080
102
+ - !ruby/object:Gem::Dependency
103
+ name: terminal-table
104
+ requirement: &2157316500 !ruby/object:Gem::Requirement
130
105
  none: false
131
- requirements:
106
+ requirements:
132
107
  - - ~>
133
- - !ruby/object:Gem::Version
134
- hash: 3
135
- segments:
136
- - 1
137
- - 4
138
- - 2
108
+ - !ruby/object:Gem::Version
139
109
  version: 1.4.2
140
110
  type: :runtime
141
- version_requirements: *id008
142
- - !ruby/object:Gem::Dependency
143
- name: rails
144
111
  prerelease: false
145
- requirement: &id009 !ruby/object:Gem::Requirement
112
+ version_requirements: *2157316500
113
+ - !ruby/object:Gem::Dependency
114
+ name: millisami-csv-hash
115
+ requirement: &2157316060 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :runtime
122
+ prerelease: false
123
+ version_requirements: *2157316060
124
+ - !ruby/object:Gem::Dependency
125
+ name: aruba
126
+ requirement: &2157315580 !ruby/object:Gem::Requirement
146
127
  none: false
147
- requirements:
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: *2157315580
135
+ - !ruby/object:Gem::Dependency
136
+ name: rails
137
+ requirement: &2157314900 !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
148
140
  - - ~>
149
- - !ruby/object:Gem::Version
150
- hash: 1
151
- segments:
152
- - 3
153
- - 0
154
- - 3
141
+ - !ruby/object:Gem::Version
155
142
  version: 3.0.3
156
143
  type: :development
157
- version_requirements: *id009
158
- - !ruby/object:Gem::Dependency
159
- name: bundler
160
144
  prerelease: false
161
- requirement: &id010 !ruby/object:Gem::Requirement
145
+ version_requirements: *2157314900
146
+ - !ruby/object:Gem::Dependency
147
+ name: bundler
148
+ requirement: &2157314320 !ruby/object:Gem::Requirement
162
149
  none: false
163
- requirements:
150
+ requirements:
164
151
  - - ~>
165
- - !ruby/object:Gem::Version
166
- hash: 23
167
- segments:
168
- - 1
169
- - 0
170
- - 0
152
+ - !ruby/object:Gem::Version
171
153
  version: 1.0.0
172
154
  type: :development
173
- version_requirements: *id010
174
- - !ruby/object:Gem::Dependency
175
- name: generator_spec
176
155
  prerelease: false
177
- requirement: &id011 !ruby/object:Gem::Requirement
156
+ version_requirements: *2157314320
157
+ - !ruby/object:Gem::Dependency
158
+ name: generator_spec
159
+ requirement: &2157313740 !ruby/object:Gem::Requirement
178
160
  none: false
179
- requirements:
161
+ requirements:
180
162
  - - ~>
181
- - !ruby/object:Gem::Version
182
- hash: 57
183
- segments:
184
- - 0
185
- - 8
186
- - 3
163
+ - !ruby/object:Gem::Version
187
164
  version: 0.8.3
188
165
  type: :development
189
- version_requirements: *id011
190
- - !ruby/object:Gem::Dependency
191
- name: rspec-rails
192
166
  prerelease: false
193
- requirement: &id012 !ruby/object:Gem::Requirement
167
+ version_requirements: *2157313740
168
+ - !ruby/object:Gem::Dependency
169
+ name: rspec-rails
170
+ requirement: &2157313220 !ruby/object:Gem::Requirement
194
171
  none: false
195
- requirements:
196
- - - ">="
197
- - !ruby/object:Gem::Version
198
- hash: 3
199
- segments:
200
- - 0
201
- version: "0"
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
202
176
  type: :development
203
- version_requirements: *id012
204
- - !ruby/object:Gem::Dependency
205
- name: cucumber
206
177
  prerelease: false
207
- requirement: &id013 !ruby/object:Gem::Requirement
178
+ version_requirements: *2157313220
179
+ - !ruby/object:Gem::Dependency
180
+ name: cucumber
181
+ requirement: &2157312740 !ruby/object:Gem::Requirement
208
182
  none: false
209
- requirements:
210
- - - ">="
211
- - !ruby/object:Gem::Version
212
- hash: 3
213
- segments:
214
- - 0
215
- version: "0"
183
+ requirements:
184
+ - - ! '>='
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
216
187
  type: :development
217
- version_requirements: *id013
218
- - !ruby/object:Gem::Dependency
219
- name: rdoc
220
188
  prerelease: false
221
- requirement: &id014 !ruby/object:Gem::Requirement
189
+ version_requirements: *2157312740
190
+ - !ruby/object:Gem::Dependency
191
+ name: rdoc
192
+ requirement: &2157312100 !ruby/object:Gem::Requirement
222
193
  none: false
223
- requirements:
194
+ requirements:
224
195
  - - ~>
225
- - !ruby/object:Gem::Version
226
- hash: 21
227
- segments:
228
- - 3
229
- - 5
230
- - 3
196
+ - !ruby/object:Gem::Version
231
197
  version: 3.5.3
232
198
  type: :development
233
- version_requirements: *id014
234
- - !ruby/object:Gem::Dependency
235
- name: vcr
236
199
  prerelease: false
237
- requirement: &id015 !ruby/object:Gem::Requirement
200
+ version_requirements: *2157312100
201
+ - !ruby/object:Gem::Dependency
202
+ name: vcr
203
+ requirement: &2157311640 !ruby/object:Gem::Requirement
238
204
  none: false
239
- requirements:
240
- - - ">="
241
- - !ruby/object:Gem::Version
242
- hash: 3
243
- segments:
244
- - 0
245
- version: "0"
205
+ requirements:
206
+ - - ! '>='
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
246
209
  type: :development
247
- version_requirements: *id015
248
- - !ruby/object:Gem::Dependency
249
- name: rake
250
210
  prerelease: false
251
- requirement: &id016 !ruby/object:Gem::Requirement
211
+ version_requirements: *2157311640
212
+ - !ruby/object:Gem::Dependency
213
+ name: rake
214
+ requirement: &2157310940 !ruby/object:Gem::Requirement
252
215
  none: false
253
- requirements:
254
- - - ">="
255
- - !ruby/object:Gem::Version
256
- hash: 3
257
- segments:
258
- - 0
259
- version: "0"
216
+ requirements:
217
+ - - ! '>='
218
+ - !ruby/object:Gem::Version
219
+ version: '0'
260
220
  type: :development
261
- version_requirements: *id016
262
- - !ruby/object:Gem::Dependency
263
- name: webmock
264
221
  prerelease: false
265
- requirement: &id017 !ruby/object:Gem::Requirement
222
+ version_requirements: *2157310940
223
+ - !ruby/object:Gem::Dependency
224
+ name: webmock
225
+ requirement: &2157310400 !ruby/object:Gem::Requirement
266
226
  none: false
267
- requirements:
268
- - - ">="
269
- - !ruby/object:Gem::Version
270
- hash: 3
271
- segments:
272
- - 0
273
- version: "0"
227
+ requirements:
228
+ - - ! '>='
229
+ - !ruby/object:Gem::Version
230
+ version: '0'
274
231
  type: :development
275
- version_requirements: *id017
232
+ prerelease: false
233
+ version_requirements: *2157310400
276
234
  description: A Ruby wrapper and CLI for to interact with Cloudfactory.com REST API
277
- email:
235
+ email:
278
236
  - info@cloudfactory.com
279
- executables:
237
+ executables:
280
238
  - cf
281
239
  extensions: []
282
-
283
240
  extra_rdoc_files: []
284
-
285
- files:
241
+ files:
286
242
  - .gitignore
287
243
  - .rspec
288
244
  - Gemfile
@@ -330,6 +286,7 @@ files:
330
286
  - features/line_creation.feature
331
287
  - features/line_deletion.feature
332
288
  - features/line_generation.feature
289
+ - features/login.feature
333
290
  - features/run.feature
334
291
  - features/support/cli_steps.rb
335
292
  - features/support/env.rb
@@ -402,43 +359,49 @@ files:
402
359
  - spec/text_appending_robot_spec.rb
403
360
  homepage: http://cloudfactory.com
404
361
  licenses: []
405
-
406
- post_install_message: " \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81\n \n Sweet. You now have the 'cf' command installed. Test drive it with:\n > cf help\n\n 1. Sign up for your CloudFactory account and get your API key\n http://cloudfactory.com/users/sign_up\n Get API key from welcome email or http://cloudfactory.com/account#settings\n\n 2. Generate your first assembly line...\n > cf line generate <line-title>\n\n 3. Edit the generated line.yml to design your perfect assembly line\n See http://developers.cloudfactory.com/lines/yaml.html\n\n 4. Create your line in CloudFactory\n > cf line create\n\n 5. Do a test production run in the sandbox first...\n > cf production start TITLE -i=INPUT_DATA.CSV\n\n 6. Go live! Send your production run to real workers...\n > cf production start TITLE -i=INPUT_DATA.CSV --live\n \n ------------------------------------------------------------------------------\n \n Follow @thecloudfactory on Twitter for announcements, updates, and news.\n https://twitter.com/thecloudfactory\n\n Add your project or organization to the apps wiki!\n https://github.com/sprout/cloudfactory_ruby/wiki/Apps\n \n \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81 \xE2\x98\x81\n"
362
+ post_install_message: ! " ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁
363
+ ☁\n \n Sweet. You now have the 'cf' command installed. Test
364
+ drive it with:\n > cf help\n\n 1. Sign up for your CloudFactory account and get
365
+ your API key\n http://cloudfactory.com/users/sign_up\n Get API key from welcome
366
+ email or http://cloudfactory.com/account#settings\n\n 2. Generate your first assembly
367
+ line...\n > cf line generate <line-title>\n\n 3. Edit the generated line.yml to
368
+ design your perfect assembly line\n See http://developers.cloudfactory.com/lines/yaml.html\n\n
369
+ \ 4. Create your line in CloudFactory\n > cf line create\n\n 5. Do a test production
370
+ run in the sandbox first...\n > cf production start TITLE -i=INPUT_DATA.CSV\n\n
371
+ \ 6. Go live! Send your production run to real workers...\n > cf production start
372
+ TITLE -i=INPUT_DATA.CSV --live\n \n ------------------------------------------------------------------------------\n
373
+ \n Follow @thecloudfactory on Twitter for announcements, updates, and news.\n https://twitter.com/thecloudfactory\n\n
374
+ \ Add your project or organization to the apps wiki!\n https://github.com/sprout/cloudfactory_ruby/wiki/Apps\n
375
+ \ \n ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁
376
+ ☁ ☁\n"
407
377
  rdoc_options: []
408
-
409
- require_paths:
378
+ require_paths:
410
379
  - lib
411
- required_ruby_version: !ruby/object:Gem::Requirement
380
+ required_ruby_version: !ruby/object:Gem::Requirement
412
381
  none: false
413
- requirements:
414
- - - ">="
415
- - !ruby/object:Gem::Version
416
- hash: 3
417
- segments:
418
- - 0
419
- version: "0"
420
- required_rubygems_version: !ruby/object:Gem::Requirement
382
+ requirements:
383
+ - - ! '>='
384
+ - !ruby/object:Gem::Version
385
+ version: '0'
386
+ required_rubygems_version: !ruby/object:Gem::Requirement
421
387
  none: false
422
- requirements:
423
- - - ">="
424
- - !ruby/object:Gem::Version
425
- hash: 3
426
- segments:
427
- - 0
428
- version: "0"
388
+ requirements:
389
+ - - ! '>='
390
+ - !ruby/object:Gem::Version
391
+ version: '0'
429
392
  requirements: []
430
-
431
393
  rubyforge_project: cloudfactory
432
394
  rubygems_version: 1.8.6
433
395
  signing_key:
434
396
  specification_version: 3
435
397
  summary: A Ruby wrapper and CLI for Cloudfactory.com
436
- test_files:
398
+ test_files:
437
399
  - features/form_generation.feature
438
400
  - features/form_preview.feature
439
401
  - features/line_creation.feature
440
402
  - features/line_deletion.feature
441
403
  - features/line_generation.feature
404
+ - features/login.feature
442
405
  - features/run.feature
443
406
  - features/support/cli_steps.rb
444
407
  - features/support/env.rb