Sha256: c3ddd72db2288cbf9a871a8c49734385f5ff4916a251bddf5828fbeb1c800f79

Contents?: true

Size: 1.48 KB

Versions: 56

Compression:

Stored size: 1.48 KB

Contents

module Cmor::Cms
  class CreateNavigationService < Rao::Service::Base
    class Result < Rao::Service::Result::Base
      attr_accessor :navigation, :navigation_items, :created_navigation_items, :errored_navigation_items
    end

    attr_accessor :locale, :name, :items_attributes

    validates :locale, :name, :items_attributes, presence: true

    private

    def after_initialize
      @created_navigation_items ||= []
      @errored_navigation_items ||= []
    end

    def _perform
      @navigation = build_navigation
      @navigation_items = build_navigation_items
      @navigation_items.collect do |navigation_item|
        if navigation_item.save
          say "Created #{navigation_item}"
          @created_navigation_items << navigation_item
        else
          add_error_and_say :base, "Error creating #{navigation_item}. Errors: #{navigation_item.errors.full_messages.to_sentence}"
          @errored_navigation_items << navigation_item
        end
      end

      @result.navigation               = @navigation
      @result.navigation_items         = @navigation_items
      @result.created_navigation_items = @created_navigation_items
      @result.errored_navigation_items = @errored_navigation_items
    end

    private

    def build_navigation
      Navigation.new(locale: locale, name: name)
    end

    def build_navigation_items
      @items_attributes.collect do |item_attributes|
        NavigationItem.new(item_attributes.merge(navigation: @navigation))
      end
    end
  end
end

Version data entries

56 entries across 56 versions & 1 rubygems

Version Path
cmor_cms-0.0.60.pre app/services/cmor/cms/create_navigation_service.rb
cmor_cms-0.0.59.pre app/services/cmor/cms/create_navigation_service.rb
cmor_cms-0.0.58.pre app/services/cmor/cms/create_navigation_service.rb
cmor_cms-0.0.57.pre app/services/cmor/cms/create_navigation_service.rb
cmor_cms-0.0.56.pre app/services/cmor/cms/create_navigation_service.rb
cmor_cms-0.0.55.pre app/services/cmor/cms/create_navigation_service.rb
cmor_cms-0.0.54.pre app/services/cmor/cms/create_navigation_service.rb
cmor_cms-0.0.53.pre app/services/cmor/cms/create_navigation_service.rb
cmor_cms-0.0.52.pre app/services/cmor/cms/create_navigation_service.rb
cmor_cms-0.0.51.pre app/services/cmor/cms/create_navigation_service.rb
cmor_cms-0.0.50.pre app/services/cmor/cms/create_navigation_service.rb
cmor_cms-0.0.49.pre app/services/cmor/cms/create_navigation_service.rb
cmor_cms-0.0.48.pre app/services/cmor/cms/create_navigation_service.rb
cmor_cms-0.0.45.pre app/services/cmor/cms/create_navigation_service.rb
cmor_cms-0.0.44.pre app/services/cmor/cms/create_navigation_service.rb
cmor_cms-0.0.43.pre app/services/cmor/cms/create_navigation_service.rb
cmor_cms-0.0.42.pre app/services/cmor/cms/create_navigation_service.rb
cmor_cms-0.0.41.pre app/services/cmor/cms/create_navigation_service.rb
cmor_cms-0.0.40.pre app/services/cmor/cms/create_navigation_service.rb
cmor_cms-0.0.39.pre app/services/cmor/cms/create_navigation_service.rb