Agent client for Ruby

Interact with your Indigo agent from your ruby code.
code :: https://github.com/stratumn/agent-client-ruby
Installation
Add this line to your agent's Gemfile:
gem 'indigoframework_agent_client'
And then execute:
$ bundle
Or install it yourself as:
$ gem install indigoframework_agent_client
Quickstart
agent = AgentClient::Agent.load('http://localhost:3000')
raise 'No process detected in Agent' if agent.list_processes.empty?
process = agent.get('process_name')
segment = process.create_map('My message map')
segment = segment.add_message('Hello, World', 'POTUS')
puts segment.meta
puts segment.state
Reference
AgentClient::Agent.load(url)
Returns an instance of AgentClient::Agent containing several processes
agent = AgentClient::Agent.load('http://localhost:3000')
puts agent.list_processes()
AgentClient::Process#create_map(references, *args)
Creates a new map in the agent.
agent = AgentClient::Agent.load('http://localhost:3000')
process = agent.get('process_name')
segment = process.create_map([], 'My message map')
AgentClient::Agent.get_segment(hash)
Returns an existing segment.
agent = AgentClient::Agent.load('http://localhost:3000')
process = agent.get('process_name')
segment = process.get_segment('aee5427')
puts segment.link_hash
AgentClient::Agent.find_segments(options = {})
Returns existing segments.
Available options are:
offset
: offset of first returned segmentslimit
: limit number of returned segmentsmapIds
: return segments with one of the specified map IDsprevLinkHash
: return segments with specified previous link hashtags
: return segments that contains all the tags (array)
agent = AgentClient::Agent.load('http://localhost:3000')
process = agent.get('process_name')
segments = process.find_segments(tags: ['tag1', 'tag2'])
segments = process.find_segments(limit: 10)
AgentClient::Segment.from
Returns segment from a given raw object.
segment = AgentClient::Segment.from(raw_segment)
puts segment.process
puts segment.link_hash
AgentClient::Segment#previous
Returns the previous segment of a segment (its parent).
agent = AgentClient::Agent.load('http://localhost:3000')
process = agent.get('process_name')
segment = process.get_segment('aee5427')
previous = segment.previous
AgentClient::Segment#load
Loads a full segment. Can be useful when you only have the meta data of links.
agent = AgentClient::Agent.load('http://localhost:3000')
process = agent.get('process_name')
segments = process.find_segments
segments.map { |segment| segment.load }
AgentClient::Segment#transition_function(references, *args)
Executes a transition function and returns the new segment.
agent = AgentClient::Agent.load('http://localhost:3000')
process = agent.get('process_name')
segment = process.get_segment('aee5427')
new_segment = segment.addMessage([], 'Hello, World!')
new_segment = segment.add_message([], 'Hello, World!')
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Tests
Tests are run against a mock agent whose results are recorded by vcr.
Should you need to regenerate the cassettes or add new tests, the mock agent can be launched on port 3333.
$ cd spec/agent
$ npm install
$ node index.js