blythedunham-sms_on_rails 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/Manifest +101 -0
  3. data/README +163 -0
  4. data/README.rdoc +211 -0
  5. data/Rakefile +76 -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 +52 -0
  81. data/lib/sms_on_rails/service_providers/dummy.rb +19 -0
  82. data/lib/sms_on_rails/service_providers/email_gateway.rb +68 -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/sms_on_rails.gemspec +32 -0
  91. data/tasks/sms_on_rails_tasks.rake +67 -0
  92. data/test/active_record_extensions/delivery_and_locking_test.rb +84 -0
  93. data/test/models/draft_test.rb +72 -0
  94. data/test/models/outbound_test.rb +89 -0
  95. data/test/models/phone_number_test.rb +131 -0
  96. data/test/run.rb +18 -0
  97. data/test/service_providers/abstract_test_support.rb +104 -0
  98. data/test/service_providers/clickatell_test.rb +39 -0
  99. data/test/service_providers/email_gateway_test.rb +30 -0
  100. data/test/test_helper.rb +24 -0
  101. data/uninstall.rb +1 -0
  102. metadata +187 -0
@@ -0,0 +1,37 @@
1
+ <% if @draft %>
2
+ <h1> SMS Draft Outbounds</h1>
3
+ <%= render :partial => 'admin/sms_on_rails/drafts/show.html.erb' %>
4
+ <% end %>
5
+
6
+ <h2>SMS Outbounds</h2>
7
+ <table>
8
+ <tr>
9
+ <th class="short">Id</th>
10
+ <th>Phone number</th>
11
+ <th>Status</th>
12
+ <th class="long">Message</th>
13
+ <th>Procesed on</th>
14
+ <th>Sms service provider</th>
15
+ <th>Sub status</th>
16
+ </tr>
17
+ <% staggered_table_rows(@outbounds) do |outbound| %>
18
+ <td><%=h outbound.id %></td>
19
+ <td><%= link_to_sms_phone_number(outbound.phone_number) %></td>
20
+ <td><%=h outbound.status %></td>
21
+ <td><%= link_to_sms_draft(outbound.draft, outbound.actual_message) %></td>
22
+ <td><%=h outbound.processed_on %></td>
23
+ <td><%=h outbound.sms_service_provider_name %></td>
24
+ <td><%=h outbound.sub_status %></td>
25
+ <td><%= link_to('Send', :action => :deliver_sms, :id => outbound.to_param) unless outbound.delivered? %></td>
26
+ <td><%= link_to 'Show', sms_draft_outbound_path(@draft, outbound) %></td>
27
+ <td><%= link_to 'Edit', edit_sms_draft_outbound_path(@draft, outbound) %></td>
28
+ <td><%= link_to 'Destroy', sms_draft_outbound_path(@draft, outbound), :confirm => 'Are you sure?', :method => :delete %></td>
29
+ <% end %>
30
+ </table>
31
+
32
+ <br />
33
+ <% if @draft %>
34
+ <%= link_to 'New outbound', new_sms_draft_outbound_path(@draft) %> |
35
+ <%= link_to 'Edit Draft', edit_sms_draft_path(@draft) %> |
36
+ <%= link_to 'List of Drafts', sms_drafts_path %>
37
+ <% end %>
@@ -0,0 +1,54 @@
1
+ <h1>New outbound</h1>
2
+
3
+ <% form_for(:outbound, @outbound, :url => sms_draft_outbounds_path(@outbound.draft)) do |f| %>
4
+ <%= f.error_messages %>
5
+ <% @outbound.phone_number ||= SmsOnRails::PhoneNumber.new-%>
6
+ <% f.fields_for :phone_number do |phone_form| %>
7
+ <p>
8
+ <%= f.label :phone_number %><br />
9
+ <%= phone_form.text_field :number%>
10
+ </p>
11
+ <%= render :partial => '/sms_on_rails/phone_carrier_form_item', :locals => {:phone_form => phone_form } %>
12
+ <% end %>
13
+ <p>
14
+ <%= f.label :status %><br />
15
+ <%= sms_on_rails_status_select(f) %>
16
+ </p>
17
+ <p>
18
+ <%= f.label :notes %><br />
19
+ <%= f.text_field :notes %>
20
+ </p>
21
+ <p>
22
+ <%= f.label :processed_on %><br />
23
+ <%= f.datetime_select :processed_on %>
24
+ </p>
25
+ <p>
26
+ <%= f.label :sms_service_provider_id, 'Sms Service Provider' %><br />
27
+ <%= service_providers_collection_select(f) %>
28
+ </p>
29
+ <p>
30
+ <%= f.label :created_at %><br />
31
+ <%= f.datetime_select :created_at %>
32
+ </p>
33
+ <p>
34
+ <%= f.label :retry_count %><br />
35
+ <%= f.text_field :retry_count %>
36
+ </p>
37
+ <p>
38
+ <%= f.label :sub_status %><br />
39
+ <%= f.text_field :sub_status %>
40
+ </p>
41
+ <p>
42
+ <%= f.label :options %><br />
43
+ <%= f.text_field :options %>
44
+ </p>
45
+ <p>
46
+ <%= f.label :send_priority %><br />
47
+ <%= f.text_field :send_priority %>
48
+ </p>
49
+ <p>
50
+ <%= f.submit 'Create' %>
51
+ </p>
52
+ <% end %>
53
+
54
+ <%= link_to 'Back', sms_draft_outbounds_path(@outbound.draft) %>
@@ -0,0 +1,69 @@
1
+ <p>
2
+ <b>Id:</b>
3
+ <%= h @outbound.id %>
4
+ </p>
5
+
6
+ <p>
7
+ <b>Status:</b>
8
+ <%=h @outbound.status %>
9
+ </p>
10
+
11
+ <% if @outbound.delivered? %>
12
+ <p>
13
+ <b>Message</b>
14
+ <%=h @outbound.actual_message %>
15
+ </p>
16
+ <% end %>
17
+
18
+ <p>
19
+ <b>Notes:</b>
20
+ <%=h @outbound.notes %>
21
+ </p>
22
+
23
+ <p>
24
+ <b>Procesed on:</b>
25
+ <%=h @outbound.processed_on %>
26
+ </p>
27
+
28
+ <p>
29
+ <b>Sms service provider:</b>
30
+ <%=h @outbound.sms_service_provider.human_name if @outbound.sms_service_provider %>
31
+ </p>
32
+
33
+ <p>
34
+ <b>Created at:</b>
35
+ <%=h @outbound.created_at %>
36
+ </p>
37
+
38
+ <p>
39
+ <b>Retry count:</b>
40
+ <%=h @outbound.retry_count %>
41
+ </p>
42
+
43
+ <p>
44
+ <b>Sub status:</b>
45
+ <%=h @outbound.sub_status %>
46
+ </p>
47
+
48
+ <p>
49
+ <b>Options:</b>
50
+ <%=h @outbound.options %>
51
+ </p>
52
+
53
+ <p>
54
+ <b>Send priority:</b>
55
+ <%=h @outbound.send_priority %>
56
+ </p>
57
+
58
+ <p>
59
+ <b>Draft:</b>
60
+ <%= link_to_sms_draft(@outbound.draft) %>
61
+ </p>
62
+
63
+ <p>
64
+ <b>Phone number:</b>
65
+ <%= link_to_sms_phone_number(@outbound.phone_number) %>
66
+ </p>
67
+
68
+ <%= link_to 'Edit', edit_sms_draft_outbound_path(@outbound.draft, @outbound) %> |
69
+ <%= link_to 'Back', sms_draft_outbounds_path(@outbound.draft) %>
@@ -0,0 +1,24 @@
1
+ <h1>Editing phone carrier</h1>
2
+
3
+ <% form_for(:phone_carrier, @phone_carrier, :url => sms_phone_carrier_path(@phone_carrier), :html => {:method => :put}) do |f| %>
4
+ <%= f.error_messages %>
5
+
6
+ <p>
7
+ <%= f.label :name %><br />
8
+ <%= f.text_field :name %>
9
+ </p>
10
+ <p>
11
+ <%= f.label :email_domain %><br />
12
+ <%= f.text_field :email_domain %>
13
+ </p>
14
+ <p>
15
+ <%= f.label :options %><br />
16
+ <%= f.text_field :options %>
17
+ </p>
18
+ <p>
19
+ <%= f.submit 'Update' %>
20
+ </p>
21
+ <% end %>
22
+
23
+ <%= link_to 'Show', sms_phone_carrier_path(@phone_carrier) %> |
24
+ <%= link_to 'Back', sms_phone_carriers_path %>
@@ -0,0 +1,24 @@
1
+ <h1>SMS Phone Carriers</h1>
2
+
3
+ <table>
4
+ <tr>
5
+ <th class="short">Id</th>
6
+ <th class="long">Name</th>
7
+ <th class="long">Email domain</th>
8
+ <th>Options</th>
9
+ </tr>
10
+
11
+ <% staggered_table_rows(@phone_carriers) do |phone_carrier| %>
12
+ <td><%=h phone_carrier.id %></td>
13
+ <td><%=h phone_carrier.name %></td>
14
+ <td><%=h phone_carrier.email_domain %></td>
15
+ <td><%=h phone_carrier.options %></td>
16
+ <td><%= link_to 'Show', sms_phone_carrier_path(phone_carrier) %></td>
17
+ <td><%= link_to 'Edit', edit_sms_phone_carrier_path(phone_carrier) %></td>
18
+ <td><%= link_to 'Destroy', sms_phone_carrier_path(phone_carrier), :confirm => 'Are you sure?', :method => :delete %></td>
19
+ <% end %>
20
+ </table>
21
+
22
+ <br />
23
+
24
+ <%= link_to 'New phone carrier', new_sms_phone_carrier_path %>
@@ -0,0 +1,22 @@
1
+ <h1>New phone carrier</h1>
2
+ <% form_for(:phone_carrier, @phone_carrier, :url => sms_phone_carriers_path ) do |f| %>
3
+ <%= f.error_messages %>
4
+
5
+ <p>
6
+ <%= f.label :name %><br />
7
+ <%= f.text_field :name %>
8
+ </p>
9
+ <p>
10
+ <%= f.label :email_domain %><br />
11
+ <%= f.text_field :email_domain %>
12
+ </p>
13
+ <p>
14
+ <%= f.label :options %><br />
15
+ <%= f.text_field :options %>
16
+ </p>
17
+ <p>
18
+ <%= f.submit 'Create' %>
19
+ </p>
20
+ <% end %>
21
+
22
+ <%= link_to 'Back', sms_phone_carriers_path %>
@@ -0,0 +1,24 @@
1
+ <h1>Carrier: <%=h @phone_carrier.name %></h1>
2
+ <p>
3
+ <b>Id:</b>
4
+ <%= h @phone_carrier.id %>
5
+ </p>
6
+
7
+ <p>
8
+ <b>Name:</b>
9
+ <%=h @phone_carrier.name %>
10
+ </p>
11
+
12
+ <p>
13
+ <b>Email domain:</b>
14
+ <%=h @phone_carrier.email_domain %>
15
+ </p>
16
+
17
+ <p>
18
+ <b>Options:</b>
19
+ <%=h @phone_carrier.options %>
20
+ </p>
21
+
22
+
23
+ <%= link_to 'Edit', edit_sms_phone_carrier_path(@phone_carrier) %> |
24
+ <%= link_to 'Back', sms_phone_carriers_path %>
@@ -0,0 +1,33 @@
1
+ <h1>Editing Phone Number</h1>
2
+
3
+ <% form_for(:phone_number, @phone_number, :url => sms_phone_number_path, :html => {:method => :put}) do |f| %>
4
+ <%= f.error_messages %>
5
+
6
+ <p>
7
+ <%= f.label :number %><br />
8
+ <%= f.text_field :number, :value => @phone_number.human_display %>
9
+ </p>
10
+ <p>
11
+ <%= f.label :carrier_id, 'Phone Carrier' %><br />
12
+ <%= phone_carriers_collection_select(f) %>
13
+ </p>
14
+ <p>
15
+ <%= f.label :country_code %><br />
16
+ <%= f.text_field :country_code %>
17
+ </p>
18
+ <p>
19
+ <%= f.label :do_not_send %><br />
20
+ <%= f.select :do_not_send, ['bounce', 'abuse', 'opt out', 'other'] %>
21
+ </p>
22
+ <p>
23
+ <%= f.label :white_list %><br />
24
+ <%= f.check_box :white_list %>
25
+ </p>
26
+
27
+ <p>
28
+ <%= f.submit 'Update' %>
29
+ </p>
30
+ <% end %>
31
+
32
+ <%= link_to 'Show', sms_phone_number_path(:id => @phone_number) %> |
33
+ <%= link_to 'Back', sms_phone_numbers_path %>
@@ -0,0 +1,28 @@
1
+ <h1>Phone Numbers</h1>
2
+
3
+ <table>
4
+ <tr>
5
+ <th class="short">Id</th>
6
+ <th class="long">Number</th>
7
+ <th>Carrier</th>
8
+ <th>Country code</th>
9
+ <th>Do Not Send</th>
10
+ <th>White List</th>
11
+ </tr>
12
+
13
+ <% staggered_table_rows(@phone_numbers) do |phone_number| %>
14
+ <td><%=h phone_number.id %></td>
15
+ <td><%=h phone_number.human_display %></td>
16
+ <td><%= phone_number_carrier_link(phone_number) %></td>
17
+ <td><%=h phone_number.country_code %></td>
18
+ <td><%=h phone_number.do_not_send %></td>
19
+ <td><%=h phone_number.white_list? %></td>
20
+ <td><%= link_to 'Show', sms_phone_number_path(:id => phone_number)%></td>
21
+ <td><%= link_to 'Edit', edit_sms_phone_number_path(phone_number) %></td>
22
+ <td><%= link_to 'Destroy', sms_phone_number_path(:id => phone_number), :confirm => 'Are you sure?', :method => :delete %></td>
23
+ <% end %>
24
+ </table>
25
+
26
+ <br />
27
+
28
+ <%= link_to 'New phone number', new_sms_phone_number_path %>
@@ -0,0 +1,31 @@
1
+ <h1>New Phone Number</h1>
2
+
3
+ <% form_for(:phone_number, @phone_number, :url => sms_phone_numbers_path) do |f| %>
4
+ <%= f.error_messages %>
5
+
6
+ <p>
7
+ <%= f.label :number %><br />
8
+ <%= f.text_field :number %>
9
+ </p>
10
+ <p>
11
+ <%= f.label :carrier_id, 'Phone Carrier' %><br />
12
+ <%= phone_carriers_collection_select(f) %>
13
+ </p>
14
+ <p>
15
+ <%= f.label :country_code %><br />
16
+ <%= f.text_field :country_code %>
17
+ </p>
18
+ <p>
19
+ <%= f.label :do_not_send %><br />
20
+ <%= f.select :do_not_send, ['bounce', 'abuse', 'opt_out', 'other'], :include_blank => true %>
21
+ </p>
22
+ <p>
23
+ <%= f.label :white_list %><br />
24
+ <%= f.check_box :white_list %>
25
+ </p>
26
+ <p>
27
+ <%= f.submit 'Create' %>
28
+ </p>
29
+ <% end %>
30
+
31
+ <%= link_to 'Back', sms_phone_numbers_path %>
@@ -0,0 +1,32 @@
1
+ <h1>Phone Number <%=h @phone_number.human_display %></h1>
2
+ <p>
3
+ <b>Id:</b>
4
+ <%= h @phone_number.id %>
5
+ </p>
6
+ <p>
7
+ <b>Number:</b>
8
+ <%=h @phone_number.human_display %>
9
+ </p>
10
+
11
+ <p>
12
+ <b>Carrier:</b>
13
+ <%= phone_number_carrier_link @phone_number %>
14
+ </p>
15
+
16
+ <p>
17
+ <b>Country code:</b>
18
+ <%=h @phone_number.country_code %>
19
+ </p>
20
+
21
+ <p>
22
+ <b>Do Not Send:</b>
23
+ <%=h @phone_number.do_not_send %>
24
+ </p>
25
+
26
+ <p>
27
+ <b>White List:</b>
28
+ <%=h @phone_number.white_list %>
29
+ </p>
30
+
31
+ <%= link_to 'Edit', edit_sms_phone_number_path(@phone_number) %> |
32
+ <%= link_to 'Back', sms_phone_numbers_path %>
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+
4
+ <!-- SMS On Rails is brought to you by snowgiraffe under the MIT License
5
+ Sms On Rails is martiniware. Buy yourself a martini if you like this software. -->
6
+
7
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
8
+
9
+ <head>
10
+ <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
11
+ <title>
12
+ <% if controller.class.name =~ /^Admin/ %>
13
+ Sms On Rails Admin
14
+ <% else %>
15
+ Sms
16
+ <% end %>
17
+ </title>
18
+ <%= stylesheet_link_tag 'sms_on_rails' %>
19
+ </head>
20
+ <body>
21
+ <div class="smsOnRailsHtml">
22
+ <p class="smsFlashNotice"><%= flash[:notice] %></p>
23
+ <%= yield %>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,6 @@
1
+ <% if requires_phone_carrier? %>
2
+ <p>
3
+ <%= phone_form.label :carrier_id, 'Phone Carrier' %><br />
4
+ <%= phone_carriers_collection_select(phone_form) %>
5
+ </p>
6
+ <% end %>
@@ -0,0 +1,33 @@
1
+ <% form_for(:draft, @draft, :url => send_sms_form_url) do |f| %>
2
+ <%= f.error_messages %>
3
+
4
+ <p>
5
+ <%= f.label :message %><br />
6
+ <%= f.text_area :message, :rows => 4 %>
7
+ </p>
8
+
9
+ <% f.fields_for :outbounds do |outbound_form| %>
10
+ <% outbound_form.fields_for :phone_number do |phone_form| %>
11
+ <p>
12
+ <%= phone_form.label :number, 'Phone Number' %>
13
+ <%= phone_form.text_field :number, :value => (phone_form.object.human_display if phone_form.object) %>
14
+ </p>
15
+ <%= render :partial => '/sms_on_rails/phone_carrier_form_item', :locals => {:phone_form => phone_form } %>
16
+ <% end %>
17
+
18
+ <% unless outbound_form.object.new_record? %>
19
+ <%= outbound_form.check_box '_delete' %>
20
+ <%= outbound_form.label '_delete', 'Remove' %>
21
+ <% end %>
22
+
23
+ <% end %>
24
+
25
+ <p>
26
+ <%= f.label :deliver_after %><br />
27
+ <%= f.datetime_select :deliver_after, :include_blank => true %>
28
+ </p>
29
+
30
+ <p>
31
+ <%= f.submit 'Send Sms' %>
32
+ </p>
33
+ <% end %>