Skip to content

Instantly share code, notes, and snippets.

@typeoneerror
Last active November 12, 2015 19:39
Show Gist options
  • Select an option

  • Save typeoneerror/0cb9f418fa452cb437e0 to your computer and use it in GitHub Desktop.

Select an option

Save typeoneerror/0cb9f418fa452cb437e0 to your computer and use it in GitHub Desktop.
module DokiCore
class AccessRequest
include ActiveModel::Validations
attr_accessor :business,
:email,
:how,
:name,
:subscribed
def initialize(attributes = {})
@email = attributes[:email]
@name = attributes[:name]
@how = attributes[:how]
@business = attributes[:business]
@subscribed = attributes[:subscribed]
end
validates_presence_of :business, :email, :how, :name, :subscribed
validates :email, 'doki_core/email' => true
def subscribed?
@subscribed.to_i == 1
end
end
end
def request_access
@access_request = DokiCore::AccessRequest.new(request_access_params)
if @access_request.valid?
DokiCore::Mailer.access_request_email(@access_request.to_json).deliver_later
if @access_request.subscribed?
DokiCore::SubscribeToMailchimpJob.perform_later(@access_request.email, @access_request.name)
end
redirect_to doki_core.tenant_access_requested_path
else
flash.now[:error] = 'Please correct the issues with the form below'
render :access
end
end
@vinniefranco

Copy link
Copy Markdown
module DokiCore
  class AccessRequest
    include ActiveModel::Validations

    ATTRIBUTES = %i(email how name business subscribed).freeze
    attr_accessor(*ATTRIBUTES)

    validates_presence_of :business, :email, :how, :name, :subscribed
    validates :email, 'doki_core/email' => true

    def initialize(attributes = {})
      ATTRIBUTES.each do |attr|
        instance_variable_set(:@"#{attr}", attributes[attr])
      end
    end

    def process
      if valid?
         complete_request
         true
       else
         false
       end
     end

    private

    def complete_request
      # Probably better to look into a first class attributes method
      DokiCore::Mailer.access_request_email(self.to_json).deliver_later
      send(:"subscribe_to_mailinglist_#{subscribing?}")
    end

    def subscribe_to_mailinglist_true
      DokiCore::SubscribeToMailchimpJob.perform_later(email, name)
    end

    def subscribe_to_mailinglist_false
    end

    def subscribing?
      @subscribed.to_i == 1
    end
  end
end
def request_access
  @access_request = DokiCore::AccessRequest.new(request_access_params)

  if @access_request.process
    redirect_to doki_core.tenant_access_requested_path
  else
    flash.now[:error] = 'Please correct the issues with the form below'
    render :access
  end
end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment