nuvado 1.0.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/Gemfile +5 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +69 -0
  6. data/Rakefile +33 -0
  7. data/bin/nuvado +12 -0
  8. data/lib/nuvado/apps.rb +76 -0
  9. data/lib/nuvado/backend/app.rb +6 -0
  10. data/lib/nuvado/backend/authenticated_resource.rb +25 -0
  11. data/lib/nuvado/backend/basic_resource.rb +12 -0
  12. data/lib/nuvado/backend/build.rb +7 -0
  13. data/lib/nuvado/backend/git.rb +23 -0
  14. data/lib/nuvado/backend/key.rb +9 -0
  15. data/lib/nuvado/backend/local_key.rb +50 -0
  16. data/lib/nuvado/backend/session.rb +6 -0
  17. data/lib/nuvado/backend/token_store.rb +26 -0
  18. data/lib/nuvado/backend/user.rb +6 -0
  19. data/lib/nuvado/backend.rb +15 -0
  20. data/lib/nuvado/base_command.rb +41 -0
  21. data/lib/nuvado/exceptions.rb +17 -0
  22. data/lib/nuvado/generate.rb +39 -0
  23. data/lib/nuvado/keys.rb +57 -0
  24. data/lib/nuvado/nuvado.rb +33 -0
  25. data/lib/nuvado/os.rb +22 -0
  26. data/lib/nuvado/templates/empty_project/%product_name%/%product_name%-Info.plist.tt +45 -0
  27. data/lib/nuvado/templates/empty_project/%product_name%/%product_name%-Prefix.pch.tt +14 -0
  28. data/lib/nuvado/templates/empty_project/%product_name%/AppDelegate.h.tt +15 -0
  29. data/lib/nuvado/templates/empty_project/%product_name%/AppDelegate.m.tt +49 -0
  30. data/lib/nuvado/templates/empty_project/%product_name%/Default-568h@2x.png +0 -0
  31. data/lib/nuvado/templates/empty_project/%product_name%/Default.png +0 -0
  32. data/lib/nuvado/templates/empty_project/%product_name%/Default@2x.png +0 -0
  33. data/lib/nuvado/templates/empty_project/%product_name%/en.lproj/InfoPlist.strings +2 -0
  34. data/lib/nuvado/templates/empty_project/%product_name%/main.m.tt +18 -0
  35. data/lib/nuvado/templates/empty_project/%product_name%.xcodeproj/project.pbxproj.tt +452 -0
  36. data/lib/nuvado/templates/empty_project/%product_name%.xcodeproj/project.xcworkspace/contents.xcworkspacedata.tt +7 -0
  37. data/lib/nuvado/templates/empty_project/%product_name%Tests/%product_name%Tests-Info.plist.tt +22 -0
  38. data/lib/nuvado/templates/empty_project/%product_name%Tests/%product_name%Tests.h.tt +13 -0
  39. data/lib/nuvado/templates/empty_project/%product_name%Tests/%product_name%Tests.m.tt +32 -0
  40. data/lib/nuvado/templates/empty_project/%product_name%Tests/en.lproj/InfoPlist.strings +2 -0
  41. data/lib/nuvado/version.rb +3 -0
  42. data/lib/nuvado.rb +9 -0
  43. data/nuvado.gemspec +35 -0
  44. data/post_install.sh +2 -0
  45. data/test/apps_test.rb +107 -0
  46. data/test/backend_local_key_test.rb +46 -0
  47. data/test/keys_test.rb +102 -0
  48. data/test/login_test.rb +25 -0
  49. data/test/ssh/jmendoza.pub +1 -0
  50. data/test/ssh/kramos.pub +1 -0
  51. data/test/test_helper.rb +24 -0
  52. metadata +272 -0
