Class: Tasker::NamedTask

Inherits:
ApplicationRecord show all
Defined in:
app/models/tasker/named_task.rb

Constant Summary collapse

DEFAULT_VERSION =

Default version for new tasks

'0.1.0'
DEFAULT_NAMESPACE =

Default namespace name

'default'

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ApplicationRecord

configure_database_connections, database_configuration_exists?

Class Method Details

.find_latest_version(namespace_name, task_name) ⇒ Object

Find latest version of a named task in a namespace



108
109
110
111
112
113
# File 'app/models/tasker/named_task.rb', line 108

def self.find_latest_version(namespace_name, task_name)
  in_namespace(namespace_name)
    .where(name: task_name)
    .order(version: :desc)
    .first
end

.find_or_create_by_full_name!(name:, namespace_name: DEFAULT_NAMESPACE, version: DEFAULT_VERSION) ⇒ Object

Find or create with namespace and version support



50
51
52
53
54
55
56
57
# File 'app/models/tasker/named_task.rb', line 50

def self.find_or_create_by_full_name!(name:, namespace_name: DEFAULT_NAMESPACE, version: DEFAULT_VERSION)
  namespace = TaskNamespace.find_or_create_by!(name: namespace_name)
  find_or_create_by!(
    task_namespace: namespace,
    name: name,
    version: version
  )
end

.version_exists?(namespace_name, task_name, version) ⇒ Boolean

Check if a specific version exists

Returns:

  • (Boolean)


116
117
118
119
# File 'app/models/tasker/named_task.rb', line 116

def self.version_exists?(namespace_name, task_name, version)
  in_namespace(namespace_name)
    .exists?(name: task_name, version: version)
end

Instance Method Details

#concurrent?Boolean

Get concurrency setting from configuration

Returns:

  • (Boolean)


75
76
77
# File 'app/models/tasker/named_task.rb', line 75

def concurrent?
  config.fetch('concurrent', true)
end

#configObject

Configuration accessor with defaults



70
71
72
# File 'app/models/tasker/named_task.rb', line 70

def config
  @config ||= (configuration || {}).with_indifferent_access
end

#default_namespace?Boolean

Check if this uses the default namespace

Returns:

  • (Boolean)


87
88
89
# File 'app/models/tasker/named_task.rb', line 87

def default_namespace?
  task_namespace.default?
end

#full_nameObject

Full qualified name: namespace.name@version



60
61
62
# File 'app/models/tasker/named_task.rb', line 60

def full_name
  "#{task_namespace.name}.#{name}@#{version}"
end

#namespace_nameObject



91
92
93
# File 'app/models/tasker/named_task.rb', line 91

def namespace_name
  task_namespace.name
end

#qualified_nameObject

Short name without version: namespace.name



65
66
67
# File 'app/models/tasker/named_task.rb', line 65

def qualified_name
  "#{task_namespace.name}.#{name}"
end

#update_config!(new_config) ⇒ Object

Update configuration



80
81
82
83
84
# File 'app/models/tasker/named_task.rb', line 80

def update_config!(new_config)
  self.configuration = (config || {}).deep_merge(new_config)
  save!
  @config = nil # Clear memoized config
end