mirror of
https://github.com/aasm/aasm
synced 2023-03-27 23:22:41 -04:00
aasm_column is deprecated. Use aasm.attribute_name instead.
This commit is contained in:
parent
13d78f7876
commit
6fbdefd620
9 changed files with 54 additions and 70 deletions
|
@ -2,7 +2,12 @@
|
||||||
|
|
||||||
## 4.1.0 (not yet released)
|
## 4.1.0 (not yet released)
|
||||||
|
|
||||||
* `aasm_human_event_name` is deprecated, use `aasm.human_event_name` instead
|
* `aasm_column` has been removed. Use `aasm.attribute_name` instead
|
||||||
|
* `aasm_human_event_name` has been removed. Use `aasm.human_event_name` instead
|
||||||
|
|
||||||
|
## 4.0.x (not yet released)
|
||||||
|
|
||||||
|
* `aasm_column` is deprecated. Use `aasm.attribute_name` instead
|
||||||
|
|
||||||
## 4.0.2
|
## 4.0.2
|
||||||
|
|
||||||
|
@ -11,6 +16,7 @@
|
||||||
## 4.0.1
|
## 4.0.1
|
||||||
|
|
||||||
* fire guards only once per transition (see [issue #184](https://github.com/aasm/aasm/issues/184) for details)
|
* fire guards only once per transition (see [issue #184](https://github.com/aasm/aasm/issues/184) for details)
|
||||||
|
* `aasm_human_event_name` is deprecated, use `aasm.human_event_name` instead
|
||||||
|
|
||||||
## 4.0.0
|
## 4.0.0
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,16 @@ module AASM
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# This method is both a getter and a setter
|
||||||
|
def attribute_name(column_name=nil)
|
||||||
|
if column_name
|
||||||
|
@state_machine.config.column = column_name.to_sym
|
||||||
|
else
|
||||||
|
@state_machine.config.column ||= :aasm_state
|
||||||
|
end
|
||||||
|
@state_machine.config.column
|
||||||
|
end
|
||||||
|
|
||||||
def initial_state(new_initial_state=nil)
|
def initial_state(new_initial_state=nil)
|
||||||
if new_initial_state
|
if new_initial_state
|
||||||
@state_machine.initial_state = new_initial_state
|
@state_machine.initial_state = new_initial_state
|
||||||
|
|
|
@ -21,7 +21,7 @@ module AASM
|
||||||
|
|
||||||
def item_for(klass, state, ancestor, options={})
|
def item_for(klass, state, ancestor, options={})
|
||||||
separator = options[:old_style] ? '.' : '/'
|
separator = options[:old_style] ? '.' : '/'
|
||||||
:"#{i18n_scope(klass)}.attributes.#{i18n_klass(ancestor)}.#{klass.aasm_column}#{separator}#{state}"
|
:"#{i18n_scope(klass)}.attributes.#{i18n_klass(ancestor)}.#{klass.aasm.attribute_name}#{separator}#{state}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def translate_queue(checklist)
|
def translate_queue(checklist)
|
||||||
|
|
|
@ -84,17 +84,17 @@ module AASM
|
||||||
#
|
#
|
||||||
# NOTE: intended to be called from an event
|
# NOTE: intended to be called from an event
|
||||||
def aasm_write_state(state)
|
def aasm_write_state(state)
|
||||||
old_value = read_attribute(self.class.aasm_column)
|
old_value = read_attribute(self.class.aasm.attribute_name)
|
||||||
aasm_write_attribute state
|
aasm_write_attribute state
|
||||||
|
|
||||||
success = if aasm_skipping_validations
|
success = if aasm_skipping_validations
|
||||||
value = aasm_raw_attribute_value state
|
value = aasm_raw_attribute_value state
|
||||||
self.class.where(self.class.primary_key => self.id).update_all(self.class.aasm_column => value) == 1
|
self.class.where(self.class.primary_key => self.id).update_all(self.class.aasm.attribute_name => value) == 1
|
||||||
else
|
else
|
||||||
self.save
|
self.save
|
||||||
end
|
end
|
||||||
unless success
|
unless success
|
||||||
write_attribute(self.class.aasm_column, old_value)
|
write_attribute(self.class.aasm.attribute_name, old_value)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -128,11 +128,11 @@ module AASM
|
||||||
end
|
end
|
||||||
|
|
||||||
def aasm_column_looks_like_enum
|
def aasm_column_looks_like_enum
|
||||||
self.class.columns_hash[self.class.aasm_column.to_s].type == :integer
|
self.class.columns_hash[self.class.aasm.attribute_name.to_s].type == :integer
|
||||||
end
|
end
|
||||||
|
|
||||||
def aasm_guess_enum_method
|
def aasm_guess_enum_method
|
||||||
self.class.aasm_column.to_s.pluralize.to_sym
|
self.class.aasm.attribute_name.to_s.pluralize.to_sym
|
||||||
end
|
end
|
||||||
|
|
||||||
def aasm_skipping_validations
|
def aasm_skipping_validations
|
||||||
|
@ -140,7 +140,7 @@ module AASM
|
||||||
end
|
end
|
||||||
|
|
||||||
def aasm_write_attribute(state)
|
def aasm_write_attribute(state)
|
||||||
write_attribute self.class.aasm_column, aasm_raw_attribute_value(state)
|
write_attribute self.class.aasm.attribute_name, aasm_raw_attribute_value(state)
|
||||||
end
|
end
|
||||||
|
|
||||||
def aasm_raw_attribute_value(state)
|
def aasm_raw_attribute_value(state)
|
||||||
|
@ -167,7 +167,7 @@ module AASM
|
||||||
# foo.aasm_state # => nil
|
# foo.aasm_state # => nil
|
||||||
#
|
#
|
||||||
def aasm_ensure_initial_state
|
def aasm_ensure_initial_state
|
||||||
aasm.enter_initial_state if send(self.class.aasm_column).blank?
|
aasm.enter_initial_state if send(self.class.aasm.attribute_name).blank?
|
||||||
end
|
end
|
||||||
|
|
||||||
def aasm_fire_event(name, options, *args, &block)
|
def aasm_fire_event(name, options, *args, &block)
|
||||||
|
|
|
@ -6,7 +6,7 @@ module AASM
|
||||||
base.extend ClassMethods
|
base.extend ClassMethods
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns the value of the aasm_column - called from <tt>aasm.current_state</tt>
|
# Returns the value of the aasm.attribute_name - called from <tt>aasm.current_state</tt>
|
||||||
#
|
#
|
||||||
# If it's a new record, and the aasm state column is blank it returns the initial state
|
# If it's a new record, and the aasm state column is blank it returns the initial state
|
||||||
# (example provided here for ActiveRecord, but it's true for Mongoid as well):
|
# (example provided here for ActiveRecord, but it's true for Mongoid as well):
|
||||||
|
@ -33,7 +33,7 @@ module AASM
|
||||||
#
|
#
|
||||||
# This allows for nil aasm states - be sure to add validation to your model
|
# This allows for nil aasm states - be sure to add validation to your model
|
||||||
def aasm_read_state
|
def aasm_read_state
|
||||||
state = send(self.class.aasm_column)
|
state = send(self.class.aasm.attribute_name)
|
||||||
if new_record?
|
if new_record?
|
||||||
state.blank? ? aasm.determine_state_name(self.class.aasm.initial_state) : state.to_sym
|
state.blank? ? aasm.determine_state_name(self.class.aasm.initial_state) : state.to_sym
|
||||||
else
|
else
|
||||||
|
@ -42,41 +42,9 @@ module AASM
|
||||||
end
|
end
|
||||||
|
|
||||||
module ClassMethods
|
module ClassMethods
|
||||||
# Maps to the aasm_column in the database. Defaults to "aasm_state". You can write
|
def aasm_column(attribute_name=nil)
|
||||||
# (example provided here for ActiveRecord, but it's true for Mongoid as well):
|
warn "[DEPRECATION] aasm_column is deprecated. Use aasm.attribute_name instead"
|
||||||
#
|
aasm.attribute_name(attribute_name)
|
||||||
# create_table :foos do |t|
|
|
||||||
# t.string :name
|
|
||||||
# t.string :aasm_state
|
|
||||||
# end
|
|
||||||
#
|
|
||||||
# class Foo < ActiveRecord::Base
|
|
||||||
# include AASM
|
|
||||||
# end
|
|
||||||
#
|
|
||||||
# OR:
|
|
||||||
#
|
|
||||||
# create_table :foos do |t|
|
|
||||||
# t.string :name
|
|
||||||
# t.string :status
|
|
||||||
# end
|
|
||||||
#
|
|
||||||
# class Foo < ActiveRecord::Base
|
|
||||||
# include AASM
|
|
||||||
# aasm_column :status
|
|
||||||
# end
|
|
||||||
#
|
|
||||||
# This method is both a getter and a setter
|
|
||||||
def aasm_column(column_name=nil)
|
|
||||||
if column_name
|
|
||||||
AASM::StateMachine[self].config.column = column_name.to_sym
|
|
||||||
# @aasm_column = column_name.to_sym
|
|
||||||
else
|
|
||||||
AASM::StateMachine[self].config.column ||= :aasm_state
|
|
||||||
# @aasm_column ||= :aasm_state
|
|
||||||
end
|
|
||||||
# @aasm_column
|
|
||||||
AASM::StateMachine[self].config.column
|
|
||||||
end
|
end
|
||||||
end # ClassMethods
|
end # ClassMethods
|
||||||
|
|
||||||
|
@ -90,7 +58,7 @@ module AASM
|
||||||
if AASM::StateMachine[@klass].config.create_scopes && !@klass.respond_to?(name)
|
if AASM::StateMachine[@klass].config.create_scopes && !@klass.respond_to?(name)
|
||||||
if @klass.ancestors.map {|klass| klass.to_s}.include?("ActiveRecord::Base")
|
if @klass.ancestors.map {|klass| klass.to_s}.include?("ActiveRecord::Base")
|
||||||
|
|
||||||
conditions = {"#{@klass.table_name}.#{@klass.aasm_column}" => name.to_s}
|
conditions = {"#{@klass.table_name}.#{@klass.aasm.attribute_name}" => name.to_s}
|
||||||
if ActiveRecord::VERSION::MAJOR >= 3
|
if ActiveRecord::VERSION::MAJOR >= 3
|
||||||
@klass.class_eval do
|
@klass.class_eval do
|
||||||
scope name, lambda { where(conditions) }
|
scope name, lambda { where(conditions) }
|
||||||
|
@ -101,7 +69,7 @@ module AASM
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
elsif @klass.ancestors.map {|klass| klass.to_s}.include?("Mongoid::Document")
|
elsif @klass.ancestors.map {|klass| klass.to_s}.include?("Mongoid::Document")
|
||||||
scope_options = lambda { @klass.send(:where, {@klass.aasm_column.to_sym => name.to_s}) }
|
scope_options = lambda { @klass.send(:where, {@klass.aasm.attribute_name.to_sym => name.to_s}) }
|
||||||
@klass.send(:scope, name, scope_options)
|
@klass.send(:scope, name, scope_options)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -55,7 +55,7 @@ module AASM
|
||||||
end
|
end
|
||||||
|
|
||||||
def with_state_scope(state)
|
def with_state_scope(state)
|
||||||
with_scope where(aasm_column.to_sym => state.to_s) do
|
with_scope where(aasm.attribute_name.to_sym => state.to_s) do
|
||||||
yield if block_given?
|
yield if block_given?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -75,11 +75,11 @@ module AASM
|
||||||
#
|
#
|
||||||
# NOTE: intended to be called from an event
|
# NOTE: intended to be called from an event
|
||||||
def aasm_write_state(state)
|
def aasm_write_state(state)
|
||||||
old_value = read_attribute(self.class.aasm_column)
|
old_value = read_attribute(self.class.aasm.attribute_name)
|
||||||
write_attribute(self.class.aasm_column, state.to_s)
|
write_attribute(self.class.aasm.attribute_name, state.to_s)
|
||||||
|
|
||||||
unless self.save(:validate => false)
|
unless self.save(:validate => false)
|
||||||
write_attribute(self.class.aasm_column, old_value)
|
write_attribute(self.class.aasm.attribute_name, old_value)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ module AASM
|
||||||
#
|
#
|
||||||
# NOTE: intended to be called from an event
|
# NOTE: intended to be called from an event
|
||||||
def aasm_write_state_without_persistence(state)
|
def aasm_write_state_without_persistence(state)
|
||||||
write_attribute(self.class.aasm_column, state.to_s)
|
write_attribute(self.class.aasm.attribute_name, state.to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -120,14 +120,14 @@ module AASM
|
||||||
# foo.aasm_state # => nil
|
# foo.aasm_state # => nil
|
||||||
#
|
#
|
||||||
def aasm_ensure_initial_state
|
def aasm_ensure_initial_state
|
||||||
send("#{self.class.aasm_column}=", aasm.enter_initial_state.to_s) if send(self.class.aasm_column).blank?
|
send("#{self.class.aasm.attribute_name}=", aasm.enter_initial_state.to_s) if send(self.class.aasm.attribute_name).blank?
|
||||||
end
|
end
|
||||||
end # InstanceMethods
|
end # InstanceMethods
|
||||||
|
|
||||||
module NamedScopeMethods
|
module NamedScopeMethods
|
||||||
def aasm_state_with_named_scope name, options = {}
|
def aasm_state_with_named_scope name, options = {}
|
||||||
aasm_state_without_named_scope name, options
|
aasm_state_without_named_scope name, options
|
||||||
self.named_scope name, :conditions => { "#{table_name}.#{self.aasm_column}" => name.to_s} unless self.respond_to?(name)
|
self.named_scope name, :conditions => { "#{table_name}.#{self.aasm.attribute_name}" => name.to_s} unless self.respond_to?(name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,7 +17,7 @@ module AASM
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns the value of the aasm_column - called from <tt>aasm.current_state</tt>
|
# Returns the value of the aasm.attribute_name - called from <tt>aasm.current_state</tt>
|
||||||
#
|
#
|
||||||
# If it's a new record, and the aasm state column is blank it returns the initial state
|
# If it's a new record, and the aasm state column is blank it returns the initial state
|
||||||
#
|
#
|
||||||
|
@ -43,7 +43,7 @@ module AASM
|
||||||
#
|
#
|
||||||
# This allows for nil aasm states - be sure to add validation to your model
|
# This allows for nil aasm states - be sure to add validation to your model
|
||||||
def aasm_read_state
|
def aasm_read_state
|
||||||
state = send(self.class.aasm_column)
|
state = send(self.class.aasm.attribute_name)
|
||||||
if new? && state.to_s.strip.empty?
|
if new? && state.to_s.strip.empty?
|
||||||
aasm.determine_state_name(self.class.aasm.initial_state)
|
aasm.determine_state_name(self.class.aasm.initial_state)
|
||||||
elsif state.nil?
|
elsif state.nil?
|
||||||
|
@ -70,7 +70,7 @@ module AASM
|
||||||
#
|
#
|
||||||
def aasm_ensure_initial_state
|
def aasm_ensure_initial_state
|
||||||
aasm.enter_initial_state if
|
aasm.enter_initial_state if
|
||||||
send(self.class.aasm_column).to_s.strip.empty?
|
send(self.class.aasm.attribute_name).to_s.strip.empty?
|
||||||
end
|
end
|
||||||
|
|
||||||
# Writes <tt>state</tt> to the state column and persists it to the database
|
# Writes <tt>state</tt> to the state column and persists it to the database
|
||||||
|
@ -83,7 +83,7 @@ module AASM
|
||||||
#
|
#
|
||||||
# NOTE: intended to be called from an event
|
# NOTE: intended to be called from an event
|
||||||
def aasm_write_state state
|
def aasm_write_state state
|
||||||
aasm_column = self.class.aasm_column
|
aasm_column = self.class.aasm.attribute_name
|
||||||
update_only({aasm_column => state.to_s}, aasm_column)
|
update_only({aasm_column => state.to_s}, aasm_column)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ module AASM
|
||||||
#
|
#
|
||||||
# NOTE: intended to be called from an event
|
# NOTE: intended to be called from an event
|
||||||
def aasm_write_state_without_persistence state
|
def aasm_write_state_without_persistence state
|
||||||
send("#{self.class.aasm_column}=", state.to_s)
|
send("#{self.class.aasm.attribute_name}=", state.to_s)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -30,7 +30,7 @@ describe "instance methods" do
|
||||||
let(:columns_hash) { Hash[column_name, column] }
|
let(:columns_hash) { Hash[column_name, column] }
|
||||||
|
|
||||||
before :each do
|
before :each do
|
||||||
gate.class.stub(:aasm_column).and_return(column_name.to_sym)
|
gate.class.aasm.stub(:attribute_name).and_return(column_name.to_sym)
|
||||||
gate.class.stub(:columns_hash).and_return(columns_hash)
|
gate.class.stub(:columns_hash).and_return(columns_hash)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ describe "instance methods" do
|
||||||
subject { lambda{ gate.send(:aasm_guess_enum_method) } }
|
subject { lambda{ gate.send(:aasm_guess_enum_method) } }
|
||||||
|
|
||||||
before :each do
|
before :each do
|
||||||
gate.class.stub(:aasm_column).and_return(:value)
|
gate.class.aasm.stub(:attribute_name).and_return(:value)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "pluralizes AASM column name" do
|
it "pluralizes AASM column name" do
|
||||||
|
@ -81,7 +81,7 @@ describe "instance methods" do
|
||||||
context "when AASM enum setting is simply set to true" do
|
context "when AASM enum setting is simply set to true" do
|
||||||
before :each do
|
before :each do
|
||||||
AASM::StateMachine[Gate].config.stub(:enum).and_return(true)
|
AASM::StateMachine[Gate].config.stub(:enum).and_return(true)
|
||||||
Gate.stub(:aasm_column).and_return(:value)
|
Gate.aasm.stub(:attribute_name).and_return(:value)
|
||||||
gate.stub(:aasm_guess_enum_method).and_return(:values)
|
gate.stub(:aasm_guess_enum_method).and_return(:values)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ describe "instance methods" do
|
||||||
context "when AASM enum setting is not enabled" do
|
context "when AASM enum setting is not enabled" do
|
||||||
before :each do
|
before :each do
|
||||||
AASM::StateMachine[Gate].config.stub(:enum).and_return(nil)
|
AASM::StateMachine[Gate].config.stub(:enum).and_return(nil)
|
||||||
Gate.stub(:aasm_column).and_return(:value)
|
Gate.aasm.stub(:attribute_name).and_return(:value)
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when AASM column looks like enum" do
|
context "when AASM column looks like enum" do
|
||||||
|
@ -172,7 +172,7 @@ describe "instance methods" do
|
||||||
gate.aasm_write_state state_sym
|
gate.aasm_write_state state_sym
|
||||||
|
|
||||||
expect(obj).to have_received(:update_all)
|
expect(obj).to have_received(:update_all)
|
||||||
.with(Hash[gate.class.aasm_column, state_code])
|
.with(Hash[gate.class.aasm.attribute_name, state_code])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -253,7 +253,7 @@ describe "instance methods" do
|
||||||
expect(gate.aasm.current_state).to eq(:closed)
|
expect(gate.aasm.current_state).to eq(:closed)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return the aasm column when not new and the aasm_column is not nil" do
|
it "should return the aasm column when not new and the aasm.attribute_name is not nil" do
|
||||||
allow(gate).to receive(:new_record?).and_return(false)
|
allow(gate).to receive(:new_record?).and_return(false)
|
||||||
gate.aasm_state = "state"
|
gate.aasm_state = "state"
|
||||||
expect(gate.aasm.current_state).to eq(:state)
|
expect(gate.aasm.current_state).to eq(:state)
|
||||||
|
@ -293,8 +293,8 @@ describe 'subclasses' do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should have the same column as its parent even for the new dsl" do
|
it "should have the same column as its parent even for the new dsl" do
|
||||||
expect(SimpleNewDsl.aasm_column).to eq(:status)
|
expect(SimpleNewDsl.aasm.attribute_name).to eq(:status)
|
||||||
expect(DerivateNewDsl.aasm_column).to eq(:status)
|
expect(DerivateNewDsl.aasm.attribute_name).to eq(:status)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -81,8 +81,8 @@ describe 'sequel' do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should have the same column as its parent even for the new dsl" do
|
it "should have the same column as its parent even for the new dsl" do
|
||||||
expect(@model.aasm_column).to eq(:status)
|
expect(@model.aasm.attribute_name).to eq(:status)
|
||||||
expect(Class.new(@model).aasm_column).to eq(:status)
|
expect(Class.new(@model).aasm.attribute_name).to eq(:status)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue