dry-web-roda 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/dry-web-roda.gemspec +3 -2
  3. data/lib/dry/web/roda/application.rb +11 -0
  4. data/lib/dry/web/roda/skeletons/app/lib/__underscored_app_name__/views/welcome.rb.tt +11 -0
  5. data/lib/dry/web/roda/skeletons/app/system/__underscored_app_name__/application.rb.tt +6 -10
  6. data/lib/dry/web/roda/skeletons/app/system/__underscored_app_name__/view_context.rb.tt +6 -0
  7. data/lib/dry/web/roda/skeletons/app/system/__underscored_app_name__/view_controller.rb.tt +13 -0
  8. data/lib/dry/web/roda/skeletons/app/system/boot/view.rb.tt +3 -0
  9. data/lib/dry/web/roda/skeletons/app/system/boot.rb.tt +0 -1
  10. data/lib/dry/web/roda/skeletons/app/web/templates/welcome.html.slim +1 -0
  11. data/lib/dry/web/roda/skeletons/umbrella/Gemfile +1 -1
  12. data/lib/dry/web/roda/skeletons/umbrella/bin/setup +1 -1
  13. data/lib/dry/web/roda/skeletons/umbrella/lib/__underscored_app_name__/view_context.rb.tt +39 -0
  14. data/lib/dry/web/roda/version.rb +1 -1
  15. data/lib/roda/plugins/dry_view.rb +35 -0
  16. data/spec/spec_helper.rb +0 -21
  17. metadata +34 -69
  18. data/lib/dry/web/roda/skeletons/app/system/__underscored_app_name__/page.rb.tt +0 -6
  19. data/lib/dry/web/roda/skeletons/app/system/__underscored_app_name__/view.rb.tt +0 -19
  20. data/lib/dry/web/roda/skeletons/umbrella/lib/__underscored_app_name__/page.rb.tt +0 -48
  21. data/lib/dry/web/roda/skeletons/umbrella/lib/roda_plugins.rb +0 -34
  22. data/spec/dummy/apps/main/lib/main/entities/user.rb +0 -5
  23. data/spec/dummy/apps/main/lib/main/persistence/repositories/users.rb +0 -15
  24. data/spec/dummy/apps/main/lib/main/transactions/register_user.rb +0 -21
  25. data/spec/dummy/apps/main/lib/main/views/users/index.rb +0 -17
  26. data/spec/dummy/apps/main/log/.gitkeep +0 -0
  27. data/spec/dummy/apps/main/log/app.log +0 -1
  28. data/spec/dummy/apps/main/requests/users.rb +0 -5
  29. data/spec/dummy/apps/main/system/boot.rb +0 -12
  30. data/spec/dummy/apps/main/system/main/application.rb +0 -17
  31. data/spec/dummy/apps/main/system/main/container.rb +0 -16
  32. data/spec/dummy/apps/main/system/main/import.rb +0 -5
  33. data/spec/dummy/apps/main/system/main/requests.rb +0 -22
  34. data/spec/dummy/apps/main/system/main/view.rb +0 -21
  35. data/spec/dummy/apps/main/web/routes/users.rb +0 -19
  36. data/spec/dummy/apps/main/web/templates/layouts/app.html.slim +0 -6
  37. data/spec/dummy/apps/main/web/templates/users/index/_list.html.slim +0 -3
  38. data/spec/dummy/apps/main/web/templates/users/index/_list_item.html.slim +0 -1
  39. data/spec/dummy/apps/main/web/templates/users/index.html.slim +0 -3
  40. data/spec/dummy/bin/console +0 -6
  41. data/spec/dummy/config/application.yml +0 -4
  42. data/spec/dummy/config.ru +0 -3
  43. data/spec/dummy/log/.gitkeep +0 -0
  44. data/spec/dummy/shared/persistence/db.rb +0 -9
  45. data/spec/dummy/shared/persistence.rb +0 -12
  46. data/spec/dummy/system/boot.rb +0 -8
  47. data/spec/dummy/system/dummy/application.rb +0 -7
  48. data/spec/dummy/system/dummy/container.rb +0 -14
  49. data/spec/request/users_spec.rb +0 -35
  50. data/spec/support/helpers.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d081e697a2726007c63cafad831bd0aae3e613dd
4
- data.tar.gz: b43304a395c2233b374b9c2ba360913277307f37
3
+ metadata.gz: ae7be8dfee807179e26795b99b21373e09af8136
4
+ data.tar.gz: b0617d0d7ead77a504ba4caa3487bb5c171814d0
5
5
  SHA512:
6
- metadata.gz: 2565166d2630a838e5c2c6b334575bdb8696522b56ca641280cd20907f6ac75746fe759599ddd125efec97f2557179b646c917d2eb05b23566eb3ec74d75bdd5
7
- data.tar.gz: f58dc571cbd224d6aa333843e7ce5195f9c4ab99c8cfedb125eb37315bddf575f730976990a813d1a19b271cc152d9ac3f8d9b18f224a5e4337874ecc2dd9d63
6
+ metadata.gz: 22456e206baab37dcb943358c5a4ccf99d85b1365b4d0a56756ac0eaa87a19f82ec1cf684c75df3a20b6da5245f7a255b1369d09c7bdafd92f92c532fb631e75
7
+ data.tar.gz: 9b5832e568862fd71249c29f9580b0937a2157cacbdd0f25baa75a803dc73b30b550ca430baa86f3601c44ff23e0de3dff963a847464ed805ec223fbb6c4001e
data/dry-web-roda.gemspec CHANGED
@@ -20,8 +20,9 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.required_ruby_version = '>= 2.1.0'
22
22
 
23
- spec.add_runtime_dependency "dry-web", "~> 0.5"
24
- spec.add_runtime_dependency "dry-configurable", "~> 0.1"
23
+ spec.add_runtime_dependency "dry-web", "~> 0.6", ">= 0.6.0"
24
+ spec.add_runtime_dependency "dry-monitor"
25
+ spec.add_runtime_dependency "dry-configurable", "~> 0.2"
25
26
  spec.add_runtime_dependency "inflecto", "~> 0.0"
26
27
  spec.add_runtime_dependency "roda", "~> 2.14"
27
28
  spec.add_runtime_dependency "roda-flow", "~> 0.3"
@@ -13,6 +13,13 @@ module Dry
13
13
 
14
14
  plugin :multi_route
15
15
  plugin :flow
16
+ plugin :error_handler
17
+
18
+ def self.configure(&block)
19
+ container = super
20
+ use(container[:rack_monitor])
21
+ container
22
+ end
16
23
 
17
24
  def self.resolve(name)
18
25
  config.container[name]
@@ -29,6 +36,10 @@ module Dry
29
36
  def self.root
30
37
  config.container.config.root
31
38
  end
39
+
40
+ def notifications
41
+ self.class[:notifications]
42
+ end
32
43
  end
33
44
  end
34
45
  end
@@ -0,0 +1,11 @@
1
+ require "<%= config[:underscored_app_name] %>/view_controller"
2
+
3
+ module <%= config[:camel_cased_app_name] %>
4
+ module Views
5
+ class Welcome < <%= config[:camel_cased_app_name] %>::ViewController
6
+ configure do |config|
7
+ config.template = "welcome"
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,7 +1,5 @@
1
- require "rack/csrf"
2
1
  require "dry/web/roda/application"
3
2
  require_relative "container"
4
- require "roda_plugins"
5
3
 
6
4
  module <%= config[:camel_cased_app_name] %>
7
5
  class Application < Dry::Web::Roda::Application
@@ -13,19 +11,17 @@ module <%= config[:camel_cased_app_name] %>
13
11
  opts[:root] = Pathname(__FILE__).join("../..").realpath.dirname
14
12
 
15
13
  use Rack::Session::Cookie, key: "<%= config[:underscored_app_name] %>.session", secret: <%= config[:camel_cased_umbrella_name] %>::Container.settings.session_secret
16
- use Rack::Csrf, raise: true
17
14
 
15
+ plugin :csrf, raise: true
18
16
  plugin :flash
19
-
20
- plugin :view
21
- plugin :page
22
-
23
- def name
24
- :<%= config[:underscored_app_name] %>
25
- end
17
+ plugin :dry_view
26
18
 
27
19
  route do |r|
28
20
  r.multi_route
21
+
22
+ r.root do
23
+ r.view "welcome"
24
+ end
29
25
  end
30
26
 
31
27
  load_routes!
