-
Notifications
You must be signed in to change notification settings - Fork 124
/
workflow_schema.rb
63 lines (61 loc) · 2.54 KB
/
workflow_schema.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
module Hyrax
module Workflow
# Responsible for describing the JSON schema for a Workflow.
#
# The `workflows name` defines the name of the Sipity::Workflow.
# The `workflows actions` defines the actions that can be taken in the given states (e.g. :from_states) by the given :roles.
# The `workflows actions transition_to` defines the state to which we transition when the action is taken.
# The `workflows actions notifications` defines the notifications that should be sent when the action is taken.
#
# @see Sipity::Workflow
# @see Sipity::WorkflowAction
# @see Sipity::WorkflowState
# @see Sipity::Role
# @see Sipity::Notification
# @see Sipity::Method
# @see ./lib/generators/hyrax/templates/workflow.json.erb
WorkflowSchema = Dry::Validation.Schema do
configure do
def self.messages
Dry::Validation::Messages.default.merge(
en: { errors: { constant_name?: 'must be an initialized Ruby constant' } }
)
end
def constant_name?(value)
value.constantize
true
rescue NameError
false
end
end
required(:workflows).each do
required(:name).filled(:str?) # Sipity::Workflow#name
optional(:label).filled(:str?) # Sipity::Workflow#label
optional(:description).filled(:str?) # Sipity::Workflow#description
optional(:allows_access_grant).filled(:bool?) # Sipity::Workflow#allows_access_grant?
required(:actions).each do
schema do
required(:name).filled(:str?) # Sipity::WorkflowAction#name
required(:from_states).each do
schema do
required(:names) { array? { each(:str?) } } # Sipity::WorkflowState#name
required(:roles) { array? { each(:str?) } } # Sipity::Role#name
end
end
optional(:transition_to).filled(:str?) # Sipity::WorkflowState#name
optional(:notifications).each do
schema do
required(:name).value(:constant_name?) # Sipity::Notification#name
required(:notification_type).value(included_in?: Sipity::Notification.valid_notification_types)
required(:to) { array? { each(:str?) } }
optional(:cc) { array? { each(:str?) } }
optional(:bcc) { array? { each(:str?) } }
end
end
optional(:methods) { array? { each(:str?) } } # See it_behaves_like "a Hyrax workflow method"
end
end
end
end
end
end