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,131 @@
1
+ require File.dirname(__FILE__)+'/../test_helper'
2
+
3
+ class SmsOnRails::OutboundTest < Test::Unit::TestCase
4
+
5
+ def test_phone_number_saves_digits
6
+ SmsOnRails::PhoneNumber.delete_all
7
+ sms = SmsOnRails::PhoneNumber.create!(:number => '206.555.1234')
8
+ sms.reload
9
+ assert('12065551234', sms.number)
10
+
11
+ sms = SmsOnRails::PhoneNumber.create!(:number => '(206)555 - 1235 ')
12
+ sms.reload
13
+ assert('12065551235', sms.number)
14
+
15
+ sms = SmsOnRails::PhoneNumber.create!(:number => '1 206)555 - 2222 ')
16
+ sms.reload
17
+ assert('12065552222', sms.number)
18
+
19
+ #international
20
+ sms = SmsOnRails::PhoneNumber.create!(:number => '44 206)555 - 3333 ')
21
+ sms.reload
22
+ assert('442065553333', sms.number)
23
+
24
+ #international with plus
25
+ sms = SmsOnRails::PhoneNumber.create!(:number => '+206.555.4444')
26
+ sms.reload
27
+ assert('2065554444', sms.number)
28
+ end
29
+
30
+ def test_find_and_create_all_by_numbers
31
+ SmsOnRails::PhoneNumber.delete_all
32
+ test_phone_number_saves_digits
33
+
34
+ smses = SmsOnRails::PhoneNumber.find_and_create_all_by_numbers(['+206.555.4444', '44 206)555 - 3333 ', '415.555.4444', '14155554444'], :create => :create!)
35
+ assert_equal(3, smses.length)
36
+
37
+ # These are sorted when creating new ones
38
+ ['2065554444', '442065553333', '14155554444'].each_with_index do |number, idx|
39
+ assert(number, smses[idx].number)
40
+ end
41
+ end
42
+
43
+
44
+ def test_find_and_create_all_by_numbers_with_ar
45
+ SmsOnRails::PhoneNumber.delete_all
46
+ SmsOnRails::PhoneNumber.create!(:number => '44 206)555 - 3333 ')
47
+
48
+ list = [SmsOnRails::PhoneNumber.new(:number => '206.555.4444', :carrier_id => 1),
49
+ SmsOnRails::PhoneNumber.new(:number => '44 206)555 - 3333 ', :carrier_id => 2)]
50
+
51
+ smses = SmsOnRails::PhoneNumber.find_and_create_all_by_numbers(list, :create => :new)
52
+ assert_equal(2, smses.length)
53
+
54
+ assert(smses.first.new_record?)
55
+
56
+ # These are sorted when creating new ones
57
+ ['12065554444', '442065553333'].each_with_index do |number, idx|
58
+ assert_equal(number, smses[idx].number)
59
+ assert_equal(idx + 1, smses[idx].carrier_id)
60
+ end
61
+ end
62
+
63
+ def test_find_and_create_all_by_numbers_with_hash
64
+ SmsOnRails::PhoneNumber.delete_all
65
+ SmsOnRails::PhoneNumber.create!(:number => '44 206)555 - 3333 ')
66
+
67
+ list = [SmsOnRails::PhoneNumber.new(:number => '206.555.4444', :carrier_id => 1),
68
+ SmsOnRails::PhoneNumber.new(:number => '44 206)555 - 3333 ', :carrier_id => 2)]
69
+ list.collect!{|x| x.attributes }
70
+
71
+ smses = SmsOnRails::PhoneNumber.find_and_create_all_by_numbers(list, :create => :new)
72
+ assert_equal(2, smses.length)
73
+
74
+ assert(smses.first.new_record?)
75
+
76
+ # These are sorted when creating new ones
77
+ ['12065554444', '442065553333'].each_with_index do |number, idx|
78
+ assert_equal(number, smses[idx].number)
79
+ assert_equal(idx + 1, smses[idx].carrier_id)
80
+ end
81
+ end
82
+
83
+
84
+
85
+ def test_sms_carrier_email
86
+ phone = SmsOnRails::PhoneNumber.create!(:carrier_id => 1, :number => '12065557777')
87
+ assert_equal('12065557777', phone.number)
88
+ assert_equal('2065557777@vtext.com', phone.sms_email_address)
89
+ end
90
+
91
+
92
+ def test_find_and_create_all_by_numbers_with_duplicates
93
+ SmsOnRails::PhoneNumber.delete_all
94
+ test_phone_number_saves_digits
95
+
96
+ smses = SmsOnRails::PhoneNumber.find_and_create_all_by_numbers(['+206.555.4444', '44 206)555 - 3333 ', '415.555.4444', '+442065553333'], :create => :create!, :keep_duplicates => true)
97
+ assert_equal(4, smses.length)
98
+
99
+ # These are sorted when creating new ones
100
+ ['12065554444', '442065553333', '14155554444', '442065553333'].each_with_index do |number, idx|
101
+ assert_equal(number, smses[idx].number)
102
+ end
103
+ end
104
+
105
+ def test_find_all_by_numbers
106
+ SmsOnRails::PhoneNumber.delete_all
107
+ test_phone_number_saves_digits
108
+
109
+ smses = SmsOnRails::PhoneNumber.find_all_by_numbers(['+206.555.4444', '44 206)555 - 3333 ', '415.555.4444'])
110
+ assert_equal(2, smses.length)
111
+
112
+ ['2065554444', '442065553333'].each do |number|
113
+ assert(smses.select{|x| x.number == number })
114
+ end
115
+ end
116
+
117
+ def test_find_by_number_with_finder_options
118
+ SmsOnRails::PhoneNumber.delete_all
119
+ test_phone_number_saves_digits
120
+
121
+ sms = SmsOnRails::PhoneNumber.find_by_number('+206.555.4444', :conditions => 'id is not null')
122
+ assert_equal('12065554444', sms.number)
123
+ end
124
+
125
+
126
+ def test_human_display
127
+ assert_equal('(206) 555-4444', SmsOnRails::PhoneNumber.human_display('206.555.4444'))
128
+ assert_equal('+442065554444', SmsOnRails::PhoneNumber.human_display('44-206.555.4444'))
129
+ end
130
+
131
+ end
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'active_support'
3
+ require 'active_support/test_case'
4
+ require 'active_record'
5
+ require 'test/unit'
6
+
7
+ dir = File.dirname(__FILE__)
8
+
9
+ ActiveRecord::Base.logger = Logger.new("debug.log")
10
+
11
+ config = ActiveRecord::Base.configurations['test'] = {
12
+ :adapter => "mysql",
13
+ :username => "root",
14
+ :encoding => "utf8",
15
+ :host => '127.0.0.1',
16
+ :database => 'sms_on_rails_test' }
17
+
18
+ ActiveRecord::Base.establish_connection( config )
@@ -0,0 +1,104 @@
1
+ require File.dirname(__FILE__)+'/../test_helper'
2
+
3
+ module SmsOnRails::ServiceProviders::AbstractTestSupport
4
+ mattr_accessor :test_phone_number
5
+ self.test_phone_number ||= '12065552476'
6
+
7
+ def test_ping
8
+ assert provider_klass.instance.ping
9
+ end
10
+
11
+ def test_send_sms
12
+ sms = SmsOnRails::Outbound.create_sms "some test message #{Time.now.to_s(:db)}", test_phone_number, default_options
13
+ result = provider_klass.instance.send_sms sms
14
+ assert test_phone_number, sms.phone_number.number
15
+ assert(result.is_a?(Hash))
16
+ end
17
+
18
+ def test_send_sms_off_white_list
19
+ original_config = provider_klass.config.dup
20
+ provider_klass.config[:white_list] = true
21
+
22
+ phone = SmsOnRails::PhoneNumber.find_and_create_by_number test_phone_number, :create => :create
23
+
24
+ phone.white_list = false
25
+ phone.save!
26
+
27
+ assert_raise(SmsOnRails::SmsError){
28
+ sms = SmsOnRails::Outbound.create_sms "some test message #{Time.now.to_s(:db)}", test_phone_number, default_options
29
+ result = provider_klass.instance.send_sms sms
30
+ assert(result.is_a?(Hash))
31
+ }
32
+
33
+ phone.update_attribute(:white_list, true)
34
+ sms = SmsOnRails::Outbound.create_sms "some test message #{Time.now.to_s(:db)}", test_phone_number, default_options
35
+ assert(!sms.new_record?)
36
+
37
+ ensure
38
+ provider_klass.config = original_config
39
+ provider_klass.config[:white_list] = false
40
+ phone.destroy
41
+ end
42
+
43
+
44
+ def test_do_not_send_errors_out
45
+
46
+ phone = SmsOnRails::PhoneNumber.find_and_create_by_number test_phone_number, :create => true
47
+ phone.do_not_send = 'bounce'
48
+ phone.save!
49
+
50
+ assert_raise(SmsOnRails::SmsError){
51
+ sms = SmsOnRails::Outbound.create_sms "some test message #{Time.now.to_s(:db)}", test_phone_number, default_options
52
+ result = provider_klass.instance.send_sms sms
53
+ assert(result.is_a?(Hash))
54
+ }
55
+
56
+ ensure
57
+ phone.destroy
58
+ end
59
+
60
+ def test_send_message
61
+ map = provider_instance.send_message(send_to_phone_data, "SEND MESSAGE #{send_to_phone_data}")
62
+ assert(map.is_a?(Hash))
63
+ end
64
+
65
+ def test_send_to_phone_number_with_white_list
66
+ original_config = provider_klass.config.dup
67
+ provider_klass.config[:white_list] = true
68
+ SmsOnRails::PhoneNumber.delete_all
69
+ phone = SmsOnRails::PhoneNumber.create!(:number => '206555555 5', :carrier_id => 5)
70
+
71
+ assert_raises(SmsOnRails::SmsError) {
72
+ provider_instance.send_to_phone('1206.555.5555', 'test send to phone', :carrier => 5)
73
+ }
74
+
75
+ phone.update_attribute(:white_list, true)
76
+ provider_instance.send_to_phone('1206.555.5555', 'test send to phone', :carrier => 5)
77
+ ensure
78
+ provider_klass.config = original_config
79
+ provider_klass.config[:white_list] = false
80
+ end
81
+
82
+
83
+ def test_send_to_phone
84
+ SmsOnRails::PhoneNumber.delete_all
85
+ response = provider_instance.send_to_phone('1206.555.5555', 'test send to phone', :carrier => 5)
86
+ end
87
+
88
+ def test_send_to_phone_with_existing_number
89
+ SmsOnRails::PhoneNumber.delete_all
90
+ SmsOnRails::PhoneNumber.create!(:number => '12065555555', :carrier_id => 5, :white_list => true)
91
+ response = provider_instance.send_to_phone('206.555.5555', 'test send to phone', :carrier => 4)
92
+ end
93
+
94
+ protected
95
+
96
+ def send_to_phone_data; '12065551234'; end
97
+ def default_options; {}; end
98
+
99
+ def provider_klass
100
+ @provider_klass||= self.class.to_s.gsub(/Test$/,'').constantize
101
+ end
102
+
103
+ def provider_instance; provider_klass.instance; end
104
+ end
@@ -0,0 +1,39 @@
1
+ require File.dirname(__FILE__)+'/abstract_test_support.rb'
2
+ require File.dirname(__FILE__)+'/test_password.rb'
3
+
4
+
5
+
6
+ class SmsOnRails::ServiceProviders::ClickatellTest < Test::Unit::TestCase
7
+ include SmsOnRails::ServiceProviders::AbstractTestSupport
8
+
9
+ def setup
10
+ super
11
+ SmsOnRails::ServiceProviders::Base.default_service_provider = SmsOnRails::ServiceProviders::Clickatell
12
+ end
13
+
14
+ def teardown
15
+ super
16
+ SmsOnRails::ServiceProviders::Base.default_service_provider = SmsOnRails::ServiceProviders::Dummy
17
+ end
18
+
19
+ def test_send_to_bad_clickatell_number
20
+ assert_raise(SmsOnRails::SmsError){
21
+ SmsOnRails::ServiceProviders::Clickatell.instance.send_message('ss', 'test message', options={})
22
+ }
23
+ end
24
+
25
+ def test_fatal_connection_error
26
+ old_config = SmsOnRails::ServiceProviders::Clickatell.config.dup
27
+ SmsOnRails::ServiceProviders::Clickatell.config[:password] = 'asdfsadfGirafe'
28
+ SmsOnRails::ServiceProviders::Clickatell.instance.send :eval, '@@api = nil'
29
+ assert_raise(SmsOnRails::FatalSmsError){
30
+
31
+ SmsOnRails::ServiceProviders::Clickatell.instance.authenticate
32
+ }
33
+
34
+ ensure
35
+ SmsOnRails::ServiceProviders::Clickatell.config = old_config
36
+ end
37
+
38
+
39
+ end
@@ -0,0 +1,30 @@
1
+ require File.dirname(__FILE__)+'/abstract_test_support.rb'
2
+
3
+ SmsOnRails::ServiceProviders::EmailGateway.config =
4
+ {
5
+ :sender => 'blythe@spongecell.com',
6
+ :subject => 'Message from SmsOnRails'
7
+ #:bcc => nil,
8
+ #:mailer_klass => nil,
9
+ }
10
+
11
+
12
+ ActionMailer::Base.delivery_method = :test
13
+
14
+ class SmsOnRails::ServiceProviders::EmailGatewayTest < Test::Unit::TestCase
15
+
16
+ include SmsOnRails::ServiceProviders::AbstractTestSupport
17
+
18
+ protected
19
+
20
+ def send_to_phone_data; '12065555555@txt.att.net'; end
21
+
22
+ def default_options
23
+ {:phone_number => {:carrier_id => 1}}
24
+ end
25
+
26
+ def gateway
27
+ SmsOnRails::ServiceProviders::EmailGateway.instance
28
+ end
29
+
30
+ end
@@ -0,0 +1,24 @@
1
+
2
+ dir = File.dirname(__FILE__)
3
+ require dir + '/run'
4
+ require dir +'/../init'
5
+
6
+ begin
7
+ if File.exists?(sdir = File.join(dir, '/../../static_record_cache') )
8
+ require File.join(sdir, 'init.rb')
9
+ else
10
+ require 'acts_as_static_record'
11
+ end
12
+ unless ActiveRecord::Base.respond_to?(:acts_as_static_record)
13
+ raise "Need to install static_record_cache"
14
+ end
15
+ rescue Exception => exc
16
+ raise "Please install dependency static_record_cache"
17
+ end
18
+
19
+
20
+ require 'sms_on_rails/all_models'
21
+
22
+ require File.dirname(__FILE__) + '/../db/seed_data.rb'
23
+
24
+
@@ -0,0 +1 @@
1
+ # Uninstall hook code here
metadata ADDED
@@ -0,0 +1,187 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: blythedunham-sms_on_rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Blythe Dunham
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-05-19 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Integrate your application with SMS through Clickatell or the Email Gateways
17
+ email: blythe@snowgiraffe.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - lib/sms_on_rails/activerecord_extensions/acts_as_deliverable.rb
24
+ - lib/sms_on_rails/activerecord_extensions/acts_as_substitutable.rb
25
+ - lib/sms_on_rails/activerecord_extensions/has_a_sms_service_provider.rb
26
+ - lib/sms_on_rails/activerecord_extensions/lockable_record.rb
27
+ - lib/sms_on_rails/all_models.rb
28
+ - lib/sms_on_rails/model_support/draft.rb
29
+ - lib/sms_on_rails/model_support/outbound.rb
30
+ - lib/sms_on_rails/model_support/phone_carrier.rb
31
+ - lib/sms_on_rails/model_support/phone_number.rb
32
+ - lib/sms_on_rails/model_support/phone_number_associations.rb
33
+ - lib/sms_on_rails/schema_helper.rb
34
+ - lib/sms_on_rails/service_providers/base.rb
35
+ - lib/sms_on_rails/service_providers/clickatell.rb
36
+ - lib/sms_on_rails/service_providers/dummy.rb
37
+ - lib/sms_on_rails/service_providers/email_gateway.rb
38
+ - lib/sms_on_rails/service_providers/email_gateway_support/errors.rb
39
+ - lib/sms_on_rails/service_providers/email_gateway_support/sms_mailer/sms_through_gateway.erb
40
+ - lib/sms_on_rails/service_providers/email_gateway_support/sms_mailer.rb
41
+ - lib/sms_on_rails/util/sms_error.rb
42
+ - lib/sms_on_rails.rb
43
+ - lib/smsonrails.rb
44
+ - README
45
+ - README.rdoc
46
+ - tasks/sms_on_rails_tasks.rake
47
+ files:
48
+ - app/controllers/admin/sms_on_rails/base_controller.rb
49
+ - app/controllers/admin/sms_on_rails/drafts_controller.rb
50
+ - app/controllers/admin/sms_on_rails/outbounds_controller.rb
51
+ - app/controllers/admin/sms_on_rails/phone_carriers_controller.rb
52
+ - app/controllers/admin/sms_on_rails/phone_numbers_controller.rb
53
+ - app/controllers/sms_on_rails/creation_support.rb
54
+ - app/controllers/sms_on_rails_controller.rb
55
+ - app/helpers/admin/sms_on_rails/drafts_helper.rb
56
+ - app/helpers/admin/sms_on_rails/phone_carriers_helper.rb
57
+ - app/helpers/sms_on_rails/phone_numbers_helper.rb
58
+ - app/helpers/sms_on_rails/sms_helper.rb
59
+ - app/models/sms_on_rails/draft.rb
60
+ - app/models/sms_on_rails/outbound.rb
61
+ - app/models/sms_on_rails/phone_carrier.rb
62
+ - app/models/sms_on_rails/phone_number.rb
63
+ - app/views/admin/sms_on_rails/base/index.html.erb
64
+ - app/views/admin/sms_on_rails/drafts/_show.html.erb
65
+ - app/views/admin/sms_on_rails/drafts/edit.html.erb
66
+ - app/views/admin/sms_on_rails/drafts/index.html.erb
67
+ - app/views/admin/sms_on_rails/drafts/new.html.erb
68
+ - app/views/admin/sms_on_rails/drafts/send_sms.html.erb
69
+ - app/views/admin/sms_on_rails/drafts/show.html.erb
70
+ - app/views/admin/sms_on_rails/outbounds/edit.html.erb
71
+ - app/views/admin/sms_on_rails/outbounds/index.html.erb
72
+ - app/views/admin/sms_on_rails/outbounds/new.html.erb
73
+ - app/views/admin/sms_on_rails/outbounds/show.html.erb
74
+ - app/views/admin/sms_on_rails/phone_carriers/edit.html.erb
75
+ - app/views/admin/sms_on_rails/phone_carriers/index.html.erb
76
+ - app/views/admin/sms_on_rails/phone_carriers/new.html.erb
77
+ - app/views/admin/sms_on_rails/phone_carriers/show.html.erb
78
+ - app/views/admin/sms_on_rails/phone_numbers/edit.html.erb
79
+ - app/views/admin/sms_on_rails/phone_numbers/index.html.erb
80
+ - app/views/admin/sms_on_rails/phone_numbers/new.html.erb
81
+ - app/views/admin/sms_on_rails/phone_numbers/show.html.erb
82
+ - app/views/layouts/sms_on_rails/basic.html.erb
83
+ - app/views/sms_on_rails/_phone_carrier_form_item.html.erb
84
+ - app/views/sms_on_rails/_send_sms.html.erb
85
+ - app/views/sms_on_rails/index.html.erb
86
+ - app/views/sms_on_rails/send_sms.html.erb
87
+ - app/views/sms_on_rails/show.html.erb
88
+ - config/routes.rb
89
+ - db/data/fixtures/sms_phone_carriers.yml
90
+ - db/migrate/sms_on_rails_carrier_tables.rb
91
+ - db/migrate/sms_on_rails_model_tables.rb
92
+ - db/migrate/sms_on_rails_phone_number_tables.rb
93
+ - db/seed_data.rb
94
+ - generators/sms_on_rails/commands/inserts.rb
95
+ - generators/sms_on_rails/commands/timestamps.rb
96
+ - generators/sms_on_rails/runners/add_all_models.rb
97
+ - generators/sms_on_rails/runners/dependencies.rb
98
+ - generators/sms_on_rails/runners/remove_all_models.rb
99
+ - generators/sms_on_rails/runners/sms_on_rails_routes.rb
100
+ - generators/sms_on_rails/sms_on_rails_generator.rb
101
+ - generators/sms_on_rails/templates/configuration/clickatell.rb
102
+ - generators/sms_on_rails/templates/configuration/email_gateway.rb
103
+ - generators/sms_on_rails/templates/migrate/schema_migration.rb
104
+ - generators/sms_on_rails/templates/migrate/sms_on_rails_update_phone_numbers.rb
105
+ - generators/sms_on_rails/templates/phone_number_collision.rb
106
+ - generators/sms_on_rails/USAGE
107
+ - init.rb
108
+ - install.rb
109
+ - lib/sms_on_rails/activerecord_extensions/acts_as_deliverable.rb
110
+ - lib/sms_on_rails/activerecord_extensions/acts_as_substitutable.rb
111
+ - lib/sms_on_rails/activerecord_extensions/has_a_sms_service_provider.rb
112
+ - lib/sms_on_rails/activerecord_extensions/lockable_record.rb
113
+ - lib/sms_on_rails/all_models.rb
114
+ - lib/sms_on_rails/model_support/draft.rb
115
+ - lib/sms_on_rails/model_support/outbound.rb
116
+ - lib/sms_on_rails/model_support/phone_carrier.rb
117
+ - lib/sms_on_rails/model_support/phone_number.rb
118
+ - lib/sms_on_rails/model_support/phone_number_associations.rb
119
+ - lib/sms_on_rails/schema_helper.rb
120
+ - lib/sms_on_rails/service_providers/base.rb
121
+ - lib/sms_on_rails/service_providers/clickatell.rb
122
+ - lib/sms_on_rails/service_providers/dummy.rb
123
+ - lib/sms_on_rails/service_providers/email_gateway.rb
124
+ - lib/sms_on_rails/service_providers/email_gateway_support/errors.rb
125
+ - lib/sms_on_rails/service_providers/email_gateway_support/sms_mailer/sms_through_gateway.erb
126
+ - lib/sms_on_rails/service_providers/email_gateway_support/sms_mailer.rb
127
+ - lib/sms_on_rails/util/sms_error.rb
128
+ - lib/sms_on_rails.rb
129
+ - lib/smsonrails.rb
130
+ - Manifest
131
+ - MIT-LICENSE
132
+ - public/images/sms_on_rails/railsYoDawg.jpg
133
+ - public/stylesheets/sms_on_rails.css
134
+ - Rakefile
135
+ - README
136
+ - README.rdoc
137
+ - sms_on_rails.gemspec
138
+ - tasks/sms_on_rails_tasks.rake
139
+ - test/active_record_extensions/delivery_and_locking_test.rb
140
+ - test/models/draft_test.rb
141
+ - test/models/outbound_test.rb
142
+ - test/models/phone_number_test.rb
143
+ - test/run.rb
144
+ - test/service_providers/abstract_test_support.rb
145
+ - test/service_providers/clickatell_test.rb
146
+ - test/service_providers/email_gateway_test.rb
147
+ - test/test_helper.rb
148
+ - uninstall.rb
149
+ has_rdoc: true
150
+ homepage: http://github.com/blythedunham/smsonrails
151
+ post_install_message:
152
+ rdoc_options:
153
+ - --line-numbers
154
+ - --inline-source
155
+ - --title
156
+ - Sms_on_rails
157
+ - --main
158
+ - README
159
+ require_paths:
160
+ - lib
161
+ required_ruby_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: "0"
166
+ version:
167
+ required_rubygems_version: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: "1.2"
172
+ version:
173
+ requirements: []
174
+
175
+ rubyforge_project: sms_on_rails
176
+ rubygems_version: 1.2.0
177
+ signing_key:
178
+ specification_version: 2
179
+ summary: Integrate your application with SMS through Clickatell or the Email Gateways
180
+ test_files:
181
+ - test/active_record_extensions/delivery_and_locking_test.rb
182
+ - test/models/draft_test.rb
183
+ - test/models/outbound_test.rb
184
+ - test/models/phone_number_test.rb
185
+ - test/service_providers/clickatell_test.rb
186
+ - test/service_providers/email_gateway_test.rb
187
+ - test/test_helper.rb