summaryrefslogtreecommitdiffstats
path: root/lib/iotas/link.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/iotas/link.rb')
-rw-r--r--lib/iotas/link.rb64
1 files changed, 64 insertions, 0 deletions
diff --git a/lib/iotas/link.rb b/lib/iotas/link.rb
new file mode 100644
index 0000000..b1fd9ba
--- /dev/null
+++ b/lib/iotas/link.rb
@@ -0,0 +1,64 @@
+#! /usr/bin/env ruby
+# -*- coding: UTF-8 -*-
+#
+# Copyright 2012 Jérémy Zurcher <jeremy@asynk.ch>
+#
+# This file is part of iotas.
+#
+# iotas is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# iotas is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with iotas. If not, see <http://www.gnu.org/licenses/>.
+
+#
+module Iotas
+ #
+ class Link
+ #
+ def initialize src, dsts, fields=nil, cond_fields=nil, cond_value=nil
+ @src = src # link source name
+ @dsts = dsts # , separated destinations to apply to the particle on linking success
+ @fields = fields # , separated fields to apply to the particle on linking success
+ @cond_fields = cond_fields # , separated fields used to generate the link value with particle payload
+ @cond_value = cond_value # value which will be compared to the particle link value to link or not
+ @door = nil # pointer to the source
+ end
+ #
+ def to_json *a
+ {
+ 'kls' => self.class.name,
+ 'src' => @src,
+ 'dsts' => @dsts,
+ 'fields' => @fields,
+ 'cond_fields' => @cond_fields,
+ 'cond_value' => @cond_value
+ }.to_json *a
+ end
+ #
+ def self.json_create o
+ raise Iotas::Exception.new "JSON #{o['kls']} != #{self.name}" if o['kls'] != self.name
+ self.new o['src'], o['dsts'], o['fields'], o['cond_fields'], o['cond_value']
+ end
+ #
+ def self.from_particle_data p
+ Iotas::Link.new(p.get_data(Iotas::LNK_SRC), p.get_data(Iotas::LNK_DSTS),
+ p.get_data(Iotas::LNK_FIELDS), p.get_data(Iotas::LNK_CONDF),
+ p.get_data(Iotas::LNK_CONDV))
+ end
+ #
+ attr_accessor :door
+ attr_reader :src, :dsts, :fields, :cond_fields, :cond_value
+ #
+ end
+ #
+end
+#
+# EOF