class AgentClient::Segment

Represents a link in a Stratumn application

Attributes

meta[RW]
process[RW]
references[RW]
state[RW]

Public Class Methods

from(segment) click to toggle source
# File lib/agent_client/segment.rb, line 50
def self.from(segment)
  agent = Agent.load(segment['meta']['agentUrl'])
  process = agent.get segment['link']['meta']['process']

  new(process, segment)
end
new(process, obj) click to toggle source
# File lib/agent_client/segment.rb, line 24
def initialize(process, obj)
  self.process = process

  self.link = obj['link']
  self.meta = link['meta']
  self.state = link['state']
  self.link_hash = obj['meta']['linkHash']
  self.references = meta['refs']

  process.info['actions'].each do |(method, _)|
    add_transition_method(method)
  end
end

Public Instance Methods

find_segments(options = {}) click to toggle source
# File lib/agent_client/segment.rb, line 42
def find_segments(options = {})
  process.find_segments(options)
end
load() click to toggle source
# File lib/agent_client/segment.rb, line 46
def load
  process.get_segment(link_hash)
end
previous() click to toggle source
# File lib/agent_client/segment.rb, line 38
def previous
  process.get_segment(meta['prevLinkHash']) if meta['prevLinkHash']
end

Private Instance Methods

add_transition_method(method) click to toggle source
# File lib/agent_client/segment.rb, line 59
def add_transition_method(method)
  define_singleton_method(method) do |*args|
    url = "#{process.process_url}/segments/#{link_hash}/#{method}"

    result = post(url, json: args)

    self.class.new(process, result)
  end

  singleton_class.send(:alias_method, underscore(method), method)
end