Sha256: a0ebff3b44abbd26657400212e988b1f04b0025a4cbd6627deb88fb366e6ce02

Contents?: true

Size: 1.19 KB

Versions: 1

Compression:

Stored size: 1.19 KB

Contents

require 'active_support/concern'
require 'sqlserver/sequence/version'

module Sqlserver
  module Sequence
    extend ActiveSupport::Concern

    class_methods do
      def sequence(field, options = {})
        unless defined?(sequences)
          include Sqlserver::Sequence::InstanceMethods
    
          class_attribute :sequences
          self.sequences = {}
    
          before_create :set_sequences
        end

        default_options = { name: field.to_s, format: nil, prefix: nil }
        self.sequences[field] = default_options.merge(options)
      end
    end

    module InstanceMethods
      
      def next_sequence_value(sequence_name)
        self.class.connection.select_value(
          "select next value for #{sequence_name}"
        )
      end

      private

      def set_sequences
        sequences.each do |field, options|
          name = options[:name]
          prefix = options[:prefix]
          format = options[:format]

          value = next_sequence_value(name).to_s
          value = format.call(value) if format.respond_to?(:call)
          send "#{field}=", [prefix, value].join
        end
      end
    end
  end
end

ActiveRecord::Base.send :include, Sqlserver::Sequence

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sqlserver-sequence-0.2.0 lib/sqlserver/sequence.rb