class SimplerWorkflow::ActivityRegistry

Protected Class Methods

sdb() click to toggle source
# File lib/simpler_workflow/activity_registry.rb, line 87
def self.sdb
  @sdb ||= AWS::SimpleDB.new
end

Public Instance Methods

[](*activity_tuple)
Alias for: get
[]=(*activity_tuple)
Alias for: register
get(*activity_tuple) click to toggle source
# File lib/simpler_workflow/activity_registry.rb, line 13
def get(*activity_tuple)
  domain = activity_tuple.shift
  
  if AWS::SimpleWorkflow::ActivityType === domain
    name = domain.name.to_sym
    version = domain.version
    domain = domain.domain
  else
    name = activity_tuple.first
    
    case name
    when Hash
      version = name[:version]
      name = name[:name].to_sym
    when String, Symbol
      name = name.to_sym
      version = activity_tuple.last
    end
  end

  registry_for_domain(domain)[[name, version]]
end
Also aliased as: []
persist_attributes(activity) click to toggle source
# File lib/simpler_workflow/activity_registry.rb, line 38
def persist_attributes(activity)
  domain = Domain.for(activity.domain)

  sdb_domain(domain).items.create(activity.simple_db_name, activity.simple_db_attributes)
end
register(*activity_tuple) click to toggle source
# File lib/simpler_workflow/activity_registry.rb, line 3
def register(*activity_tuple)
  domain = activity_tuple.shift
  activity = activity_tuple.pop if activity_tuple.last.is_a?(Activity)
  raise "Activity missing from registration" unless activity

  registry_for_domain(domain)[activity_tuple] = activity
end
Also aliased as: []=

Protected Instance Methods

registries() click to toggle source
# File lib/simpler_workflow/activity_registry.rb, line 45
def registries
  @registries ||= {}
end
registry_for_domain(domain) click to toggle source
# File lib/simpler_workflow/activity_registry.rb, line 49
def registry_for_domain(domain)
  domain = Domain.for(domain)

  unless sdb_domain(domain).exists?
    sdb.domains.create(sdb_domain_name(domain))
  end

  registries[domain.name.to_sym] ||= Hash.new do |registry, (name, version)|
    activity = Activity.new(domain, name, version)
    attributes = sdb_attributes(domain, activity.simple_db_name)
    
    unless attributes.empty? 
      activity.on_fail(attributes[:failure_policy]) if attributes.has_key?(:failure_policy)
      activity.on_fail(attributes['failure_policy']) if attributes.has_key?('failure_policy')
      activity.on_success(name: attributes[:next_activity_name], version: attributes[:next_activity_version]) if attributes.has_key?(:next_activity_name)
      activity.on_success(name: attributes['next_activity_name'], version: attributes['next_activity_version']) if attributes.has_key?('next_activity_name')
    end
    registry[[name, version]] = activity
  end
end
sdb() click to toggle source
# File lib/simpler_workflow/activity_registry.rb, line 91
def sdb
  self.class.sdb
end
sdb_attributes(domain, sdb_name) click to toggle source
# File lib/simpler_workflow/activity_registry.rb, line 78
def sdb_attributes(domain, sdb_name)
  if item = sdb_domain(domain).items[sdb_name]
    h = item.attributes.to_h
    h.each { |k, v| h[k] = v.first }
  else
    {}
  end
end
sdb_domain(domain) click to toggle source
# File lib/simpler_workflow/activity_registry.rb, line 74
def sdb_domain(domain)
  sdb.domains[sdb_domain_name(domain)]
end
sdb_domain_name(domain) click to toggle source
# File lib/simpler_workflow/activity_registry.rb, line 70
def sdb_domain_name(domain)
  "swf-#{domain.name}-activities"
end