app/models/good_job/lockable.rb in good_job-3.5.1 vs app/models/good_job/lockable.rb in good_job-3.6.0

- old
+ new

@@ -35,15 +35,16 @@ # @!scope class # @param column [String, Symbol] column values to Advisory Lock against # @param function [String, Symbol] Postgres Advisory Lock function name to use # @return [ActiveRecord::Relation] # A relation selecting only the records that were locked. - scope :advisory_lock, (lambda do |column: _advisory_lockable_column, function: advisory_lockable_function| + scope :advisory_lock, (lambda do |column: _advisory_lockable_column, function: advisory_lockable_function, select_limit: nil| original_query = self cte_table = Arel::Table.new(:rows) cte_query = original_query.select(primary_key, column).except(:limit) + cte_query = cte_query.limit(select_limit) if select_limit cte_type = if supports_cte_materialization_specifiers? 'MATERIALIZED' else '' end @@ -152,13 +153,13 @@ # # @example Work on the first two +MyLockableRecord+ objects that could be locked: # MyLockableRecord.order(created_at: :asc).limit(2).with_advisory_lock do |record| # do_something_with record # end - def with_advisory_lock(column: _advisory_lockable_column, function: advisory_lockable_function, unlock_session: false) + def with_advisory_lock(column: _advisory_lockable_column, function: advisory_lockable_function, unlock_session: false, select_limit: nil) raise ArgumentError, "Must provide a block" unless block_given? - records = advisory_lock(column: column, function: function).to_a + records = advisory_lock(column: column, function: function, select_limit: select_limit).to_a begin unscoped { yield(records) } ensure if unlock_session