Sha256: 543e54d3a089bc1362111d6ba6192c9e267e62b8e01f60eaefc42953ce6c5c1a

Contents?: true

Size: 1.87 KB

Versions: 1

Compression:

Stored size: 1.87 KB

Contents

module RailsConnector

class WorkspaceDataFromService
  class << self
    # Fetches a workspace data previously store in cache storage.
    # Returns nil if not found.
    def find_from_cache(id)
      if data = CmsCacheStorage.read_workspace_data(id)
        new(data)
      end
    end

    private

    def data_attr_reader(attr_name)
      define_method(attr_name) { @data[attr_name.to_s] }
    end
  end

  data_attr_reader :id
  data_attr_reader :title
  data_attr_reader :revision_id
  data_attr_reader :content_state_id
  data_attr_reader :base_revision_id
  data_attr_reader :base_content_state_id
  data_attr_reader :diff

  def initialize(data)
    @data = data
  end

  def content_state
    @content_state ||= ContentState.find_or_create(content_state_id) if content_state_id
  end

  def base_content_state
    if base_content_state_id
      @base_content_state ||= ContentState.find_or_create(base_content_state_id)
    end
  end

  def changes
    diff && diff['changes']
  end

  def from_content_state_id
    diff && diff['from_content_state_id']
  end

  def to_content_state_id
    diff && diff['to_content_state_id']
  end

  # Serializes and stores a workspace data in cache storage.
  # Also creates an appropriate content state if needed.
  def store_in_cache
    create_content_state if content_state_id
    CmsCacheStorage.write_workspace_data(id, to_hash)
  end

  private

  def to_hash
    {
      'id'                    => id,
      'revision_id'           => revision_id,
      'title'                 => title,
      'content_state_id'      => content_state_id,
      'base_revision_id'      => base_revision_id,
      'base_content_state_id' => base_content_state_id,
    }
  end

  def create_content_state
    ContentState.create(content_state_id: to_content_state_id, changes: changes,
        from_content_state_id: from_content_state_id)
  end
end

end # module RailsConnector

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
infopark_cloud_connector-7.1.0 lib/rails_connector/workspace_data_from_service.rb