Module: ActiveRecord::Resource::Callbacks

Defined in:
lib/active_record/resource/callbacks.rb

Class Method Summary collapse

Class Method Details

.included(base) ⇒ Object

When this module is included, which it is done by default



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/active_record/resource/callbacks.rb', line 5

def self.included(base)
  # Exetend AR::Base
  base.class_eval do
    # When a class inherits from AR::Base, all models do
    def self.inherited(child_class)
      # On the class that Inherits AR::Base
      unless child_class == ActiveRecord::SchemaMigration
        child_class.class_eval do
          def self.new(*args)
            check_resource_methods

            super(*args)
          end

          def handle_delete
            resource_delete_validations
            if self.errors.present?
              return false
            end
            return resource_delete
          end
        end

        child_class.instance_eval do
          # Add Hooks
          before_create :resource_create
          before_validation(:resource_create_validations, on: :create)

          before_update :resource_update
          before_validation(:resource_update_validations, on: :update)

          before_destroy :handle_delete
        end
      end

      super
    end



    def self.check_resource_methods
      raise not_creatable_error unless method_defined? :resource_create
      raise no_creation_validations_error unless method_defined? :resource_create_validations

      raise not_deletable_error unless method_defined? :resource_delete
      raise no_deletable_validations_error unless method_defined? :resource_delete_validations

      raise not_updatable_error unless method_defined? :resource_delete
      raise no_updatable_validations_error unless method_defined? :resource_delete_validations
    end

    def self.not_creatable_error
      "The model #{self} is createable, but does not implement #resource_create"
    end

    def self.no_creation_validations_error
      "The model #{self} is createable, but does not implement #resource_create_validations"
    end

    def self.not_deletable_error
      "The model #{self} is deletable, but does not implement #resource_delete"
    end

    def self.no_deletable_validations_error
      "The model #{self} is deletable, but does not implement #resource_delete_validations"
    end

    def self.not_updatable_error
      "The model #{self} is updatable, but does not implement #resource_update"
    end

    def self.no_updatable_validations_error
      "The model #{self} is updatable, but does not implement #resource_update_validations"
    end
  end
end