diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a8c8576 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +config/config.yml \ No newline at end of file diff --git a/app.rb b/app.rb index 93a3567..42821e5 100644 --- a/app.rb +++ b/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: - ," - end - end - tropo -end - post '/msg' do sessions_object = Tropo::Generator.parse request.env['rack.input'].read puts sessions_object @@ -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 diff --git a/config/config_examle.yml b/config/config_examle.yml new file mode 100644 index 0000000..e69de29 diff --git a/lib/helpers.rb b/lib/helpers.rb index 80016d6..96393ef 100644 --- a/lib/helpers.rb +++ b/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 @@ -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: + ," + end + end + tropo + end + + end \ No newline at end of file diff --git a/public/js/app.js b/public/js/app.js index 92bbe30..fc596ff 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -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"); diff --git a/views/registrations.haml b/views/registrations.haml new file mode 100644 index 0000000..d591692 --- /dev/null +++ b/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"] \ No newline at end of file