From 08bdd2314918f16d2f73fdeca6dae7d2a84dca97 Mon Sep 17 00:00:00 2001 From: oguzhankoral Date: Fri, 16 Jun 2023 21:57:13 +0300 Subject: [PATCH] Add state for mapper --- .../src/actions/mapped_entities_updated.rb | 2 +- .../src/states/speckle_mapper_state.rb | 35 +++++++++++++++++++ speckle_connector/src/states/speckle_state.rb | 26 +++++++------- 3 files changed, 50 insertions(+), 13 deletions(-) create mode 100644 speckle_connector/src/states/speckle_mapper_state.rb diff --git a/speckle_connector/src/actions/mapped_entities_updated.rb b/speckle_connector/src/actions/mapped_entities_updated.rb index 63de9c8..c9a0483 100644 --- a/speckle_connector/src/actions/mapped_entities_updated.rb +++ b/speckle_connector/src/actions/mapped_entities_updated.rb @@ -11,7 +11,7 @@ module SpeckleConnector # @return [States::State] the new updated state object def self.update_state(state, _data = nil) mapped_entities = SketchupModel::Reader::SpeckleEntitiesReader - .mapped_entity_details(state.speckle_state.mapped_entities.values.to_a) + .mapped_entity_details(state.speckle_state.speckle_mapper_state.mapped_entities.values.to_a) state.with_mapped_entities_queue(mapped_entities) end diff --git a/speckle_connector/src/states/speckle_mapper_state.rb b/speckle_connector/src/states/speckle_mapper_state.rb new file mode 100644 index 0000000..0ec57c1 --- /dev/null +++ b/speckle_connector/src/states/speckle_mapper_state.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +require_relative '../immutable/immutable' +require_relative '../callbacks/callback_message' +require_relative '../speckle_entities/speckle_entity' + +module SpeckleConnector + module States + # State of the speckle on ruby. + class SpeckleMapperState + include Immutable::ImmutableUtils + + # @return [ImmutableHash{Integer=>Sketchup::Entity}] persistent_id of the sketchup entity and itself + attr_reader :mapped_entities + + def initialize + @mapped_entities = Immutable::EmptyHash + end + + def with_mapped_entity(entity) + new_mapped_entities = mapped_entities.put(entity.persistent_id, entity) + with_mapped_entities(new_mapped_entities) + end + + def with_removed_mapped_entity(entity) + new_mapped_entities = mapped_entities.delete(entity.persistent_id) + with_mapped_entities(new_mapped_entities) + end + + def with_mapped_entities(new_mapped_entities) + with(:@mapped_entities => new_mapped_entities) + end + end + end +end diff --git a/speckle_connector/src/states/speckle_state.rb b/speckle_connector/src/states/speckle_state.rb index 1a80eae..e81df79 100644 --- a/speckle_connector/src/states/speckle_state.rb +++ b/speckle_connector/src/states/speckle_state.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true +require_relative 'speckle_mapper_state' require_relative '../immutable/immutable' require_relative '../callbacks/callback_message' require_relative '../speckle_entities/speckle_entity' @@ -10,13 +11,13 @@ module SpeckleConnector class SpeckleState include Immutable::ImmutableUtils + # @return [States::SpeckleMapperState] state of the mapper. + attr_reader :speckle_mapper_state + # @return [ImmutableHash{Integer=>SpeckleEntities::SpeckleEntity}] persistent_id of the sketchup entity and # corresponding speckle entity attr_reader :speckle_entities - # @return [ImmutableHash{Integer=>Sketchup::Entity}] persistent_id of the sketchup entity and itself - attr_reader :mapped_entities - # @return [Array] accounts on appdata. attr_reader :accounts @@ -47,10 +48,10 @@ module SpeckleConnector @message_queue = queue @stream_queue = stream_queue @speckle_entities = Immutable::EmptyHash - @mapped_entities = Immutable::EmptyHash @render_materials = Immutable::EmptyHash @definitions = Immutable::EmptyHash @relation = Relations::ManyToOneRelation.new + @speckle_mapper_state = SpeckleMapperState.new end # @param callback_name [String] name of the callback command @@ -96,13 +97,18 @@ module SpeckleConnector end def with_mapped_entity(entity) - new_mapped_entities = mapped_entities.put(entity.persistent_id, entity) - with_mapped_entities(new_mapped_entities) + new_speckle_mapper_state = speckle_mapper_state.with_mapped_entity(entity) + with(:@speckle_mapper_state => new_speckle_mapper_state) end def with_removed_mapped_entity(entity) - new_mapped_entities = mapped_entities.delete(entity.persistent_id) - with_mapped_entities(new_mapped_entities) + new_speckle_mapper_state = speckle_mapper_state.with_removed_mapped_entity(entity) + with(:@speckle_mapper_state => new_speckle_mapper_state) + end + + def with_mapped_entities(new_mapped_entities) + new_speckle_mapper_state = speckle_mapper_state.with_mapped_entities(new_mapped_entities) + with(:@speckle_mapper_state => new_speckle_mapper_state) end def with_speckle_entity(traversed_entity) @@ -114,10 +120,6 @@ module SpeckleConnector with(:@speckle_entities => new_speckle_entities) end - def with_mapped_entities(new_mapped_entities) - with(:@mapped_entities => new_mapped_entities) - end - def with_relation(new_relation) with(:@relation => new_relation) end