Sha256: d396f82d99e04504217eeb3585fb9b08e74cd81133963bde2ba095fbe194e186

Contents?: true

Size: 1.27 KB

Versions: 5

Compression:

Stored size: 1.27 KB

Contents

# encoding: UTF-8

require_relative "service"
require_relative "query_template"
require_relative "../entities/node"

module Clerq
  module Services

    # Creates new node in repository according to provided parameters
    # or raises CreateNode::Failure when
    #   * template not found
    #   * or repository contains a node with the same id
    class CreateNode < Service

      def call
        @body = QueryTemplate.(@template) if @body.empty? && !@template.empty?
        @node = Clerq::Entities::Node.new(
          id: @id, title: @title, body: @body, meta: @meta)
        Clerq.node_repository.save(@node)
      end

      protected

      def initialize(id: '', title: '', body: '', meta: {}, template: '')
        raise ArgumentError, "Invalid argument :id" unless id.is_a? String
        raise ArgumentError, "Invalid argument :title" unless title.is_a? String
        raise ArgumentError, "Invalid argument :body" unless body.is_a? String
        raise ArgumentError, "Invalid argument :meta" unless meta.is_a? Hash
        raise ArgumentError, "Invalid argument :template" unless template.is_a? String
        @id = id
        @title = title
        @body = body
        @meta = meta
        @template = template
      end

    end

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
clerq-0.3.4 lib/clerq/services/create_node.rb
clerq-0.3.3 lib/clerq/services/create_node.rb
clerq-0.3.2 lib/clerq/services/create_node.rb
clerq-0.3.1 lib/clerq/services/create_node.rb
clerq-0.3.0 lib/clerq/services/create_node.rb