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 (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