whiskey 1.0.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 (69) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +24 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +8 -0
  6. data/CHANGELOG.md +9 -0
  7. data/Gemfile +4 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.md +74 -0
  10. data/ROADMAP.md +13 -0
  11. data/Rakefile +24 -0
  12. data/bin/whiskey +17 -0
  13. data/lib/whiskey.rb +16 -0
  14. data/lib/whiskey/command.rb +30 -0
  15. data/lib/whiskey/command/build.rb +89 -0
  16. data/lib/whiskey/command/start_server.rb +15 -0
  17. data/lib/whiskey/command/templates/Gemfile +10 -0
  18. data/lib/whiskey/command/templates/LICENSE.txt +22 -0
  19. data/lib/whiskey/command/templates/Procfile +1 -0
  20. data/lib/whiskey/command/templates/Thorfile +4 -0
  21. data/lib/whiskey/command/templates/db/seed.rb +15 -0
  22. data/lib/whiskey/command/templates/gitignore +17 -0
  23. data/lib/whiskey/command/templates/lib/action.rb +3 -0
  24. data/lib/whiskey/command/templates/lib/controls.rb +7 -0
  25. data/lib/whiskey/command/templates/lib/controls/router_control.rb +19 -0
  26. data/lib/whiskey/command/templates/lib/controls/world_control.rb +6 -0
  27. data/lib/whiskey/command/templates/lib/example.rb +7 -0
  28. data/lib/whiskey/command/templates/lib/models.rb +3 -0
  29. data/lib/whiskey/command/templates/lib/models/account.rb +6 -0
  30. data/lib/whiskey/command/templates/lib/models/actor.rb +6 -0
  31. data/lib/whiskey/command/templates/lib/models/place.rb +6 -0
  32. data/lib/whiskey/command/templates/ruby-gemset +1 -0
  33. data/lib/whiskey/command/templates/ruby-version +1 -0
  34. data/lib/whiskey/command/templates/server.rb +20 -0
  35. data/lib/whiskey/server.rb +81 -0
  36. data/lib/whiskey/server/action.rb +22 -0
  37. data/lib/whiskey/server/configuration.rb +9 -0
  38. data/lib/whiskey/server/connection.rb +51 -0
  39. data/lib/whiskey/server/control.rb +33 -0
  40. data/lib/whiskey/server/cycle.rb +35 -0
  41. data/lib/whiskey/server/deserializer.rb +21 -0
  42. data/lib/whiskey/server/error.rb +79 -0
  43. data/lib/whiskey/server/handler.rb +17 -0
  44. data/lib/whiskey/server/interpretor.rb +32 -0
  45. data/lib/whiskey/server/receiver.rb +19 -0
  46. data/lib/whiskey/server/responder.rb +19 -0
  47. data/lib/whiskey/server/router.rb +45 -0
  48. data/lib/whiskey/server/serializer.rb +22 -0
  49. data/lib/whiskey/version.rb +3 -0
  50. data/spec/lib/command/build_spec.rb +5 -0
  51. data/spec/lib/command/start_server_spec.rb +5 -0
  52. data/spec/lib/command_spec.rb +5 -0
  53. data/spec/lib/server/configuration_spec.rb +5 -0
  54. data/spec/lib/server/connection_spec.rb +43 -0
  55. data/spec/lib/server/cycle_spec.rb +23 -0
  56. data/spec/lib/server/deserializer_spec.rb +11 -0
  57. data/spec/lib/server/error_spec.rb +5 -0
  58. data/spec/lib/server/handler_spec.rb +5 -0
  59. data/spec/lib/server/interpretor_spec.rb +5 -0
  60. data/spec/lib/server/receiver_spec.rb +5 -0
  61. data/spec/lib/server/responder_spec.rb +15 -0
  62. data/spec/lib/server/serializer_spec.rb +11 -0
  63. data/spec/lib/server_spec.rb +31 -0
  64. data/spec/spec_helper.rb +9 -0
  65. data/test/lib/whiskey/server/connection_test.rb +42 -0
  66. data/test/lib/whiskey/server/cycle_test.rb +16 -0
  67. data/test/lib/whiskey/server/handler_test.rb +18 -0
  68. data/whiskey.gemspec +39 -0
  69. metadata +383 -0