@@ -0,0 +1,6 @@
1
+ require "<%= config[:underscored_umbrella_name] %>/view_context"
2
+
3
+ module <%= config[:camel_cased_app_name] %>
4
+ class ViewContext < <%= config[:camel_cased_umbrella_name] %>::ViewContext
5
+ end
6
+ end
@@ -0,0 +1,13 @@
1
+ require "slim"
2
+ require "dry-view"
3
+ require "<%= config[:underscored_app_name] %>/container"
4
+
5
+ module <%= config[:camel_cased_app_name] %>
6
+ class ViewController < Dry::View::Controller
7
+ configure do |config|
8
+ config.paths = [Container.root.join("web/templates")]
9
+ config.context = Container["view_context"]
10
+ config.layout = "application"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ require "<%= config[:underscored_app_name] %>/view_context"
2
+
3
+ <%= config[:camel_cased_app_name] %>::Container.register "view_context", <%= config[:camel_cased_app_name] %>::ViewContext.new
@@ -4,7 +4,6 @@ require_relative "<%= config[:underscored_app_name] %>/container"
4
4
  end
5
5
 
6
6
  require "<%= config[:underscored_app_name] %>/application"
7
- require "<%= config[:underscored_app_name] %>/view"
8
7
  require "<%= config[:underscored_app_name] %>/transactions"
9
8
 
10
9
  <%= config[:camel_cased_app_name] %>::Container.require "transactions/**/*.rb"
@@ -0,0 +1 @@
1
+ h1 Welcome to dry-web-roda!
@@ -23,7 +23,7 @@ gem "dry-struct"
23
23
  gem "dry-transaction"
24
24
  gem "dry-types"
25
25
  gem "dry-validation"
26
- gem "dry-view"
26
+ gem "dry-view", ">= 0.2.2"
27
27
  gem "slim"
28
28
 
29
29
  group :development, :test do
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- APP_ROOT = File.expand_path("../../", __FILE__)
3
+ APP_ROOT = File.expand_path("../../", __FILE__)
4
4
 
5
5
  Dir.chdir(APP_ROOT) do
6
6
  # Set up your app for development here
@@ -0,0 +1,39 @@
1
+ module <%= config[:camel_cased_app_name] %>
2
+ class ViewContext
3
+ attr_reader :attrs
4
+
5
+ def initialize(attrs = {})
6
+ @attrs = attrs
7
+ end
8
+
9
+ def csrf_token
10
+ self[:csrf_token]
11
+ end
12
+
13
+ def csrf_metatag
14
+ self[:csrf_metatag]
15
+ end
16
+
17
+ def csrf_tag
18
+ self[:csrf_tag]
19
+ end
20
+
21
+ def flash
22
+ self[:flash]
23
+ end
24
+
25
+ def flash?
26
+ %i[notice alert].any? { |type| flash[type] }
27
+ end
28
+
29
+ def with(new_attrs)
30
+ self.class.new(attrs.merge(new_attrs))
31
+ end
32
+
33
+ private
34
+
35
+ def [](name)
36
+ attrs.fetch(name)
37
+ end
38
+ end
39
+ end
@@ -1,7 +1,7 @@
1
1
  module Dry
2
2
  module Web
3
3
  module Roda
4
- VERSION = "0.5.1".freeze
4
+ VERSION = "0.6.0".freeze
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,35 @@
1
+ class Roda
2
+ module RodaPlugins
3
+ module DryView
4
+ def self.load_dependencies(app)
5
+ app.plugin :csrf
6
+ app.plugin :flash
7
+ app.plugin :flow
8
+ end
9
+
10
+ module InstanceMethods
11
+ def view_context
12
+ self.class["view_context"].with(view_context_options)
13
+ end
14
+
15
+ def view_context_options
16
+ {
17
+ flash: flash,
18
+ csrf_token: Rack::Csrf.token(request.env),
19
+ csrf_metatag: Rack::Csrf.metatag(request.env),
20
+ csrf_tag: Rack::Csrf.tag(request.env),
21
+ }
22
+ end
23
+ end
24
+
25
+ module RequestMethods
26
+ def view(name, options = {})
27
+ options = {context: scope.view_context}.merge(options)
28
+ is to: "views.#{name}", call_with: [options]
29
+ end
30
+ end
31
+ end
32
+
33
+ register_plugin :dry_view, DryView
34
+ end
35
+ end
data/spec/spec_helper.rb CHANGED
@@ -17,29 +17,8 @@ ENV['RACK_ENV'] = 'test'
17
17
 
