diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2012-05-18 11:40:38 +0200 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2012-05-18 11:40:38 +0200 |
commit | 3e01a17ec9ed22867b409ffedab20e160de90ff7 (patch) | |
tree | d6708850502d3b320c4ea1c8bd2e37bd68a9b9c2 /lib/iotas/board.rb | |
parent | 18164a443ff6a6c4547e54357e48cd473298a806 (diff) | |
download | edoors-ruby-3e01a17ec9ed22867b409ffedab20e160de90ff7.zip edoors-ruby-3e01a17ec9ed22867b409ffedab20e160de90ff7.tar.gz |
social skills failure ;) evendoors-ruby is renamed into iotas
Diffstat (limited to 'lib/iotas/board.rb')
-rw-r--r-- | lib/iotas/board.rb | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/lib/iotas/board.rb b/lib/iotas/board.rb new file mode 100644 index 0000000..8c1991f --- /dev/null +++ b/lib/iotas/board.rb @@ -0,0 +1,67 @@ +#! /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 Board < Door + # + def initialize n, p + super n, p + @postponed = {} + end + # + def to_json *a + { + 'kls' => self.class.name, + 'name' => @name, + 'postponed' => @postponed + }.merge(hibernate!).to_json *a + end + # + def self.json_create o + raise Iotas::Exception.new "JSON #{o['kls']} != #{self.name}" if o['kls'] != self.name + board = self.new o['name'], o['parent'] + o['postponed'].each do |link_value,particle| + board.process_p Iotas::Particle.json_create(particle.merge!('spin'=>board.spin)) + end + board.resume! o + board + end + # + def process_p p + @viewer.receive_p p if @viewer + if p.action!=Iotas::ACT_ERROR + p2 = @postponed[p.link_value] ||= p + return if p2==p + @postponed.delete p.link_value + p,p2 = p2,p if p.action==Iotas::ACT_FOLLOW + p.merge! p2 + end + @saved = p + receive_p p + garbage if not @saved.nil? + end + # + end + # +end +# +# EOF |