@@ -0,0 +1,17 @@
1
+ module Whiskey
2
+ class Server
3
+ class Handler
4
+ attr_reader :connection
5
+
6
+ def initialize(connection)
7
+ @connection = connection
8
+ end
9
+
10
+ def handle
11
+ loop do
12
+ connection.process
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,32 @@
1
+ module Whiskey
2
+ class Server
3
+ class Interpretor
4
+ def initialize(input)
5
+ @instruction = input
6
+ @response = if has_resource? && has_verb?
7
+ Router.new(instruction.resource, instruction.verb, instruction.parameters)
8
+ else
9
+ Error.new(:not_found)
10
+ end
11
+ end
12
+
13
+ def response
14
+ @response.to_hash
15
+ end
16
+
17
+ def instruction
18
+ OpenStruct.new(@instruction)
19
+ end
20
+
21
+ private
22
+
23
+ def has_resource?
24
+ @instruction.has_key?("resource")
25
+ end
26
+
27
+ def has_verb?
28
+ @instruction.has_key?("verb")
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,19 @@
1
+ module Whiskey
2
+ class Server
3
+ class Receiver
4
+ attr_reader :deserializer
5
+
6
+ def initialize(input)
7
+ @deserializer = Deserializer.new(input)
8
+ end
9
+
10
+ def deserialize
11
+ deserializer.data
12
+ end
13
+
14
+ def valid?
15
+ deserializer.valid?
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ module Whiskey
2
+ class Server
3
+ class Responder
4
+ attr_reader :serializer
5
+
6
+ def initialize(output)
7
+ @serializer = Serializer.new(output)
8
+ end
9
+
10
+ def serialize
11
+ serializer.data
12
+ end
13
+
14
+ def valid?
15
+ serializer.valid?
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,45 @@
1
+ module Whiskey
2
+ class Server
3
+ class Router
4
+ def initialize(resource, verb, parameters = {})
5
+ @control = resource
6
+ @action = verb.upcase
7
+ @body = parameters
8
+
9
+ @route = if control.safe_constantize && control_action.safe_constantize
10
+ Whiskey.logger.info("#{@action} /#{@control} #{@body.inspect}")
11
+ control_action.safe_constantize.new(body)
12
+ else
13
+ Error.new(:not_found)
14
+ end
15
+ end
16
+
17
+ def body
18
+ OpenStruct.new(@parameters)
19
+ end
20
+
21
+ def to_hash
22
+ @route.to_hash
23
+ end
24
+
25
+ def control
26
+ "Controls::#{@control.classify}Control"
27
+ end
28
+
29
+ def action
30
+ case
31
+ when @action == "PULL" then "ListAction"
32
+ when @action == "PUSH" then "CreateAction"
33
+ when @action == "PULL" && parameters.id then "ShowAction"
34
+ when @action == "PUSH" && parameters.id then "UpdateAction"
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ def control_action
41
+ "#{control}::#{action}"
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,22 @@
1
+ module Whiskey
2
+ class Server
3
+ class Serializer
4
+ attr_reader :data
5
+
6
+ def initialize(raw)
7
+ @errors = []
8
+ begin
9
+ @data = MultiJson.dump(raw)
10
+ @valid = true
11
+ rescue Exception => error
12
+ puts error
13
+ @valid = false
14
+ end
15
+ end
16
+
17
+ def valid?
18
+ @valid
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,3 @@
1
+ module Whiskey
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,5 @@
1
+ require "spec_helper"
2
+
3
+ describe Whiskey::Command::Build do
4
+ pending
5
+ end
@@ -0,0 +1,5 @@
1
+ require "spec_helper"
2
+
3
+ describe Whiskey::Command::StartServer do
4
+ pending
5
+ end
@@ -0,0 +1,5 @@
1
+ require "spec_helper"
2
+
3
+ describe Whiskey::Command do
4
+ pending
5
+ end
@@ -0,0 +1,5 @@
1
+ require "spec_helper"
2
+
3
+ describe Whiskey::Server::Configuration do
4
+ pending
5
+ end
@@ -0,0 +1,43 @@
1
+ require "spec_helper"
2
+
3
+ describe Whiskey::Server::Connection do
4
+ describe "#initialize(socket)" do
5
+ pending
6
+ end
7
+
8
+ describe "#id" do
9
+ pending
10
+ end
11
+
12
+ describe "#process" do
13
+ pending
14
+ end
15
+
16
+ describe "#cycle" do
17
+ pending
18
+ end
19
+
20
+ describe "#incoming" do
21
+ pending
22
+ end
23
+
24
+ describe "#port" do
25
+ pending
26
+ end
27
+
28
+ describe "#ip" do
29
+ pending
30
+ end
31
+
32
+ describe "#write(*args)" do
33
+ pending
34
+ end
35
+
36
+ describe "#readpartial(*args)" do
37
+ pending
38
+ end
39
+
40
+ describe "#peeraddr(*args)" do
41
+ pending
42
+ end
43
+ end
@@ -0,0 +1,23 @@
1
+ require "spec_helper"
2
+
3
+ describe Whiskey::Server::Cycle do
4
+ describe "#initialize(input)" do
5
+ pending
6
+ end
7
+
8
+ describe "#interpret!" do
9
+ pending
10
+ end
11
+
12
+ describe "#output" do
13
+ pending
14
+ end
15
+
16
+ describe "#deserialized(input)" do
17
+ pending
18
+ end
19
+
20
+ describe "#serialized(response)" do
21
+ pending
22
+ end
23
+ end
@@ -0,0 +1,11 @@
1
+ require "spec_helper"
2
+
3
+ describe Whiskey::Server::Deserializer do
4
+ describe "#initialize(raw)" do
5
+ pending
6
+ end
7
+
8
+ describe "#valid?" do
9
+ pending
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ require "spec_helper"
2
+
3
+ describe Whiskey::Server::Error do
4
+ pending
5
+ end
@@ -0,0 +1,5 @@
1
+ require "spec_helper"
2
+
3
+ describe Whiskey::Server::Handler do
4
+ pending
5
+ end
@@ -0,0 +1,5 @@
1
+ require "spec_helper"
2
+
3
+ describe Whiskey::Server::Interpretor do
4
+ pending
5
+ end
@@ -0,0 +1,5 @@
1
+ require "spec_helper"
2
+
3
+ describe Whiskey::Server::Receiver do
4
+ pending
5
+ end
@@ -0,0 +1,15 @@
1
+ require "spec_helper"
2
+
3
+ describe Whiskey::Server::Responder do
4
+ describe "#initialize(output)" do
5
+ pending
6
+ end
7
+
8
+ describe "#serialize" do
9
+ pending
10
+ end
11
+
12
+ describe "#valid?" do
13
+ pending
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ require "spec_helper"
2
+
3
+ describe Whiskey::Server::Serializer do
4
+ describe "#initialize(raw)" do
5
+ pending
6
+ end
7
+
8
+ describe "#valid?" do
9
+ pending
10
+ end
11
+ end
@@ -0,0 +1,31 @@
1
+ require "spec_helper"
2
+
3
+ describe Whiskey::Server do
4
+ describe ".configure(configuration)" do
5
+ pending
6
+ end
7
+
8
+ describe ".start(configuration)" do
9
+ pending
10
+ end
11
+
12
+ describe "#server" do
13
+ pending
14
+ end
15
+
16
+ describe "#initialize" do
17
+ pending
18
+ end
19
+
20
+ describe "#run" do
21
+ pending
22
+ end
23
+
24
+ describe "#finalizer" do
25
+ pending
26
+ end
27
+
28
+ describe "#handle_connection" do
29
+ pending
30
+ end
31
+ end
@@ -0,0 +1,9 @@
1
+ require "coveralls"
2
+ Coveralls.wear! do
3
+ add_filter "/spec/"
4
+ end
5
+
6
+ require "rspec"
7
+ require "whiskey"
8
+ require "whiskey/server"
9
+ require "whiskey/command"
@@ -0,0 +1,42 @@
1
+ require "helper"
2
+ require "whiskey/server/connection"
3
+
4
+ class TestWhiskeyServerConnection < MiniTestCase
5
+ def setup
6
+ @socket = mock
7
+ @socket.stubs(:peeraddr).returns(["AF_INET", 9999, "foo.example.com", "127.0.0.1"])
8
+ @connection = Whiskey::Server::Connection.new(@socket)
9
+ end
10
+
11
+ def test_id
12
+ expected = "127.0.0.1:9999"
13
+ actual = @connection.id
14
+ assert_equal(expected, actual)
15
+ end
16
+
17
+ def test_socket
18
+ refute(@connection.socket.nil?, "Connection has no socket")
19
+ end
20
+
21
+ def test_write
22
+ @socket.expects(:write).with("foo").at_least_once
23
+ @connection.write("foo")
24
+ end
25
+
26
+ def test_readpartial
27
+ @socket.expects(:readpartial).with(4096).at_least_once
28
+ @connection.readpartial(4096)
29
+ end
30
+
31
+ def test_readpartial
32
+ @socket.expects(:peeraddr).at_least_once
33
+ @connection.peeraddr
34
+ end
35
+
36
+ def test_cycle
37
+ Whiskey::Server::Connection.any_instance.stubs(:cycle)
38
+ @connection.expects(:write).at_least_once
39
+ @connection.process
40
+ end
41
+ end
42
+
@@ -0,0 +1,16 @@
1
+ require "helper"
2
+ require "whiskey/server/cycle"
3
+
4
+ class TestWhiskeyServerCycle < MiniTestCase
5
+ def setup
6
+ @cycle = Whiskey::Server::Cycle.new("foo")
7
+ end
8
+
9
+ def test_initialize
10
+ Whiskey::Server::Cycle.any_instance.stubs(:deserialized)
11
+ expected = "foo"
12
+ actual = @cycle.to_s
13
+ assert_equal(expected, actual)
14
+ end
15
+ end
16
+
@@ -0,0 +1,18 @@
1
+ require "helper"
2
+ require "whiskey/server"
3
+
4
+ class TestWhiskeyServerHandler < MiniTestCase
5
+ def setup
6
+ @connection = mock
7
+ @handler = Whiskey::Server::Handler.new(@connection)
8
+ end
9
+
10
+ # def initialize(socket)
11
+ # self.connection = Connection.new(socket)
12
+ # end
13
+ def test_initialize
14
+ expected = @connection
15
+ actual = @handler.connection
16
+ assert_equal(expected, actual)
17
+ end
18
+ end