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