smsonrails 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. data/.gitignore +2 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Manifest +101 -0
  4. data/README.rdoc +211 -0
  5. data/Rakefile +109 -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 +10 -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/tasks/sms_on_rails_tasks.rake +67 -0
  91. data/test/active_record_extensions/delivery_and_locking_test.rb +84 -0
  92. data/test/models/draft_test.rb +72 -0
  93. data/test/models/outbound_test.rb +89 -0
  94. data/test/models/phone_number_test.rb +131 -0
  95. data/test/run.rb +19 -0
  96. data/test/service_providers/abstract_test_support.rb +104 -0
  97. data/test/service_providers/clickatell_test.rb +37 -0
  98. data/test/service_providers/email_gateway_test.rb +30 -0
  99. data/test/test_helper.rb +24 -0
  100. data/uninstall.rb +1 -0
  101. metadata +201 -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
data/test/run.rb ADDED
@@ -0,0 +1,19 @@
1
+ require 'rubygems'
2
+ gem 'activesupport', :version => ">= 2.0.0"
3
+ require 'active_support'
4
+ require 'active_support/test_case'
5
+ require 'active_record'
6
+ require 'test/unit'
7
+
8
+ dir = File.dirname(__FILE__)
9
+
10
+ ActiveRecord::Base.logger = Logger.new("debug.log")
11
+
12
+ config = ActiveRecord::Base.configurations['test'] = {
13
+ :adapter => "mysql",
14
+ :username => "root",
15
+ :encoding => "utf8",
16
+ :host => '127.0.0.1',
17
+ :database => 'sms_on_rails_test' }
18
+
19
+ 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,37 @@
1
+ require File.dirname(__FILE__)+'/abstract_test_support.rb'
2
+
3
+
4
+ class SmsOnRails::ServiceProviders::ClickatellTest < Test::Unit::TestCase
5
+ include SmsOnRails::ServiceProviders::AbstractTestSupport
6
+
7
+ def setup
8
+ super
9
+ SmsOnRails::ServiceProviders::Base.default_service_provider = SmsOnRails::ServiceProviders::Clickatell
10
+ end
11
+
12
+ def teardown
13
+ super
14
+ SmsOnRails::ServiceProviders::Base.default_service_provider = SmsOnRails::ServiceProviders::Dummy
15
+ end
16
+
17
+ def test_send_to_bad_clickatell_number
18
+ assert_raise(SmsOnRails::SmsError){
19
+ SmsOnRails::ServiceProviders::Clickatell.instance.send_message('ss', 'test message', options={})
20
+ }
21
+ end
22
+
23
+ def test_fatal_connection_error
24
+ old_config = SmsOnRails::ServiceProviders::Clickatell.config.dup
25
+ SmsOnRails::ServiceProviders::Clickatell.config[:password] = 'asdfsadfGirafe'
26
+ SmsOnRails::ServiceProviders::Clickatell.instance.send :eval, '@@api = nil'
27
+ assert_raise(SmsOnRails::FatalSmsError){
28
+
29
+ SmsOnRails::ServiceProviders::Clickatell.instance.authenticate
30
+ }
31
+
32
+ ensure
33
+ SmsOnRails::ServiceProviders::Clickatell.config = old_config
34
+ end
35
+
36
+
37
+ 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
+
data/uninstall.rb ADDED
@@ -0,0 +1 @@
1
+ # Uninstall hook code here
metadata ADDED
@@ -0,0 +1,201 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: smsonrails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Blythe Dunham
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-01-01 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: thoughtbot-shoulda
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: clickatell
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: activesupport
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 2.0.0
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: static_record_cache
47
+ type: :runtime
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ description: Sms on Rails provides your app with instant SMS integration
56
+ email: blythe@snowgiraffe.com
57
+ executables: []
58
+
59
+ extensions: []
60
+
61
+ extra_rdoc_files:
62
+ - README.rdoc
63
+ files:
64
+ - .gitignore
65
+ - MIT-LICENSE
66
+ - Manifest
67
+ - README.rdoc
68
+ - Rakefile
69
+ - app/controllers/admin/sms_on_rails/base_controller.rb
70
+ - app/controllers/admin/sms_on_rails/drafts_controller.rb
71
+ - app/controllers/admin/sms_on_rails/outbounds_controller.rb
72
+ - app/controllers/admin/sms_on_rails/phone_carriers_controller.rb
73
+ - app/controllers/admin/sms_on_rails/phone_numbers_controller.rb
74
+ - app/controllers/sms_on_rails/creation_support.rb
75
+ - app/controllers/sms_on_rails_controller.rb
76
+ - app/helpers/admin/sms_on_rails/drafts_helper.rb
77
+ - app/helpers/admin/sms_on_rails/phone_carriers_helper.rb
78
+ - app/helpers/sms_on_rails/phone_numbers_helper.rb
79
+ - app/helpers/sms_on_rails/sms_helper.rb
80
+ - app/models/sms_on_rails/draft.rb
81
+ - app/models/sms_on_rails/outbound.rb
82
+ - app/models/sms_on_rails/phone_carrier.rb
83
+ - app/models/sms_on_rails/phone_number.rb
84
+ - app/views/admin/sms_on_rails/base/index.html.erb
85
+ - app/views/admin/sms_on_rails/drafts/_show.html.erb
86
+ - app/views/admin/sms_on_rails/drafts/edit.html.erb
87
+ - app/views/admin/sms_on_rails/drafts/index.html.erb
88
+ - app/views/admin/sms_on_rails/drafts/new.html.erb
89
+ - app/views/admin/sms_on_rails/drafts/send_sms.html.erb
90
+ - app/views/admin/sms_on_rails/drafts/show.html.erb
91
+ - app/views/admin/sms_on_rails/outbounds/edit.html.erb
92
+ - app/views/admin/sms_on_rails/outbounds/index.html.erb
93
+ - app/views/admin/sms_on_rails/outbounds/new.html.erb
94
+ - app/views/admin/sms_on_rails/outbounds/show.html.erb
95
+ - app/views/admin/sms_on_rails/phone_carriers/edit.html.erb
96
+ - app/views/admin/sms_on_rails/phone_carriers/index.html.erb
97
+ - app/views/admin/sms_on_rails/phone_carriers/new.html.erb
98
+ - app/views/admin/sms_on_rails/phone_carriers/show.html.erb
99
+ - app/views/admin/sms_on_rails/phone_numbers/edit.html.erb
100
+ - app/views/admin/sms_on_rails/phone_numbers/index.html.erb
101
+ - app/views/admin/sms_on_rails/phone_numbers/new.html.erb
102
+ - app/views/admin/sms_on_rails/phone_numbers/show.html.erb
103
+ - app/views/layouts/sms_on_rails/basic.html.erb
104
+ - app/views/sms_on_rails/_phone_carrier_form_item.html.erb
105
+ - app/views/sms_on_rails/_send_sms.html.erb
106
+ - app/views/sms_on_rails/index.html.erb
107
+ - app/views/sms_on_rails/send_sms.html.erb
108
+ - app/views/sms_on_rails/show.html.erb
109
+ - config/routes.rb
110
+ - db/data/fixtures/sms_phone_carriers.yml
111
+ - db/migrate/sms_on_rails_carrier_tables.rb
112
+ - db/migrate/sms_on_rails_model_tables.rb
113
+ - db/migrate/sms_on_rails_phone_number_tables.rb
114
+ - db/seed_data.rb
115
+ - generators/sms_on_rails/USAGE
116
+ - generators/sms_on_rails/commands/inserts.rb
117
+ - generators/sms_on_rails/commands/timestamps.rb
118
+ - generators/sms_on_rails/runners/add_all_models.rb
119
+ - generators/sms_on_rails/runners/dependencies.rb
120
+ - generators/sms_on_rails/runners/remove_all_models.rb
121
+ - generators/sms_on_rails/runners/sms_on_rails_routes.rb
122
+ - generators/sms_on_rails/sms_on_rails_generator.rb
123
+ - generators/sms_on_rails/templates/configuration/clickatell.rb
124
+ - generators/sms_on_rails/templates/configuration/email_gateway.rb
125
+ - generators/sms_on_rails/templates/migrate/schema_migration.rb
126
+ - generators/sms_on_rails/templates/migrate/sms_on_rails_update_phone_numbers.rb
127
+ - generators/sms_on_rails/templates/phone_number_collision.rb
128
+ - init.rb
129
+ - install.rb
130
+ - lib/sms_on_rails.rb
131
+ - lib/sms_on_rails/activerecord_extensions/acts_as_deliverable.rb
132
+ - lib/sms_on_rails/activerecord_extensions/acts_as_substitutable.rb
133
+ - lib/sms_on_rails/activerecord_extensions/has_a_sms_service_provider.rb
134
+ - lib/sms_on_rails/activerecord_extensions/lockable_record.rb
135
+ - lib/sms_on_rails/all_models.rb
136
+ - lib/sms_on_rails/model_support/draft.rb
137
+ - lib/sms_on_rails/model_support/outbound.rb
138
+ - lib/sms_on_rails/model_support/phone_carrier.rb
139
+ - lib/sms_on_rails/model_support/phone_number.rb
140
+ - lib/sms_on_rails/model_support/phone_number_associations.rb
141
+ - lib/sms_on_rails/schema_helper.rb
142
+ - lib/sms_on_rails/service_providers/base.rb
143
+ - lib/sms_on_rails/service_providers/clickatell.rb
144
+ - lib/sms_on_rails/service_providers/dummy.rb
145
+ - lib/sms_on_rails/service_providers/email_gateway.rb
146
+ - lib/sms_on_rails/service_providers/email_gateway_support/errors.rb
147
+ - lib/sms_on_rails/service_providers/email_gateway_support/sms_mailer.rb
148
+ - lib/sms_on_rails/service_providers/email_gateway_support/sms_mailer/sms_through_gateway.erb
149
+ - lib/sms_on_rails/util/sms_error.rb
150
+ - lib/smsonrails.rb
151
+ - public/images/sms_on_rails/railsYoDawg.jpg
152
+ - public/stylesheets/sms_on_rails.css
153
+ - tasks/sms_on_rails_tasks.rake
154
+ - test/active_record_extensions/delivery_and_locking_test.rb
155
+ - test/models/draft_test.rb
156
+ - test/models/outbound_test.rb
157
+ - test/models/phone_number_test.rb
158
+ - test/run.rb
159
+ - test/service_providers/abstract_test_support.rb
160
+ - test/service_providers/clickatell_test.rb
161
+ - test/service_providers/email_gateway_test.rb
162
+ - test/test_helper.rb
163
+ - uninstall.rb
164
+ has_rdoc: true
165
+ homepage: http://github.com/blythedunham/smsonrails
166
+ licenses: []
167
+
168
+ post_install_message:
169
+ rdoc_options:
170
+ - --charset=UTF-8
171
+ require_paths:
172
+ - lib
173
+ required_ruby_version: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: "0"
178
+ version:
179
+ required_rubygems_version: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: "0"
184
+ version:
185
+ requirements: []
186
+
187
+ rubyforge_project:
188
+ rubygems_version: 1.3.5
189
+ signing_key:
190
+ specification_version: 3
191
+ summary: Sms on Rails provides your app with instant SMS integration
192
+ test_files:
193
+ - test/active_record_extensions/delivery_and_locking_test.rb
194
+ - test/models/draft_test.rb
195
+ - test/models/outbound_test.rb
196
+ - test/models/phone_number_test.rb
197
+ - test/run.rb
198
+ - test/service_providers/abstract_test_support.rb
199
+ - test/service_providers/clickatell_test.rb
200
+ - test/service_providers/email_gateway_test.rb
201
+ - test/test_helper.rb