Class: ReservationPolicy

Inherits:
ApplicationPolicy show all
Defined in:
app/policies/reservation_policy.rb

Defined Under Namespace

Classes: Scope

Instance Attribute Summary

Attributes inherited from ApplicationPolicy

#object, #user

Instance Method Summary collapse

Methods inherited from ApplicationPolicy

#scope

Constructor Details

#initialize(user, object) ⇒ ReservationPolicy

Returns a new instance of ReservationPolicy.



8
9
10
11
# File 'app/policies/reservation_policy.rb', line 8

def initialize(user, object)
  super(user, object)
  self.object = ReservationDecorator.new object
end

Instance Method Details

#be_reminded?Boolean

Returns:

  • (Boolean)


89
90
91
92
93
94
95
# File 'app/policies/reservation_policy.rb', line 89

def be_reminded?
  if owner_scope? && now < object.reservation_time && object.active? && !object.no_show? && !object.arrived? && !object.delivery?
    !BookingReminder::ManualQueue.new(object.id).has_reminded?
  else
    false
  end
end

#can_give_review?Boolean

Returns:

  • (Boolean)


29
30
31
32
# File 'app/policies/reservation_policy.rb', line 29

def can_give_review?
  show? && object.active? && !object.no_show? && object.owner_review.blank? &&
    now > object.reservation_time && now < (object.reservation_time + 30.days)
end

#cancel?Boolean

Returns:

  • (Boolean)


54
55
56
57
58
59
60
61
62
63
64
# File 'app/policies/reservation_policy.rb', line 54

def cancel?
  return false unless object
  return false unless my_reservation?

  reservation_time = if owner_scope?
                       object.reservation_time + 30.minutes
                     else
                       object.reservation_time
                     end
  now <= reservation_time
end

#create?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'app/policies/reservation_policy.rb', line 34

def create?
  true
end

#destroy?Boolean

Returns:

  • (Boolean)


50
51
52
# File 'app/policies/reservation_policy.rb', line 50

def destroy?
  false
end

#edit?Boolean

Returns:

  • (Boolean)


46
47
48
# File 'app/policies/reservation_policy.rb', line 46

def edit?
  update?
end

#editable?Boolean

Returns:

  • (Boolean)


66
67
68
# File 'app/policies/reservation_policy.rb', line 66

def editable?
  now <= object.reservation_time.twenty_four_hours_later && object.adjusted? == false && !cancelled_by_user?
end

#index?Boolean

Returns:

  • (Boolean)


13
14
15
16
17
# File 'app/policies/reservation_policy.rb', line 13

def index?
  # user.kinda_like_owner?
  # TODO fix this
  true
end

#mark_arrived?(by_owner: false) ⇒ Boolean

Owner could mark a reservation even if the reservation already marked as no show

Returns:

  • (Boolean)


72
73
74
75
76
77
78
# File 'app/policies/reservation_policy.rb', line 72

def mark_arrived?(by_owner: false)
  if by_owner
    editable? && !object.arrived?
  else
    editable? && !object.status_arrived?
  end
end

#mark_no_show?(by_owner: false) ⇒ Boolean

Owner could mark reservation as No Show even already marked as Arrived

Returns:

  • (Boolean)


81
82
83
84
85
86
87
# File 'app/policies/reservation_policy.rb', line 81

def mark_no_show?(by_owner: false)
  if by_owner
    editable? && !object.no_show
  else
    editable? && !object.status_no_show?
  end
end

#new?Boolean

Returns:

  • (Boolean)


38
39
40
# File 'app/policies/reservation_policy.rb', line 38

def new?
  create?
end

#owner_has_sent_custom_sms?Boolean

Returns:

  • (Boolean)


97
98
99
100
101
102
103
104
105
# File 'app/policies/reservation_policy.rb', line 97

def owner_has_sent_custom_sms?
  return true unless owner_scope?

  if object.been_passed?
    true
  else
    object.property.try :been_sent_custom_sms_by_owner?
  end
end

#show?Boolean

Returns:

  • (Boolean)


24
25
26
27
# File 'app/policies/reservation_policy.rb', line 24

def show?
  (user && user.kinda_like_owner? && user.restaurant_ids.include?(object.restaurant_id)) ||
    (user && user.user? && (object.user_id == user.id))
end

#update?Boolean

Returns:

  • (Boolean)


42
43
44
# File 'app/policies/reservation_policy.rb', line 42

def update?
  show? && editable?
end

#valid_user?Boolean

if user is present, then owner can give review to reservation's user

Returns:

  • (Boolean)


20
21
22
# File 'app/policies/reservation_policy.rb', line 20

def valid_user?
  object.user_id.present?
end