Skip to content

Instantly share code, notes, and snippets.

@giovannibenussi
Last active March 31, 2017 18:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save giovannibenussi/ed6392804ae2be43ea360d3f439a74d2 to your computer and use it in GitHub Desktop.
Save giovannibenussi/ed6392804ae2be43ea360d3f439a74d2 to your computer and use it in GitHub Desktop.
#################### app/models/task.rb
class Task < ApplicationRecord
belongs_to :user
belongs_to :lead, required: false
belongs_to :creator, class_name: "User", foreign_key: "creator_id"
belongs_to :responsible, class_name: "User", foreign_key: "responsible_id"
update_index 'leads#lead', :lead
update_index 'lead_timeline#task', :self
attr_accessor :contact_name, :contact_email
scope :finished, -> {where( finished: true )}
scope :of_type, lambda {|task_type| where(task_type: task_type) }
def message
Message.find(message_id)
end
def message_id
link_to_action.delete('/messages').to_i
end
def user_phone
user.try(:phone)
end
def send_sms(message = nil)
message ||= "Hey #{user.try(:full_name)}, you have a new task. Log in to your PropertySimple CRM Account to manage it."
TwilioHelper::send_sms(phone: user_phone, message_content: message, origin_number: user.try(:sms_origin_number))
end
end
#################### app/models/user.rb
def sms_origin_number
return '+15005550006' unless Rails.env.production?
case timezone
when 'America/Phoenix'
Rails.application.secrets.twilio_az_number
when 'America/Los_Angeles'
Rails.application.secrets.twilio_ca_number
else
Rails.application.secrets.twilio_az_number
end
end
private
#################### config/secrets.yml
test:
secret_key_base: ba3a773fc6c584345a79a3eb9c78e736970879e4a0c7088c761fd2d307c5eab2f30fa83a790b028b8d7a85c71d2ee9cfbb4d15bd489023e73e0441141d75e699
twilio_acc_sid: AC9dc7cd0aed77930b5d42703c37c5c252
twilio_token: 3a49bffb76d68e384a1e56c71ef47777
twilio_az_number: '+19493045404'
twilio_ca_number: '+16025170566'
twilio_testing_valid_receiver_number: '+15005550006' # Valid number
twilio_testing_number: '+56952551372' # Pablo's number
#################### app/lib/twilio_helper.rb
class TwilioHelper
@@twilio_acc_sid = Rails.application.secrets.twilio_acc_sid
@@twilio_token = Rails.application.secrets.twilio_token
@@twilio_az_number = Rails.application.secrets.twilio_az_number
@@twilio_testing_number = Rails.application.secrets.twilio_testing_number
@@twilio_testing_valid_receiver_number = Rails.application.secrets.twilio_valid_receiver_number
def self.send_sms(phone: , message_content:, origin_number: nil)
origin_number ||= @@twilio_az_number
client = Twilio::REST::Client.new @@twilio_acc_sid, @@twilio_token
if not Rails.env.production? and not is_a_test_number?(phone)
phone = @@twilio_testing_number
end
client.messages.create(
from: origin_number,
to: phone,
body: message_content,
)
end
def self.is_a_test_number?(number)
[
@@twilio_testing_valid_receiver_number.to_s
].include?(number)
end
end
#################### spec/factories/task.rb
FactoryGirl.define do
factory :task do
end
end
#################### spec/models/task_spec.rb
require 'rails_helper'
RSpec.describe Task, type: :model do
describe '.notify :new' do
it 'send successfully an sms' do
task = create(:task)
task.user = create(:user)
task.user.phone = Rails.application.secrets.twilio_valid_receiver_number
task.user.save
task.save
expect(task.user_id).to_not be_nil
expect(task.send_sms).to be_truthy
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment