Sha256: 2c237c88838ebf2b959a0ff26f998fefa77bb161a4d9d3e3c78df8798b98dd48

Contents?: true

Size: 1.5 KB

Versions: 24

Compression:

Stored size: 1.5 KB

Contents

# frozen_string_literal: true

module Motor
  module Queries
    module Persistance
      NameAlreadyExists = Class.new(StandardError)

      module_function

      def build_from_params(params, current_user = nil)
        query = assign_attributes(Query.new, params)

        query.author = current_user

        query
      end

      def create_from_params!(params, current_user = nil)
        raise NameAlreadyExists if Query.exists?(['lower(name) = ?', params[:name].to_s.downcase])

        query = build_from_params(params, current_user)

        ApplicationRecord.transaction do
          query.save!
        end

        query
      rescue ActiveRecord::RecordNotUnique
        retry
      end

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

        raise NameAlreadyExists if name_already_exists?(query)

        ApplicationRecord.transaction do
          query.save!
        end

        query.tags.reload

        query
      rescue ActiveRecord::RecordNotUnique
        retry
      end

      def assign_attributes(query, params)
        query.assign_attributes(params.slice(:name, :description, :sql_body, :preferences))

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

      def name_already_exists?(query)
        if query.new_record?
          Query.exists?(['lower(name) = ?', query.name.to_s.downcase])
        else
          Query.exists?(['lower(name) = ? AND id != ?', query.name.to_s.downcase, query.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/queries/persistance.rb
motor-admin-0.1.36 lib/motor/queries/persistance.rb
motor-admin-0.1.35 lib/motor/queries/persistance.rb
motor-admin-0.1.34 lib/motor/queries/persistance.rb
motor-admin-0.1.33 lib/motor/queries/persistance.rb
motor-admin-0.1.32 lib/motor/queries/persistance.rb
motor-admin-0.1.31 lib/motor/queries/persistance.rb
motor-admin-0.1.29 lib/motor/queries/persistance.rb
motor-admin-0.1.28 lib/motor/queries/persistance.rb
motor-admin-0.1.27 lib/motor/queries/persistance.rb
motor-admin-0.1.25 lib/motor/queries/persistance.rb
motor-admin-0.1.23 lib/motor/queries/persistance.rb
motor-admin-0.1.22 lib/motor/queries/persistance.rb
motor-admin-0.1.21 lib/motor/queries/persistance.rb
motor-admin-0.1.20 lib/motor/queries/persistance.rb
motor-admin-0.1.18 lib/motor/queries/persistance.rb
motor-admin-0.1.17 lib/motor/queries/persistance.rb
motor-admin-0.1.15 lib/motor/queries/persistance.rb
motor-admin-0.1.16 lib/motor/queries/persistance.rb
motor-admin-0.1.14 lib/motor/queries/persistance.rb