Sha256: 6ab5513d810d797ccc3b4947404212c998719edead0339e91d7ca1028b6700b3

Contents?: true

Size: 1.6 KB

Versions: 24

Compression:

Stored size: 1.6 KB

Contents

# frozen_string_literal: true

module Motor
  module Dashboards
    module Persistance
      TitleAlreadyExists = Class.new(StandardError)

      module_function

      def build_from_params(params, current_user = nil)
        dashboard = assign_attributes(Dashboard.new, params)

        dashboard.author = current_user

        dashboard
      end

      def create_from_params!(params, current_user = nil)
        raise TitleAlreadyExists if Dashboard.exists?(['lower(title) = ?', params[:title].to_s.downcase])

        dashboard = build_from_params(params, current_user)

        ApplicationRecord.transaction do
          dashboard.save!
        end

        dashboard
      rescue ActiveRecord::RecordNotUnique
        retry
      end

      def update_from_params!(dashboard, params)
        dashboard = assign_attributes(dashboard, params)

        raise TitleAlreadyExists if title_already_exists?(dashboard)

        ApplicationRecord.transaction do
          dashboard.save!
        end

        dashboard.tags.reload

        dashboard
      rescue ActiveRecord::RecordNotUnique
        retry
      end

      def assign_attributes(dashboard, params)
        dashboard.assign_attributes(params.slice(:title, :description, :preferences))

        Motor::Tags.assign_tags(dashboard, params[:tags])
      end

      def title_already_exists?(dashboard)
        if dashboard.new_record?
          Dashboard.exists?(['lower(title) = ?', dashboard.title.to_s.downcase])
        else
          Dashboard.exists?(['lower(title) = ? AND id != ?', dashboard.title.to_s.downcase, dashboard.id])
        end
      end
    end
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
motor-admin-0.1.37 lib/motor/dashboards/persistance.rb
motor-admin-0.1.36 lib/motor/dashboards/persistance.rb
motor-admin-0.1.35 lib/motor/dashboards/persistance.rb
motor-admin-0.1.34 lib/motor/dashboards/persistance.rb
motor-admin-0.1.33 lib/motor/dashboards/persistance.rb
motor-admin-0.1.32 lib/motor/dashboards/persistance.rb
motor-admin-0.1.31 lib/motor/dashboards/persistance.rb
motor-admin-0.1.29 lib/motor/dashboards/persistance.rb
motor-admin-0.1.28 lib/motor/dashboards/persistance.rb
motor-admin-0.1.27 lib/motor/dashboards/persistance.rb
motor-admin-0.1.25 lib/motor/dashboards/persistance.rb
motor-admin-0.1.23 lib/motor/dashboards/persistance.rb
motor-admin-0.1.22 lib/motor/dashboards/persistance.rb
motor-admin-0.1.21 lib/motor/dashboards/persistance.rb
motor-admin-0.1.20 lib/motor/dashboards/persistance.rb
motor-admin-0.1.18 lib/motor/dashboards/persistance.rb
motor-admin-0.1.17 lib/motor/dashboards/persistance.rb
motor-admin-0.1.15 lib/motor/dashboards/persistance.rb
motor-admin-0.1.16 lib/motor/dashboards/persistance.rb
motor-admin-0.1.14 lib/motor/dashboards/persistance.rb