sztywny-smsonrails 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/Manifest +101 -0
  3. data/README.rdoc +211 -0
  4. data/Rakefile +109 -0
  5. data/VERSION +1 -0
  6. data/app/controllers/admin/sms_on_rails/base_controller.rb +11 -0
  7. data/app/controllers/admin/sms_on_rails/drafts_controller.rb +75 -0
  8. data/app/controllers/admin/sms_on_rails/outbounds_controller.rb +117 -0
  9. data/app/controllers/admin/sms_on_rails/phone_carriers_controller.rb +85 -0
  10. data/app/controllers/admin/sms_on_rails/phone_numbers_controller.rb +101 -0
  11. data/app/controllers/sms_on_rails/creation_support.rb +99 -0
  12. data/app/controllers/sms_on_rails_controller.rb +14 -0
  13. data/app/helpers/admin/sms_on_rails/drafts_helper.rb +2 -0
  14. data/app/helpers/admin/sms_on_rails/phone_carriers_helper.rb +2 -0
  15. data/app/helpers/sms_on_rails/phone_numbers_helper.rb +9 -0
  16. data/app/helpers/sms_on_rails/sms_helper.rb +44 -0
  17. data/app/models/sms_on_rails/draft.rb +9 -0
  18. data/app/models/sms_on_rails/outbound.rb +17 -0
  19. data/app/models/sms_on_rails/phone_carrier.rb +14 -0
  20. data/app/models/sms_on_rails/phone_number.rb +8 -0
  21. data/app/views/admin/sms_on_rails/base/index.html.erb +5 -0
  22. data/app/views/admin/sms_on_rails/drafts/_show.html.erb +34 -0
  23. data/app/views/admin/sms_on_rails/drafts/edit.html.erb +36 -0
  24. data/app/views/admin/sms_on_rails/drafts/index.html.erb +32 -0
  25. data/app/views/admin/sms_on_rails/drafts/new.html.erb +34 -0
  26. data/app/views/admin/sms_on_rails/drafts/send_sms.html.erb +3 -0
  27. data/app/views/admin/sms_on_rails/drafts/show.html.erb +4 -0
  28. data/app/views/admin/sms_on_rails/outbounds/edit.html.erb +68 -0
  29. data/app/views/admin/sms_on_rails/outbounds/index.html.erb +37 -0
  30. data/app/views/admin/sms_on_rails/outbounds/new.html.erb +54 -0
  31. data/app/views/admin/sms_on_rails/outbounds/show.html.erb +69 -0
  32. data/app/views/admin/sms_on_rails/phone_carriers/edit.html.erb +24 -0
  33. data/app/views/admin/sms_on_rails/phone_carriers/index.html.erb +24 -0
  34. data/app/views/admin/sms_on_rails/phone_carriers/new.html.erb +22 -0
  35. data/app/views/admin/sms_on_rails/phone_carriers/show.html.erb +24 -0
  36. data/app/views/admin/sms_on_rails/phone_numbers/edit.html.erb +33 -0
  37. data/app/views/admin/sms_on_rails/phone_numbers/index.html.erb +28 -0
  38. data/app/views/admin/sms_on_rails/phone_numbers/new.html.erb +31 -0
  39. data/app/views/admin/sms_on_rails/phone_numbers/show.html.erb +32 -0
  40. data/app/views/layouts/sms_on_rails/basic.html.erb +26 -0
  41. data/app/views/sms_on_rails/_phone_carrier_form_item.html.erb +6 -0
  42. data/app/views/sms_on_rails/_send_sms.html.erb +33 -0
  43. data/app/views/sms_on_rails/index.html.erb +8 -0
  44. data/app/views/sms_on_rails/send_sms.html.erb +3 -0
  45. data/app/views/sms_on_rails/show.html.erb +29 -0
  46. data/config/routes.rb +19 -0
  47. data/db/data/fixtures/sms_phone_carriers.yml +110 -0
  48. data/db/migrate/sms_on_rails_carrier_tables.rb +9 -0
  49. data/db/migrate/sms_on_rails_model_tables.rb +48 -0
  50. data/db/migrate/sms_on_rails_phone_number_tables.rb +11 -0
  51. data/db/seed_data.rb +16 -0
  52. data/generators/sms_on_rails/USAGE +31 -0
  53. data/generators/sms_on_rails/commands/inserts.rb +63 -0
  54. data/generators/sms_on_rails/commands/timestamps.rb +33 -0
  55. data/generators/sms_on_rails/runners/add_all_models.rb +6 -0
  56. data/generators/sms_on_rails/runners/dependencies.rb +1 -0
  57. data/generators/sms_on_rails/runners/remove_all_models.rb +5 -0
  58. data/generators/sms_on_rails/runners/sms_on_rails_routes.rb +14 -0
  59. data/generators/sms_on_rails/sms_on_rails_generator.rb +255 -0
  60. data/generators/sms_on_rails/templates/configuration/clickatell.rb +6 -0
  61. data/generators/sms_on_rails/templates/configuration/email_gateway.rb +7 -0
  62. data/generators/sms_on_rails/templates/migrate/schema_migration.rb +15 -0
  63. data/generators/sms_on_rails/templates/migrate/sms_on_rails_update_phone_numbers.rb +40 -0
  64. data/generators/sms_on_rails/templates/phone_number_collision.rb +2 -0
  65. data/init.rb +3 -0
  66. data/install.rb +1 -0
  67. data/lib/sms_on_rails.rb +8 -0
  68. data/lib/sms_on_rails/activerecord_extensions/acts_as_deliverable.rb +92 -0
  69. data/lib/sms_on_rails/activerecord_extensions/acts_as_substitutable.rb +80 -0
  70. data/lib/sms_on_rails/activerecord_extensions/has_a_sms_service_provider.rb +101 -0
  71. data/lib/sms_on_rails/activerecord_extensions/lockable_record.rb +186 -0
  72. data/lib/sms_on_rails/all_models.rb +3 -0
  73. data/lib/sms_on_rails/model_support/draft.rb +178 -0
  74. data/lib/sms_on_rails/model_support/outbound.rb +136 -0
  75. data/lib/sms_on_rails/model_support/phone_carrier.rb +77 -0
  76. data/lib/sms_on_rails/model_support/phone_number.rb +248 -0
  77. data/lib/sms_on_rails/model_support/phone_number_associations.rb +13 -0
  78. data/lib/sms_on_rails/schema_helper.rb +51 -0
  79. data/lib/sms_on_rails/service_providers/base.rb +222 -0
  80. data/lib/sms_on_rails/service_providers/clickatell.rb +54 -0
  81. data/lib/sms_on_rails/service_providers/dummy.rb +21 -0
  82. data/lib/sms_on_rails/service_providers/email_gateway.rb +70 -0
  83. data/lib/sms_on_rails/service_providers/email_gateway_support/errors.rb +20 -0
  84. data/lib/sms_on_rails/service_providers/email_gateway_support/sms_mailer.rb +21 -0
  85. data/lib/sms_on_rails/service_providers/email_gateway_support/sms_mailer/sms_through_gateway.erb +6 -0
  86. data/lib/sms_on_rails/util/sms_error.rb +12 -0
  87. data/lib/smsonrails.rb +1 -0
  88. data/public/images/sms_on_rails/railsYoDawg.jpg +0 -0
  89. data/public/stylesheets/sms_on_rails.css +137 -0
  90. data/smsonrails.gemspec +159 -0
  91. data/sztywny-smsonrails.gemspec +148 -0
  92. data/tasks/sms_on_rails_tasks.rake +68 -0
  93. data/test/active_record_extensions/delivery_and_locking_test.rb +84 -0
  94. data/test/models/draft_test.rb +72 -0
  95. data/test/models/outbound_test.rb +89 -0
  96. data/test/models/phone_number_test.rb +131 -0
  97. data/test/run.rb +19 -0
  98. data/test/service_providers/abstract_test_support.rb +104 -0
  99. data/test/service_providers/clickatell_test.rb +37 -0
  100. data/test/service_providers/email_gateway_test.rb +30 -0
  101. data/test/test_helper.rb +24 -0
  102. data/uninstall.rb +1 -0
  103. metadata +193 -0
