• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

sleede / fab-manager / #106

pending completion
#106

push

coveralls-ruby

sylvainbx
Merge branch 'dev' for release 6.0.0

704 of 704 new or added lines in 168 files covered. (100.0%)

7919 of 13474 relevant lines covered (58.77%)

15.29 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/app/controllers/api/coupons_controller.rb
1
# frozen_string_literal: true
2

3
# API Controller for resources of type Coupon
4
# Coupons are used in payments
5
class API::CouponsController < API::APIController
×
6
  include ApplicationHelper
×
7

8
  before_action :authenticate_user!, except: %i[validate]
×
9
  before_action :set_coupon, only: %i[show update destroy]
×
10

11
  # Number of notifications added to the page when the user clicks on 'load next notifications'
12
  COUPONS_PER_PAGE = 10
×
13

14
  def index
×
15
    @coupons = Coupon.method(params[:filter]).call.page(params[:page]).per(COUPONS_PER_PAGE).order('created_at DESC')
×
16
    @total = Coupon.method(params[:filter]).call.length
×
17
  end
×
18

19
  def show; end
×
20

21
  def create
×
22
    authorize Coupon
×
23
    @coupon = Coupon.new(coupon_params)
×
24
    if @coupon.save
×
25
      render :show, status: :created, location: @coupon
×
26
    else
×
27
      render json: @coupon.errors, status: :unprocessable_entity
×
28
    end
×
29
  end
×
30

31
  def validate
×
32
    @coupon = Coupon.find_by(code: params[:code])
×
33
    if @coupon.nil?
×
34
      render json: { status: 'rejected' }, status: :not_found
×
35
    else
×
36
      user_id = if current_user&.admin?
×
37
                  params[:user_id]
×
38
                else
×
39
                  current_user&.id
×
40
                end
×
41

42
      status = @coupon.status(user_id, to_centimes(params[:amount]))
×
43
      if status == 'active'
×
44
        render :validate, status: :ok, location: @coupon
×
45
      else
×
46
        render json: { status: status }, status: :unprocessable_entity
×
47
      end
×
48
    end
×
49
  end
×
50

51
  def update
×
52
    authorize Coupon
×
53
    if @coupon.update(coupon_editable_params)
×
54
      render :show, status: :ok, location: @coupon
×
55
    else
×
56
      render json: @coupon.errors, status: :unprocessable_entity
×
57
    end
×
58
  end
×
59

60
  def destroy
×
61
    authorize Coupon
×
62
    if @coupon.safe_destroy
×
63
      head :no_content
×
64
    else
×
65
      head :unprocessable_entity
×
66
    end
×
67
  end
×
68

69
  def send_to
×
70
    authorize Coupon
×
71

72
    @coupon = Coupon.find_by(code: params[:coupon_code])
×
73
    if @coupon.nil?
×
74
      render json: { error: "no coupon with code #{params[:coupon_code]}" }, status: :not_found
×
75
    elsif @coupon.send_to(params[:user_id])
×
76
      render :show, status: :ok, location: @coupon
×
77
    else
×
78
      render json: @coupon.errors, status: :unprocessable_entity
×
79
    end
×
80
  end
×
81

82
  private
×
83

84
  def set_coupon
×
85
    @coupon = Coupon.find(params[:id])
×
86
  end
×
87

88
  def coupon_params
×
89
    if @parameters
×
90
      @parameters
×
91
    else
×
92
      @parameters = params
×
93
      @parameters[:coupon][:amount_off] = to_centimes(@parameters[:coupon][:amount_off]) if @parameters[:coupon][:amount_off]
×
94

95
      @parameters = @parameters.require(:coupon).permit(:name, :code, :percent_off, :amount_off, :validity_per_user, :valid_until,
×
96
                                                        :max_usages, :active)
×
97
    end
×
98
  end
×
99

100
  def coupon_editable_params
×
101
    params.require(:coupon).permit(:name, :active, :valid_until)
×
102
  end
×
103
end
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc