Skip to content

Commit

Permalink
moved config into a yaml file
Browse files Browse the repository at this point in the history
  • Loading branch information
johntdyer committed Aug 11, 2011
1 parent d0bed01 commit de14ed5
Show file tree
Hide file tree
Showing 6 changed files with 109 additions and 76 deletions.
1 change: 1 addition & 0 deletions .gitignore
@@ -0,0 +1 @@
config/config.yml
90 changes: 25 additions & 65 deletions app.rb
@@ -1,80 +1,32 @@
$LOAD_PATH << './lib'
%w(rubygems awesome_print rest-client helpers json sinatra tropo-webapi-ruby).each{|lib| require lib}
%w(rubygems yaml awesome_print rest-client helpers json sinatra tropo-webapi-ruby).each{|lib| require lib}


begin
$config = YAML::load(File.read("./config/config.yml"))
rescue Error::ENOENT
puts "Did you rename the config_example.yml file to config.yml?"
exit!
end

COUCH_BASE = 'tropo.iriscouch.com'
CLOUDANT_USER = 'jdyer'
CLOUDANT_PASS = 'Lon3star!'
DB_NAME='lonestar'
TOKEN_ID='05e9077d177c1f49a997f21df0bed69f0a19332ddc25a975a29d26a5e29cc0e147235f04597b0aef595a85c3'

COUCH_URL = "http://#{CLOUDANT_USER}:#{CLOUDANT_PASS}@#{COUCH_BASE}/#{DB_NAME}"

#$config = YAML::load(File.read("./config/config.yaml"))

COUCH_URL = "http://#{$config["couch"]["user"]}:#{$config["couch"]["pass"]}@#{$config["couch"]["base_url"]}/#{$config["couch"]["db_name"]}"

configure do
set :views, "#{File.dirname(__FILE__)}/views"
end


include Helpers
enable :sessions

# opts={:phone_number=>"4075551dsd005",:email=>"Marge@tropo.com",:name=>"Stan Simpson"}; create_record(opts);opts={:phone_number=>"4075551001",:email=>"Bart@tropo.com",:name=>"Bart Simpson"}; create_record(opts);opts={:phone_number=>"4075551002",:email=>"Homer@tropo.com",:name=>"Homer Simpson"}; create_record(opts);opts={:phone_number=>"4075551009",:email=>"col@tropo.com",:name=>"Blah Simpson"}; create_record(opts)
# opts={:phone_number=>"14074740214",:email=>"Marge@tropo.com",:name=>"Stan Simpson"}; create_record(opts)
def create_record(opts={})
begin
data={
:rand=>rand
}.merge(opts)

response = RestClient.put COUCH_URL + "/" + CGI.escape(opts[:phone_number]), data.to_json,:content_type=>'application/json'
response.code.eql?(201) ? true : false
rescue RestClient::Conflict
false
end
end
create_record :phone_number=>"4074740214",:user_name=>"john",:email=>"john@krumpt.com"



# create_record :phone_number=>"14074740214",:user_name=>"john",:email=>"john@krumpt.com"


def get_random_user
winner_record = JSON.parse(RestClient.get COUCH_URL+"/_design/app/_view/random?limit=1")["rows"]#["value"]
if winner_record.empty?
nil
else
update_record = RestClient.put COUCH_URL + "/" + CGI.escape(winner_record[0]["value"]["phone_number"]), data={:has_won=>true,:_rev=>winner_record[0]["value"]["_rev"]}.merge(winner_record[0]["value"]).to_json,:content_type=>'application/json'
update_record.code.eql?(201) ? winner_record[0]["value"] : "error"
end
end


def send_msg(sessions_object)
tropo = Tropo::Generator.new do
message({
:to => "tel:+#{sessions_object[:session][:parameters][:number_to_msg]}",
:channel => 'TEXT',
:network => 'SMS'}) do
say :value => sessions_object[:session][:parameters][:msg]
end
end
tropo
end
def receive_msg(sessions_object)
tropo = Tropo::Generator.new do
on :event => 'continue', :next => '/hangup'
if sessions_object["session"]["initial_text"].split(",").length.eql?(2)
if create_record({:phone_number=>sessions_object[:session][:from][:id],:user_name=>sessions_object["session"]["initial_text"].split(",")[0].chomp,:email=>sessions_object["session"]["initial_text"].split(",")[1].chomp})
say 'Got it thanks'
else
say "stop trying to cheat, one entry per number"
end
else
say "I didn't understand you, please use this format:
<name>,<email>"
end
end
tropo
end

post '/msg' do
sessions_object = Tropo::Generator.parse request.env['rack.input'].read
puts sessions_object
Expand All @@ -99,9 +51,17 @@ def receive_msg(sessions_object)
haml :winner
end

get '/registrations' do
@registrations = JSON.parse(RestClient.get "#{COUCH_URL}/_all_docs?include_docs=true")["rows"]
puts @registrations
haml :registrations
end

post "/send_notification" do
if JSON.parse(request.env['rack.input'].read)["phone_number"]
send_an_sms :number_to_msg=>JSON.parse(request.env['rack.input'].read)["phone_number"], :msg => "You won, come to the front and show this text msg to claim your prize [Tropo Rox]"
if session[:winner_candidate_data]
update_record = RestClient.put session[:winner_candidate_url],session[:winner_candidate_data].to_json,:content_type=>'application/json'
update_record.code.eql?(201) ? session[:winner_record] : "error"
send_an_sms :number_to_msg=>params["phone_number"], :msg => "Hey #{params["user_name"]} you won something cool!!! Come to the front and show this text msg to claim your prize [Tropo Rox]"
else
false
end
Expand Down
Empty file added config/config_examle.yml
Empty file.
65 changes: 57 additions & 8 deletions lib/helpers.rb
@@ -1,14 +1,7 @@
module Helpers

class NilClass
def [] (*args)
return nil
end
end

def send_an_sms(opts={})
puts "Sending msg [ #{CGI.escape(opts[:msg])} ] => #{opts[:number_to_msg]}"
response = RestClient.get "http://api.tropo.com/1.0/sessions?action=create&token=#{TOKEN_ID}&number_to_msg=#{opts[:number_to_msg]}&msg=#{CGI.escape(opts[:msg])}"
response = RestClient.get "http://api.tropo.com/1.0/sessions?action=create&token=#{$config["tropo"]["token_id"]}&number_to_msg=#{opts[:number_to_msg]}&msg=#{CGI.escape(opts[:msg])}"
if response.eql?(200)
puts "Msg sent HTTP/#{response.code}"
true
Expand All @@ -17,4 +10,60 @@ def send_an_sms(opts={})
false
end
end

def create_record(opts={})
begin
data={
:rand=>rand
}.merge(opts)

response = RestClient.put COUCH_URL + "/" + CGI.escape(opts[:phone_number]), data.to_json,:content_type=>'application/json'
puts response
response.code.eql?(201) ? true : false
rescue RestClient::Conflict
false
end
end

def get_random_user
winner_record = JSON.parse(RestClient.get COUCH_URL+"/_design/app/_view/random?limit=1")["rows"]#["value"]
if winner_record.empty?
nil
else
session[:winning_record] = winner_record[0]["value"]
session[:winner_candidate_url] = COUCH_URL + "/" + CGI.escape(winner_record[0]["value"]["phone_number"])
session[:winner_candidate_data]= {:has_won=>true,:_rev=>winner_record[0]["value"]["_rev"]}.merge(winner_record[0]["value"])
end
end

def send_msg(sessions_object)
tropo = Tropo::Generator.new do
message({
:to => "tel:+#{sessions_object[:session][:parameters][:number_to_msg]}",
:channel => 'TEXT',
:network => 'SMS'}) do
say :value => sessions_object[:session][:parameters][:msg]
end
end
tropo
end

def receive_msg(sessions_object)
tropo = Tropo::Generator.new do
on :event => 'continue', :next => '/hangup'
if sessions_object["session"]["initial_text"].split(",").length.eql?(2)
if create_record({:phone_number=>sessions_object[:session][:from][:id],:user_name=>sessions_object["session"]["initial_text"].split(",")[0].chomp,:email=>sessions_object["session"]["initial_text"].split(",")[1].chomp})
say 'Got it thanks'
else
say "stop trying to cheat, one entry per number"
end
else
say "I didn't understand you, please use this format:
<name>,<email>"
end
end
tropo
end


end
7 changes: 4 additions & 3 deletions public/js/app.js
Expand Up @@ -42,15 +42,16 @@ jQuery(document).ready(function() {
image: 'images/fail.png'
});
}else{
// var phone_number = "14074740214";
// var email = "john@krumpt.com";
// var user_name = "John";
$.ajax({
url: '/send_notification',
type: 'POST',
dataType: 'json',
data: "{'phone_number':"+phone_number+",'email':"+email+",'name':"+user_name+"}",
data: "phone_number="+phone_number+"&email="+email+"&user_name="+user_name,
complete: function(xhr, textStatus) {
console.log(xhr.responseText);


},
error: function(xhr, textStatus, errorThrown) {
console.log("oh shit");
Expand Down
22 changes: 22 additions & 0 deletions views/registrations.haml
@@ -0,0 +1,22 @@
%table
%thead
%tr
%th
Name
%th
Phone
%th
Email
%th
Won
%tbody
-@registrations.each do |each|
%tr
%td
=each["doc"]["name"]
%td
=each["doc"]["phone_number"]
%td
=each["doc"]["email"]
%td
=each["doc"]["has_won"]

0 comments on commit de14ed5

Please sign in to comment.