sms-spec 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in text_spec.gemspec
4
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,5 @@
1
+ guard 'rspec', :cli => "--color", :notification => true do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
4
+ watch('spec/spec_helper.rb') { "spec" }
5
+ end
data/README.markdown ADDED
@@ -0,0 +1,55 @@
1
+ # SMS Spec
2
+
3
+ An RSpec DSL and Cucumber steps to test SMS interactions with your
4
+ Ruby on Rails application.
5
+
6
+ Currently this gem only supports testing SMS messageing using the
7
+ [twilio-ruby](https://github.com/twilio/twilio-ruby) gem.
8
+
9
+ ##Setup
10
+ Add the sms\_spec gem to your Gemfile:
11
+ <pre>
12
+ group :test do
13
+ gem 'sms_spec'
14
+ end
15
+ </pre>
16
+
17
+ ## RSpec
18
+ In your spec\_helper.rb file add the following:
19
+ <pre>
20
+ require 'sms_spec'
21
+ </pre>
22
+
23
+ If you want to have the helpers available in all of your example groups,
24
+ you can add the following to your spec_helper.rb:
25
+ <pre>
26
+ Spec::Runner.configure do |config|
27
+ config.include(SmsSpec::Helpers)
28
+ config.include(SmsSpec::Matchers)
29
+ end
30
+ </pre>
31
+
32
+ Otherwise you will have to incliude the helpers and matchers in any
33
+ example where you use them:
34
+
35
+ <pre>
36
+ describe "MyController" do
37
+ include SmsSpec::Helpers
38
+ include SmsSpec::Matchers
39
+ end
40
+ </pre>
41
+
42
+ ## Cucumber
43
+ Add the folloing to you env.rb file:
44
+
45
+ <pre>
46
+ require 'sms_spec'
47
+ require 'sms_spec/cucumber'
48
+ </pre>
49
+
50
+ This loads the sms\_spec RSpec helpers into your cucumber wold. Then,
51
+ run the following to generate the text\_messsage\_steps.rb file:
52
+
53
+ <pre>
54
+ rails generate sms_spec:steps
55
+ </pre>
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,6 @@
1
+ Description:
2
+ Creates text_message_steps.rb in your cucumber step_definitions.
3
+
4
+ Examples:
5
+ `script/rails generate text_spec:steps`
6
+
@@ -0,0 +1,14 @@
1
+ require 'rails/generators'
2
+
3
+ module SmsSpec
4
+ class StepsGenerator < Rails::Generators::Base
5
+ def generate
6
+ copy_file 'text_message_steps.rb', 'features/step_definitions/text_message_steps.rb'
7
+ end
8
+
9
+ def self.source_root
10
+ File.join(File.dirname(__FILE__), 'templates')
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,44 @@
1
+ # -------------------------------------------
2
+ # Available methods
3
+ # -------------------------------------------
4
+
5
+ # messages
6
+ # add_message
7
+ # set_current_number
8
+ # current_number
9
+ # clear_messages
10
+ # current_text_message
11
+ # open_last_text_message_for
12
+
13
+
14
+ Given /^no text messages have been sent$/ do
15
+ clear_messages
16
+ end
17
+
18
+ Given /^all text messages have been read$/ do
19
+ clear_messages
20
+ end
21
+
22
+ Then /^"([^"]*)" should receive a text message$/ do |phone_number|
23
+ messages_for(phone_number).should_not be_empty
24
+ end
25
+
26
+ Then /^"([^"]*)" should receive no text messages$/ do |phone_number|
27
+ messages_for(phone_number).should be_empty
28
+ end
29
+
30
+ When /^"([^"]*?)" opens? the text message$/ do |mobile_number|
31
+ open_last_text_message_for(mobile_number)
32
+ end
33
+
34
+ Then /^I should see "([^"]*)" in the text message body$/ do |content|
35
+ current_text_message.should have_body(content)
36
+ end
37
+
38
+ Then /^I should see "([^"]*)" in the text message body$/ do |content|
39
+ current_text_message.should have_body(content)
40
+ end
41
+
42
+ Then /^I should see the following in the text message body:$/ do |content|
43
+ current_text_message.should have_body(content)
44
+ end
data/lib/sms-spec.rb ADDED
@@ -0,0 +1 @@
1
+ require 'sms_spec'
data/lib/sms_spec.rb ADDED
@@ -0,0 +1,17 @@
1
+ require 'rspec'
2
+ require "sms_spec/version"
3
+ require "sms_spec/helpers"
4
+ require "sms_spec/data"
5
+ require "sms_spec/message"
6
+ require "sms_spec/util"
7
+ require "sms_spec/mobile_device"
8
+ require "sms_spec/matchers"
9
+ #require "sms_spec/drivers/twilio-ruby"
10
+
11
+ module SmsSpec
12
+ def self.driver=(driver_sym)
13
+ require "sms_spec/drivers/#{driver_sym.to_s}"
14
+ end
15
+
16
+ SmsSpec.driver = :"twilio-ruby"
17
+ end
@@ -0,0 +1,6 @@
1
+ After do
2
+ SmsSpec::Data.clear_messages
3
+ end
4
+
5
+ World(SmsSpec::Helpers)
6
+ World(SmsSpec::Matchers)
@@ -0,0 +1,43 @@
1
+ require 'sms_spec/util'
2
+
3
+ module SmsSpec
4
+ class Data
5
+ extend SmsSpec::Util
6
+
7
+ def self.add_message message
8
+ @@messages ||= []
9
+ @@messages << message
10
+ end
11
+
12
+ def self.clear_messages
13
+ @@messages = []
14
+ @@current_text_message = nil
15
+ end
16
+
17
+ def self.messages
18
+ @@messages ||= []
19
+ end
20
+
21
+ def self.set_current_number(number)
22
+ @@current_number = sanitize number
23
+ end
24
+
25
+ def self.current_number
26
+ @@current_number
27
+ end
28
+
29
+ def self.current_text_message
30
+ @@current_text_message ||= nil
31
+ end
32
+
33
+ def self.open_last_text_message_for(phone_number)
34
+ message = messages_for(phone_number).first
35
+ @@current_text_message = @@messages.delete(message)
36
+ end
37
+
38
+ def self.messages_for(phone_number)
39
+ @@messages.select {|m| m.number == sanitize(phone_number)}
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,31 @@
1
+ class Twilio::REST::Client
2
+
3
+ def initialize(account_sid, auth_token)
4
+ end
5
+
6
+ class Messages
7
+ include SmsSpec::Helpers
8
+
9
+ def create(opts={})
10
+ to = opts[:to]
11
+ body = opts[:body]
12
+ add_message Message.new(:number => to, :body => body)
13
+ end
14
+ end
15
+
16
+ class Sms
17
+ def messages
18
+ return Messages.new
19
+ end
20
+ end
21
+
22
+ class Account
23
+ def sms
24
+ return Sms.new
25
+ end
26
+ end
27
+
28
+ def account
29
+ return Account.new
30
+ end
31
+ end
@@ -0,0 +1,40 @@
1
+ require 'forwardable'
2
+
3
+ module SmsSpec
4
+ module Helpers
5
+ extend Forwardable
6
+
7
+ def_delegators :"SmsSpec::Data",
8
+ :messages,
9
+ :add_message,
10
+ :set_current_number,
11
+ :current_number,
12
+ :clear_messages,
13
+ :current_text_message,
14
+ :messages_for,
15
+ :open_last_text_message_for
16
+
17
+ def twiml_message(from, body, opts={})
18
+ base_options = {
19
+ "AccountSid"=>"1234567812345678",
20
+ "Body"=> body,
21
+ "ToZip"=>"94949",
22
+ "FromState"=>"MI",
23
+ "ToCity"=>"NOVATO",
24
+ "SmsSid"=>"1234567812345678",
25
+ "ToState"=>"CA",
26
+ "To"=>"8155552671",
27
+ "ToCountry"=>"US",
28
+ "FromCountry"=>"US",
29
+ "SmsMessageSid"=>"123456712345671234567",
30
+ "ApiVersion"=>"2008-08-01",
31
+ "FromCity"=>"GRAND RAPIDS",
32
+ "SmsStatus"=>"received",
33
+ "From"=> from,
34
+ "FromZip"=>"49507"
35
+ }
36
+
37
+ base_options.merge! opts
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,33 @@
1
+ module SmsSpec
2
+ module Matchers
3
+
4
+ RSpec::Matchers.define :have_text_messages do
5
+ match do |mobile_device|
6
+ mobile_device.messages.count > 0
7
+ end
8
+
9
+ failure_message_for_should do |mobile_device|
10
+ "expected the mobile device '#{mobile_device.number}' to have text messages but it did not"
11
+ end
12
+
13
+ failure_message_for_should_not do |mobile_device|
14
+ "expected the mobile device '#{mobile_device.number}' to have no text messages but it did"
15
+ end
16
+ end
17
+
18
+ RSpec::Matchers.define :have_body do |expected_body|
19
+ match do |message|
20
+ message.body == expected_body
21
+ end
22
+
23
+ #failure_message_for_should do |mobile_device|
24
+ #"expected the mobile device '#{mobile_device.number}' to have text messages but it did not"
25
+ #end
26
+
27
+ #failure_message_for_should_not do |mobile_device|
28
+ #"expected the mobile device '#{mobile_device.number}' to have no text messages but it did"
29
+ #end
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,11 @@
1
+ class Message
2
+ attr_accessor :number
3
+ attr_accessor :body
4
+
5
+ include SmsSpec::Util
6
+
7
+ def initialize(opts={})
8
+ @number = sanitize opts[:number]
9
+ @body = opts[:body]
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ class MobileDevice
2
+
3
+ def initialize(number)
4
+ @number = number
5
+ end
6
+
7
+ def messages
8
+ SmsSpec::Data.messages.select {|d| d.number == @number}
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ module SmsSpec
2
+ module Util
3
+ def sanitize number
4
+ number.gsub(/^\+*1/, "").gsub("-", "")
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ module SmsSpec
2
+ VERSION = "0.0.9"
3
+ end
@@ -0,0 +1,36 @@
1
+ # -------------------------------------------
2
+ # Available methods
3
+ # -------------------------------------------
4
+
5
+ # messages
6
+ # add_message
7
+ # set_current_number
8
+ # current_number
9
+ # clear_messages
10
+ # current_text_message
11
+ # open_last_text_message_for
12
+
13
+
14
+ Given /^no text messages have been sent$/ do
15
+ clear_messages
16
+ end
17
+
18
+ Given /^all text messages have been read$/ do
19
+ clear_messages
20
+ end
21
+
22
+ Then /^"([^"]*)" should receive a text message$/ do |phone_number|
23
+ messages_for(phone_number).should_not be_empty
24
+ end
25
+
26
+ Then /^"([^"]*)" should receive no text messages$/ do |phone_number|
27
+ messages_for(phone_number).should be_empty
28
+ end
29
+
30
+ When /^"([^"]*?)" opens? the text message$/ do |mobile_number|
31
+ open_last_text_message_for(mobile_number)
32
+ end
33
+
34
+ Then /^I should see "([^"]*)" in the text message body$/ do |content|
35
+ current_text_message.should have_body(content)
36
+ end
@@ -0,0 +1,14 @@
1
+ base = defined?(Rails) ? Rails::Generator::Base : RubiGen::Base
2
+
3
+ class SmsSpecGenerator < base
4
+ def manifest
5
+ m.directory 'features/step_definitions'
6
+ m.file 'text_message_steps.rb', 'features/step_definitions/text_message_steps.rb'
7
+ end
8
+
9
+ protected
10
+
11
+ def banner
12
+ "Usage: #{0} sms_spec"
13
+ end
14
+ end
data/sms-spec.gemspec ADDED
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "sms_spec/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "sms-spec"
7
+ s.version = SmsSpec::VERSION
8
+ s.authors = ["Chris Rittersdorf"]
9
+ s.email = ["manlycode@gmail.com"]
10
+ s.homepage = "https://github.com/mhs/sms_spec"
11
+ s.summary = %q{Test SMS interactions with RSpec and Cucumber}
12
+ s.description = %q{Text Spec gives you an RSpec DSL and Cucumber steps to test SMS interactions.}
13
+
14
+ s.rubyforge_project = "sms_spec"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_dependency 'rspec'
22
+
23
+ s.add_development_dependency "rspec"
24
+ s.add_development_dependency "twilio-ruby"
25
+ s.add_development_dependency "guard-rspec"
26
+ s.add_development_dependency "pry"
27
+ end
@@ -0,0 +1,31 @@
1
+ require 'twilio-ruby'
2
+ require File.join(File.dirname(__FILE__), *%w[spec_helper])
3
+
4
+ describe SmsSpec do
5
+ include SmsSpec::Helpers
6
+
7
+ before :each do
8
+ SmsSpec::Data.clear_messages
9
+ end
10
+
11
+ describe "the twilio-ruby driver" do
12
+ it "is assignable" do
13
+ SmsSpec.driver = :"twilio-ruby"
14
+ end
15
+
16
+ it "intercepts calls to twilio's sms client" do
17
+ account_sid = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
18
+ auth_token = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
19
+
20
+ @client = Twilio::REST::Client.new account_sid, auth_token
21
+ @client.account.sms.messages.create(
22
+ :from => '+14159341234',
23
+ :to => '+16105557069',
24
+ :body => 'Hey there!'
25
+ )
26
+
27
+ open_last_text_message_for("+16105557069")
28
+ current_text_message.should_not be_nil
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,124 @@
1
+ require File.join(File.dirname(__FILE__), *%w[spec_helper])
2
+
3
+ describe SmsSpec::Helpers do
4
+ include SmsSpec::Helpers
5
+
6
+ before :each do
7
+ SmsSpec::Data.clear_messages
8
+ end
9
+
10
+ describe ".messages" do
11
+ describe "before any messages have been sent" do
12
+ it "is empty" do
13
+ messages.should be_empty
14
+ end
15
+ end
16
+
17
+ describe "after a message has been sent" do
18
+ it "adds a message" do
19
+ lambda {
20
+ add_message Message.new :number => "5555555512", :body => "Hello there"
21
+ }.should change(messages, :count).by(1)
22
+ end
23
+ end
24
+ end
25
+
26
+ describe ".set_current_number" do
27
+ it "assigns the current number" do
28
+ set_current_number "555551234"
29
+ current_number.should == "555551234"
30
+ end
31
+
32
+ it "sanitizes phone nubmers" do
33
+ set_current_number "+1555551234"
34
+ current_number.should == "555551234"
35
+
36
+ set_current_number "1-616-555-2929"
37
+ current_number.should == "6165552929"
38
+ end
39
+ end
40
+
41
+ describe ".clear_sms_messages" do
42
+ it "removes all messages" do
43
+ add_message Message.new :number => "5555555512", :body => "Hello there"
44
+ add_message Message.new :number => "5555555512", :body => "Hello there"
45
+ add_message Message.new :number => "5555555512", :body => "Hello there"
46
+
47
+ messages.should have(3).messages
48
+ end
49
+ end
50
+
51
+ describe ".current_text_message" do
52
+ describe "when there are not text messages yet" do
53
+ before :each do
54
+ SmsSpec::Data.clear_messages
55
+ end
56
+
57
+ it "returns nil" do
58
+ current_text_message.should be_nil
59
+ end
60
+ end
61
+
62
+ describe "when there are messages" do
63
+ let(:message1) { Message.new :number => "5555555513", :body => "Hi" }
64
+ let(:message2) { Message.new :number => "5555555512", :body => "Hello there" }
65
+
66
+ before do
67
+ add_message message1
68
+ add_message message2
69
+ end
70
+
71
+ describe "and no messages have been opened" do
72
+ it "should be nil" do
73
+ current_text_message.should be_nil
74
+ end
75
+ end
76
+
77
+ describe "and a message has been opened" do
78
+ before do
79
+ open_last_text_message_for("5555555513")
80
+ end
81
+
82
+ it "returns the last open text message" do
83
+ current_text_message.should == message1
84
+
85
+ open_last_text_message_for("5555555513")
86
+ current_text_message.should be_nil
87
+
88
+ open_last_text_message_for("5555555512")
89
+ current_text_message.should == message2
90
+ end
91
+ end
92
+ end
93
+ end
94
+
95
+ describe ".twiml_message" do
96
+ context "with defaults" do
97
+ let(:message) {
98
+ twiml_message("+16165559982", "Ahoy!")
99
+ }
100
+
101
+ it "modifies the From attribute" do
102
+ message["From"].should eql("+16165559982")
103
+ end
104
+
105
+ it "Modifies the Body attribute" do
106
+ message["Body"].should eql("Ahoy!")
107
+ end
108
+ end
109
+
110
+ describe "Overriding options" do
111
+ let(:message) {
112
+ twiml_message("+16165559982", "Ahoy!", "ToZip" => "49506", "ToCity" => "Detroit")
113
+ }
114
+
115
+ it "overrides the specified attributes" do
116
+ message["ToZip"].should eql("49506")
117
+ message["ToCity"].should eql("Detroit")
118
+ message["Body"].should eql("Ahoy!")
119
+ message["From"].should eql("+16165559982")
120
+ end
121
+ end
122
+ end
123
+
124
+ end
@@ -0,0 +1,70 @@
1
+ require File.join(File.dirname(__FILE__), *%w[spec_helper])
2
+
3
+ describe SmsSpec::Matchers do
4
+ include SmsSpec::Helpers
5
+ include SmsSpec::Matchers
6
+
7
+ let(:mobile_number) { "5555555512" }
8
+
9
+ class MatcherMatch
10
+ def initialize(object_to_test_match)
11
+ @object_to_test_match = object_to_test_match
12
+ end
13
+
14
+ def description
15
+ "match when provided #{@object_to_test_match.inspect}"
16
+ end
17
+
18
+ def matches?(matcher)
19
+ @matcher = matcher
20
+ matcher.matches?(@object_to_test_match)
21
+ end
22
+
23
+ def failure_message
24
+ "expected #{@matcher.inspect} to match when provided #{@object_to_test_match.inspect}, but it did not"
25
+ end
26
+
27
+ def negative_failure_message
28
+ "expected #{@matcher.inspect} not to match when provided #{@object_to_test_match.inspect}, but it did"
29
+ end
30
+ end
31
+
32
+ def match(object_to_test_match)
33
+ if object_to_test_match.is_a?(Regexp)
34
+ super # delegate to rspec's built in 'match' matcher
35
+ else
36
+ MatcherMatch.new(object_to_test_match)
37
+ end
38
+ end
39
+
40
+ describe ".have_text_messages" do
41
+ include SmsSpec::Matchers
42
+
43
+ describe "when the mobile device has no text messages" do
44
+ it "should not match" do
45
+ device = MobileDevice.new(:number => mobile_number)
46
+ have_text_messages.should_not match(device)
47
+ end
48
+ end
49
+
50
+ describe "when the mobile device has text messages" do
51
+ it "should match" do
52
+ add_message Message.new(:number => mobile_number, :body => "something")
53
+
54
+ device = MobileDevice.new(mobile_number)
55
+ have_text_messages.should match(device)
56
+ end
57
+ end
58
+ end
59
+
60
+ describe ".have_body" do
61
+ describe "when bodies match" do
62
+ it "matches" do
63
+ message = Message.new(:number => mobile_number, :body => "something")
64
+
65
+ have_body("something").should match(message)
66
+ end
67
+ end
68
+ end
69
+
70
+ end
@@ -0,0 +1,4 @@
1
+ require File.join(File.dirname(__FILE__), *%w[.. lib sms-spec])
2
+
3
+ require 'rubygems'
4
+ require 'pry'
metadata ADDED
@@ -0,0 +1,130 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sms-spec
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.9
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Chris Rittersdorf
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-18 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &2157261680 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2157261680
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &2157260980 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *2157260980
36
+ - !ruby/object:Gem::Dependency
37
+ name: twilio-ruby
38
+ requirement: &2157260320 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *2157260320
47
+ - !ruby/object:Gem::Dependency
48
+ name: guard-rspec
49
+ requirement: &2157259700 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *2157259700
58
+ - !ruby/object:Gem::Dependency
59
+ name: pry
60
+ requirement: &2157259140 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *2157259140
69
+ description: Text Spec gives you an RSpec DSL and Cucumber steps to test SMS interactions.
70
+ email:
71
+ - manlycode@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - .gitignore
77
+ - Gemfile
78
+ - Guardfile
79
+ - README.markdown
80
+ - Rakefile
81
+ - lib/generators/text_spec/steps/USAGE
82
+ - lib/generators/text_spec/steps/steps_generator.rb
83
+ - lib/generators/text_spec/steps/templates/text_message_steps.rb
84
+ - lib/sms-spec.rb
85
+ - lib/sms_spec.rb
86
+ - lib/sms_spec/cucumber.rb
87
+ - lib/sms_spec/data.rb
88
+ - lib/sms_spec/drivers/twilio-ruby.rb
89
+ - lib/sms_spec/helpers.rb
90
+ - lib/sms_spec/matchers.rb
91
+ - lib/sms_spec/message.rb
92
+ - lib/sms_spec/mobile_device.rb
93
+ - lib/sms_spec/util.rb
94
+ - lib/sms_spec/version.rb
95
+ - rails_generators/text_spec/templates/text_message_steps.rb
96
+ - rails_generators/text_spec_generator.rb
97
+ - sms-spec.gemspec
98
+ - spec/drivers_spec.rb
99
+ - spec/helpers_spec.rb
100
+ - spec/matchers_spec.rb
101
+ - spec/spec_helper.rb
102
+ homepage: https://github.com/mhs/sms_spec
103
+ licenses: []
104
+ post_install_message:
105
+ rdoc_options: []
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ requirements: []
121
+ rubyforge_project: sms_spec
122
+ rubygems_version: 1.8.6
123
+ signing_key:
124
+ specification_version: 3
125
+ summary: Test SMS interactions with RSpec and Cucumber
126
+ test_files:
127
+ - spec/drivers_spec.rb
128
+ - spec/helpers_spec.rb
129
+ - spec/matchers_spec.rb
130
+ - spec/spec_helper.rb