Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Inquiry
- class FilledByRegularUser
- include Virtus.model
- attribute :first_name, String
- attribute :last_name, String
- attribute :email, String
- # validate email if filled by regular user
- validates :email, presence: true
- end
- end
- module Inquiry
- class FilledByAdminUser
- include Virtus.model
- attribute :first_name, String
- attribute :last_name, String
- attribute :email, String
- # no e-mail validation required
- end
- end
- class InquriesController < ApplicationController
- def inquiry_handler
- Inquiry::Handler.new(@inquiry, inquiry_data)
- end
- def inquiry_data
- Inquiry::FilledByRegularUser.new(inquiry_params)
- end
- end
- class InquriesAdminController < ApplicationController
- def inquiry_handler
- Inquiry::Handler.new(@inquiry, inquiry_data)
- end
- def inquiry_data
- Inquiry::FilledByAdminUser.new(inquiry_params)
- end
- end
- module Inquiry
- class Handler
- attr_reader :record, :record_data
- def initialize(record, record_data)
- @record = record
- @record_data = record_data
- end
- def call
- if valid?
- assign_attributes
- record.save(validate: false)
- Inquiry::Mailer.notification(record).deliver_later
- Broadcaster.call(record)
- return true
- else
- return false
- end
- end
- private
- delegate :valid?, :attributes, to: :record_data
- def assign_attributes
- record.assign_attributes(attributes)
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement