pantry 0.0.0 → 0.1.0

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 (133) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +9 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +19 -0
  5. data/Gemfile +15 -0
  6. data/Guardfile +16 -0
  7. data/LICENSE +20 -0
  8. data/README.md +53 -0
  9. data/Rakefile +18 -0
  10. data/Vagrantfile +86 -0
  11. data/bin/pantry +11 -0
  12. data/bin/pantry-client +38 -0
  13. data/bin/pantry-server +33 -0
  14. data/dist/client.yml +79 -0
  15. data/dist/server.yml +56 -0
  16. data/dist/upstart/pantry-client.conf +12 -0
  17. data/dist/upstart/pantry-server.conf +12 -0
  18. data/doc/message_packet.dot +19 -0
  19. data/doc/message_packet.dot.png +0 -0
  20. data/doc/network_topology.dot +42 -0
  21. data/doc/network_topology.dot.png +0 -0
  22. data/lib/celluloid_zmq_patches.rb +16 -0
  23. data/lib/opt_parse_plus.rb +184 -0
  24. data/lib/pantry.rb +197 -0
  25. data/lib/pantry/cli.rb +154 -0
  26. data/lib/pantry/client.rb +131 -0
  27. data/lib/pantry/client_info.rb +34 -0
  28. data/lib/pantry/client_registry.rb +104 -0
  29. data/lib/pantry/command.rb +194 -0
  30. data/lib/pantry/command_handler.rb +53 -0
  31. data/lib/pantry/command_line.rb +115 -0
  32. data/lib/pantry/commands/create_client.rb +30 -0
  33. data/lib/pantry/commands/download_directory.rb +35 -0
  34. data/lib/pantry/commands/echo.rb +32 -0
  35. data/lib/pantry/commands/edit_application.rb +60 -0
  36. data/lib/pantry/commands/register_client.rb +38 -0
  37. data/lib/pantry/commands/status.rb +78 -0
  38. data/lib/pantry/commands/sync_directory.rb +50 -0
  39. data/lib/pantry/commands/update_application.rb +45 -0
  40. data/lib/pantry/commands/upload_file.rb +68 -0
  41. data/lib/pantry/communication.rb +20 -0
  42. data/lib/pantry/communication/client.rb +75 -0
  43. data/lib/pantry/communication/client_filter.rb +117 -0
  44. data/lib/pantry/communication/file_service.rb +125 -0
  45. data/lib/pantry/communication/file_service/file_progress.rb +164 -0
  46. data/lib/pantry/communication/file_service/receive_file.rb +97 -0
  47. data/lib/pantry/communication/file_service/send_file.rb +74 -0
  48. data/lib/pantry/communication/publish_socket.rb +20 -0
  49. data/lib/pantry/communication/reading_socket.rb +89 -0
  50. data/lib/pantry/communication/receive_socket.rb +23 -0
  51. data/lib/pantry/communication/security.rb +44 -0
  52. data/lib/pantry/communication/security/authentication.rb +98 -0
  53. data/lib/pantry/communication/security/curve_key_store.rb +120 -0
  54. data/lib/pantry/communication/security/curve_security.rb +70 -0
  55. data/lib/pantry/communication/security/null_security.rb +32 -0
  56. data/lib/pantry/communication/send_socket.rb +19 -0
  57. data/lib/pantry/communication/serialize_message.rb +84 -0
  58. data/lib/pantry/communication/server.rb +97 -0
  59. data/lib/pantry/communication/subscribe_socket.rb +33 -0
  60. data/lib/pantry/communication/wait_list.rb +45 -0
  61. data/lib/pantry/communication/writing_socket.rb +46 -0
  62. data/lib/pantry/config.rb +182 -0
  63. data/lib/pantry/file_editor.rb +67 -0
  64. data/lib/pantry/logger.rb +78 -0
  65. data/lib/pantry/message.rb +134 -0
  66. data/lib/pantry/multi_command.rb +36 -0
  67. data/lib/pantry/server.rb +132 -0
  68. data/lib/pantry/test/acceptance.rb +83 -0
  69. data/lib/pantry/test/support/fake_fs.rb +31 -0
  70. data/lib/pantry/test/support/matchers.rb +13 -0
  71. data/lib/pantry/test/support/minitest.rb +13 -0
  72. data/lib/pantry/test/support/mock_ui.rb +23 -0
  73. data/lib/pantry/test/unit.rb +13 -0
  74. data/lib/pantry/ui.rb +68 -0
  75. data/lib/pantry/version.rb +3 -0
  76. data/pantry.gemspec +40 -0
  77. data/test/acceptance/cli/error_handling_test.rb +7 -0
  78. data/test/acceptance/cli/execute_command_on_clients_test.rb +32 -0
  79. data/test/acceptance/cli/request_info_from_server_test.rb +44 -0
  80. data/test/acceptance/communication/client_requests_info_from_server_test.rb +28 -0
  81. data/test/acceptance/communication/heartbeat_test.rb +19 -0
  82. data/test/acceptance/communication/pub_sub_communication_test.rb +53 -0
  83. data/test/acceptance/communication/security_test.rb +117 -0
  84. data/test/acceptance/communication/server_requests_info_from_client_test.rb +41 -0
  85. data/test/acceptance/test_helper.rb +25 -0
  86. data/test/fixtures/config.yml +22 -0
  87. data/test/fixtures/empty.yml +2 -0
  88. data/test/fixtures/file_to_upload +3 -0
  89. data/test/root_dir/.gitkeep +0 -0
  90. data/test/unit/cli_test.rb +173 -0
  91. data/test/unit/client_registry_test.rb +61 -0
  92. data/test/unit/client_test.rb +128 -0
  93. data/test/unit/command_handler_test.rb +79 -0
  94. data/test/unit/command_line_test.rb +5 -0
  95. data/test/unit/command_test.rb +206 -0
  96. data/test/unit/commands/create_client_test.rb +25 -0
  97. data/test/unit/commands/download_directory_test.rb +58 -0
  98. data/test/unit/commands/echo_test.rb +22 -0
  99. data/test/unit/commands/edit_application_test.rb +84 -0
  100. data/test/unit/commands/register_client_test.rb +41 -0
  101. data/test/unit/commands/status_test.rb +81 -0
  102. data/test/unit/commands/sync_directory_test.rb +75 -0
  103. data/test/unit/commands/update_application_test.rb +35 -0
  104. data/test/unit/commands/upload_file_test.rb +51 -0
  105. data/test/unit/communication/client_filter_test.rb +262 -0
  106. data/test/unit/communication/client_test.rb +99 -0
  107. data/test/unit/communication/file_service/receive_file_test.rb +214 -0
  108. data/test/unit/communication/file_service/send_file_test.rb +110 -0
  109. data/test/unit/communication/file_service_test.rb +56 -0
  110. data/test/unit/communication/publish_socket_test.rb +19 -0
  111. data/test/unit/communication/reading_socket_test.rb +110 -0
  112. data/test/unit/communication/receive_socket_test.rb +20 -0
  113. data/test/unit/communication/security/authentication_test.rb +97 -0
  114. data/test/unit/communication/security/curve_key_store_test.rb +110 -0
  115. data/test/unit/communication/security/curve_security_test.rb +44 -0
  116. data/test/unit/communication/security/null_security_test.rb +15 -0
  117. data/test/unit/communication/security_test.rb +49 -0
  118. data/test/unit/communication/send_socket_test.rb +19 -0
  119. data/test/unit/communication/serialize_message_test.rb +128 -0
  120. data/test/unit/communication/server_test.rb +106 -0
  121. data/test/unit/communication/subscribe_socket_test.rb +46 -0
  122. data/test/unit/communication/wait_list_test.rb +60 -0
  123. data/test/unit/communication/writing_socket_test.rb +46 -0
  124. data/test/unit/config_test.rb +150 -0
  125. data/test/unit/logger_test.rb +79 -0
  126. data/test/unit/message_test.rb +179 -0
  127. data/test/unit/multi_command_test.rb +45 -0
  128. data/test/unit/opt_parse_plus_test.rb +218 -0
  129. data/test/unit/pantry_test.rb +82 -0
  130. data/test/unit/server_test.rb +166 -0
  131. data/test/unit/test_helper.rb +25 -0
  132. data/test/unit/ui_test.rb +58 -0
  133. metadata +389 -13
@@ -0,0 +1,82 @@
1
+ require 'unit/test_helper'
2
+
3
+ describe Pantry do
4
+
5
+ class TestCommand < Pantry::Command
6
+ end
7
+
8
+ before do
9
+ Pantry.client_commands.clear
10
+ Pantry.server_commands.clear
11
+ end
12
+
13
+ describe ".root" do
14
+ it "wraps the root_dir in a Pathname" do
15
+ config = Pantry::Config.new
16
+ config.root_dir = "/path/start"
17
+
18
+ assert_equal Pathname.new("/path/start"), Pantry.root(config)
19
+ end
20
+ end
21
+
22
+ describe ".add_client_command" do
23
+ it "adds commands only for the client to handle" do
24
+ Pantry.add_client_command(TestCommand)
25
+
26
+ assert_equal [TestCommand], Pantry.client_commands
27
+ assert_equal [], Pantry.server_commands
28
+ assert_equal [TestCommand], Pantry.all_commands
29
+ end
30
+
31
+ it "errors if the given class is not a Pantry::Command" do
32
+ assert_raises(Pantry::InvalidCommandError) do
33
+ Pantry.add_client_command(Object)
34
+ end
35
+ end
36
+
37
+ it "errors if was given an object that isn't a Class" do
38
+ assert_raises(Pantry::InvalidCommandError) do
39
+ Pantry.add_client_command(Object.new)
40
+ end
41
+ end
42
+
43
+ it "warns if the given Command conflicts name-wise with an already registered command" do
44
+ Pantry.add_client_command(TestCommand)
45
+
46
+ assert_raises(Pantry::DuplicateCommandError) do
47
+ Pantry.add_client_command(TestCommand)
48
+ end
49
+ end
50
+ end
51
+
52
+ describe ".add_server_command" do
53
+ it "adds commands only for the server to handle" do
54
+ Pantry.add_server_command(TestCommand)
55
+
56
+ assert_equal [], Pantry.client_commands
57
+ assert_equal [TestCommand], Pantry.server_commands
58
+ assert_equal [TestCommand], Pantry.all_commands
59
+ end
60
+
61
+ it "errors if the given class is not a Pantry::Command" do
62
+ assert_raises(Pantry::InvalidCommandError) do
63
+ Pantry.add_server_command(Object)
64
+ end
65
+ end
66
+
67
+ it "errors if was given an object that isn't a Class" do
68
+ assert_raises(Pantry::InvalidCommandError) do
69
+ Pantry.add_server_command(Object.new)
70
+ end
71
+ end
72
+
73
+ it "warns if the given Command conflicts name-wise with an already registered command" do
74
+ Pantry.add_server_command(TestCommand)
75
+
76
+ assert_raises(Pantry::DuplicateCommandError) do
77
+ Pantry.add_server_command(TestCommand)
78
+ end
79
+ end
80
+ end
81
+
82
+ end
@@ -0,0 +1,166 @@
1
+ require 'unit/test_helper'
2
+
3
+ describe Pantry::Server do
4
+
5
+ class FakeNetworkStack
6
+ def initialize(listener)
7
+ end
8
+
9
+ def self.new_link(listener)
10
+ new(listener)
11
+ end
12
+ end
13
+
14
+ it "starts up the networking stack on run" do
15
+ FakeNetworkStack.any_instance.expects(:run)
16
+
17
+ server = Pantry::Server.new(FakeNetworkStack)
18
+ server.run
19
+ end
20
+
21
+ describe "Client Registry" do
22
+
23
+ it "can be given a Client to keep track of" do
24
+ server = Pantry::Server.new
25
+ client = Pantry::Client.new
26
+
27
+ server.register_client(client)
28
+
29
+ assert_equal [client], server.client_registry.all
30
+ end
31
+
32
+ it "can figure out what client sent a given message" do
33
+ server = Pantry::Server.new
34
+ c1 = Pantry::ClientInfo.new identity: "client1"
35
+ c2 = Pantry::ClientInfo.new identity: "client2"
36
+
37
+ server.register_client(c1)
38
+ server.register_client(c2)
39
+
40
+ message = Pantry::Message.new
41
+ message.from = "client1"
42
+
43
+ assert_equal c1, server.client_who_sent(message)
44
+ end
45
+
46
+ end
47
+
48
+ it "can publish messages to all clients" do
49
+ server = Pantry::Server.new(FakeNetworkStack)
50
+ message = Pantry::Message.new("test message")
51
+
52
+ FakeNetworkStack.any_instance.expects(:publish_message).with do |message|
53
+ message.to == ""
54
+ end
55
+
56
+ server.publish_message(message)
57
+ end
58
+
59
+ it "can publish messages to a filtered set of clients" do
60
+ server = Pantry::Server.new(FakeNetworkStack)
61
+ message = Pantry::Message.new("test message")
62
+ filter = Pantry::Communication::ClientFilter.new(roles: %w(db))
63
+
64
+ FakeNetworkStack.any_instance.expects(:publish_message).with do |message|
65
+ message.to == "db"
66
+ end
67
+
68
+ server.publish_message(message, filter)
69
+ end
70
+
71
+ it "can request info of a specific client" do
72
+ server = Pantry::Server.new(FakeNetworkStack)
73
+ client = Pantry::Client.new(identity: "client1")
74
+ message = Pantry::Message.new("test message")
75
+
76
+ FakeNetworkStack.any_instance.expects(:send_request).with do |message|
77
+ assert_equal "client1", message.to
78
+ end
79
+
80
+ server.send_request(client, message)
81
+
82
+ assert message.requires_response?, "Message should require a response from the receiver"
83
+ end
84
+
85
+ it "executes callbacks when a message matches" do
86
+ server = Pantry::Server.new
87
+
88
+ Pantry::CommandHandler.any_instance.stubs(:can_handle?).returns(true)
89
+ Pantry::CommandHandler.any_instance.expects(:process).with do |message|
90
+ message.type == "test_message"
91
+ end
92
+
93
+ server.receive_message(Pantry::Message.new("test_message"))
94
+ end
95
+
96
+ it "builds and sends a response message if message flagged as needing one" do
97
+ server = Pantry::Server.new(FakeNetworkStack)
98
+
99
+ message = Pantry::Message.new("test_message")
100
+ message.from = "client1"
101
+ message.requires_response!
102
+
103
+ Pantry::CommandHandler.any_instance.stubs(:can_handle?).returns(true)
104
+ Pantry::CommandHandler.any_instance.expects(:process).returns("A response message")
105
+
106
+ FakeNetworkStack.any_instance.expects(:publish_message).with do |response_message|
107
+ assert_equal "test_message", response_message.type
108
+ assert_equal message.from, response_message.to
109
+ assert_equal ["A response message"], response_message.body
110
+ end
111
+
112
+ server.receive_message(message)
113
+ end
114
+
115
+ it "keeps all object formatting of the response message" do
116
+ server = Pantry::Server.new(FakeNetworkStack)
117
+
118
+ message = Pantry::Message.new("test_message")
119
+ message.from = "client1"
120
+ message.requires_response!
121
+
122
+ Pantry::CommandHandler.any_instance.stubs(:can_handle?).returns(true)
123
+ Pantry::CommandHandler.any_instance.expects(:process).returns([%w(A response message)])
124
+
125
+ FakeNetworkStack.any_instance.expects(:publish_message).with do |response_message|
126
+ assert_equal "test_message", response_message.type
127
+ assert_equal message.from, response_message.to
128
+ assert_equal [["A", "response", "message"]], response_message.body
129
+ end
130
+
131
+ server.receive_message(message)
132
+ end
133
+
134
+ class ClientOnlyCommand < Pantry::Command
135
+ end
136
+
137
+ it "forwards an unhandleable command on to connected clients" do
138
+ Pantry.add_client_command(ClientOnlyCommand)
139
+ server = Pantry::Server.new(FakeNetworkStack)
140
+
141
+ message = Pantry::Message.new("ClientOnlyCommand")
142
+ message.from = "client1"
143
+ message.requires_response!
144
+
145
+ FakeNetworkStack.any_instance.expects(:forward_message).with(message)
146
+ FakeNetworkStack.any_instance.expects(:publish_message).with do |message|
147
+ message.to == "client1" && message.body == []
148
+ end
149
+
150
+ server.receive_message(message)
151
+ end
152
+
153
+ describe "Identity" do
154
+ it "can be given a specific identity" do
155
+ s = Pantry::Server.new
156
+ s.identity = "My Test Client"
157
+ assert_equal "My Test Client", s.identity
158
+ end
159
+
160
+ it "defaults to the hostname of the machine" do
161
+ s = Pantry::Server.new
162
+ assert_equal `hostname`.strip, s.identity
163
+ end
164
+ end
165
+
166
+ end
@@ -0,0 +1,25 @@
1
+ require 'pantry/test/unit'
2
+ gem 'mocha'
3
+ require 'mocha/mini_test'
4
+
5
+ # Swap these lines to turn on the logger in tests
6
+ Pantry.logger.disable!
7
+ #Pantry.config.log_level = :debug
8
+
9
+ class Minitest::Test
10
+ def setup
11
+ Pantry.config.root_dir = File.expand_path("../../root_dir", __FILE__)
12
+ clean_up_pantry_root
13
+ end
14
+
15
+ # Ensure Pantry.root is always clean for each test.
16
+ def clean_up_pantry_root
17
+ Dir["#{Pantry.root}/**/*"].each do |file|
18
+ FileUtils.rm_rf file
19
+ end
20
+ end
21
+
22
+ def fixture_path(file_path)
23
+ File.join(File.dirname(__FILE__), "..", "fixtures", file_path)
24
+ end
25
+ end
@@ -0,0 +1,58 @@
1
+ require 'unit/test_helper'
2
+
3
+ describe Pantry::UI do
4
+
5
+ mock_ui!
6
+
7
+ it "outputs messages to stdout" do
8
+ Pantry.ui.say("This is cool")
9
+ assert_equal "This is cool\n", stdout
10
+ end
11
+
12
+ it "outputs arrays as tables to stdout" do
13
+ Pantry.ui.list(%w(1 2 3))
14
+ assert_equal "1\n2\n3\n", stdout
15
+ end
16
+
17
+ it "asks a question, waits for keypress and comes back" do
18
+ stdin << "\n"
19
+ stdin.rewind
20
+
21
+ result = Pantry.ui.continue?("This is a message")
22
+
23
+ assert_match /This is a message/, stdout
24
+ assert result, "Default enter should have been a true message"
25
+ end
26
+
27
+ describe "Progress bar" do
28
+
29
+ it "allows starting a progress bar" do
30
+ Pantry.ui.progress_start(100)
31
+
32
+ assert_match /^Progress:/m, stdout
33
+ end
34
+
35
+ it "can increment the current progress bar" do
36
+ meter = Pantry.ui.progress_start(100)
37
+ Pantry.ui.progress_step(10)
38
+
39
+ assert_equal 10, meter.progress
40
+ end
41
+
42
+ it "handles increments past the progress bar's total" do
43
+ meter = Pantry.ui.progress_start(100)
44
+ Pantry.ui.progress_step(110)
45
+
46
+ assert_equal 100, meter.progress
47
+ end
48
+
49
+ it "finishes the current progress bar" do
50
+ meter = Pantry.ui.progress_start(100)
51
+ Pantry.ui.progress_finish
52
+
53
+ assert_equal 100, meter.progress
54
+ end
55
+
56
+ end
57
+
58
+ end
metadata CHANGED
@@ -1,24 +1,342 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pantry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
+ - Collective Idea
7
8
  - Jason Roelofs
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-10-15 00:00:00.000000000 Z
12
- dependencies: []
13
- description: ''
12
+ date: 2014-03-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: ffi-rzmq
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ~>
19
+ - !ruby/object:Gem::Version
20
+ version: '2.0'
21
+ - - '>='
22
+ - !ruby/object:Gem::Version
23
+ version: 2.0.0
24
+ type: :runtime
25
+ prerelease: false
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: '2.0'
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: 2.0.0
34
+ - !ruby/object:Gem::Dependency
35
+ name: celluloid
36
+ requirement: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '0.15'
41
+ - - '>='
42
+ - !ruby/object:Gem::Version
43
+ version: 0.15.0
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ~>
49
+ - !ruby/object:Gem::Version
50
+ version: '0.15'
51
+ - - '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 0.15.0
54
+ - !ruby/object:Gem::Dependency
55
+ name: celluloid-zmq
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ version: '0.15'
61
+ - - '>='
62
+ - !ruby/object:Gem::Version
63
+ version: 0.15.0
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ~>
69
+ - !ruby/object:Gem::Version
70
+ version: '0.15'
71
+ - - '>='
72
+ - !ruby/object:Gem::Version
73
+ version: 0.15.0
74
+ - !ruby/object:Gem::Dependency
75
+ name: highline
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ~>
79
+ - !ruby/object:Gem::Version
80
+ version: '1.6'
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: 1.6.21
84
+ type: :runtime
85
+ prerelease: false
86
+ version_requirements: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ~>
89
+ - !ruby/object:Gem::Version
90
+ version: '1.6'
91
+ - - '>='
92
+ - !ruby/object:Gem::Version
93
+ version: 1.6.21
94
+ - !ruby/object:Gem::Dependency
95
+ name: json
96
+ requirement: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ~>
99
+ - !ruby/object:Gem::Version
100
+ version: '1.8'
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: 1.8.1
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: '1.8'
111
+ - - '>='
112
+ - !ruby/object:Gem::Version
113
+ version: 1.8.1
114
+ - !ruby/object:Gem::Dependency
115
+ name: ruby-progressbar
116
+ requirement: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ~>
119
+ - !ruby/object:Gem::Version
120
+ version: '1.4'
121
+ - - '>='
122
+ - !ruby/object:Gem::Version
123
+ version: 1.4.2
124
+ type: :runtime
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ~>
129
+ - !ruby/object:Gem::Version
130
+ version: '1.4'
131
+ - - '>='
132
+ - !ruby/object:Gem::Version
133
+ version: 1.4.2
134
+ - !ruby/object:Gem::Dependency
135
+ name: safe_yaml
136
+ requirement: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ~>
139
+ - !ruby/object:Gem::Version
140
+ version: '1.0'
141
+ - - '>='
142
+ - !ruby/object:Gem::Version
143
+ version: 1.0.1
144
+ type: :runtime
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ~>
149
+ - !ruby/object:Gem::Version
150
+ version: '1.0'
151
+ - - '>='
152
+ - !ruby/object:Gem::Version
153
+ version: 1.0.1
154
+ - !ruby/object:Gem::Dependency
155
+ name: mocha
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ~>
159
+ - !ruby/object:Gem::Version
160
+ version: '1.0'
161
+ - - '>='
162
+ - !ruby/object:Gem::Version
163
+ version: 1.0.0
164
+ type: :development
165
+ prerelease: false
166
+ version_requirements: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ~>
169
+ - !ruby/object:Gem::Version
170
+ version: '1.0'
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: 1.0.0
174
+ - !ruby/object:Gem::Dependency
175
+ name: fakefs
176
+ requirement: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ~>
179
+ - !ruby/object:Gem::Version
180
+ version: '0.5'
181
+ - - '>='
182
+ - !ruby/object:Gem::Version
183
+ version: 0.5.1
184
+ type: :development
185
+ prerelease: false
186
+ version_requirements: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - ~>
189
+ - !ruby/object:Gem::Version
190
+ version: '0.5'
191
+ - - '>='
192
+ - !ruby/object:Gem::Version
193
+ version: 0.5.1
194
+ description: |2
195
+ Pantry is a framework that provides answers to common questions encoutered when setting up a DevOps, server configuration, or server provisioning pipeline.
14
196
  email:
197
+ - code@collectiveidea.com
15
198
  - jasongroelofs@gmail.com
16
- executables: []
199
+ executables:
200
+ - pantry-client
201
+ - pantry-server
202
+ - pantry
17
203
  extensions: []
18
204
  extra_rdoc_files: []
19
- files: []
20
- homepage: ''
21
- licenses: []
205
+ files:
206
+ - .gitignore
207
+ - .ruby-version
208
+ - .travis.yml
209
+ - Gemfile
210
+ - Guardfile
211
+ - LICENSE
212
+ - README.md
213
+ - Rakefile
214
+ - Vagrantfile
215
+ - bin/pantry
216
+ - bin/pantry-client
217
+ - bin/pantry-server
218
+ - dist/client.yml
219
+ - dist/server.yml
220
+ - dist/upstart/pantry-client.conf
221
+ - dist/upstart/pantry-server.conf
222
+ - doc/message_packet.dot
223
+ - doc/message_packet.dot.png
224
+ - doc/network_topology.dot
225
+ - doc/network_topology.dot.png
226
+ - lib/celluloid_zmq_patches.rb
227
+ - lib/opt_parse_plus.rb
228
+ - lib/pantry.rb
229
+ - lib/pantry/cli.rb
230
+ - lib/pantry/client.rb
231
+ - lib/pantry/client_info.rb
232
+ - lib/pantry/client_registry.rb
233
+ - lib/pantry/command.rb
234
+ - lib/pantry/command_handler.rb
235
+ - lib/pantry/command_line.rb
236
+ - lib/pantry/commands/create_client.rb
237
+ - lib/pantry/commands/download_directory.rb
238
+ - lib/pantry/commands/echo.rb
239
+ - lib/pantry/commands/edit_application.rb
240
+ - lib/pantry/commands/register_client.rb
241
+ - lib/pantry/commands/status.rb
242
+ - lib/pantry/commands/sync_directory.rb
243
+ - lib/pantry/commands/update_application.rb
244
+ - lib/pantry/commands/upload_file.rb
245
+ - lib/pantry/communication.rb
246
+ - lib/pantry/communication/client.rb
247
+ - lib/pantry/communication/client_filter.rb
248
+ - lib/pantry/communication/file_service.rb
249
+ - lib/pantry/communication/file_service/file_progress.rb
250
+ - lib/pantry/communication/file_service/receive_file.rb
251
+ - lib/pantry/communication/file_service/send_file.rb
252
+ - lib/pantry/communication/publish_socket.rb
253
+ - lib/pantry/communication/reading_socket.rb
254
+ - lib/pantry/communication/receive_socket.rb
255
+ - lib/pantry/communication/security.rb
256
+ - lib/pantry/communication/security/authentication.rb
257
+ - lib/pantry/communication/security/curve_key_store.rb
258
+ - lib/pantry/communication/security/curve_security.rb
259
+ - lib/pantry/communication/security/null_security.rb
260
+ - lib/pantry/communication/send_socket.rb
261
+ - lib/pantry/communication/serialize_message.rb
262
+ - lib/pantry/communication/server.rb
263
+ - lib/pantry/communication/subscribe_socket.rb
264
+ - lib/pantry/communication/wait_list.rb
265
+ - lib/pantry/communication/writing_socket.rb
266
+ - lib/pantry/config.rb
267
+ - lib/pantry/file_editor.rb
268
+ - lib/pantry/logger.rb
269
+ - lib/pantry/message.rb
270
+ - lib/pantry/multi_command.rb
271
+ - lib/pantry/server.rb
272
+ - lib/pantry/test/acceptance.rb
273
+ - lib/pantry/test/support/fake_fs.rb
274
+ - lib/pantry/test/support/matchers.rb
275
+ - lib/pantry/test/support/minitest.rb
276
+ - lib/pantry/test/support/mock_ui.rb
277
+ - lib/pantry/test/unit.rb
278
+ - lib/pantry/ui.rb
279
+ - lib/pantry/version.rb
280
+ - pantry.gemspec
281
+ - test/acceptance/cli/error_handling_test.rb
282
+ - test/acceptance/cli/execute_command_on_clients_test.rb
283
+ - test/acceptance/cli/request_info_from_server_test.rb
284
+ - test/acceptance/communication/client_requests_info_from_server_test.rb
285
+ - test/acceptance/communication/heartbeat_test.rb
286
+ - test/acceptance/communication/pub_sub_communication_test.rb
287
+ - test/acceptance/communication/security_test.rb
288
+ - test/acceptance/communication/server_requests_info_from_client_test.rb
289
+ - test/acceptance/test_helper.rb
290
+ - test/fixtures/config.yml
291
+ - test/fixtures/empty.yml
292
+ - test/fixtures/file_to_upload
293
+ - test/root_dir/.gitkeep
294
+ - test/unit/cli_test.rb
295
+ - test/unit/client_registry_test.rb
296
+ - test/unit/client_test.rb
297
+ - test/unit/command_handler_test.rb
298
+ - test/unit/command_line_test.rb
299
+ - test/unit/command_test.rb
300
+ - test/unit/commands/create_client_test.rb
301
+ - test/unit/commands/download_directory_test.rb
302
+ - test/unit/commands/echo_test.rb
303
+ - test/unit/commands/edit_application_test.rb
304
+ - test/unit/commands/register_client_test.rb
305
+ - test/unit/commands/status_test.rb
306
+ - test/unit/commands/sync_directory_test.rb
307
+ - test/unit/commands/update_application_test.rb
308
+ - test/unit/commands/upload_file_test.rb
309
+ - test/unit/communication/client_filter_test.rb
310
+ - test/unit/communication/client_test.rb
311
+ - test/unit/communication/file_service/receive_file_test.rb
312
+ - test/unit/communication/file_service/send_file_test.rb
313
+ - test/unit/communication/file_service_test.rb
314
+ - test/unit/communication/publish_socket_test.rb
315
+ - test/unit/communication/reading_socket_test.rb
316
+ - test/unit/communication/receive_socket_test.rb
317
+ - test/unit/communication/security/authentication_test.rb
318
+ - test/unit/communication/security/curve_key_store_test.rb
319
+ - test/unit/communication/security/curve_security_test.rb
320
+ - test/unit/communication/security/null_security_test.rb
321
+ - test/unit/communication/security_test.rb
322
+ - test/unit/communication/send_socket_test.rb
323
+ - test/unit/communication/serialize_message_test.rb
324
+ - test/unit/communication/server_test.rb
325
+ - test/unit/communication/subscribe_socket_test.rb
326
+ - test/unit/communication/wait_list_test.rb
327
+ - test/unit/communication/writing_socket_test.rb
328
+ - test/unit/config_test.rb
329
+ - test/unit/logger_test.rb
330
+ - test/unit/message_test.rb
331
+ - test/unit/multi_command_test.rb
332
+ - test/unit/opt_parse_plus_test.rb
333
+ - test/unit/pantry_test.rb
334
+ - test/unit/server_test.rb
335
+ - test/unit/test_helper.rb
336
+ - test/unit/ui_test.rb
337
+ homepage: http://pantryops.org
338
+ licenses:
339
+ - MIT
22
340
  metadata: {}
23
341
  post_install_message:
24
342
  rdoc_options: []
@@ -28,16 +346,74 @@ required_ruby_version: !ruby/object:Gem::Requirement
28
346
  requirements:
29
347
  - - '>='
30
348
  - !ruby/object:Gem::Version
31
- version: '0'
349
+ version: 2.0.0
32
350
  required_rubygems_version: !ruby/object:Gem::Requirement
33
351
  requirements:
34
352
  - - '>='
35
353
  - !ruby/object:Gem::Version
36
354
  version: '0'
37
- requirements: []
355
+ requirements:
356
+ - zeromq 3.x or 4.x
357
+ - libsodium for Curve security
38
358
  rubyforge_project:
39
- rubygems_version: 2.0.3
359
+ rubygems_version: 2.2.2
40
360
  signing_key:
41
361
  specification_version: 4
42
- summary: ''
43
- test_files: []
362
+ summary: Modern DevOps Automation
363
+ test_files:
364
+ - test/acceptance/cli/error_handling_test.rb
365
+ - test/acceptance/cli/execute_command_on_clients_test.rb
366
+ - test/acceptance/cli/request_info_from_server_test.rb
367
+ - test/acceptance/communication/client_requests_info_from_server_test.rb
368
+ - test/acceptance/communication/heartbeat_test.rb
369
+ - test/acceptance/communication/pub_sub_communication_test.rb
370
+ - test/acceptance/communication/security_test.rb
371
+ - test/acceptance/communication/server_requests_info_from_client_test.rb
372
+ - test/acceptance/test_helper.rb
373
+ - test/fixtures/config.yml
374
+ - test/fixtures/empty.yml
375
+ - test/fixtures/file_to_upload
376
+ - test/root_dir/.gitkeep
377
+ - test/unit/cli_test.rb
378
+ - test/unit/client_registry_test.rb
379
+ - test/unit/client_test.rb
380
+ - test/unit/command_handler_test.rb
381
+ - test/unit/command_line_test.rb
382
+ - test/unit/command_test.rb
383
+ - test/unit/commands/create_client_test.rb
384
+ - test/unit/commands/download_directory_test.rb
385
+ - test/unit/commands/echo_test.rb
386
+ - test/unit/commands/edit_application_test.rb
387
+ - test/unit/commands/register_client_test.rb
388
+ - test/unit/commands/status_test.rb
389
+ - test/unit/commands/sync_directory_test.rb
390
+ - test/unit/commands/update_application_test.rb
391
+ - test/unit/commands/upload_file_test.rb
392
+ - test/unit/communication/client_filter_test.rb
393
+ - test/unit/communication/client_test.rb
394
+ - test/unit/communication/file_service/receive_file_test.rb
395
+ - test/unit/communication/file_service/send_file_test.rb
396
+ - test/unit/communication/file_service_test.rb
397
+ - test/unit/communication/publish_socket_test.rb
398
+ - test/unit/communication/reading_socket_test.rb
399
+ - test/unit/communication/receive_socket_test.rb
400
+ - test/unit/communication/security/authentication_test.rb
401
+ - test/unit/communication/security/curve_key_store_test.rb
402
+ - test/unit/communication/security/curve_security_test.rb
403
+ - test/unit/communication/security/null_security_test.rb
404
+ - test/unit/communication/security_test.rb
405
+ - test/unit/communication/send_socket_test.rb
406
+ - test/unit/communication/serialize_message_test.rb
407
+ - test/unit/communication/server_test.rb
408
+ - test/unit/communication/subscribe_socket_test.rb
409
+ - test/unit/communication/wait_list_test.rb
410
+ - test/unit/communication/writing_socket_test.rb
411
+ - test/unit/config_test.rb
412
+ - test/unit/logger_test.rb
413
+ - test/unit/message_test.rb
414
+ - test/unit/multi_command_test.rb
415
+ - test/unit/opt_parse_plus_test.rb
416
+ - test/unit/pantry_test.rb
417
+ - test/unit/server_test.rb
418
+ - test/unit/test_helper.rb
419
+ - test/unit/ui_test.rb