mime_actor 0.6.0 → 0.6.1.beta
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 +4 -4
- data/.rubocop.yml +3 -0
- data/COMPARE.md +2 -2
- data/README.md +3 -3
- data/codecov.yml +18 -0
- data/lib/mime_actor/action.rb +8 -5
- data/lib/mime_actor/errors.rb +4 -2
- data/lib/mime_actor/rescue.rb +15 -22
- data/lib/mime_actor/scene.rb +66 -19
- data/lib/mime_actor/stage.rb +37 -14
- data/lib/mime_actor/validator.rb +14 -20
- data/lib/mime_actor/version.rb +4 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b1a2cbc83644b0f085441dbcac4ec82cf9b9cc5336f3df9c6c795a104c952341
|
4
|
+
data.tar.gz: 73995fad83611aa2d77ca1b11ccc695c0f3b0984378797de1b30de73696d6089
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb58712d60fa26fa4d5710b5abdc239a7d9e3e8d96808523572df64e32df411d2811d93bf6a1e2529c2f3bc7f56efeb806c8763dcc52beb516f06d341cdae93a
|
7
|
+
data.tar.gz: 554989721dfaf823d0fc5232b3855d47507f9812ceba7e6cff430bd5ac0984eafe9e586732c69bec04e61dd9e2ea6279f4036b90b0b91d4719d1d737e6785099
|
data/.rubocop.yml
CHANGED
data/COMPARE.md
CHANGED
@@ -27,7 +27,7 @@ class EventsController < ActionController::Base
|
|
27
27
|
before_action only: :index { @events = Event.all }
|
28
28
|
|
29
29
|
# dynamically defines the action method according to on: argument
|
30
|
-
|
30
|
+
respond_act_to :html, :json, on: :index
|
31
31
|
|
32
32
|
def index_html
|
33
33
|
@event_categories = EventCategory.all
|
@@ -92,7 +92,7 @@ class EventsController < ActionController::Base
|
|
92
92
|
# AbstractController::Callbacks here to load model with params
|
93
93
|
before_action only: [:show, :update] { @event = Event.find(params.require(:event_id)) }
|
94
94
|
|
95
|
-
|
95
|
+
respond_act_to :html, :json, on: [:show, :update]
|
96
96
|
|
97
97
|
rescue_act_from ActiveRecord::RecordNotFound, format: :json do |ex|
|
98
98
|
render status: :bad_request, json: { error: ex.message }
|
data/README.md
CHANGED
@@ -16,8 +16,8 @@ class EventsController < ActionController::Base
|
|
16
16
|
before_action only: :index { @events = Event.all }
|
17
17
|
before_action only: [:show, :update] { @event = Event.find(params.require(:event_id)) }
|
18
18
|
|
19
|
-
|
20
|
-
|
19
|
+
respond_act_to :html, :json, on: :index
|
20
|
+
respond_act_to :html, :json, on: [:show, :update]
|
21
21
|
|
22
22
|
rescue_act_from ActiveRecord::RecordNotFound, format: :json do |ex|
|
23
23
|
render status: :bad_request, json: { error: "Resouce not found" }
|
@@ -99,7 +99,7 @@ Please see [LICENSE](https://github.com/ryancyq/mime_actor/blob/main/LICENSE) fo
|
|
99
99
|
|
100
100
|
## Contributing
|
101
101
|
|
102
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/ryancyq/mime_actor.
|
102
|
+
Bug reports and pull requests are welcome on GitHub at [https://github.com/ryancyq/mime_actor](https://github.com/ryancyq/mime_actor).
|
103
103
|
|
104
104
|
[rubygems_badge]: https://img.shields.io/gem/v/mime_actor.svg
|
105
105
|
[rubygems]: https://rubygems.org/gems/mime_actor
|
data/codecov.yml
ADDED
data/lib/mime_actor/action.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
require "mime_actor/scene"
|
4
6
|
require "mime_actor/stage"
|
5
7
|
require "mime_actor/rescue"
|
6
8
|
|
7
9
|
require "active_support/concern"
|
10
|
+
require "active_support/core_ext/object/blank"
|
8
11
|
require "active_support/lazy_load_hooks"
|
9
12
|
require "abstract_controller/rendering"
|
10
13
|
require "action_controller/metal/mime_responds"
|
@@ -44,17 +47,17 @@ module MimeActor
|
|
44
47
|
#
|
45
48
|
def start_scene(action)
|
46
49
|
action = action&.to_sym
|
47
|
-
formats = acting_scenes.fetch(action,
|
50
|
+
formats = acting_scenes.fetch(action, {})
|
48
51
|
|
49
52
|
if formats.empty?
|
50
|
-
logger.warn { "format is empty for action
|
53
|
+
logger.warn { "format is empty for action: #{action.inspect}" }
|
51
54
|
return
|
52
55
|
end
|
53
56
|
|
54
57
|
respond_to do |collector|
|
55
|
-
formats.each do |format|
|
56
|
-
dispatch = self.class.
|
57
|
-
cue_actor("#{action}_#{format}")
|
58
|
+
formats.each do |format, actor|
|
59
|
+
dispatch = self.class.dispatch_act(action: action, format: format, context: self) do
|
60
|
+
cue_actor(actor.presence || "#{action}_#{format}")
|
58
61
|
end
|
59
62
|
collector.public_send(format, &dispatch)
|
60
63
|
end
|
data/lib/mime_actor/errors.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
require "set"
|
4
6
|
|
5
7
|
module MimeActor
|
@@ -24,7 +26,7 @@ module MimeActor
|
|
24
26
|
|
25
27
|
class ActorNotFound < ActorError
|
26
28
|
def generate_message
|
27
|
-
"
|
29
|
+
"#{actor.inspect} not found"
|
28
30
|
end
|
29
31
|
end
|
30
32
|
|
@@ -39,7 +41,7 @@ module MimeActor
|
|
39
41
|
|
40
42
|
class ActionExisted < ActionError
|
41
43
|
def generate_message
|
42
|
-
"action
|
44
|
+
"action #{action.inspect} already existed"
|
43
45
|
end
|
44
46
|
end
|
45
47
|
end
|
data/lib/mime_actor/rescue.rb
CHANGED
@@ -8,6 +8,7 @@ require "mime_actor/validator"
|
|
8
8
|
require "active_support/concern"
|
9
9
|
require "active_support/core_ext/array/wrap"
|
10
10
|
require "active_support/core_ext/module/attribute_accessors"
|
11
|
+
require "active_support/core_ext/object/blank"
|
11
12
|
require "active_support/core_ext/string/inflections"
|
12
13
|
|
13
14
|
module MimeActor
|
@@ -28,13 +29,13 @@ module MimeActor
|
|
28
29
|
mattr_accessor :actor_rescuers, instance_writer: false, default: []
|
29
30
|
end
|
30
31
|
|
31
|
-
|
32
|
+
module ClassMethods
|
32
33
|
# Registers a rescue handler for the given error classes with `action`/`format` filter
|
33
34
|
#
|
34
35
|
# @param klazzes the error classes to rescue
|
35
36
|
# @param action the `action` filter
|
36
37
|
# @param format the `format` filter
|
37
|
-
# @param with the rescue
|
38
|
+
# @param with the rescue handler when `block` is not provided
|
38
39
|
# @param block the `block` to evaluate when `with` is not provided
|
39
40
|
#
|
40
41
|
# @example Rescue StandardError when raised for any action with `html` format
|
@@ -47,9 +48,13 @@ module MimeActor
|
|
47
48
|
#
|
48
49
|
def rescue_act_from(*klazzes, action: nil, format: nil, with: nil, &block)
|
49
50
|
raise ArgumentError, "error filter is required" if klazzes.empty?
|
51
|
+
raise ArgumentError, "provide either the with: argument or a block" unless with.present? ^ block_given?
|
50
52
|
|
51
|
-
|
52
|
-
|
53
|
+
if block_given?
|
54
|
+
with = block
|
55
|
+
else
|
56
|
+
validate!(:with, with)
|
57
|
+
end
|
53
58
|
|
54
59
|
if action.present?
|
55
60
|
action.is_a?(Enumerable) ? validate!(:actions, action) : validate!(:action, action)
|
@@ -96,26 +101,14 @@ module MimeActor
|
|
96
101
|
case rescuer = find_rescuer(error, format:, action:)
|
97
102
|
when Symbol
|
98
103
|
rescuer_method = context.method(rescuer)
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
when 1
|
103
|
-
->(e, _f, _a) { rescuer_method.call(e) }
|
104
|
-
when 2
|
105
|
-
->(e, f, _a) { rescuer_method.call(e, f) }
|
106
|
-
else
|
107
|
-
->(e, f, a) { rescuer_method.call(e, f, a) }
|
104
|
+
lambda do |*args|
|
105
|
+
passable_args = rescuer_method.arity.negative? ? args : args.take(rescuer_method.arity)
|
106
|
+
rescuer_method.call(*passable_args)
|
108
107
|
end
|
109
108
|
when Proc
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
when 1
|
114
|
-
->(e, _f, _a) { context.instance_exec(e, &rescuer) }
|
115
|
-
when 2
|
116
|
-
->(e, f, _a) { context.instance_exec(e, f, &rescuer) }
|
117
|
-
else
|
118
|
-
->(e, f, a) { context.instance_exec(e, f, a, &rescuer) }
|
109
|
+
lambda do |*args|
|
110
|
+
passable_args = rescuer.arity.negative? ? args : args.take(rescuer.arity)
|
111
|
+
context.instance_exec(*passable_args, &rescuer)
|
119
112
|
end
|
120
113
|
end
|
121
114
|
end
|
data/lib/mime_actor/scene.rb
CHANGED
@@ -6,9 +6,9 @@ require "mime_actor/errors"
|
|
6
6
|
require "mime_actor/validator"
|
7
7
|
|
8
8
|
require "active_support/concern"
|
9
|
-
require "active_support/core_ext/array/extract_options"
|
10
9
|
require "active_support/core_ext/array/wrap"
|
11
10
|
require "active_support/core_ext/module/attribute_accessors"
|
11
|
+
require "active_support/core_ext/object/blank"
|
12
12
|
|
13
13
|
module MimeActor
|
14
14
|
# # MimeActor Scene
|
@@ -16,9 +16,27 @@ module MimeActor
|
|
16
16
|
# Scene provides configuration for `action` + `format` definitions
|
17
17
|
#
|
18
18
|
# @example register a `html` format on action `index`
|
19
|
-
#
|
19
|
+
# respond_act_to :html, on: :index
|
20
|
+
#
|
21
|
+
# # this method should be defined in the class
|
22
|
+
# def index_html; end
|
20
23
|
# @example register `html`, `json` formats on actions `index`, `show`
|
21
|
-
#
|
24
|
+
# respond_act_to :html, :json , on: [:index, :show]
|
25
|
+
#
|
26
|
+
# # these methods should be defined in the class
|
27
|
+
# def index_html; end
|
28
|
+
# def index_json; end
|
29
|
+
# def show_html; end
|
30
|
+
# def show_json; end
|
31
|
+
# @example register a `html` format on action `index` with respond handler method
|
32
|
+
# respond_act_to :html, on: :index, with: :render_html
|
33
|
+
#
|
34
|
+
# # this method should be defined in the class
|
35
|
+
# def render_html; end
|
36
|
+
# @example register a `html` format on action `index` with respond handler proc
|
37
|
+
# respond_act_to :html, on: :index do
|
38
|
+
# render :index
|
39
|
+
# end
|
22
40
|
#
|
23
41
|
# NOTE: Calling the same `action`/`format` multiple times will overwrite previous `action` + `format` definitions.
|
24
42
|
#
|
@@ -31,24 +49,50 @@ module MimeActor
|
|
31
49
|
mattr_accessor :acting_scenes, instance_writer: false, default: {}
|
32
50
|
end
|
33
51
|
|
34
|
-
|
52
|
+
module ClassMethods
|
35
53
|
# Register `action` + `format` definitions.
|
36
54
|
#
|
37
|
-
# @param
|
38
|
-
# @
|
39
|
-
# @
|
55
|
+
# @param formats the collection of `format`
|
56
|
+
# @param on the collection of `action`
|
57
|
+
# @param with the respond handler when `block` is not provided
|
58
|
+
# @param block the `block` to evaluate when `with` is not provided
|
40
59
|
#
|
41
60
|
# @example register a `html` format on action `index`
|
42
|
-
#
|
61
|
+
# respond_act_to :html, on: :index
|
62
|
+
#
|
63
|
+
# # this method should be defined in the class
|
64
|
+
# def index_html; end
|
43
65
|
# @example register `html`, `json` formats on actions `index`, `show`
|
44
|
-
#
|
66
|
+
# respond_act_to :html, :json , on: [:index, :show]
|
67
|
+
#
|
68
|
+
# # these methods should be defined in the class
|
69
|
+
# def index_html; end
|
70
|
+
# def index_json; end
|
71
|
+
# def show_html; end
|
72
|
+
# def show_json; end
|
73
|
+
# @example register a `html` format on action `index` with respond handler method
|
74
|
+
# respond_act_to :html, on: :index, with: :render_html
|
75
|
+
#
|
76
|
+
# # this method should be defined in the class
|
77
|
+
# def render_html; end
|
78
|
+
# @example register a `html` format on action `index` with respond handler proc
|
79
|
+
# respond_act_to :html, on: :index do
|
80
|
+
# render :index
|
81
|
+
# end
|
45
82
|
#
|
46
83
|
# For each unique `action` being registered, it will have a corresponding `action` method being defined.
|
47
|
-
def
|
48
|
-
|
49
|
-
|
84
|
+
def respond_act_to(*formats, on: nil, with: nil, &block)
|
85
|
+
validate!(:formats, formats)
|
86
|
+
|
87
|
+
raise ArgumentError, "provide either the with: argument or a block" if with.present? && block_given?
|
50
88
|
|
51
|
-
|
89
|
+
if block_given?
|
90
|
+
with = block
|
91
|
+
elsif with.present?
|
92
|
+
validate!(:with, with)
|
93
|
+
end
|
94
|
+
|
95
|
+
case actions = on
|
52
96
|
when Enumerable
|
53
97
|
validate!(:actions, actions)
|
54
98
|
when Symbol, String
|
@@ -58,24 +102,27 @@ module MimeActor
|
|
58
102
|
end
|
59
103
|
|
60
104
|
Array.wrap(actions).each do |action|
|
61
|
-
|
105
|
+
formats.each { |format| compose_scene(action, format, with) }
|
62
106
|
end
|
63
107
|
end
|
64
108
|
|
109
|
+
# TODO: remove on next breaking change release
|
110
|
+
alias act_on_format respond_act_to
|
111
|
+
|
65
112
|
private
|
66
113
|
|
67
|
-
def compose_scene(action, format)
|
114
|
+
def compose_scene(action, format, actor)
|
68
115
|
action_defined = (instance_methods + private_instance_methods).include?(action.to_sym)
|
69
116
|
raise MimeActor::ActionExisted, action if !acting_scenes.key?(action) && action_defined
|
70
117
|
|
71
|
-
acting_scenes[action] ||=
|
72
|
-
acting_scenes[action]
|
118
|
+
acting_scenes[action] ||= {}
|
119
|
+
acting_scenes[action][format] = actor
|
73
120
|
|
74
121
|
define_scene(action) unless action_defined
|
75
122
|
end
|
76
123
|
|
77
124
|
def define_scene(action)
|
78
|
-
|
125
|
+
module_eval(
|
79
126
|
# def index
|
80
127
|
# self.respond_to?(:start_scene) && self.start_scene(:index)
|
81
128
|
# end
|
@@ -83,7 +130,7 @@ module MimeActor
|
|
83
130
|
def #{action}
|
84
131
|
self.respond_to?(:start_scene) && self.start_scene(:#{action})
|
85
132
|
end
|
86
|
-
|
133
|
+
RUBY
|
87
134
|
)
|
88
135
|
end
|
89
136
|
end
|
data/lib/mime_actor/stage.rb
CHANGED
@@ -22,7 +22,7 @@ module MimeActor
|
|
22
22
|
mattr_accessor :raise_on_missing_actor, instance_writer: false, default: false
|
23
23
|
end
|
24
24
|
|
25
|
-
|
25
|
+
module ClassMethods
|
26
26
|
# Determine if the `actor_name` belongs to a public instance method excluding methods inherited from ancestors
|
27
27
|
#
|
28
28
|
# @param actor_name
|
@@ -46,13 +46,13 @@ module MimeActor
|
|
46
46
|
# @param block the `block` to be evaluated
|
47
47
|
#
|
48
48
|
# @example Dispatch a cue that prints out a text
|
49
|
-
# dispatch = self.class.
|
49
|
+
# dispatch = self.class.dispatch_act(action: :create, format: :json, context: self) do
|
50
50
|
# puts "completed the dispatch"
|
51
51
|
# end
|
52
52
|
#
|
53
53
|
# dispatch.call == "completed the dispatch" # true
|
54
54
|
#
|
55
|
-
def
|
55
|
+
def dispatch_act(action: nil, format: nil, context: self, &block)
|
56
56
|
raise ArgumentError, "block must be provided" unless block_given?
|
57
57
|
|
58
58
|
lambda do
|
@@ -61,27 +61,50 @@ module MimeActor
|
|
61
61
|
(respond_to?(:rescue_actor) && rescue_actor(e, action:, format:, context:)) || raise
|
62
62
|
end
|
63
63
|
end
|
64
|
+
|
65
|
+
# TODO: remove on next breaking change release
|
66
|
+
alias dispatch_cue dispatch_act
|
64
67
|
end
|
65
68
|
|
66
|
-
# Calls the `actor`
|
67
|
-
#
|
69
|
+
# Calls the `actor` and passing arguments to it.
|
68
70
|
# If a block is given, the result from the `actor` method will be yieled to the block.
|
69
71
|
#
|
70
|
-
#
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
72
|
+
# NOTE: method call on actor if it is String or Symbol. Proc#call if actor is Proc
|
73
|
+
#
|
74
|
+
# @param actor either a method name or a block to evaluate
|
75
|
+
def cue_actor(actor, *args)
|
76
|
+
result = case actor
|
77
|
+
when String, Symbol
|
78
|
+
actor_method_call(actor, *args)
|
79
|
+
when Proc
|
80
|
+
actor_proc_call(actor, *args)
|
81
|
+
else
|
82
|
+
raise TypeError, "invalid actor, got: #{actor.inspect}"
|
83
|
+
end
|
78
84
|
|
79
|
-
result = public_send(actor_name, *args)
|
80
85
|
if block_given?
|
81
86
|
yield result
|
82
87
|
else
|
83
88
|
result
|
84
89
|
end
|
85
90
|
end
|
91
|
+
|
92
|
+
private
|
93
|
+
|
94
|
+
def actor_method_call(actor_method, *args)
|
95
|
+
unless self.class.actor?(actor_method)
|
96
|
+
raise MimeActor::ActorNotFound, actor_method if raise_on_missing_actor
|
97
|
+
|
98
|
+
logger.warn { "actor #{actor_method.inspect} not found" }
|
99
|
+
return
|
100
|
+
end
|
101
|
+
|
102
|
+
public_send(actor_method, *args)
|
103
|
+
end
|
104
|
+
|
105
|
+
def actor_proc_call(actor_proc, *args)
|
106
|
+
passable_args = actor_proc.arity.negative? ? args : args.take(actor_proc.arity)
|
107
|
+
instance_exec(*passable_args, &actor_proc)
|
108
|
+
end
|
86
109
|
end
|
87
110
|
end
|
data/lib/mime_actor/validator.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
# :markup: markdown
|
4
4
|
|
5
5
|
require "active_support/concern"
|
6
|
+
require "active_support/core_ext/object/blank"
|
6
7
|
require "set" # required by mime_type with ruby <= 3.1
|
7
8
|
require "action_dispatch/http/mime_type"
|
8
9
|
|
@@ -25,13 +26,13 @@ module MimeActor
|
|
25
26
|
mattr_accessor :scene_formats, instance_writer: false, default: Mime::SET.symbols.to_set
|
26
27
|
end
|
27
28
|
|
28
|
-
|
29
|
+
module ClassMethods
|
29
30
|
# Raise the error returned by validator if any.
|
30
31
|
#
|
31
32
|
# @param rule the name of validator
|
32
33
|
def validate!(rule, *args)
|
33
34
|
validator = "validate_#{rule}"
|
34
|
-
raise NameError, "Validator not found, got: #{validator}" unless respond_to?(validator, true)
|
35
|
+
raise NameError, "Validator not found, got: #{validator.inspect}" unless respond_to?(validator, true)
|
35
36
|
|
36
37
|
error = send(validator, *args)
|
37
38
|
raise error if error
|
@@ -41,7 +42,7 @@ module MimeActor
|
|
41
42
|
#
|
42
43
|
# @param unchecked the `action` to be validated
|
43
44
|
def validate_action(unchecked)
|
44
|
-
|
45
|
+
TypeError.new("action must be a Symbol") unless unchecked.is_a?(Symbol)
|
45
46
|
end
|
46
47
|
|
47
48
|
# Validate `actions` must be a collection of Symbol
|
@@ -49,16 +50,16 @@ module MimeActor
|
|
49
50
|
# @param unchecked the `actions` to be validated
|
50
51
|
def validate_actions(unchecked)
|
51
52
|
rejected = unchecked.reject { |action| action.is_a?(Symbol) }
|
52
|
-
NameError.new("invalid actions, got: #{rejected.join(", ")}") if rejected.size.positive?
|
53
|
+
NameError.new("invalid actions, got: #{rejected.map(&:inspect).join(", ")}") if rejected.size.positive?
|
53
54
|
end
|
54
55
|
|
55
56
|
# Validate `format` must be a Symbol and a valid MIME type
|
56
57
|
#
|
57
58
|
# @param unchecked the `format` to be validated
|
58
59
|
def validate_format(unchecked)
|
59
|
-
return
|
60
|
+
return TypeError.new("format must be a Symbol") unless unchecked.is_a?(Symbol)
|
60
61
|
|
61
|
-
NameError.new("invalid format, got: #{unchecked}") unless scene_formats.include?(unchecked)
|
62
|
+
NameError.new("invalid format, got: #{unchecked.inspect}") unless scene_formats.include?(unchecked)
|
62
63
|
end
|
63
64
|
|
64
65
|
# Validate `formats` must be an collection of Symbol which each of them is a valid MIME type
|
@@ -69,7 +70,7 @@ module MimeActor
|
|
69
70
|
filtered = unfiltered & scene_formats
|
70
71
|
rejected = unfiltered - filtered
|
71
72
|
|
72
|
-
NameError.new("invalid formats, got: #{rejected.join(", ")}") if rejected.size.positive?
|
73
|
+
NameError.new("invalid formats, got: #{rejected.map(&:inspect).join(", ")}") if rejected.size.positive?
|
73
74
|
end
|
74
75
|
|
75
76
|
# Validate `klazz` must be a Class/Module or a String referencing a Class/Module
|
@@ -78,23 +79,16 @@ module MimeActor
|
|
78
79
|
def validate_klazz(unchecked)
|
79
80
|
return if unchecked.is_a?(Module) || unchecked.is_a?(String)
|
80
81
|
|
81
|
-
|
82
|
+
TypeError.new("#{unchecked.inspect} must be a Class/Module or a String referencing a Class/Module")
|
82
83
|
end
|
83
84
|
|
84
|
-
# Validate `with`
|
85
|
+
# Validate `with` must be a Symbol or Proc
|
85
86
|
#
|
86
87
|
# @param unchecked the `with` to be validated
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
end
|
92
|
-
unless unchecked.present? || block.present?
|
93
|
-
return ArgumentError.new("provide the with: keyword argument or a block")
|
94
|
-
end
|
95
|
-
return if block.present? || unchecked.is_a?(Proc) || unchecked.is_a?(Symbol)
|
96
|
-
|
97
|
-
ArgumentError.new("with handler must be a Symbol or Proc, got: #{unchecked.inspect}")
|
88
|
+
def validate_with(unchecked)
|
89
|
+
return if unchecked.is_a?(Proc) || unchecked.is_a?(Symbol)
|
90
|
+
|
91
|
+
TypeError.new("with handler must be a Symbol or Proc, got: #{unchecked.inspect}")
|
98
92
|
end
|
99
93
|
end
|
100
94
|
end
|
data/lib/mime_actor/version.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# :markup: markdown
|
4
|
+
|
3
5
|
module MimeActor
|
4
6
|
def self.version
|
5
7
|
gem_version
|
@@ -12,8 +14,8 @@ module MimeActor
|
|
12
14
|
module VERSION
|
13
15
|
MAJOR = 0
|
14
16
|
MINOR = 6
|
15
|
-
BUILD =
|
16
|
-
PRE =
|
17
|
+
BUILD = 1
|
18
|
+
PRE = "beta"
|
17
19
|
|
18
20
|
STRING = [MAJOR, MINOR, BUILD, PRE].compact.join(".")
|
19
21
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mime_actor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1.beta
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Chang
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-07-
|
11
|
+
date: 2024-07-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|
@@ -68,6 +68,7 @@ files:
|
|
68
68
|
- LICENSE
|
69
69
|
- README.md
|
70
70
|
- Rakefile
|
71
|
+
- codecov.yml
|
71
72
|
- lib/mime_actor.rb
|
72
73
|
- lib/mime_actor/action.rb
|
73
74
|
- lib/mime_actor/errors.rb
|