dear-dirty-controller 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a4f0d52a4ba7861a3e0cbdff4b89530f6ca37db73b56c75b3d534f959e37910e
4
+ data.tar.gz: 6df2dc187eeb926e8459f46ab562e83b4f923c15d412ed25907f774295140936
5
+ SHA512:
6
+ metadata.gz: 1506d1024e8b3d91a4c5757917b9001555d4b93cac545be920e3fa40f893e46dfe404537abb8cd8789d0605c2ae4108c5197093266aeaea24432110103aefe1e
7
+ data.tar.gz: 97b88cd2b2dd4c5f7a7b498e87775cbec94089f28f3e1a9b1cf9a7c3188d49357a7fb7f8d32ae8bf4c33daf4bbd4ec3e33f5b9be15b990ca3765173350b41c3e
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "ostruct"
4
+
5
+ module DearDirtyController
6
+ class Context < OpenStruct; end
7
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DearDirtyController
4
+ module ErrorHandler
5
+ def self.included(base)
6
+ base.extend ClassMethods
7
+ base.include InstanceMethods
8
+ end
9
+ end
10
+
11
+ module InstanceMethods
12
+ private
13
+
14
+ def try_rescue(error)
15
+ block = self.class._error_handlers&.fetch(error.class, nil)
16
+ block ||= self.class._all_error_handler
17
+
18
+ raise error if block.nil?
19
+
20
+ instance_exec(error, &block)
21
+ end
22
+ end
23
+
24
+ module ClassMethods
25
+ attr_reader :_error_handlers, :_all_error_handler
26
+
27
+ private
28
+
29
+ def rescue_from(error_class, &block)
30
+ return unless block_given?
31
+
32
+ @_error_handlers ||= {}
33
+ @_error_handlers[error_class] = block
34
+ end
35
+
36
+ def rescue_all(&block)
37
+ return unless block_given?
38
+
39
+ @_all_error_handler = block
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DearDirtyController
4
+ module Hook
5
+ def self.included(base)
6
+ base.extend ClassMethods
7
+ base.include InstanceMethods
8
+ end
9
+
10
+ module InstanceMethods
11
+ private
12
+
13
+ attr_reader :skip_execution
14
+
15
+ def run_before_callbacks
16
+ self.class._before_callbacks&.each { instance_exec(&_1) }
17
+ end
18
+
19
+ def run_after_callbacks
20
+ self.class._after_callbacks&.each { instance_exec(&_1) }
21
+ end
22
+
23
+ def skip_execution!
24
+ @skip_execution = true
25
+ end
26
+
27
+ def skip_execution?
28
+ @skip_execution || false
29
+ end
30
+ end
31
+
32
+ module ClassMethods
33
+ attr_reader :_before_callbacks, :_after_callbacks
34
+
35
+ private
36
+
37
+ def before(&block)
38
+ return unless block_given?
39
+
40
+ @_before_callbacks ||= []
41
+ @_before_callbacks << block
42
+ end
43
+
44
+ def after(&block)
45
+ return unless block_given?
46
+
47
+ @_after_callbacks ||= []
48
+ @_after_callbacks << block
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DearDirtyController
4
+ module RackResponse
5
+ def self.included(base)
6
+ base.extend ClassMethods
7
+ base.include InstanceMethods
8
+ end
9
+
10
+ module InstanceMethods
11
+ attr_reader :_headers, :_status, :_body
12
+
13
+ private
14
+
15
+ def headers(param)
16
+ @_headers = param
17
+ end
18
+
19
+ def content_type(param)
20
+ @_headers ||= {}
21
+ @_headers["Content-Type"] = param
22
+ end
23
+
24
+ def status(param)
25
+ @_status = param
26
+ end
27
+
28
+ def body(param)
29
+ @_body = param
30
+ end
31
+
32
+ def build_rack_response
33
+ status = @_status || self.class._status || 200
34
+ headers = (self.class._headers || {}).merge(@_headers || {})
35
+ body = @_body.nil? ? [] : [@_body]
36
+ [status, headers, body.to_json]
37
+ end
38
+ end
39
+
40
+ module ClassMethods
41
+ attr_reader :_headers, :_status
42
+
43
+ private
44
+
45
+ def headers(param)
46
+ @_headers = param
47
+ end
48
+
49
+ def content_type(param)
50
+ @_headers ||= {}
51
+ @_headers["Content-Type"] = param
52
+ end
53
+
54
+ def status(param)
55
+ @_status = param
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+
5
+ module DearDirtyController
6
+ module Serializable
7
+ def self.included(base)
8
+ base.extend ClassMethods
9
+ base.include InstanceMethods
10
+ end
11
+
12
+ module InstanceMethods
13
+ private
14
+
15
+ def serialize(value)
16
+ if self.class._serialize_block
17
+ self.class._serialize_block.call(value)
18
+ elsif self.class._serializer_class
19
+ self.class._serializer_class.send(self.class._serialize_method, value)
20
+ else
21
+ value
22
+ end
23
+ end
24
+ end
25
+
26
+ module ClassMethods
27
+ attr_reader :_serializer_class, :_serialize_method, :_serialize_block
28
+
29
+ private
30
+
31
+ def serializer(klass, **params)
32
+ return if klass.nil?
33
+
34
+ @_serializer_class = klass
35
+ @_serialize_method = params[:method] || :call
36
+ end
37
+
38
+ def serialize(&block)
39
+ return unless block_given?
40
+
41
+ @_serialize_block = block
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DearDirtyController
4
+ VERSION = "0.1.0"
5
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "dear_dirty_controller/context"
4
+ require_relative "dear_dirty_controller/error_handler"
5
+ require_relative "dear_dirty_controller/hook"
6
+ require_relative "dear_dirty_controller/rack_response"
7
+ require_relative "dear_dirty_controller/serializable"
8
+ require_relative "dear_dirty_controller/version"
9
+
10
+ module DearDirtyController
11
+ module Mixin
12
+ attr_reader :context, :args
13
+
14
+ def self.included(base)
15
+ base.extend ClassMethods
16
+ base.include DearDirtyController::ErrorHandler
17
+ base.include DearDirtyController::Hook
18
+ base.include DearDirtyController::RackResponse
19
+ base.include DearDirtyController::Serializable
20
+ end
21
+
22
+ def initialize(*args)
23
+ @args = args
24
+ end
25
+
26
+ def call
27
+ @context = Context.new
28
+ begin
29
+ run_before_callbacks
30
+ body serialize(execute) unless skip_execution?
31
+ run_after_callbacks
32
+ rescue => e
33
+ try_rescue e
34
+ end
35
+ build_rack_response
36
+ end
37
+
38
+ module ClassMethods
39
+ def call(...)
40
+ new(...).call
41
+ end
42
+
43
+ def execute(&block)
44
+ define_method(:execute, &block)
45
+ end
46
+ end
47
+ end
48
+ end
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dear-dirty-controller
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - youtaman
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2024-10-28 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: dear-dirty-controller is a gem for drawing controllers in a clean and
14
+ beautiful way.
15
+ email:
16
+ - akikiuv+youtaman@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - lib/dear_dirty_controller.rb
22
+ - lib/dear_dirty_controller/context.rb
23
+ - lib/dear_dirty_controller/error_handler.rb
24
+ - lib/dear_dirty_controller/hook.rb
25
+ - lib/dear_dirty_controller/rack_response.rb
26
+ - lib/dear_dirty_controller/serializable.rb
27
+ - lib/dear_dirty_controller/version.rb
28
+ homepage: https://github.com/youtaman/dear-dirty-controller
29
+ licenses:
30
+ - MIT
31
+ metadata:
32
+ homepage_uri: https://github.com/youtaman/dear-dirty-controller
33
+ source_code_uri: https://github.com/youtaman/dear-dirty-controller
34
+ changelog_uri: https://github.com/youtaman/dear-dirty-controller/blob/master/CHANGELOG.md
35
+ rubygems_mfa_required: 'true'
36
+ post_install_message:
37
+ rdoc_options: []
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: 3.0.0
45
+ required_rubygems_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ requirements: []
51
+ rubygems_version: 3.4.10
52
+ signing_key:
53
+ specification_version: 4
54
+ summary: dear-dirty-controller is a gem for drawing controllers in a clean and beautiful
55
+ way.
56
+ test_files: []