Sha256: f9d8839a3514caec66c199f271fbd659a979835d507e3dde150f1ce3b9df8423

Contents?: true

Size: 1.54 KB

Versions: 1

Compression:

Stored size: 1.54 KB

Contents

# Copyright (C) 2017  Stratumn SAS
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

module AgentClient
  ##
  # Represents a link in a Stratumn application
  class Link
    include Request
    include Helper

    attr_accessor :application, :meta, :state, :link, :link_hash

    def initialize(application, obj)
      self.application = application

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

      application.agent_info['functions'].each do |(method, _)|
        add_transition_method(method)
      end
    end

    def previous
      application.get_link(meta['prevLinkHash']) if meta['prevLinkHash']
    end

    def get_branches(tags)
      application.get_branches(link_hash, tags)
    end

    def load
      application.get_link(link_hash)
    end

    def self.load(segment)
      meta = segment['meta']

      application = Application.load(
        meta['application'],
        meta['applicationLocation']
      )

      application.get_link(meta['linkHash'])
    end

    private

    def add_transition_method(method)
      define_singleton_method(method) do |*args|
        url = "#{application.url}/links/#{link_hash}/#{method}"

        result = post(url, json: args)

        self.class.new(application, result)
      end

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

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
stratumn_agent_client-0.2.0 lib/agent_client/link.rb