lib/hobo/lifecycles/creator.rb in hobo-0.8.3 vs lib/hobo/lifecycles/creator.rb in hobo-0.8.4
- old
+ new
@@ -1,37 +1,27 @@
module Hobo
module Lifecycles
- class Creator < Struct.new(:lifecycle, :name, :who, :on_create, :options)
+ class Creator < Struct.new(:lifecycle, :name, :on_create, :options)
def initialize(*args)
super
+ self.name = name.to_sym
lifecycle.creators[name] = self
end
include Actions
- def check_preconditions(record)
- record.lifecycle.preconditions_satisfied?
- end
-
-
- def prepare_and_check_with_preconditions!(record, user, attributes=nil)
- prepare_and_check_without_preconditions!(record, user, attributes) && check_preconditions(record)
- end
- alias_method_chain :prepare_and_check!, :preconditions
-
-
- def allowed?(user, attributes=nil)
+ def allowed?(user)
record = lifecycle.model.new
- prepare_and_check!(record, user, attributes)
+ record.with_acting_user(user) { can_run?(record) }
end
def candidate(user, attributes=nil)
record = lifecycle.model.new
- prepare_and_check!(record, user, attributes)
+ record.with_acting_user(user) { prepare!(record, attributes) }
record.exempt_from_edit_checks = true
record
end
@@ -40,30 +30,35 @@
params = options.fetch(:params, [])
allowed = params.dup
params.each do |p|
if (refl = model.reflections[p]) && refl.macro == :belongs_to
allowed << refl.primary_key_name.to_s
+ allowed << refl.options[:foreign_type] if refl.options[:polymorphic]
end
end
attributes & allowed
end
def change_state(record)
- state = options[:become]
- record.lifecycle.become(state) if state
+ state = get_state(record, options[:become])
+ record.lifecycle.become state if state
end
def run!(user, attributes)
record = lifecycle.model.new
- if prepare_and_check!(record, user, attributes)
- if change_state(record)
- fire_event(record, on_create)
+ record.lifecycle.active_step = self
+ record.with_acting_user(user) do
+ prepare!(record, attributes)
+ if can_run?(record)
+ if change_state(record)
+ fire_event(record, on_create)
+ end
+ record
+ else
+ raise Hobo::PermissionDeniedError
end
- record
- else
- raise Hobo::Model::PermissionDeniedError
end
end
def parameters