18
18
  SPEC_ROOT = Pathname(__FILE__).dirname
19
19
 
20
- Dir[SPEC_ROOT.join('support/*.rb').to_s].each { |f| require f }
21
- Dir[SPEC_ROOT.join('shared/*.rb').to_s].each { |f| require f }
22
-
23
- require SPEC_ROOT.join('dummy/system/boot').to_s
24
-
25
- module Test; end
26
-
27
20
  RSpec.configure do |config|
28
21
  config.disable_monkey_patching!
29
22
 
30
- config.before(:suite) do
31
- Dummy::Application.freeze
32
- end
33
-
34
23
  config.include Rack::Test::Methods, type: :request
35
- config.include Helpers
36
-
37
- config.before do
38
- @test_constants = Test.constants
39
- end
40
-
41
- config.after do
42
- added_constants = Test.constants - @test_constants
43
- added_constants.each { |name| Test.send(:remove_const, name) }
44
- end
45
24
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-web-roda
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-12-26 00:00:00.000000000 Z
11
+ date: 2017-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-web
@@ -16,28 +16,48 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.5'
19
+ version: '0.6'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.6.0
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: '0.5'
29
+ version: '0.6'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.6.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: dry-monitor
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
27
47
  - !ruby/object:Gem::Dependency
28
48
  name: dry-configurable
29
49
  requirement: !ruby/object:Gem::Requirement
30
50
  requirements:
31
51
  - - "~>"
32
52
  - !ruby/object:Gem::Version
33
- version: '0.1'
53
+ version: '0.2'
34
54
  type: :runtime
35
55
  prerelease: false
36
56
  version_requirements: !ruby/object:Gem::Requirement
37
57
  requirements:
38
58
  - - "~>"
39
59
  - !ruby/object:Gem::Version
40
- version: '0.1'
60
+ version: '0.2'
41
61
  - !ruby/object:Gem::Dependency
42
62
  name: inflecto
43
63
  requirement: !ruby/object:Gem::Requirement
@@ -176,16 +196,19 @@ files:
176
196
  - lib/dry/web/roda/generators/app.rb
177
197
  - lib/dry/web/roda/generators/umbrella.rb
178
198
  - lib/dry/web/roda/skeletons/app/lib/__underscored_app_name__/.keep
199
+ - lib/dry/web/roda/skeletons/app/lib/__underscored_app_name__/views/welcome.rb.tt
179
200
  - lib/dry/web/roda/skeletons/app/system/__underscored_app_name__/application.rb.tt
180
201
  - lib/dry/web/roda/skeletons/app/system/__underscored_app_name__/container.rb.tt
181
202
  - lib/dry/web/roda/skeletons/app/system/__underscored_app_name__/import.rb.tt
182
- - lib/dry/web/roda/skeletons/app/system/__underscored_app_name__/page.rb.tt
183
203
  - lib/dry/web/roda/skeletons/app/system/__underscored_app_name__/transactions.rb.tt
184
- - lib/dry/web/roda/skeletons/app/system/__underscored_app_name__/view.rb.tt
204
+ - lib/dry/web/roda/skeletons/app/system/__underscored_app_name__/view_context.rb.tt
205
+ - lib/dry/web/roda/skeletons/app/system/__underscored_app_name__/view_controller.rb.tt
185
206
  - lib/dry/web/roda/skeletons/app/system/boot.rb.tt
207
+ - lib/dry/web/roda/skeletons/app/system/boot/view.rb.tt
186
208
  - lib/dry/web/roda/skeletons/app/transactions/example.rb.tt
187
209
  - lib/dry/web/roda/skeletons/app/web/routes/example.rb.tt
188
210
  - lib/dry/web/roda/skeletons/app/web/templates/layouts/application.html.slim
211
+ - lib/dry/web/roda/skeletons/app/web/templates/welcome.html.slim
189
212
  - lib/dry/web/roda/skeletons/umbrella/.gitignore
190
213
  - lib/dry/web/roda/skeletons/umbrella/Gemfile
191
214
  - lib/dry/web/roda/skeletons/umbrella/README.md.tt
@@ -196,12 +219,11 @@ files:
196
219
  - lib/dry/web/roda/skeletons/umbrella/config/settings.yml.tt
197
220
  - lib/dry/web/roda/skeletons/umbrella/db/sample_data.rb
198
221
  - lib/dry/web/roda/skeletons/umbrella/db/seed.rb
199
- - lib/dry/web/roda/skeletons/umbrella/lib/__underscored_app_name__/page.rb.tt
200
222
  - lib/dry/web/roda/skeletons/umbrella/lib/__underscored_app_name__/repository.rb.tt
201
223
  - lib/dry/web/roda/skeletons/umbrella/lib/__underscored_app_name__/transactions.rb.tt
224
+ - lib/dry/web/roda/skeletons/umbrella/lib/__underscored_app_name__/view_context.rb.tt
202
225
  - lib/dry/web/roda/skeletons/umbrella/lib/persistence/commands/.keep
203
226
  - lib/dry/web/roda/skeletons/umbrella/lib/persistence/relations/.keep
204
- - lib/dry/web/roda/skeletons/umbrella/lib/roda_plugins.rb
205
227
  - lib/dry/web/roda/skeletons/umbrella/lib/types.rb
206
228
  - lib/dry/web/roda/skeletons/umbrella/log/.keep
207
229
  - lib/dry/web/roda/skeletons/umbrella/spec/app_helper.rb
@@ -217,36 +239,8 @@ files:
217
239
  - lib/dry/web/roda/skeletons/umbrella/system/boot/logger.rb.tt
218
240
  - lib/dry/web/roda/skeletons/umbrella/system/boot/rom.rb.tt
219
241
  - lib/dry/web/roda/version.rb
220
- - spec/dummy/apps/main/lib/main/entities/user.rb
221
- - spec/dummy/apps/main/lib/main/persistence/repositories/users.rb
222
- - spec/dummy/apps/main/lib/main/transactions/register_user.rb
223
- - spec/dummy/apps/main/lib/main/views/users/index.rb
224
- - spec/dummy/apps/main/log/.gitkeep
225
- - spec/dummy/apps/main/log/app.log
226
- - spec/dummy/apps/main/requests/users.rb
227
- - spec/dummy/apps/main/system/boot.rb
228
- - spec/dummy/apps/main/system/main/application.rb
229
- - spec/dummy/apps/main/system/main/container.rb
230
- - spec/dummy/apps/main/system/main/import.rb
231
- - spec/dummy/apps/main/system/main/requests.rb
232
- - spec/dummy/apps/main/system/main/view.rb
233
- - spec/dummy/apps/main/web/routes/users.rb
234
- - spec/dummy/apps/main/web/templates/layouts/app.html.slim
235
- - spec/dummy/apps/main/web/templates/users/index.html.slim
236
- - spec/dummy/apps/main/web/templates/users/index/_list.html.slim
237
- - spec/dummy/apps/main/web/templates/users/index/_list_item.html.slim
238
- - spec/dummy/bin/console
239
- - spec/dummy/config.ru
240
- - spec/dummy/config/application.yml
241
- - spec/dummy/log/.gitkeep
242
- - spec/dummy/shared/persistence.rb
243
- - spec/dummy/shared/persistence/db.rb
244
- - spec/dummy/system/boot.rb
245
- - spec/dummy/system/dummy/application.rb
246
- - spec/dummy/system/dummy/container.rb
247
- - spec/request/users_spec.rb
242
+ - lib/roda/plugins/dry_view.rb
248
243
  - spec/spec_helper.rb
249
- - spec/support/helpers.rb
250
244
  homepage: https://github.com/dry-rb/dry-web-roda
251
245
  licenses:
252
246
  - MIT
@@ -267,38 +261,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
267
261
  version: '0'
268
262
  requirements: []
269
263
  rubyforge_project:
270
- rubygems_version: 2.5.1
264
+ rubygems_version: 2.6.9
271
265
  signing_key:
272
266
  specification_version: 4
273
267
  summary: Roda integration for dry-web apps
274
268
  test_files:
275
- - spec/dummy/apps/main/lib/main/entities/user.rb
276
- - spec/dummy/apps/main/lib/main/persistence/repositories/users.rb
277
- - spec/dummy/apps/main/lib/main/transactions/register_user.rb
278
- - spec/dummy/apps/main/lib/main/views/users/index.rb
279
- - spec/dummy/apps/main/log/.gitkeep
280
- - spec/dummy/apps/main/log/app.log
281
- - spec/dummy/apps/main/requests/users.rb
282
- - spec/dummy/apps/main/system/boot.rb
283
- - spec/dummy/apps/main/system/main/application.rb
284
- - spec/dummy/apps/main/system/main/container.rb
285
- - spec/dummy/apps/main/system/main/import.rb
286
- - spec/dummy/apps/main/system/main/requests.rb
287
- - spec/dummy/apps/main/system/main/view.rb
288
- - spec/dummy/apps/main/web/routes/users.rb
289
- - spec/dummy/apps/main/web/templates/layouts/app.html.slim
290
- - spec/dummy/apps/main/web/templates/users/index.html.slim
291
- - spec/dummy/apps/main/web/templates/users/index/_list.html.slim
292
- - spec/dummy/apps/main/web/templates/users/index/_list_item.html.slim
293
- - spec/dummy/bin/console
294
- - spec/dummy/config.ru
295
- - spec/dummy/config/application.yml
296
- - spec/dummy/log/.gitkeep
297
- - spec/dummy/shared/persistence.rb
298
- - spec/dummy/shared/persistence/db.rb
299
- - spec/dummy/system/boot.rb
300
- - spec/dummy/system/dummy/application.rb
301
- - spec/dummy/system/dummy/container.rb
302
- - spec/request/users_spec.rb
303
269
  - spec/spec_helper.rb