@@ -0,0 +1,32 @@
1
+ //
2
+ // <%= product_name %>Tests.m
3
+ // <%= product_name %>Tests
4
+ //
5
+ // Created by Nuvado on <%= Date.today.to_s %>.
6
+ // Copyright (c) 2013 <%= organization_name %>. All rights reserved.
7
+ //
8
+
9
+ #import "<%= product_name %>Tests.h"
10
+
11
+ @implementation <%= product_name %>Tests
12
+
13
+ - (void)setUp
14
+ {
15
+ [super setUp];
16
+
17
+ // Set-up code here.
18
+ }
19
+
20
+ - (void)tearDown
21
+ {
22
+ // Tear-down code here.
23
+
24
+ [super tearDown];
25
+ }
26
+
27
+ - (void)testExample
28
+ {
29
+ STFail(@"Unit tests are not implemented yet in <%= product_name %>Tests");
30
+ }
31
+
32
+ @end
@@ -0,0 +1,2 @@
1
+ /* Localized versions of Info.plist keys */
2
+
@@ -0,0 +1,3 @@
1
+ module Nuvado
2
+ VERSION = "1.0.0.rc1"
3
+ end
data/lib/nuvado.rb ADDED
@@ -0,0 +1,9 @@
1
+ require "nuvado/version"
2
+ require "nuvado/os"
3
+ require "nuvado/exceptions"
4
+ require "nuvado/backend"
5
+ require "nuvado/nuvado"
6
+
7
+ module Nuvado
8
+ # Your code goes here...
9
+ end
data/nuvado.gemspec ADDED
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'nuvado/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "nuvado"
8
+ spec.version = Nuvado::VERSION
9
+ spec.authors = ["robertomiranda", "lacides"]
10
+ spec.email = ["rjmaltamar@gmail.com", "lcharris89@gmail.com"]
11
+ spec.description = %q{Client library and command-line tool to deploy and manage apps on Nuvado.io}
12
+ spec.summary = %q{Client library and CLI to deploy apps on Nuvado.io}
13
+ spec.homepage = "http://nuvado.io"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.3"
23
+ spec.add_development_dependency "rake"
24
+ spec.add_development_dependency 'minitest', "~> 4.2"
25
+ spec.add_development_dependency 'mocha'
26
+ spec.add_development_dependency 'webmock'
27
+ spec.add_development_dependency 'pry'
28
+
29
+ spec.add_dependency "activeresource", "~> 4.0.0"
30
+ spec.add_dependency "highline"
31
+ spec.add_dependency "netrc"
32
+ spec.add_dependency "thor"
33
+ spec.add_dependency "uuid"
34
+ spec.add_dependency "json"
35
+ end
data/post_install.sh ADDED
@@ -0,0 +1,2 @@
1
+ #!/bin/sh
2
+ gem install nuvado
data/test/apps_test.rb ADDED
@@ -0,0 +1,107 @@
1
+ require 'test_helper'
2
+
3
+ class TestApps < MiniTest::Unit::TestCase
4
+ # nuvado apps create superduperappname
5
+ def test_create_without_saved_token_raises_error
6
+ stub_token_store
7
+ assert_raises Nuvado::AuthParamsNotSet do
8
+ Nuvado::Apps.start(["create", "superduperappname"])
9
+ end
10
+ end
11
+
12
+ # nuvado apps create superduperappname
13
+ def test_create_with_saved_token_configures_active_resource
14
+ stub_stdio
15
+ stub_successful_app_creation
16
+ Nuvado::Apps.start(["create", "superduperappname"])
17
+ assert_equal "Basic VEhJU0lTQUZBS0VUT0tFTg==", Nuvado::Backend::AuthenticatedResource.headers['Authorization']
18
+ end
19
+
20
+ # nuvado apps create superduperappname
21
+ def test_create_creates_app
22
+ stub_stdio
23
+ stub_successful_app_creation
24
+ app = Nuvado::Apps.start(["create", "superduperappname"])
25
+ assert app.persisted?
26
+ assert_equal "superduperappname", app.name
27
+ @output.rewind
28
+ assert_equal ["superduperappnameremote\n"], @output.readlines
29
+ end
30
+
31
+ # nuvado apps list
32
+ def test_list_lists_users_apps_names
33
+ stub_stdio
34
+ stub_apps_index
35
+ Nuvado::Apps.start(["list"])
36
+ @output.rewind
37
+ assert_equal ["super\n","duper\n"], @output.readlines
38
+ end
39
+
40
+ # nuvado apps delete -n afakeappname
41
+ def test_delete_not_existant_app_raises_error
42
+ stub_apps_index
43
+ assert_raises Nuvado::SystemExitException do
44
+ Nuvado::Apps.start(["delete", "afakeappname"])
45
+ end
46
+ end
47
+
48
+ # nuvado apps delete -n apps
49
+ def test_delete_not_existant_app_deletes_app
50
+ stub_apps_index(["a", "fake", "list", "of", "apps"])
51
+ stub_request :delete, %r{/api/v1/apps/5.json}
52
+ Nuvado::Apps.start(["delete", "apps"])
53
+ assert_requested :delete, %r{/api/v1/apps/5.json}
54
+ end
55
+
56
+ # nuvado apps build_status duper
57
+ def test_build_status
58
+ stub_stdio
59
+ stubbed_apps = stub_apps_index(["super", "duper"])
60
+ stub_builds_index(stubbed_apps)
61
+
62
+ Nuvado::Apps.start(["build_status", "duper"])
63
+ @output.rewind
64
+ assert_equal ["2 - creation time - finished\n"], @output.readlines
65
+ end
66
+
67
+ # nuvado apps build duper
68
+ def test_build
69
+ stub_stdio
70
+ stubbed_apps = stub_apps_index(["super", "duper"])
71
+ stub_successful_app_build_enqueue(stubbed_apps.last[:id])
72
+
73
+ build = Nuvado::Apps.start(["build", "duper"])
74
+ @output.rewind
75
+
76
+ assert build.persisted?
77
+ assert_equal ["Build Queued with the job id 1\n"], @output.readlines
78
+ end
79
+
80
+ private
81
+
82
+ def stub_apps_index(names = ["super", "duper"])
83
+ stub_token_store("THISISAFAKETOKEN")
84
+ app_attributes = {:apps => names.each_with_index.map{|name, id| {:name => name, :id => id + 1, :remote => "#{name}remote"}}}
85
+ stub_request(:get, %r{/api/v1/apps.json}).to_return(:body => app_attributes.to_json)
86
+ app_attributes[:apps]
87
+ end
88
+
89
+ def stub_builds_index(apps)
90
+ apps.each_with_index do |app, index|
91
+ build_attributes = {:builds => [{:id => index + 1, :app_id => app[:id], :created_at => "creation time", :status => "finished"}]}
92
+ stub_request(:get, %r{/api/v1/apps/#{app[:id]}/builds.json}).to_return(:body => build_attributes.to_json)
93
+ end
94
+ end
95
+
96
+ def stub_successful_app_creation(name = 'superduperappname')
97
+ stub_token_store("THISISAFAKETOKEN")
98
+ app_attributes = {:app => {:name => name, :id => 1, :remote => "#{name}remote"}}.to_json
99
+ stub_request(:post, %r{/api/v1/apps.json}).to_return(:body => app_attributes)
100
+ end
101
+
102
+ def stub_successful_app_build_enqueue(app_id)
103
+ stub_token_store("THISISAFAKETOKEN")
104
+ build_attributes = {:build => {:app_id => app_id, :id => 1}}.to_json
105
+ stub_request(:post, %r{/api/v1/apps/#{app_id}/builds.json}).to_return(:body => build_attributes)
106
+ end
107
+ end
@@ -0,0 +1,46 @@
1
+ require 'test_helper'
2
+
3
+ class TestBackendLocalKeyTest < MiniTest::Unit::TestCase
4
+ KRAMOS_KEY = <<KRAMOS_KEY
5
+ ssh-rsa wr5nIAGausTqiNhOT00B91x3Yd98qhoJe0Gd6f1eSkzPKdSADFESfiqsVOJrtmTsmoP79ZQKVpZxzF75r59LDmTVd9lxHmrvs30iYxJgWhM8QpbDEL7KrPWz9icb3kxVURXTVzSQSyT2zJ0tCi0xGP3g7TJw0XkZpzVjGdTTgUodN0H4xsTJfBZYHkJRG449u9R9awIx4V47x5oNiddAVlYvjQU4gULXwkCZC8Ho0pGoo7xZ2XYW4BWNPjrl24bXH7hVf6lJLy40ZxRhjnMsVwWxBS5tKMBNu9G8m3xkDLbdf93GI7tfNIfAdqzLvEA0V4oU95UO0O4juxtjr28KGis6ttdEjgGgTzdHICOfSdjMEMFEWxMR kramos@demimbu.info
6
+ KRAMOS_KEY
7
+
8
+ def test_get_all_keys
9
+ assert_equal 2, Nuvado::Backend::LocalKey.all.count
10
+ end
11
+
12
+ def test_get_all_keys_filenames
13
+ assert_equal ["jmendoza.pub", "kramos.pub"], Nuvado::Backend::LocalKey.all.map(&:filename)
14
+ end
15
+
16
+ def test_get_keys_content
17
+ key = Nuvado::Backend::LocalKey.all.last
18
+ assert_equal KRAMOS_KEY, key.blob
19
+ end
20
+
21
+ def test_find_by_name_finds
22
+ key = Nuvado::Backend::LocalKey.find_by_name("kramos.pub")
23
+ assert_equal "kramos.pub", key.filename
24
+ assert_equal KRAMOS_KEY, key.blob
25
+ end
26
+
27
+ def test_find_by_name_doesnt_find
28
+ assert_nil Nuvado::Backend::LocalKey.find_by_name("fakename.pub")
29
+ end
30
+
31
+ def test_generate_existing_key_raises_error
32
+ assert_raises Nuvado::SystemExitException do
33
+ Nuvado::Backend::LocalKey.generate("kramos")
34
+ end
35
+ end
36
+
37
+ def test_generate_new_key_creates_file
38
+ key = Nuvado::Backend::LocalKey.generate("gollum")
39
+ assert_equal "gollum.pub", key.filename
40
+ key_parts = key.blob.split
41
+ assert_equal 3, key_parts.length
42
+ assert "ssh-rsa", key_parts.first
43
+ File.delete key.filepath
44
+ File.delete key.filepath.chomp(".pub")
45
+ end
46
+ end
data/test/keys_test.rb ADDED
@@ -0,0 +1,102 @@
1
+ require 'test_helper'
2
+
3
+ class TestKeys < MiniTest::Unit::TestCase
4
+ # nuvado keys list --source local
5
+ def test_list_local_lists_local_ssh_keys
6
+ stub_stdio
7
+ Nuvado::Keys.start(["list", "--source", "local"])
8
+ @output.rewind
9
+ assert_equal ["jmendoza.pub\n","kramos.pub\n"], @output.readlines
10
+ end
11
+
12
+ # nuvado keys list --source remote
13
+ def test_list_remote_lists_remote_ssh_keys
14
+ stub_stdio
15
+ stub_keys_index
16
+ Nuvado::Keys.start(["list", "--source", "remote"])
17
+ @output.rewind
18
+ assert_equal ["laptop\n","desktop\n"], @output.readlines
19
+ end
20
+
21
+ # nuvado keys add laptop
22
+ def test_add_without_local_ssh_keys_dont_want_to_create_one
23
+ stub_stdio
24
+ stub_keys_index
25
+ Nuvado::Backend::LocalKey.stubs(:all).returns []
26
+ @input << "n" << "\n"
27
+ @input.rewind
28
+ Nuvado::Keys.start(["add", "laptop"])
29
+ @output.rewind
30
+ assert_equal "Could not find a existing public key. Do you want me to create one? [Yn]\n", @output.readline
31
+ assert_equal "Ok, remember that you'll need one if you want to upload code\n", @output.readline
32
+ end
33
+
34
+ # nuvado keys add aptop
35
+ def test_add_without_local_ssh_keys_creates_one
36
+ expected_private_key = File.join(Nuvado::KEY_FOLDER, 'id_rsa')
37
+ expected_public_key = "#{expected_private_key}.pub"
38
+
39
+ stub_successful_key_creation
40
+ stub_stdio
41
+
42
+ Nuvado::Backend::LocalKey.stubs(:all).returns []
43
+ @input << "Y" << "\n"
44
+ @input << "laptop" << "\n"
45
+ @input.rewind
46
+ Nuvado::Keys.start(["add", "laptop"])
47
+ @output.rewind
48
+
49
+ assert_equal "Could not find a existing public key. Do you want me to create one? [Yn]\n", @output.readline
50
+
51
+ assert File.exist?(expected_private_key), "Private key was not created"
52
+ assert File.exist?(expected_public_key), "Public key was not created"
53
+
54
+ key_attributes = {:key => {:title => "laptop", :content => File.read(expected_public_key)}}
55
+ assert_requested :post, %r{/api/v1/keys.json}, :body => key_attributes
56
+ ensure
57
+ File.delete(expected_private_key)
58
+ File.delete(expected_public_key)
59
+ end
60
+
61
+ # nuvado keys add laptop
62
+ def test_add_finds_one_local_ssh_key
63
+ stub_successful_key_creation
64
+ stub_stdio
65
+ Nuvado::Backend::LocalKey.stubs(:all_filepaths).returns ["ssh/kramos.pub"]
66
+ Nuvado::Keys.start(["add", "laptop"])
67
+ @output.rewind
68
+ assert_equal "Found a existing key: ssh/kramos.pub\n", @output.readline
69
+
70
+ key_attributes = {:key => {:title => "laptop", :content => File.read("ssh/kramos.pub")}}
71
+ assert_requested :post, %r{/api/v1/keys.json}, :body => key_attributes
72
+ end
73
+
74
+ # nuvado keys add laptop
75
+ def test_add_finds_many_local_sshkeys
76
+ stub_successful_key_creation
77
+ stub_stdio
78
+ @input << "1" << "\n"
79
+ @input.rewind
80
+ command = Nuvado::Keys.start(["add", "laptop"])
81
+ @output.rewind
82
+ assert_equal "Found these keys:\n", @output.readline
83
+ assert_equal "1. jmendoza.pub\n", @output.readline
84
+ assert_equal "2. kramos.pub\n", @output.readline
85
+ assert_equal "Please choose the one you want to use:\n", @output.readline
86
+
87
+ key_attributes = {:key => {:title => "laptop", :content => File.read("ssh/jmendoza.pub")}}
88
+ assert_requested :post, %r{/api/v1/keys.json}, :body => key_attributes
89
+ end
90
+
91
+ private
92
+ def stub_successful_key_creation
93
+ stub_token_store("THISISAFAKETOKEN")
94
+ stub_request(:post, %r{/api/v1/keys.json})
95
+ end
96
+
97
+ def stub_keys_index(titles = ["laptop", "desktop"])
98
+ stub_token_store("THISISAFAKETOKEN")
99
+ key_attributes = {:keys => titles.each_with_index.map{|title, id| {:title => title, :id => id + 1}}}.to_json
100
+ stub_request(:get, %r{/api/v1/keys.json}).to_return(:body => key_attributes)
101
+ end
102
+ end
@@ -0,0 +1,25 @@
1
+ require 'test_helper'
2
+
3
+ class TestLogin < MiniTest::Unit::TestCase
4
+ def setup
5
+ stub_token_store
6
+ end
7
+
8
+ # nuvado login
9
+ def test_run_sucessful_login_returns_token
10
+ mock_sucessful_login
11
+ Nuvado::Backend::TokenStore.expects(:write_token).with("auser", "sometoken")
12
+ Nuvado::Keys.expects(:start).with(["add"])
13
+ result = Nuvado::Nuvado.start(["login"])
14
+ assert_equal "sometoken", result
15
+ end
16
+
17
+ private
18
+ def mock_sucessful_login(token = "sometoken", user = "auser", password = "apass")
19
+ stub_stdio
20
+ @input << user << "\n"
21
+ @input << password << "\n"
22
+ @input.rewind
23
+ Nuvado::Backend::Session.stubs(:create).returns mock(:authentication_token => token)
24
+ end
25
+ end
@@ -0,0 +1 @@
1
+ ssh-rsa lyUzyDBZFnX0IPfXRx99A72TYbZIcw9vPGUqu8eec6Ffl66CQITCRLbbQvQwPzx9hidrwUnpFrYGkLgz4LKcCCSxkL43PSiBXWRc7DNIx2NCX4yxyq8KTtFTuJgmOYQdAW3DmYh7JQQD32xTRRD4DIAZ4ge4hzypRVSthzdqxxSFtpGiPNgCye7o6kOx7KH1OUh5gDjAQoLNu4Vwgs67oZdkACB0SYM1q8exHScl8bvqhnVHNJcIEZhgMT6OYGLfWRH6H3hhPMAsTLyzOhUkuCV1t1CoAobAI3Prv9eGnak1PRHFCdRuzLZFD4DDVW7NiDA7WuCkiNGyYLja7wVNONafNlu0PE6PrkHh0O81BXmPynKyCyrd jmendoza@pixoboo.mil
@@ -0,0 +1 @@
1
+ ssh-rsa wr5nIAGausTqiNhOT00B91x3Yd98qhoJe0Gd6f1eSkzPKdSADFESfiqsVOJrtmTsmoP79ZQKVpZxzF75r59LDmTVd9lxHmrvs30iYxJgWhM8QpbDEL7KrPWz9icb3kxVURXTVzSQSyT2zJ0tCi0xGP3g7TJw0XkZpzVjGdTTgUodN0H4xsTJfBZYHkJRG449u9R9awIx4V47x5oNiddAVlYvjQU4gULXwkCZC8Ho0pGoo7xZ2XYW4BWNPjrl24bXH7hVf6lJLy40ZxRhjnMsVwWxBS5tKMBNu9G8m3xkDLbdf93GI7tfNIfAdqzLvEA0V4oU95UO0O4juxtjr28KGis6ttdEjgGgTzdHICOfSdjMEMFEWxMR kramos@demimbu.info
@@ -0,0 +1,24 @@
1
+ require 'minitest/autorun'
2
+ require 'nuvado'
3
+ require 'mocha/setup'
4
+ require 'webmock/minitest'
5
+
6
+ class MiniTest::Unit::TestCase
7
+
8
+ private
9
+ def stub_token_store(token = nil)
10
+ Nuvado::Backend::TokenStore.stubs(:read_token).returns token
11
+ Nuvado::Backend::TokenStore.stubs(:write_token)
12
+ end
13
+
14
+ def stub_stdio
15
+ @input = StringIO.new
16
+ @output = StringIO.new
17
+ @terminal = HighLine.new @input, @output
18
+ HighLine.stubs(:new).returns @terminal
19
+ end
20
+ end
21
+
22
+ silence_warnings do
23
+ Nuvado::KEY_FOLDER = 'ssh'
24
+ end
metadata ADDED
@@ -0,0 +1,272 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nuvado
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.rc1
5
+ platform: ruby
6
+ authors:
7
+ - robertomiranda
8
+ - lacides
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-07-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ~>
19
+ - !ruby/object:Gem::Version
20
+ version: '1.3'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: '1.3'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: minitest
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ~>
47
+ - !ruby/object:Gem::Version
48
+ version: '4.2'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: '4.2'
56
+ - !ruby/object:Gem::Dependency
57
+ name: mocha
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: webmock
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: pry
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: activeresource
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ~>
103
+ - !ruby/object:Gem::Version
104
+ version: 4.0.0
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ~>
110
+ - !ruby/object:Gem::Version
111
+ version: 4.0.0
112
+ - !ruby/object:Gem::Dependency
113
+ name: highline
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :runtime
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: netrc
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - '>='
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :runtime
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ - !ruby/object:Gem::Dependency
141
+ name: thor
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - '>='
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ type: :runtime
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ - !ruby/object:Gem::Dependency
155
+ name: uuid
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - '>='
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ type: :runtime
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - '>='
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ - !ruby/object:Gem::Dependency
169
+ name: json
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - '>='
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ type: :runtime
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - '>='
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ description: Client library and command-line tool to deploy and manage apps on Nuvado.io
183
+ email:
184
+ - rjmaltamar@gmail.com
185
+ - lcharris89@gmail.com
186
+ executables:
187
+ - nuvado
188
+ extensions: []
189
+ extra_rdoc_files: []
190
+ files:
191
+ - .gitignore
192
+ - Gemfile
193
+ - LICENSE.txt
194
+ - README.md
195
+ - Rakefile
196
+ - bin/nuvado
197
+ - lib/nuvado.rb
198
+ - lib/nuvado/apps.rb
199
+ - lib/nuvado/backend.rb
200
+ - lib/nuvado/backend/app.rb
201
+ - lib/nuvado/backend/authenticated_resource.rb
202
+ - lib/nuvado/backend/basic_resource.rb
203
+ - lib/nuvado/backend/build.rb
204
+ - lib/nuvado/backend/git.rb
205
+ - lib/nuvado/backend/key.rb
206
+ - lib/nuvado/backend/local_key.rb
207
+ - lib/nuvado/backend/session.rb
208
+ - lib/nuvado/backend/token_store.rb
209
+ - lib/nuvado/backend/user.rb
210
+ - lib/nuvado/base_command.rb
211
+ - lib/nuvado/exceptions.rb
212
+ - lib/nuvado/generate.rb
213
+ - lib/nuvado/keys.rb
214
+ - lib/nuvado/nuvado.rb
215
+ - lib/nuvado/os.rb
216
+ - lib/nuvado/templates/empty_project/%product_name%.xcodeproj/project.pbxproj.tt
217
+ - lib/nuvado/templates/empty_project/%product_name%.xcodeproj/project.xcworkspace/contents.xcworkspacedata.tt
218
+ - lib/nuvado/templates/empty_project/%product_name%/%product_name%-Info.plist.tt
219
+ - lib/nuvado/templates/empty_project/%product_name%/%product_name%-Prefix.pch.tt
220
+ - lib/nuvado/templates/empty_project/%product_name%/AppDelegate.h.tt
221
+ - lib/nuvado/templates/empty_project/%product_name%/AppDelegate.m.tt
222
+ - lib/nuvado/templates/empty_project/%product_name%/Default-568h@2x.png
223
+ - lib/nuvado/templates/empty_project/%product_name%/Default.png
224
+ - lib/nuvado/templates/empty_project/%product_name%/Default@2x.png
225
+ - lib/nuvado/templates/empty_project/%product_name%/en.lproj/InfoPlist.strings
226
+ - lib/nuvado/templates/empty_project/%product_name%/main.m.tt
227
+ - lib/nuvado/templates/empty_project/%product_name%Tests/%product_name%Tests-Info.plist.tt
228
+ - lib/nuvado/templates/empty_project/%product_name%Tests/%product_name%Tests.h.tt
229
+ - lib/nuvado/templates/empty_project/%product_name%Tests/%product_name%Tests.m.tt
230
+ - lib/nuvado/templates/empty_project/%product_name%Tests/en.lproj/InfoPlist.strings
231
+ - lib/nuvado/version.rb
232
+ - nuvado.gemspec
233
+ - post_install.sh
234
+ - test/apps_test.rb
235
+ - test/backend_local_key_test.rb
236
+ - test/keys_test.rb
237
+ - test/login_test.rb
238
+ - test/ssh/jmendoza.pub
239
+ - test/ssh/kramos.pub
240
+ - test/test_helper.rb
241
+ homepage: http://nuvado.io
242
+ licenses:
243
+ - MIT
244
+ metadata: {}
245
+ post_install_message:
246
+ rdoc_options: []
247
+ require_paths:
248
+ - lib
249
+ required_ruby_version: !ruby/object:Gem::Requirement
250
+ requirements:
251
+ - - '>='
252
+ - !ruby/object:Gem::Version
253
+ version: '0'
254
+ required_rubygems_version: !ruby/object:Gem::Requirement
255
+ requirements:
256
+ - - '>'
257
+ - !ruby/object:Gem::Version
258
+ version: 1.3.1
259
+ requirements: []
260
+ rubyforge_project:
261
+ rubygems_version: 2.0.2
262
+ signing_key:
263
+ specification_version: 4
264
+ summary: Client library and CLI to deploy apps on Nuvado.io
265
+ test_files:
266
+ - test/apps_test.rb
267
+ - test/backend_local_key_test.rb
268
+ - test/keys_test.rb
269
+ - test/login_test.rb
270
+ - test/ssh/jmendoza.pub
271
+ - test/ssh/kramos.pub
272
+ - test/test_helper.rb