startback-websocket 0.14.0 → 0.14.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -2
  3. data/README.md +64 -9
  4. data/lib/startback/ext/context.rb +6 -0
  5. data/lib/startback/ext.rb +1 -2
  6. data/lib/startback/websocket/app.rb +82 -0
  7. data/lib/startback/websocket/hub/app.rb +28 -0
  8. data/lib/startback/websocket/hub/builder.rb +55 -0
  9. data/lib/startback/websocket/hub/errors.rb +9 -0
  10. data/lib/startback/websocket/hub/message.rb +29 -0
  11. data/lib/startback/websocket/hub/middleware/command_handler.rb +34 -0
  12. data/lib/startback/websocket/hub/middleware/room_handler.rb +30 -0
  13. data/lib/startback/websocket/hub/middleware.rb +12 -0
  14. data/lib/startback/websocket/hub/participant.rb +16 -0
  15. data/lib/startback/websocket/hub/room.rb +46 -0
  16. data/lib/startback/websocket/hub.rb +15 -0
  17. data/lib/startback/websocket.rb +8 -0
  18. data/spec/spec_helper.rb +21 -32
  19. data/spec/unit/hub/test_builder.rb +141 -0
  20. data/spec/unit/hub/test_room.rb +27 -0
  21. data/spec/unit/test_app.rb +35 -0
  22. data/tasks/test.rake +0 -1
  23. metadata +20 -91
  24. data/lib/startback/audit/prometheus.rb +0 -87
  25. data/lib/startback/audit/shared.rb +0 -17
  26. data/lib/startback/audit/trailer.rb +0 -129
  27. data/lib/startback/audit.rb +0 -3
  28. data/lib/startback/caching/entity_cache.rb +0 -157
  29. data/lib/startback/caching/no_store.rb +0 -28
  30. data/lib/startback/caching/store.rb +0 -34
  31. data/lib/startback/context/h_factory.rb +0 -43
  32. data/lib/startback/context/middleware.rb +0 -53
  33. data/lib/startback/context.rb +0 -122
  34. data/lib/startback/errors.rb +0 -197
  35. data/lib/startback/event/agent.rb +0 -84
  36. data/lib/startback/event/bus/bunny/async.rb +0 -162
  37. data/lib/startback/event/bus/bunny.rb +0 -1
  38. data/lib/startback/event/bus/memory/async.rb +0 -45
  39. data/lib/startback/event/bus/memory/sync.rb +0 -35
  40. data/lib/startback/event/bus/memory.rb +0 -2
  41. data/lib/startback/event/bus.rb +0 -100
  42. data/lib/startback/event/engine.rb +0 -94
  43. data/lib/startback/event/ext/context.rb +0 -5
  44. data/lib/startback/event/ext/operation.rb +0 -13
  45. data/lib/startback/event.rb +0 -47
  46. data/lib/startback/ext/date_time.rb +0 -9
  47. data/lib/startback/ext/time.rb +0 -9
  48. data/lib/startback/model.rb +0 -6
  49. data/lib/startback/operation/error_operation.rb +0 -19
  50. data/lib/startback/operation/multi_operation.rb +0 -28
  51. data/lib/startback/operation.rb +0 -78
  52. data/lib/startback/services.rb +0 -11
  53. data/lib/startback/support/data_object.rb +0 -71
  54. data/lib/startback/support/env.rb +0 -41
  55. data/lib/startback/support/fake_logger.rb +0 -18
  56. data/lib/startback/support/hooks.rb +0 -48
  57. data/lib/startback/support/log_formatter.rb +0 -34
  58. data/lib/startback/support/logger.rb +0 -34
  59. data/lib/startback/support/operation_runner.rb +0 -150
  60. data/lib/startback/support/robustness.rb +0 -157
  61. data/lib/startback/support/transaction_manager.rb +0 -25
  62. data/lib/startback/support/transaction_policy.rb +0 -33
  63. data/lib/startback/support/world.rb +0 -54
  64. data/lib/startback/support.rb +0 -26
  65. data/lib/startback/version.rb +0 -8
  66. data/lib/startback/web/api.rb +0 -99
  67. data/lib/startback/web/auto_caching.rb +0 -85
  68. data/lib/startback/web/catch_all.rb +0 -52
  69. data/lib/startback/web/cors_headers.rb +0 -80
  70. data/lib/startback/web/health_check.rb +0 -49
  71. data/lib/startback/web/magic_assets/ng_html_transformer.rb +0 -80
  72. data/lib/startback/web/magic_assets/rake_tasks.rb +0 -64
  73. data/lib/startback/web/magic_assets.rb +0 -98
  74. data/lib/startback/web/middleware.rb +0 -13
  75. data/lib/startback/web/prometheus.rb +0 -16
  76. data/lib/startback/web/shield.rb +0 -58
  77. data/lib/startback.rb +0 -43
  78. data/spec/unit/audit/test_prometheus.rb +0 -72
  79. data/spec/unit/audit/test_trailer.rb +0 -105
  80. data/spec/unit/caching/test_entity_cache.rb +0 -136
  81. data/spec/unit/context/test_abstraction_factory.rb +0 -64
  82. data/spec/unit/context/test_dup.rb +0 -42
  83. data/spec/unit/context/test_fork.rb +0 -37
  84. data/spec/unit/context/test_h_factory.rb +0 -31
  85. data/spec/unit/context/test_middleware.rb +0 -45
  86. data/spec/unit/context/test_with_world.rb +0 -20
  87. data/spec/unit/context/test_world.rb +0 -17
  88. data/spec/unit/event/bus/memory/test_async.rb +0 -43
  89. data/spec/unit/event/bus/memory/test_sync.rb +0 -43
  90. data/spec/unit/support/hooks/test_after_hook.rb +0 -54
  91. data/spec/unit/support/hooks/test_before_hook.rb +0 -54
  92. data/spec/unit/support/operation_runner/test_around_run.rb +0 -156
  93. data/spec/unit/support/operation_runner/test_before_after_call.rb +0 -48
  94. data/spec/unit/support/test_data_object.rb +0 -156
  95. data/spec/unit/support/test_env.rb +0 -75
  96. data/spec/unit/support/test_robusteness.rb +0 -229
  97. data/spec/unit/support/test_transaction_manager.rb +0 -64
  98. data/spec/unit/support/test_world.rb +0 -72
  99. data/spec/unit/test_event.rb +0 -62
  100. data/spec/unit/test_operation.rb +0 -55
  101. data/spec/unit/test_support.rb +0 -40
  102. data/spec/unit/web/fixtures/assets/app/hello.es6 +0 -4
  103. data/spec/unit/web/fixtures/assets/app/hello.html +0 -1
  104. data/spec/unit/web/fixtures/assets/index.es6 +0 -1
  105. data/spec/unit/web/test_api.rb +0 -82
  106. data/spec/unit/web/test_auto_caching.rb +0 -81
  107. data/spec/unit/web/test_catch_all.rb +0 -77
  108. data/spec/unit/web/test_cors_headers.rb +0 -88
  109. data/spec/unit/web/test_healthcheck.rb +0 -59
  110. data/spec/unit/web/test_magic_assets.rb +0 -82
@@ -1,75 +0,0 @@
1
- require 'spec_helper'
2
- module Startback
3
- module Support
4
- describe Env do
5
- include Env
6
-
7
- before do
8
- ENV['FOO'] = 'BAR'
9
- ENV['FOOL'] = ''
10
- ENV['FOOLISH'] = ' BAR '
11
- end
12
-
13
- after do
14
- ENV.delete('FOO')
15
- ENV.delete('FOOL')
16
- end
17
-
18
- describe "env" do
19
- it 'returns an env variable' do
20
- expect(env('FOO')).to eql('BAR')
21
- end
22
-
23
- it 'returns nil otherwise' do
24
- expect(env('BAR')).to be_nil
25
- end
26
-
27
- it 'strips the value' do
28
- expect(env('FOOLISH')).to eql('BAR')
29
- end
30
-
31
- it 'yields the block if any' do
32
- expect(env('FOO'){|x| x.downcase }).to eql('bar')
33
- end
34
-
35
- it 'support a default value' do
36
- expect(env('BAR', 'BAZ')).to eql('BAZ')
37
- end
38
-
39
- it 'yields the block with the default if any' do
40
- expect(env('BAR', 'BAZ'){|x| x.downcase }).to eql('baz')
41
- end
42
-
43
- it 'returns nil when empty' do
44
- expect(env('FOOL')).to be_nil
45
- end
46
-
47
- it 'yields the block with the default if empty' do
48
- expect(env('FOOL', 'BAZ'){|x| x.downcase }).to eql('baz')
49
- end
50
- end
51
-
52
- describe "env!" do
53
- it 'returns an env variable' do
54
- expect(env!('FOO')).to eql('BAR')
55
- end
56
-
57
- it 'strips the value' do
58
- expect(env!('FOOLISH')).to eql('BAR')
59
- end
60
-
61
- it 'raise otherwise' do
62
- expect{ env!('BAR') }.to raise_error(Startback::Errors::Error, /BAR/)
63
- end
64
-
65
- it 'raise on empty' do
66
- expect{ env!('FOOL') }.to raise_error(Startback::Errors::Error, /FOOL/)
67
- end
68
-
69
- it 'yields the block if any' do
70
- expect(env('FOO'){|x| x.downcase }).to eql('bar')
71
- end
72
- end
73
- end
74
- end
75
- end
@@ -1,229 +0,0 @@
1
- require 'spec_helper'
2
- module Startback
3
- module Support
4
- describe Robustness do
5
-
6
- let(:the_logger) {
7
- FakeLogger.new
8
- }
9
-
10
- let(:context_with_logger) {
11
- Context.new.tap{|c| c.logger = the_logger }
12
- }
13
-
14
- describe "monitor" do
15
- include Robustness
16
-
17
- it 'works' do
18
- x = monitor("test", context_with_logger) do
19
- 12
20
- end
21
- expect(x).to eql(12)
22
- expect(the_logger.last_msg.keys).to eql([:op, :op_took])
23
- end
24
-
25
- end # monitor
26
-
27
- describe "stop_errors" do
28
- include Robustness
29
-
30
- it 'works and logs the error' do
31
- x = nil
32
- expect {
33
- x = stop_errors("test", context_with_logger) do
34
- raise "Test"
35
- end
36
- }.not_to raise_error
37
- expect(x).to be(nil)
38
- expect(the_logger.last_msg.keys).to eql([:op, :op_took, :error])
39
- end
40
-
41
- it 'returns the result if no error' do
42
- x = nil
43
- expect {
44
- x = stop_errors("test", context_with_logger) do
45
- 12
46
- end
47
- }.not_to raise_error
48
- expect(x).to eql(12)
49
- expect(the_logger.last_msg).to be_nil
50
- end
51
-
52
- end
53
-
54
- describe "try_max_times" do
55
- include Robustness
56
-
57
- it 'fails if n errors are seen' do
58
- seen = 0
59
- expect {
60
- try_max_times(2, "test", context_with_logger) do
61
- seen += 1
62
- raise "Test"
63
- end
64
- }.to raise_error("Test")
65
- expect(seen).to eql(2)
66
- expect(the_logger.last_msg.keys).to eql([:op, :op_took, :error])
67
- end
68
-
69
- it 'suceeds if an attemps succeeds' do
70
- seen = 0
71
- result = nil
72
- expect {
73
- result = try_max_times(2, "test", context_with_logger) do
74
- seen += 1
75
- raise "Test" if seen == 1
76
- 12
77
- end
78
- }.not_to raise_error
79
- expect(result).to eql(12)
80
- expect(seen).to eql(2)
81
- expect(the_logger.last_msg.keys).to eql([:op, :op_took, :error])
82
- end
83
-
84
- it 'suceeds if first attemps succeeds' do
85
- result = nil
86
- expect {
87
- result = try_max_times(2, "test", context_with_logger) do
88
- 12
89
- end
90
- }.not_to raise_error
91
- expect(result).to eql(12)
92
- expect(the_logger.last_msg).to be_nil
93
- end
94
-
95
- end
96
-
97
- describe "parse_args" do
98
- include Robustness::Tools
99
-
100
- it 'works fine with full op and no context' do
101
- log_msg_src = {
102
- op: "AnOp",
103
- op_data: { foo: "bar" }
104
- }
105
- log_msg, logger = parse_args(log_msg_src)
106
- expect(log_msg).to eql(log_msg_src)
107
- expect(logger).to be_a(::Logger)
108
- end
109
-
110
- it 'works fine with an string and a method name' do
111
- expected = {
112
- op: "AClass#method"
113
- }
114
- log_msg, logger = parse_args("AClass", "method")
115
- expect(log_msg).to eql(expected)
116
- expect(logger).to be_a(::Logger)
117
- end
118
-
119
- it 'works fine with an string, a method name, and a message' do
120
- expected = {
121
- op: "AClass#method",
122
- op_data: { message: "Hello world" }
123
- }
124
- log_msg, logger = parse_args("AClass", "method", "Hello world")
125
- expect(log_msg).to eql(expected)
126
- expect(logger).to be_a(::Logger)
127
- end
128
-
129
- it 'works fine with a string only' do
130
- expected = {
131
- op: "a message"
132
- }
133
- log_msg, logger = parse_args("a message")
134
- expect(log_msg).to eql(expected)
135
- expect(logger).to be_a(::Logger)
136
- end
137
-
138
- it 'works fine with a Exception only' do
139
- exception = StandardError.new('hello')
140
- expected = {
141
- error: exception
142
- }
143
- log_msg, logger = parse_args(exception)
144
- expect(log_msg).to eql(expected)
145
- expect(logger).to be_a(::Logger)
146
- end
147
-
148
- it 'works fine with a string and a context with logger' do
149
- expected = {
150
- op: "a message"
151
- }
152
- log_msg, logger = parse_args("a message", context_with_logger)
153
- expect(log_msg).to eql(expected)
154
- expect(logger).to be(the_logger)
155
- end
156
-
157
- it 'works fine with a string and an extra hash' do
158
- expected = {
159
- op: "a message",
160
- op_took: 16
161
- }
162
- log_msg, logger = parse_args("a message", op_took: 16)
163
- expect(log_msg).to eql(expected)
164
- expect(logger).to be_a(::Logger)
165
- end
166
-
167
- it 'works fine with a module and method' do
168
- expected = {
169
- op: "Startback#foo"
170
- }
171
- log_msg, logger = parse_args(Startback, "foo")
172
- expect(log_msg).to eql(expected)
173
- expect(logger).to be_a(::Logger)
174
- end
175
-
176
- it 'works fine with a class and method' do
177
- expected = {
178
- op: "Startback::Event#foo"
179
- }
180
- log_msg, logger = parse_args(Startback::Event, "foo")
181
- expect(log_msg).to eql(expected)
182
- expect(logger).to be_a(::Logger)
183
- end
184
-
185
- it 'works fine with an instance and method' do
186
- expected = {
187
- op: "Startback::Event#foo"
188
- }
189
- log_msg, logger = parse_args(Startback::Event.new(nil, nil), "foo")
190
- expect(log_msg).to eql(expected)
191
- expect(logger).to be_a(::Logger)
192
- end
193
-
194
- it 'when a hash is passed as last arg' do
195
- expected = {
196
- op: "hello#foo",
197
- op_took: 16
198
- }
199
- log_msg, logger = parse_args("hello", "foo", op_took: 16)
200
- expect(log_msg).to eql(expected)
201
- expect(logger).to be_a(::Logger)
202
- end
203
- end
204
-
205
- describe "logger_for" do
206
- include Robustness::Tools
207
-
208
- it 'works on a logger' do
209
- expect(logger_for(the_logger)).to be(the_logger)
210
- end
211
-
212
- it 'works on a Context responding to logger' do
213
- expect(logger_for(context_with_logger)).to be(the_logger)
214
- end
215
-
216
- it 'works on an object having a Context responding to logger' do
217
- x = OpenStruct.new(context: context_with_logger)
218
- expect(logger_for(x)).to eql(the_logger)
219
- end
220
-
221
- it 'works on an object having a Context but no logger' do
222
- x = OpenStruct.new(context: Context.new)
223
- expect(logger_for(x)).to be_a(::Logger)
224
- end
225
- end
226
-
227
- end
228
- end
229
- end
@@ -1,64 +0,0 @@
1
- require 'spec_helper'
2
- module Startback
3
- module Support
4
- describe TransactionManager do
5
- subject do
6
- TransactionManager.new(db).call(nil, op) do
7
- op.call
8
- end
9
- end
10
-
11
- class FakeDatabase
12
- def initialize
13
- @called = false
14
- end
15
- attr_reader :called
16
-
17
- def transaction
18
- @called = true
19
- yield
20
- end
21
- end
22
-
23
- let(:db) do
24
- FakeDatabase.new
25
- end
26
-
27
- context 'when called with a default operation' do
28
- class OperationNotManagingTransactions < Startback::Operation
29
- def call
30
- 12
31
- end
32
- end
33
-
34
- let(:op) do
35
- OperationNotManagingTransactions.new
36
- end
37
-
38
- it 'calls db.transaction' do
39
- expect(subject).to eql(12)
40
- expect(db.called).to eql(true)
41
- end
42
- end
43
-
44
- context 'when called with an operation that manages the transactions itself' do
45
- class OperationManagingTransactions < Startback::Operation
46
- self.transaction_policy = :within_call
47
-
48
- def call
49
- 12
50
- end
51
- end
52
-
53
- let(:op) do
54
- OperationManagingTransactions.new
55
- end
56
-
57
- it 'calls db.transaction' do
58
- expect(subject).to eql(12)
59
- expect(db.called).to eql(false)
60
- end
61
- end
62
- end
63
- end
64
- end
@@ -1,72 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Startback
4
- module Support
5
- describe World do
6
-
7
- let(:world) do
8
- World.new
9
- end
10
-
11
- describe 'with' do
12
- subject do
13
- world.with(foo: :bar, bar: :baz)
14
- end
15
-
16
- it 'returns a new world instance' do
17
- expect(subject).to be_a(World)
18
- expect(subject).not_to be(world)
19
- end
20
-
21
- it 'gives access to those variables' do
22
- expect(subject.foo).to eql(:bar)
23
- expect(subject[:bar]).to eql(:baz)
24
- end
25
- end
26
-
27
- describe 'dup' do
28
- let(:world) do
29
- World.new(foo: :bar)
30
- end
31
-
32
- subject do
33
- world.dup
34
- end
35
-
36
- it 'returns another instance' do
37
- expect(subject).to be_a(World)
38
- expect(subject).not_to be(world)
39
- end
40
-
41
- it 'keeps variables' do
42
- expect(subject.foo).to eql(:bar)
43
- end
44
- end
45
-
46
- describe 'class factory' do
47
- subject do
48
- world.factory(:foo) do
49
- hello
50
- end
51
- end
52
-
53
- def hello
54
- OpenStruct.new(bar: 12)
55
- end
56
-
57
- it 'returns a world instance' do
58
- expect(subject).to be_a(World)
59
- expect(subject).not_to be(world)
60
- end
61
-
62
- it 'installs the factory' do
63
- bound = subject.with_scope(self)
64
- got = bound.foo
65
- expect(got).to be_a(OpenStruct)
66
- expect(got.bar).to eql(12)
67
- expect(bound.foo).to be(got)
68
- end
69
- end
70
- end
71
- end
72
- end
@@ -1,62 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Startback
4
- describe Event do
5
-
6
- subject{
7
- Event.new("User::Changed", { "foo" => "bar" })
8
- }
9
-
10
- it 'presents an ostruct on top of its data' do
11
- expect(subject.data.foo).to eql("bar")
12
- end
13
-
14
- describe "the json information contract" do
15
-
16
- JSON_SRC = <<-JSON.gsub(/\s+/, "")
17
- {
18
- "type": "User::Changed",
19
- "data": {
20
- "foo": "bar"
21
- }
22
- }
23
- JSON
24
-
25
- it 'has a to_json method that works as expected' do
26
- expect(subject.to_json).to eql(JSON_SRC)
27
- end
28
-
29
- it 'has a to_json that dumps the context if any' do
30
- evt = Event.new("User::Changed", { "foo" => "bar" }, { "baz": "context" })
31
- expect(evt.to_json).to eql(<<-JSON.gsub(/\s+/, ""))
32
- {
33
- "type": "User::Changed",
34
- "data": {
35
- "foo": "bar"
36
- },
37
- "context": {
38
- "baz": "context"
39
- }
40
- }
41
- JSON
42
- end
43
-
44
-
45
- it 'has a json class method that works as expected' do
46
- evt = Event.json(JSON_SRC, nil)
47
- expect(evt).to be_a(Event)
48
- expect(evt.type).to eql("User::Changed")
49
- expect(evt.data).to eql(subject.data)
50
- end
51
-
52
- it 'accepts an explicit context as second argument' do
53
- c = SubContext.new.tap{|x| x.foo = 'hello' }
54
- evt = Event.json(JSON_SRC, c)
55
- expect(evt.context).not_to be(c)
56
- expect(evt.context).to be_a(SubContext)
57
- expect(evt.context.foo).to eql('hello')
58
- end
59
- end
60
-
61
- end
62
- end # module Startback
@@ -1,55 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Startback
4
- describe Operation do
5
-
6
- class FooOp < Operation
7
-
8
- def initialize(foo = :bar)
9
- @foo = foo
10
- end
11
- attr_accessor :foo
12
-
13
- def call
14
- @foo
15
- end
16
-
17
- end
18
-
19
- it 'can be bound, which returns a new operation' do
20
- foo1 = FooOp.new
21
- foo1.foo = :bar1
22
-
23
- foo2 = foo1.bind({ db: :bar })
24
- expect(foo2.foo).to eql(:bar1)
25
- expect(foo2.db).to eql(:bar)
26
- end
27
-
28
- end
29
-
30
- describe Operation::MultiOperation do
31
-
32
- it 'lets chain with +' do
33
- mop = Operation::MultiOperation.new
34
- mop2 = (mop + FooOp.new)
35
-
36
- expect(mop == mop2).to eql(false)
37
- expect(mop.size).to eql(0)
38
- expect(mop2.size).to eql(1)
39
- end
40
-
41
- it 'calls and collects the result on call' do
42
- mop = Operation::MultiOperation.new + FooOp.new(:hello) + FooOp.new(:world)
43
- expect(mop.call).to eql([:hello, :world])
44
- end
45
-
46
- it 'binds every sub operation recursively' do
47
- mop = Operation::MultiOperation.new + FooOp.new(:hello) + FooOp.new(:world)
48
- mop2 = mop.bind({requester: :bar})
49
-
50
- expect(mop == mop2).to eql(false)
51
- expect(mop2.ops.all?{|op| op.requester == :bar })
52
- end
53
-
54
- end
55
- end # module Startback
@@ -1,40 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Startback
4
- describe Support do
5
- include Support
6
-
7
- describe "deep_merge" do
8
-
9
- it 'works as expected' do
10
- h1 = {
11
- :foo => "bar",
12
- :bar => "unchanged",
13
- :baz => {
14
- "hello" => "world",
15
- "changed" => "yes"
16
- }
17
- }
18
- h2 = {
19
- :foo => "baz",
20
- :baz => {
21
- "eloy" => "tom",
22
- "changed" => "no"
23
- }
24
- }
25
- expected = {
26
- :foo => "baz",
27
- :bar => "unchanged",
28
- :baz => {
29
- "hello" => "world",
30
- "eloy" => "tom",
31
- "changed" => "no"
32
- }
33
- }
34
- expect(deep_merge(h1, h2)).to eql(expected)
35
- end
36
-
37
- end
38
-
39
- end
40
- end
@@ -1,4 +0,0 @@
1
- let test = (x) => {
2
- console.log("Hello " + x)
3
- }
4
- test("world")
@@ -1 +0,0 @@
1
- <p>Hello {{who}}</p>
@@ -1 +0,0 @@
1
- //= require_tree ./app
@@ -1,82 +0,0 @@
1
- require 'spec_helper'
2
- require 'startback/web/api'
3
-
4
- module Startback
5
- module Web
6
- describe Api do
7
- include Rack::Test::Methods
8
-
9
- class JsonDto
10
- def to(accept, content_type)
11
- ["application/json", %Q{{"foo":"bar"}}]
12
- end
13
- end
14
-
15
- class PathDto
16
- def to(accept, content_type)
17
- ["text/plain", Path.file]
18
- end
19
- end
20
-
21
- class DtoAble
22
- def initialize(dto)
23
- @dto = dto
24
- end
25
- def to_dto(context)
26
- @dto
27
- end
28
- end
29
-
30
- class TestedApi < ::Startback::Web::Api
31
- get '/no-such-one' do
32
- serve("Something", nil)
33
- end
34
-
35
- get '/entity' do
36
- serve('Entity', {foo: "bar"})
37
- end
38
-
39
- get '/path' do
40
- serve('Path', Path.file)
41
- end
42
-
43
- get '/dto-able' do
44
- serve('DTO', DtoAble.new(JsonDto.new))
45
- end
46
-
47
- get '/dto-path' do
48
- serve('DTO', DtoAble.new(PathDto.new))
49
- end
50
- end
51
-
52
- let(:app) {
53
- TestedApi
54
- }
55
-
56
- it 'convert nil to 404' do
57
- get '/no-such-one'
58
- expect(last_response.status).to eql(404)
59
- end
60
-
61
- it 'supports serving entities' do
62
- get '/entity'
63
- expect(last_response.body).to eql(%Q{{"foo":"bar"}})
64
- end
65
-
66
- it 'supports serving paths' do
67
- get '/path'
68
- expect(last_response.body).to eql(Path.file.read)
69
- end
70
-
71
- it 'supports serving DTO-able objects' do
72
- get '/dto-able'
73
- expect(last_response.body).to eql(%Q{{"foo":"bar"}})
74
- end
75
-
76
- it 'supports serving DTO-able objects eventually returning paths' do
77
- get '/dto-path'
78
- expect(last_response.body).to eql(Path.file.read)
79
- end
80
- end
81
- end # module Web
82
- end # module Startback