Sha256: a6cec2d844f530636a12599fabdfa0da2dd149193c6bba4184c34caf278493ee

Contents?: true

Size: 1.67 KB

Versions: 24

Compression:

Stored size: 1.67 KB

Contents

module Hobo
  module Lifecycles

    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 allowed?(user)
        record = lifecycle.model.new
        record.with_acting_user(user) { can_run?(record) }
      end


      def candidate(user, attributes=nil)
        record = lifecycle.model.new
        record.with_acting_user(user) { prepare!(record, attributes) }
        record.exempt_from_edit_checks = true
        record
      end


      def extract_attributes(attributes)
        model = lifecycle.model
        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 = get_state(record, options[:become])
        record.lifecycle.become state if state
      end


      def run!(user, attributes)
        record = lifecycle.model.new
        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
        end
      end


      def parameters
        options[:params] || []
      end

    end

  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
hobo-1.1.0 lib/hobo/lifecycles/creator.rb
hobo-1.0.3 lib/hobo/lifecycles/creator.rb
hobo-1.1.0.pre4 lib/hobo/lifecycles/creator.rb
hobo-1.1.0.pre3 lib/hobo/lifecycles/creator.rb
hobo-1.1.0.pre2 lib/hobo/lifecycles/creator.rb
hobo-1.1.0.pre0 lib/hobo/lifecycles/creator.rb
hobo-1.0.2 lib/hobo/lifecycles/creator.rb
hobo-1.0.1 lib/hobo/lifecycles/creator.rb
hobo-1.0.0 lib/hobo/lifecycles/creator.rb
hobo-0.9.106 lib/hobo/lifecycles/creator.rb
hobo-0.9.105 lib/hobo/lifecycles/creator.rb
hobo-0.9.104 lib/hobo/lifecycles/creator.rb
hobo-0.9.103 lib/hobo/lifecycles/creator.rb
hobo-0.9.102 lib/hobo/lifecycles/creator.rb
hobo-0.9.101 lib/hobo/lifecycles/creator.rb
hobo-0.9.100 lib/hobo/lifecycles/creator.rb
hobo-0.9.0 lib/hobo/lifecycles/creator.rb
hobo-0.8.10 lib/hobo/lifecycles/creator.rb
hobo-0.8.9 lib/hobo/lifecycles/creator.rb
hobo-0.8.8 lib/hobo/lifecycles/creator.rb