@@ -0,0 +1,75 @@
1
+ class Admin::SmsOnRails::DraftsController < Admin::SmsOnRails::BaseController
2
+ include SmsOnRails::CreationSupport
3
+
4
+ # GET /admin/sms/drafts
5
+ # GET /admin/sms/drafts.xml
6
+ def index
7
+ @drafts = SmsOnRails::Draft.all
8
+
9
+ respond_to do |format|
10
+ format.html # index.html.erb
11
+ format.xml { render :xml => @drafts }
12
+ end
13
+ end
14
+
15
+
16
+ # GET /admin/sms/drafts/new
17
+ # GET /admin/sms/drafts/new.xml
18
+ def new
19
+ @draft = SmsOnRails::Draft.new
20
+
21
+ respond_to do |format|
22
+ format.html # new.html.erb
23
+ format.xml { render :xml => @draft }
24
+ end
25
+ end
26
+
27
+ # GET /admin/sms/drafts/1/edit
28
+ def edit
29
+ @draft = SmsOnRails::Draft.find(params[:id])
30
+ end
31
+
32
+ def create
33
+ create_sms_draft
34
+ end
35
+
36
+ # PUT /admin/sms/drafts/1
37
+ # PUT /admin/sms/drafts/1.xml
38
+ def update
39
+ @draft = SmsOnRails::Draft.find(params[:id])
40
+
41
+ respond_to do |format|
42
+ if @draft.update_attributes(params[:draft])
43
+ flash[:notice] = 'Draft was successfully updated.'
44
+ format.html { redirect_to(sms_draft_url(:id => @draft)) }
45
+ format.xml { head :ok }
46
+ else
47
+ format.html { render :action => "edit" }
48
+ format.xml { render :xml => @draft.errors, :status => :unprocessable_entity }
49
+ end
50
+ end
51
+ end
52
+
53
+ # DELETE /admin/sms/drafts/1
54
+ # DELETE /admin/sms/drafts/1.xml
55
+ def destroy
56
+ @draft = SmsOnRails::Draft.find(params[:id])
57
+ @draft.destroy
58
+
59
+ respond_to do |format|
60
+ format.html { redirect_to(sms_drafts_url) }
61
+ format.xml { head :ok }
62
+ end
63
+ end
64
+
65
+ protected
66
+
67
+
68
+ # overwrite to use send_sms if created that or
69
+ # new for all the params
70
+ def render_send_sms_template
71
+ render :action => ((params[:previous_action]||params[:action] == 'send_sms') ? :send_sms : :new)
72
+ end
73
+
74
+
75
+ end
@@ -0,0 +1,117 @@
1
+ class Admin::SmsOnRails::OutboundsController < Admin::SmsOnRails::BaseController
2
+ # GET /admin/sms/outbounds
3
+ # GET /admin/sms/outbounds.xml
4
+ def index
5
+ if params[:sms_draft_id]
6
+ @draft = SmsOnRails::Draft.find( params[:sms_draft_id], :include => :outbounds )
7
+ @outbounds = @draft.outbounds
8
+ end
9
+
10
+ @outbounds ||= SmsOnRails::Outbound.all
11
+
12
+ respond_to do |format|
13
+ format.html # index.html.erb
14
+ format.xml { render :xml => @outbounds }
15
+ end
16
+ end
17
+
18
+ # GET /admin/sms/outbounds/1
19
+ # GET /admin/sms/outbounds/1.xml
20
+ def show
21
+ @outbound = SmsOnRails::Outbound.find(params[:id])
22
+
23
+ respond_to do |format|
24
+ format.html # show.html.erb
25
+ format.xml { render :xml => @outbound }
26
+ end
27
+ end
28
+
29
+ # GET /admin/sms/outbounds/new
30
+ # GET /admin/sms/outbounds/new.xml
31
+ def new
32
+ @outbound = SmsOnRails::Outbound.new(:sms_draft_id => params[:sms_draft_id])
33
+
34
+ respond_to do |format|
35
+ format.html # new.html.erb
36
+ format.xml { render :xml => @outbound }
37
+ end
38
+ end
39
+
40
+ # GET /admin/sms/outbounds/1/edit
41
+ def edit
42
+ @outbound = SmsOnRails::Outbound.find(params[:id])
43
+ end
44
+
45
+ # POST /admin/sms/outbounds
46
+ # POST /admin/sms/outbounds.xml
47
+ def create
48
+ @draft = SmsOnRails::Draft.find(params[:sms_draft_id]) if params[:sms_draft_id]
49
+ @outbound = SmsOnRails::Outbound.create_with_phone(params[:outbound], @draft)
50
+
51
+ respond_to do |format|
52
+ unless @outbound.errors.any?
53
+ flash[:notice] = 'Outbound was successfully created.'
54
+ format.html { redirect_to(sms_draft_outbound_path(@draft, @outbound))}
55
+ format.xml { render :xml => @outbound, :status => :created, :location => @outbound }
56
+ else
57
+ # evil hack as forms are rejected with an id value
58
+ @outbound.phone_number.id = nil if @outbound.phone_number
59
+
60
+ format.html { render :action => "new" }
61
+ format.xml { render :xml => @outbound.errors, :status => :unprocessable_entity }
62
+ end
63
+ end
64
+ end
65
+
66
+ # PUT /admin/sms/outbounds/1
67
+ # PUT /admin/sms/outbounds/1.xml
68
+ def update
69
+ @outbound = SmsOnRails::Outbound.find(params[:id])
70
+
71
+ if params[:outbound]
72
+ @outbound.update_attributes(params[:outbound])
73
+ end
74
+
75
+ if @outbound.errors.blank? && params[:send_immediately]
76
+ deliver_sms('Outbound message was updated and sent.')
77
+ end
78
+
79
+ respond_to do |format|
80
+ unless @outbound.errors.any?
81
+ flash[:notice] = 'Outbound was successfully updated.'
82
+ format.html { redirect_to(sms_draft_outbound_path(@outbound.draft, @outbound)) }
83
+ format.xml { head :ok }
84
+ else
85
+ format.html { render :action => "edit" }
86
+ format.xml { render :xml => @outbound.errors, :status => :unprocessable_entity }
87
+ end
88
+ end
89
+ end
90
+
91
+ # DELETE /admin/sms/outbounds/1
92
+ # DELETE /admin/sms/outbounds/1.xml
93
+ def destroy
94
+ @outbound = SmsOnRails::Outbound.find(params[:id])
95
+ @draft = @outbound.draft
96
+ @outbound.destroy
97
+
98
+ respond_to do |format|
99
+ format.html { redirect_to(sms_draft_outbounds_url(@draft)) }
100
+ format.xml { head :ok }
101
+ end
102
+ end
103
+
104
+ def deliver_sms(success_message = nil)
105
+ @outbound ||= SmsOnRails::Outbound.find(params[:id])
106
+ respond_to do |format|
107
+ if @outbound.deliver(:fatal_exception => nil)
108
+ flash[:notice] = success_message || 'Outbound SMS was successfully sent'
109
+ format.html { redirect_to(sms_draft_outbound_path(@outbound)) }
110
+ format.xml { head :ok }
111
+ else
112
+ format.html { render :action => :edit }
113
+ format.xml { render :xml => @outbound.errors, :status => :unprocessable_entity }
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,85 @@
1
+ class Admin::SmsOnRails::PhoneCarriersController < Admin::SmsOnRails::BaseController
2
+ # GET /admin/sms/phone_carriers
3
+ # GET /admin/sms/phone_carriers.xml
4
+ def index
5
+ @phone_carriers = SmsOnRails::PhoneCarrier.all :group => :name
6
+
7
+ respond_to do |format|
8
+ format.html # index.html.erb
9
+ format.xml { render :xml => @phone_carriers }
10
+ end
11
+ end
12
+
13
+ # GET /admin/sms/phone_carriers/1
14
+ # GET /admin/sms/phone_carriers/1.xml
15
+ def show
16
+ @phone_carrier = SmsOnRails::PhoneCarrier.find(params[:id])
17
+
18
+ respond_to do |format|
19
+ format.html # show.html.erb
20
+ format.xml { render :xml => @phone_carrier }
21
+ end
22
+ end
23
+
24
+ # GET /admin/sms/phone_carriers/new
25
+ # GET /admin/sms/phone_carriers/new.xml
26
+ def new
27
+ @phone_carrier = SmsOnRails::PhoneCarrier.new
28
+
29
+ respond_to do |format|
30
+ format.html # new.html.erb
31
+ format.xml { render :xml => @phone_carrier }
32
+ end
33
+ end
34
+
35
+ # GET /admin/sms/phone_carriers/1/edit
36
+ def edit
37
+ @phone_carrier = SmsOnRails::PhoneCarrier.find(params[:id])
38
+ end
39
+
40
+ # POST /admin/sms/phone_carriers
41
+ # POST /admin/sms/phone_carriers.xml
42
+ def create
43
+ @phone_carrier = SmsOnRails::PhoneCarrier.new(params[:phone_carrier])
44
+
45
+ respond_to do |format|
46
+ if @phone_carrier.save
47
+ flash[:notice] = 'PhoneCarrier was successfully created.'
48
+ format.html { redirect_to(sms_phone_carrier_url(:id => @phone_carrier)) }
49
+ format.xml { render :xml => @phone_carrier, :status => :created, :location => @phone_carrier }
50
+ else
51
+ format.html { render :action => "new" }
52
+ format.xml { render :xml => @phone_carrier.errors, :status => :unprocessable_entity }
53
+ end
54
+ end
55
+ end
56
+
57
+ # PUT /admin/sms/phone_carriers/1
58
+ # PUT /admin/sms/phone_carriers/1.xml
59
+ def update
60
+ @phone_carrier = SmsOnRails::PhoneCarrier.find(params[:id])
61
+
62
+ respond_to do |format|
63
+ if @phone_carrier.update_attributes(params[:phone_carrier])
64
+ flash[:notice] = 'PhoneCarrier was successfully updated.'
65
+ format.html { redirect_to(sms_phone_carrier_url(:id => @phone_carrier)) }
66
+ format.xml { head :ok }
67
+ else
68
+ format.html { render :action => "edit" }
69
+ format.xml { render :xml => @phone_carrier.errors, :status => :unprocessable_entity }
70
+ end
71
+ end
72
+ end
73
+
74
+ # DELETE /admin/sms/phone_carriers/1
75
+ # DELETE /admin/sms/phone_carriers/1.xml
76
+ def destroy
77
+ @phone_carrier = SmsOnRails::PhoneCarrier.find(params[:id])
78
+ @phone_carrier.destroy
79
+
80
+ respond_to do |format|
81
+ format.html { redirect_to(sms_phone_carriers_url) }
82
+ format.xml { head :ok }
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,101 @@
1
+ class Admin::SmsOnRails::PhoneNumbersController < Admin::SmsOnRails::BaseController
2
+
3
+ helper SmsOnRails::SmsHelper
4
+
5
+ # GET /admin/sms_on_rails_phone_numbers
6
+ # GET /admin/sms_on_rails_phone_numbers.xml
7
+ def index
8
+
9
+ if params[:sms_outbound_id]
10
+ @outbounds = SmsOnRails::Outbound.find( params[:sms_outbound_id] )
11
+ @phone_numbers = [@outbounds.phone_number]
12
+ end
13
+
14
+
15
+ @phone_numbers ||= SmsOnRails::PhoneNumber.all
16
+
17
+ respond_to do |format|
18
+ format.html # index.html.erb
19
+ format.xml { render :xml => @phone_numbers }
20
+ end
21
+ end
22
+
23
+ # GET /admin/sms_on_rails_phone_numbers/1
24
+ # GET /admin/sms_on_rails_phone_numbers/1.xml
25
+ def show
26
+
27
+ if params[:sms_outbound_id]
28
+ @outbounds = SmsOnRails::Outbound.find( params[:sms_outbound_id] )
29
+ @phone_number = @outbounds.phone_number
30
+ end
31
+
32
+ @phone_number ||= SmsOnRails::PhoneNumber.find(params[:id])
33
+
34
+ respond_to do |format|
35
+ format.html # show.html.erb
36
+ format.xml { render :xml => @phone_number }
37
+ end
38
+ end
39
+
40
+ # GET /admin/sms_on_rails_phone_numbers/new
41
+ # GET /admin/sms_on_rails_phone_numbers/new.xml
42
+ def new
43
+ @phone_number = SmsOnRails::PhoneNumber.new
44
+
45
+ respond_to do |format|
46
+ format.html # new.html.erb
47
+ format.xml { render :xml => @phone_number }
48
+ end
49
+ end
50
+
51
+ # GET /admin/sms_on_rails_phone_numbers/1/edit
52
+ def edit
53
+ @phone_number = SmsOnRails::PhoneNumber.find(params[:id])
54
+ end
55
+
56
+ # POST /admin/sms_on_rails_phone_numbers
57
+ # POST /admin/sms_on_rails_phone_numbers.xml
58
+ def create
59
+ @phone_number = SmsOnRails::PhoneNumber.new(params[:phone_number])
60
+
61
+ respond_to do |format|
62
+ if @phone_number.save
63
+ flash[:notice] = 'PhoneNumber was successfully created.'
64
+ format.html { redirect_to(sms_phone_number_path(:id => @phone_number)) }
65
+ format.xml { render :xml => @phone_number, :status => :created, :location => @phone_number }
66
+ else
67
+ format.html { render :action => "new" }
68
+ format.xml { render :xml => @phone_number.errors, :status => :unprocessable_entity }
69
+ end
70
+ end
71
+ end
72
+
73
+ # PUT /admin/sms_on_rails_phone_numbers/1
74
+ # PUT /admin/sms_on_rails_phone_numbers/1.xml
75
+ def update
76
+ @phone_number = SmsOnRails::PhoneNumber.find(params[:id])
77
+
78
+ respond_to do |format|
79
+ if @phone_number.update_attributes(params[:phone_number])
80
+ flash[:notice] = 'PhoneNumber was successfully updated.'
81
+ format.html { redirect_to(sms_phone_number_path(:id => @phone_number)) }
82
+ format.xml { head :ok }
83
+ else
84
+ format.html { render :action => "edit" }
85
+ format.xml { render :xml => @phone_number.errors, :status => :unprocessable_entity }
86
+ end
87
+ end
88
+ end
89
+
90
+ # DELETE /admin/sms_on_rails_phone_numbers/1
91
+ # DELETE /admin/sms_on_rails_phone_numbers/1.xml
92
+ def destroy
93
+ @phone_number = SmsOnRails::PhoneNumber.find(params[:id])
94
+ @phone_number.destroy
95
+
96
+ respond_to do |format|
97
+ format.html { redirect_to(sms_phone_numbers_url) }
98
+ format.xml { head :ok }
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,99 @@
1
+ module SmsOnRails::CreationSupport
2
+
3
+ def send_sms
4
+ setup_new_draft
5
+
6
+ respond_to do |format|
7
+ format.html { render_send_sms_template }
8
+ format.xml { render :xml => @draft }
9
+ end
10
+ end
11
+
12
+ # GET /sms/new
13
+ # GET /sms/new.xml
14
+ def new; send_sms; end
15
+
16
+
17
+ # GET /sms/1
18
+ # GET /sms/1
19
+ def show
20
+ @draft = SmsOnRails::Draft.find(params[:id])
21
+
22
+ respond_to do |format|
23
+ format.html # show.html.erb
24
+ format.xml { render :xml => @draft }
25
+ end
26
+ end
27
+
28
+ # GET /sms/1/edit
29
+ def edit
30
+ @draft = SmsOnRails::Draft.find(params[:id])
31
+ end
32
+
33
+ # POST /admin/sms/drafts
34
+ # POST /admin/sms/drafts.xml
35
+ def create_sms_draft
36
+
37
+ # Create a draft, send it immediately if the send_immediately param is set
38
+ # and do not throw fatal delivery exception errors
39
+ @draft = SmsOnRails::Draft.create_sms(params[:draft], nil,
40
+ :send_immediately => params[:send_immediately],
41
+ :deliver => {:fatal_exception => nil })
42
+
43
+ respond_to do |format|
44
+ unless @draft.errors.any?
45
+ flash[:notice] = 'Draft was successfully created and sent.'
46
+ format.html { render_sms_creation_success }
47
+ format.xml { render :xml => @draft, :status => :created, :location => @draft }
48
+ else
49
+ unless @draft.outbounds.any?
50
+ setup_new_draft
51
+ else
52
+ #evil hack as when :id is set, the nested attributes updates don't work
53
+ @draft.outbounds.each{|o| o.phone_number.id = nil if o.phone_number}
54
+ end
55
+ sanitize_draft_errors(@draft)
56
+ format.html { render_send_sms_template }
57
+ format.xml { render :xml => @draft.errors, :status => :unprocessable_entity }
58
+ end
59
+ end
60
+ end
61
+
62
+ def create; create_sms_draft; end
63
+
64
+
65
+ protected
66
+
67
+ def render_send_sms_template
68
+ render :action => :send_sms
69
+ end
70
+
71
+ def render_sms_creation_success
72
+ redirect_to(:overwrite_params => {:id => @draft, :action => :show } )
73
+ end
74
+
75
+ def setup_new_draft
76
+ @phone_number = SmsOnRails::PhoneNumber.new
77
+ @outbound = SmsOnRails::Outbound.new
78
+ @draft ||= SmsOnRails::Draft.new
79
+ @outbound.phone_number = @phone_number
80
+ @draft.outbounds << @outbound
81
+ end
82
+
83
+ # Clean up the error messages on drafts a little
84
+ def sanitize_draft_errors(draft)
85
+ if draft.errors.any?
86
+ errors = draft.errors.dup
87
+ draft.errors.clear
88
+ errors.each{|attr, message|
89
+ if attr == 'outbounds_phone_number_phone_number_digits'
90
+ draft.errors.add(:outbounds_phone_number, message)
91
+ elsif !(attr =~ /^outbounds_phone_number/) && !(attr == 'outbounds' && message == 'is invalid')
92
+ draft.errors.add(attr, message)
93
+ end
94
+ }
95
+ end
96
+ end
97
+
98
+
99
+ end