304
- - spec/support/helpers.rb
@@ -1,6 +0,0 @@
1
- require "<%= config[:underscored_umbrella_name] %>/page"
2
-
3
- module <%= config[:camel_cased_app_name] %>
4
- class Page < <%= config[:camel_cased_umbrella_name] %>::Page
5
- end
6
- end
@@ -1,19 +0,0 @@
1
- require "slim"
2
- require "dry-view"
3
- require "<%= config[:underscored_app_name] %>/container"
4
- require "<%= config[:underscored_app_name] %>/page"
5
-
6
- module <%= config[:camel_cased_app_name] %>
7
- Container.register "page", Page.new
8
-
9
- class View < Dry::View::Layout
10
- setting :root, Container.root.join("web/templates")
11
- setting :scope, Container["page"]
12
- setting :formats, {html: :slim}
13
- setting :name, "application"
14
-
15
- def locals(options)
16
- super.merge(options[:scope].view_locals)
17
- end
18
- end
19
- end
@@ -1,48 +0,0 @@
1
- module <%= config[:camel_cased_app_name] %>
2
- class Page
3
- attr_reader :options
4
-
5
- def initialize(options = {})
6
- @options = options
7
- end
8
-
9
- def view_locals
10
- {
11
- csrf_token: csrf_token,
12
- csrf_tag: csrf_tag,
13
- }
14
- end
15
-
16
- def csrf_token
17
- self[:csrf_token].()
18
- end
19
-
20
- def csrf_metatag
21
- self[:csrf_metatag].()
22
- end
23
-
24
- def csrf_tag
25
- self[:csrf_tag].()
26
- end
27
-
28
- def flash
29
- self[:flash]
30
- end
31
-
32
- def flash?
33
- %i[notice alert].any? { |type| flash[type] }
34
- end
35
-
36
- def with_flash(flash)
37
- with(flash: flash)
38
- end
39
-
40
- def with(new_options)
41
- self.class.new(options.merge(new_options))
42
- end
43
-
44
- def [](name)
45
- options.fetch(name)
46
- end
47
- end
48
- end
@@ -1,34 +0,0 @@
1
- require "roda"
2
- require "rack/csrf"
3
-
4
- class Roda
5
- module RodaPlugins
6
- module Page
7
- module InstanceMethods
8
- def current_page
9
- page.with_flash(flash)
10
- end
11
-
12
- def page
13
- self.class["page"].with(
14
- csrf_token: -> { Rack::Csrf.token(request.env) },
15
- csrf_metatag: -> { Rack::Csrf.metatag(request.env) },
16
- csrf_tag: -> { Rack::Csrf.tag(request.env) },
17
- )
18
- end
19
- end
20
- end
21
-
22
- module View
23
- module RequestMethods
24
- def view(name, overrides = {})
25
- options = {scope: scope.current_page}.merge(overrides)
26
- is to: "views.#{name}", call_with: [options]
27
- end
28
- end
29
- end
30
-
31
- register_plugin :page, Page
32
- register_plugin :view, View
33
- end
34
- end
@@ -1,5 +0,0 @@
1
- module Main
2
- module Entities
3
- User = Struct.new(:id, :name)
4
- end
5
- end
@@ -1,15 +0,0 @@
1
- require 'main/import'
2
-
3
- module Main
4
- module Persistence
5
- module Repositories
6
- class Users
7
- include Main::Import['persistence.db']
8
-
9
- def all
10
- db[:users]
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,21 +0,0 @@
1
- require 'dry-monads'
2
- require 'main/entities/user'
3
- require 'main/import'
4
-
5
- module Main
6
- module Transactions
7
- class RegisterUser
8
- include Dry::Monads::Either::Mixin
9
-
10
- include Main::Import['persistence.db']
11
-
12
- def call(params)
13
- if params['name']
14
- Right(db[:users] << Main::Entities::User.new(*params.values_at('id', 'name')))
15
- else
16
- Left(validation: 'name is missing')
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,17 +0,0 @@
1
- require 'main/view'
2
-
3
- module Main
4
- module Views
5
- module Users
6
- class Index < Main::View
7
- configure do |config|
8
- config.template = 'users/index'
9
- end
10
-
11
- def locals(options)
12
- { users: [{ name: 'Jane' }, { name: 'Joe' }] }
13
- end
14
- end
15
- end
16
- end
17
- end
File without changes
@@ -1 +0,0 @@
1
- # Logfile created on 2016-04-21 14:19:48 +1000 by logger.rb/53141
@@ -1,5 +0,0 @@
1
- Main::Requests.define do |r|
2
- r.define('main.requests.users.create') do
3
- step 'main.transactions.register_user'
4
- end
5
- end
@@ -1,12 +0,0 @@
1
- require_relative 'main/container'
2
-
3
- Main::Container.finalize! do |container|
4
- require 'logger'
5
- container.register(:logger, Logger.new(container.root.join('log/app.log')))
6
- end
7
-
8
- require 'main/application'
9
- require 'main/view'
10
- require 'main/requests'
11
-
12
- Main::Container.require('requests/**/*.rb')
@@ -1,17 +0,0 @@
1
- require 'dry/web/roda/application'
2
- require_relative 'container'
3
-
4
- module Main
5
- class Application < Dry::Web::Roda::Application
6
- configure do |config|
7
- config.routes = 'web/routes'.freeze
8
- config.container = Main::Container
9
- end
10
-
11
- route do |r|
12
- r.multi_route
13
- end
14
-
15
- load_routes!
16
- end
17
- end
@@ -1,16 +0,0 @@
1
- require 'dry/web/container'
2
-
3
- module Main
4
- class Container < Dry::Web::Container
5
- configure do |config|
6
- config.root = Pathname(__FILE__).join('../..').realpath.dirname.freeze
7
- config.auto_register = 'lib'
8
- end
9
-
10
- require root.join('../../shared/persistence').to_s
11
-
12
- import Persistence::Container
13
-
14
- load_paths!('lib')
15
- end
16
- end
@@ -1,5 +0,0 @@
1
- require_relative 'container'
2
-
3
- module Main
4
- Import = Main::Container.injector
5
- end
@@ -1,22 +0,0 @@
1
- require_relative 'container'
2
- require 'dry-transaction'
3
-
4
- module Main
5
- module Requests
6
- class Registrar
7
- attr_reader :container
8
-
9
- def initialize(container)
10
- @container = container
11
- end
12
-
13
- def define(identifier, &block)
14
- container.register(identifier, Dry.Transaction(container: container, &block))
15
- end
16
- end
17
-
18
- def self.define(&block)
19
- yield(Registrar.new(Container))
20
- end
21
- end
22
- end
@@ -1,21 +0,0 @@
1
- require 'slim'
2
- require 'dry-view'
3
-
4
- require_relative 'container'
5
-
6
- module Main
7
- class Page
8
- def title
9
- 'Woohaa'
10
- end
11
- end
12
- end
13
-
14
- module Main
15
- class View < Dry::View::Layout
16
- setting :root, Container.root.join('web/templates')
17
- setting :scope, Page.new
18
- setting :formats, {html: :slim}
19
- setting :name, 'app'.freeze
20
- end
21
- end
@@ -1,19 +0,0 @@
1
- class Main::Application
2
- route('users') do |r|
3
- r.get(to: 'main.views.users.index')
4
-
5
- r.resolve('main.requests.users.create') do |t|
6
- r.post do
7
- t.(r[:user]) do |m|
8
- m.success do
9
- response.status = 201
10
- end
11
-
12
- m.failure do |err|
13
- r.redirect '/users'
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,6 +0,0 @@
1
- doctype html
2
- html
3
- head
4
- title == page.title
5
- body
6
- == yield
@@ -1,3 +0,0 @@
1
- ul
2
- - users.each do |user|
3
- == user.list_item
@@ -1 +0,0 @@
1
- li == user[:name]
@@ -1,3 +0,0 @@
1
- h1 Users
2
-
3
- .users == users.list
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'dry/web/cli'
4
- # require_relative '../system/boot'
5
-
6
- Dry::Web::Cli.start
@@ -1,4 +0,0 @@
1
- development:
2
- DATABASE_URL: 'postgres://localhost/rodakase'
3
- test:
4
- DATABASE_URL: 'postgres://localhost/rodakase'
data/spec/dummy/config.ru DELETED
@@ -1,3 +0,0 @@
1
- require_relative 'system/boot'
2
-
3
- run Dummy::Application.freeze.app
File without changes
@@ -1,9 +0,0 @@
1
- module Persistence
2
- class Db
3
- STORE = Hash.new { |k, v| k[v] = [] }
4
-
5
- def [](name)
6
- STORE[name]
7
- end
8
- end
9
- end
@@ -1,12 +0,0 @@
1
- module Persistence
2
- class Container < Dry::System::Container
3
- configure do |config|
4
- config.root = Pathname(__dir__).join('persistence')
5
- config.name = :persistence
6
- end
7
-
8
- require 'db'
9
-
10
- register(:db, Db.new)
11
- end
12
- end
@@ -1,8 +0,0 @@
1
- require_relative 'dummy/container'
2
-
3
- Dummy::Container.finalize!
4
-
5
- app_paths = Pathname(__FILE__).dirname.join('../apps').realpath.join('*')
6
- Dir[app_paths].each { |f| require "#{f}/system/boot" }
7
-
8
- require_relative "dummy/application"
@@ -1,7 +0,0 @@
1
- module Dummy
2
- class Application < Roda
3
- route do |r|
4
- r.run Main::Application.freeze.app
5
- end
6
- end
7
- end
@@ -1,14 +0,0 @@
1
- require 'dry/web/container'
2
-
3
- module Dummy
4
- class Container < Dry::Web::Container
5
- # we need to override default here because we run tests from within the
6
- # project root and our app is in spec/dummy
7
- configure do |config|
8
- config.root = Pathname(__FILE__).dirname.join('../..')
9
- config.auto_register = 'lib'
10
- end
11
-
12
- load_paths! 'lib'
13
- end
14
- end
@@ -1,35 +0,0 @@
1
- require 'main/entities/user'
2
-
3
- RSpec.describe '/users', type: :request do
4
- describe 'GET /users' do
5
- it 'renders hello template' do
6
- get '/users'
7
-
8
- expect(last_response).to be_ok
9
-
10
- expect(last_response.body).to eql(
11
- '<!DOCTYPE html><html><head><title>Woohaa</title></head><body><h1>Users</h1><div class="users"><ul><li>Jane</li><li>Joe</li></ul></div></body></html>'
12
- )
13
- end
14
- end
15
-
16
- describe 'POST /users' do
17
- it 'creates a user' do
18
- user = { id: '1', name: 'Jane' }
19
-
20
- post '/users', user: user
21
-
22
- expect(last_response).to be_created
23
-
24
- expect(container['main.persistence.repositories.users'].all).to eql([Main::Entities::User.new('1', 'Jane')])
25
- end
26
-
27
- it 'redirects when name is missing' do
28
- user = { id: '1' }
29
-
30
- post '/users', user: user
31
-
32
- expect(last_response).to be_redirect
33
- end
34
- end
35
- end
@@ -1,15 +0,0 @@
1
- module Helpers
2
- module_function
3
-
4
- def fixtures_path
5
- SPEC_ROOT.join('fixtures')
6
- end
7
-
8
- def container
9
- Main::Container
10
- end
11
-
12
- def app
13
- Dummy::Application.app
14
- end
15
- end