Skip to content

Commit

Permalink
feat(kno-3345): add support for schedules API (#11)
Browse files Browse the repository at this point in the history
  • Loading branch information
juanazam committed Apr 14, 2023
1 parent 7c5d642 commit ffd4ca8
Show file tree
Hide file tree
Showing 4 changed files with 124 additions and 2 deletions.
2 changes: 1 addition & 1 deletion .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ Metrics/LineLength:
Metrics/MethodLength:
Max: 35
Metrics/ParameterLists:
Max: 6
Max: 7
17 changes: 17 additions & 0 deletions lib/knock/objects.rb
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,23 @@ def delete_subscriptions(collection:, id:, recipients: [])

execute_request(request: request)
end

# Get object's schedules
#
# @param [String] collection The collection the object is in
# @param [String] id The object id
# @param [Hash] options Options to pass to the schedules endpoint query
#
# @return [Hash] Paginated schedules response
def get_schedules(collection:, id:, options: {})
request = get_request(
auth: true,
path: "/v1/objects/#{collection}/#{id}/schedules",
params: options
)

execute_request(request: request)
end
end
end
# rubocop:enable Metrics/ModuleLength
Expand Down
20 changes: 20 additions & 0 deletions lib/knock/users.rb
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,26 @@ def get_messages(id:, options: {})

execute_request(request: request)
end

##
# Schedules
##

# Get user's schedules
#
# @param [String] id the user ID
# @param [Hash] options Options to pass to the schedules endpoint query
#
# @return [Hash] Paginated schedules response
def get_schedules(id:, options: {})
request = get_request(
auth: true,
path: "/v1/users/#{id}/schedules",
params: options
)

execute_request(request: request)
end
end
end
# rubocop:enable Metrics/ModuleLength
Expand Down
87 changes: 86 additions & 1 deletion lib/knock/workflows.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class << self
# duplicate workflow invocations
#
# @return [Hash] A workflow trigger result
def trigger(key:, actor:, recipients:, data: {}, cancellation_key: nil, tenant: nil, idempotency_key: nil) # rubocop:disable Metrics/ParameterLists
def trigger(key:, actor:, recipients:, data: {}, cancellation_key: nil, tenant: nil, idempotency_key: nil)
attrs = {
actor: actor,
recipients: recipients,
Expand Down Expand Up @@ -63,6 +63,91 @@ def cancel(key:, cancellation_key:, recipients: nil)

execute_request(request: request)
end

# Creates schedule instances for all recipients for the given
# workflow.
#
# @param [String] key The workflow key
# @param [String, Hash] actor An optional actor identifier to be used when trigger the workflow
# @param [Array<String, Hash>] recipients The recipient identifiers
# @param [Array<Hash>] repeats The repeat rules for when to schedule the workflow run
# @param [Hash] data Parameters to be used as variables on the workflow run
# @param [String] tenant An optional tenant identifier

def create_schedules(key:, recipients:, repeats:, scheduled_at: nil, data: {}, actor: nil, tenant: nil)
attrs = {
workflow: key,
actor: actor,
recipients: recipients,
repeats: repeats,
data: data,
tenant: tenant,
scheduled_at: scheduled_at
}

request = post_request(
auth: true,
path: '/v1/schedules',
body: attrs
)

execute_request(request: request)
end

# Updates schedule instances with the attributes passed as params
#
# @param [Array<String>] schedule_ids The ids of the schedules to be updated
# @param [Hash] schedule_attrs The attributes to be used to update the schedules
# Possible attributes: actor, repeats, data and tenant

def update_schedules(schedule_ids:, schedule_attrs:)
attrs = {
schedule_ids: schedule_ids
}

attrs = attrs.merge(schedule_attrs)

request = put_request(
auth: true,
path: '/v1/schedules',
body: attrs
)

execute_request(request: request)
end

# Get paginated workflow schedules
#
# @param [String] key The workflow key
# @param [Hash] opts Options to filter the results: recipients, tenant and pagination params
def list_schedules(key:, opts: {})
attrs = opts.merge(workflow: key)

request = get_request(
auth: true,
path: '/v1/schedules',
params: attrs
)

execute_request(request: request)
end

# Delete schedule instances
#
# @param [Array<String>] schedule_ids The ids of the schedules to be deleted
def delete_schedules(schedule_ids:)
attrs = {
schedule_ids: schedule_ids
}

request = delete_request(
auth: true,
path: '/v1/schedules',
body: attrs
)

execute_request(request: request)
end
end
end
end

0 comments on commit ffd4ca8

Please sign in to comment.