txtlocal 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ Autotest.add_hook :initialize do |at|
2
+ at.add_mapping(%r%^lib/txtlocal/(.*)\.rb$%, true) do |_, m|
3
+ "spec/#{m[1]}_spec.rb"
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
4
+ txtlocal.komodoproject
5
+ README.html
6
+ api_login.rb
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --debug
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source :gemcutter
2
+
3
+ # Specify your gem's dependencies in txtlocal.gemspec
4
+ gemspec
@@ -0,0 +1,46 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ txtlocal (0.0.1)
5
+ json
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ ZenTest (4.4.2)
11
+ addressable (2.2.2)
12
+ autotest (4.4.6)
13
+ ZenTest (>= 4.4.1)
14
+ columnize (0.3.2)
15
+ crack (0.1.8)
16
+ diff-lcs (1.1.2)
17
+ json (1.4.6)
18
+ linecache (0.43)
19
+ rspec (2.4.0)
20
+ rspec-core (~> 2.4.0)
21
+ rspec-expectations (~> 2.4.0)
22
+ rspec-mocks (~> 2.4.0)
23
+ rspec-core (2.4.0)
24
+ rspec-expectations (2.4.0)
25
+ diff-lcs (~> 1.1.2)
26
+ rspec-mocks (2.4.0)
27
+ ruby-debug (0.10.4)
28
+ columnize (>= 0.1)
29
+ ruby-debug-base (~> 0.10.4.0)
30
+ ruby-debug-base (0.10.4)
31
+ linecache (>= 0.3)
32
+ webmock (1.6.2)
33
+ addressable (>= 2.2.2)
34
+ crack (>= 0.1.7)
35
+
36
+ PLATFORMS
37
+ ruby
38
+
39
+ DEPENDENCIES
40
+ autotest
41
+ bundler (>= 1.0.0)
42
+ json
43
+ rspec
44
+ ruby-debug
45
+ txtlocal!
46
+ webmock
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 epiGenesys Limited
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,46 @@
1
+ # txtlocal.co.uk API Wrapper
2
+
3
+ This gem is intended to provide a simple API for sending text messages via txtlocal's API.
4
+
5
+ ## Installing
6
+
7
+ Add the gem to your gemfile
8
+
9
+ gem 'txtlocal', :git => 'git://github.com/epigenesys/txtlocal.git'
10
+
11
+ ## Usage
12
+
13
+ Configure the default settings
14
+
15
+ Txtlocal.config do |c|
16
+ c.from = "My App"
17
+ c.username = "txtlocal_username"
18
+ c.password = "txtlocal_password"
19
+ end
20
+
21
+ Use Txtlocal.send_message to send messages
22
+
23
+ Txtlocal.send_message("You have 1 new friend request!", "07729435xxx")
24
+
25
+ Or create a message manually
26
+
27
+ msg = Txtlocal::Message.new
28
+ msg.body = "Tickets will be available tomorrow morning at 9am"
29
+ msg.recipients = ["0712 3893 xxx", "447923176xxx"]
30
+ msg.add_recipient "+447729435xxx"
31
+ msg.send!
32
+
33
+ You can override the sender on a per message basis
34
+
35
+ Txtlocal.send_message("You have 1 new friend request!", "07729435xxx", :from => "someone")
36
+
37
+ msg = Txtlocal::Message.new
38
+ msg.from = "a mystery"
39
+
40
+ ## Testing
41
+
42
+ Set test = true in the configuration to use the API's test mode
43
+
44
+ Txtlocal.config.test = true
45
+ Txtlocal.config.testing?
46
+ => true
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,26 @@
1
+ require 'txtlocal/config'
2
+ require 'txtlocal/message'
3
+
4
+ module Txtlocal
5
+ class << self
6
+
7
+ def config
8
+ @config ||= Config.new
9
+ if block_given?
10
+ yield @config
11
+ end
12
+ @config
13
+ end
14
+
15
+ def reset_config
16
+ @config = nil
17
+ end
18
+
19
+ def send_message(message, recipients, options={})
20
+ msg = Txtlocal::Message.new(message, recipients, options)
21
+ msg.send!
22
+ msg
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,27 @@
1
+ module Txtlocal
2
+ class Config
3
+
4
+ # The default FROM value for sent messages
5
+ # this can be overridden on a per-message basis
6
+ attr_accessor :from
7
+
8
+ # The username of the txtlocal account to use when accessing the API
9
+ attr_accessor :username
10
+
11
+ # The password of the txtlocal account to use when accessing the API
12
+ attr_accessor :password
13
+
14
+ # Access the API in test mode
15
+ attr_accessor :test
16
+
17
+ def initialize
18
+ @test = false
19
+ end
20
+
21
+ # Nice wrapper to check if we're testing
22
+ def testing?
23
+ !!@test
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,90 @@
1
+ require 'net/https'
2
+ require 'uri'
3
+ require 'json'
4
+
5
+ module Txtlocal
6
+ class Message
7
+
8
+ attr_accessor :body
9
+ attr_accessor :recipients
10
+ attr_accessor :from
11
+
12
+ attr_accessor :response
13
+
14
+ def initialize(message=nil, recipients=nil, options=nil)
15
+ self.body = message if message
16
+ self.recipients = recipients if recipients
17
+ self.options = options if options
18
+ end
19
+
20
+ def body=(body)
21
+ @body = body.strip.gsub(/\n/, '%n')
22
+ end
23
+
24
+ def recipients
25
+ @recipients ||= []
26
+ end
27
+ def recipients=(recipients)
28
+ @recipients = []
29
+ [*recipients].each do |recip|
30
+ add_recipient(recip)
31
+ end
32
+ end
33
+ def add_recipient(recipient)
34
+ recipient = recipient.gsub(/\s/, '')
35
+ recipient = case recipient
36
+ when /^447\d{9}$/
37
+ recipient
38
+ when /^(?:\+447|07)(\d{9})$/
39
+ "447#{$1}"
40
+ else
41
+ return
42
+ end
43
+ recipients << recipient
44
+ end
45
+
46
+ def from
47
+ self.from = Txtlocal.config.from if not @from
48
+ @from
49
+ end
50
+ def from=(from)
51
+ if from.to_s.length < 3
52
+ @from = nil
53
+ else
54
+ @from = from.strip.gsub(/[^\w ]/, '').to_s[0, 11]
55
+ end
56
+ end
57
+
58
+ def options=(options)
59
+ self.from = options[:from] if options.has_key?(:from)
60
+ end
61
+
62
+ def response=(response)
63
+ if not response.body.empty?
64
+ @response = {}
65
+ data = JSON.parse(response.body)
66
+ data.each_pair do |k, v|
67
+ key = k.gsub(/\B[A-Z]+/, '_\0').downcase.to_sym
68
+ @response[key] = v
69
+ end
70
+ end
71
+ end
72
+
73
+ API_ENDPOINT = URI.parse("https://www.txtlocal.com/sendsmspost.php")
74
+ def send!
75
+ http = Net::HTTP.new(API_ENDPOINT.host, API_ENDPOINT.port)
76
+ http.use_ssl = true
77
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
78
+ req = Net::HTTP::Post.new(API_ENDPOINT.path)
79
+ req.set_form_data(:json => 1,
80
+ :test => Txtlocal.config.testing? ? 1 : 0,
81
+ :from => from,
82
+ :message => body,
83
+ :selectednums => recipients.join(","),
84
+ :uname => Txtlocal.config.username,
85
+ :pword => Txtlocal.config.password)
86
+ result = http.start { |http| http.request(req) }
87
+ self.response = result
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,3 @@
1
+ module Txtlocal
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,42 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe Txtlocal::Config do
4
+ let(:config) { Txtlocal::Config.new }
5
+
6
+ describe "attributes" do
7
+ attributes = %w(test from username password)
8
+ attributes.each do |attr|
9
+ it "should have the '#{attr}' attribute" do
10
+ value = mock("value")
11
+ config.send("#{attr}=", value)
12
+ config.send(attr).should == value
13
+ end
14
+ end
15
+ end
16
+
17
+ describe "defaults" do
18
+ defaults = {
19
+ :test => false,
20
+ :username => nil,
21
+ :password => nil,
22
+ :from => nil
23
+ }
24
+
25
+ defaults.each_pair do |attr, default|
26
+ example "#{attr} should default to #{default.inspect}" do
27
+ config.send(attr).should == default
28
+ end
29
+ end
30
+ end
31
+
32
+ describe "testing?" do
33
+ it "should return false if test isnt true" do
34
+ config.testing?.should be_false
35
+ end
36
+ it "should return true if test is true" do
37
+ config.test = true
38
+ config.testing?.should be_true
39
+ end
40
+ end
41
+
42
+ end
@@ -0,0 +1,187 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe Txtlocal::Message do
4
+ describe "initialize" do
5
+ let(:new) { Txtlocal::Message.allocate }
6
+ let(:body) { double("body text") }
7
+ let(:recipients) { double("recipients") }
8
+ let(:options) { double("options") }
9
+ before(:each) do
10
+ Txtlocal::Message.stub!(:new) do |*args|
11
+ new.tap do |n|
12
+ n.send :initialize, *args
13
+ end
14
+ end
15
+ end
16
+
17
+ it "should call internal setter methods" do
18
+ new.should_receive(:body=).with(body)
19
+ new.should_receive(:recipients=).with(recipients)
20
+ new.should_receive(:options=).with(options)
21
+ msg = Txtlocal::Message.new(body, recipients, options)
22
+ end
23
+ end
24
+
25
+ describe "body text" do
26
+ let(:msg) { Txtlocal::Message.new }
27
+ describe "body" do
28
+ it "should be accessible" do
29
+ msg.body = "body text"
30
+ msg.body.should == "body text"
31
+ end
32
+ it "should replace newlines with %n" do
33
+ msg.body = "once\nupon\na time"
34
+ msg.body.should == "once%nupon%na time"
35
+ end
36
+ it "should trim trailing and leading whitespace" do
37
+ msg.body = " a short message\n\n"
38
+ msg.body.should == "a short message"
39
+ end
40
+ end
41
+ end
42
+
43
+ describe "recipients" do
44
+ let(:msg) { Txtlocal::Message.new }
45
+ describe "accessor" do
46
+ it "should accept single value" do
47
+ msg.recipients = "447729416732"
48
+ msg.recipients.should == ["447729416732"]
49
+ end
50
+ it "should accept multiple values" do
51
+ msg.recipients = ["447729416732", "447923732984"]
52
+ msg.recipients.should == ["447729416732", "447923732984"]
53
+ end
54
+ it "should be using add_recipient internally" do
55
+ msg.should_receive(:add_recipient).with("447729416732")
56
+ msg.recipients = "447729416732"
57
+ end
58
+ end
59
+ describe "add_recipient" do
60
+ it "should accept txtlocal format number" do
61
+ msg.add_recipient("447729416732")
62
+ msg.recipients.should == ["447729416732"]
63
+ end
64
+ it "should accept 07 format number" do
65
+ msg.add_recipient("07729416745")
66
+ msg.recipients.should == ["447729416745"]
67
+ end
68
+ it "should accept international format number" do
69
+ msg.add_recipient("+447729416745")
70
+ msg.recipients.should == ["447729416745"]
71
+ end
72
+ it "should accept numbers with spaces" do
73
+ msg.add_recipient("07729 457 756")
74
+ msg.recipients.should == ["447729457756"]
75
+ end
76
+ it "should not add invalid numbers" do
77
+ # TODO: exception here?
78
+ msg.add_recipient("qwdcs")
79
+ msg.add_recipient("0114 245 9832")
80
+ msg.add_recipient("0800 800 8000")
81
+ msg.recipients.should be_empty
82
+ end
83
+ end
84
+ end
85
+
86
+ describe "from" do
87
+ let(:msg) { Txtlocal::Message.new }
88
+ before(:each) do
89
+ Txtlocal.config.from = "default"
90
+ end
91
+ after(:each) do
92
+ Txtlocal.reset_config
93
+ end
94
+ it "should default to config.from" do
95
+ msg.from.should == "default"
96
+ end
97
+ it "should be overridable" do
98
+ msg.from = "overridden"
99
+ msg.from.should == "overridden"
100
+ end
101
+ it "should revert to default if set to nil" do
102
+ msg.from = "overridden"
103
+ msg.from.should == "overridden"
104
+ msg.from = nil
105
+ msg.from.should == "default"
106
+ end
107
+ it "should truncate if set to longer than 11 characters" do
108
+ msg.from = "123456789012345"
109
+ msg.from.should == "12345678901"
110
+ end
111
+ it "should fail silently if set to less than 3 characters" do
112
+ msg.from = "12"
113
+ msg.from.should == "default"
114
+ end
115
+ it "should trim whitespace and remove any non alphanumeric or space characters" do
116
+ msg.from = " a person! "
117
+ msg.from.should == "a person"
118
+ end
119
+ end
120
+
121
+ describe "options" do
122
+ let(:msg) { Txtlocal::Message.new }
123
+ it "should accept :from" do
124
+ msg.options = {:from => "my name"}
125
+ msg.from.should == "my name"
126
+ end
127
+ end
128
+
129
+ describe "send!" do
130
+ context "web mocked" do
131
+ before(:each) do
132
+ WebMock.disable_net_connect!
133
+ stub_request(:post, "https://www.txtlocal.com/sendsmspost.php")
134
+ Txtlocal.config do |c|
135
+ c.from = "testing"
136
+ c.username = "testuser"
137
+ c.password = "testpass"
138
+ c.test = false
139
+ end
140
+ end
141
+ after(:each) do
142
+ Txtlocal.reset_config
143
+ end
144
+ it "should send data to the API endpoint" do
145
+ msg = Txtlocal::Message.new("a message", "447729416583")
146
+ msg.send!
147
+ WebMock.should have_requested(:post, "https://www.txtlocal.com/sendsmspost.php").with(
148
+ :body => {'uname' => "testuser", 'pword' => "testpass", 'json' => '1', 'test' => '0',
149
+ 'from' => "testing", 'selectednums' => "447729416583", 'message' => "a message"}
150
+ )
151
+ end
152
+ it "should comma sepratate multiple recipients" do
153
+ msg = Txtlocal::Message.new("a message", ["447729416583", "447984534657"])
154
+ msg.send!
155
+ WebMock.should have_requested(:post, "https://www.txtlocal.com/sendsmspost.php").with(
156
+ :body => {'uname' => "testuser", 'pword' => "testpass", 'json' => '1', 'test' => '0',
157
+ 'from' => "testing", 'selectednums' => "447729416583,447984534657",
158
+ 'message' => "a message"}
159
+ )
160
+ end
161
+ end
162
+ context "api test mode" do
163
+ if not (File.readable?('api_login.rb') and load('api_login.rb') and
164
+ API_USERNAME and API_PASSWORD)
165
+ pending "\n" +
166
+ "Please create a file api_login.rb that defines API_USERNAME and API_PASSWORD " +
167
+ "to run tests against the real server"
168
+ else
169
+ before(:each) do
170
+ WebMock.allow_net_connect!
171
+ Txtlocal.config do |c|
172
+ c.from = "testing"
173
+ c.username = API_USERNAME
174
+ c.password = API_PASSWORD
175
+ c.test = true
176
+ end
177
+ end
178
+ it "should send data to the API endpoint" do
179
+ msg = Txtlocal::Message.new("a message", "447729467413")
180
+ msg.send!
181
+ msg.response.should_not be_nil
182
+ msg.response[:error].should include "testmode"
183
+ end
184
+ end
185
+ end
186
+ end
187
+ end
@@ -0,0 +1,9 @@
1
+ require 'rspec'
2
+
3
+ require 'txtlocal'
4
+
5
+ require 'webmock/rspec'
6
+
7
+ Rspec.configure do |c|
8
+ c.mock_with :rspec
9
+ end
@@ -0,0 +1,37 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe Txtlocal do
4
+
5
+ describe "config" do
6
+ it "should be accessible" do
7
+ Txtlocal.config.should be_a Txtlocal::Config
8
+ end
9
+ it "should be modifiable with a block" do
10
+ remember = nil
11
+ Txtlocal.config do |c|
12
+ c.should be_a Txtlocal::Config
13
+ remember = c
14
+ end
15
+ Txtlocal.config.should == remember
16
+ end
17
+ it "should be resettable" do
18
+ c = Txtlocal.config
19
+ Txtlocal.reset_config
20
+ Txtlocal.config.should_not == c
21
+ end
22
+ end
23
+
24
+ describe "send_message" do
25
+ let(:message) { double("message body") }
26
+ let(:recipients) { double("list of recipients") }
27
+ let(:options) { double("additional message options") }
28
+ let(:msg_instance) { double("message instance") }
29
+
30
+ it "should construct a Message instance and send! it" do
31
+ msg_instance.should_receive(:send!).with(no_args)
32
+ Txtlocal::Message.should_receive(:new).with(message, recipients, options) { msg_instance }
33
+ Txtlocal.send_message(message, recipients, options).should == msg_instance
34
+ end
35
+ end
36
+
37
+ end
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path("../lib/txtlocal/version", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "txtlocal"
6
+ s.version = Txtlocal::VERSION
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ["Glen Mailer"]
9
+ s.email = ["glen@epigenesys.co.uk"]
10
+ s.homepage = "https://github.com/epigenesys/txtlocal"
11
+ s.summary = "An API wrapper for txtlocal.co.uk"
12
+ s.description = "An API wrapper for txtlocal.co.uk"
13
+
14
+ s.required_rubygems_version = ">= 1.3.6"
15
+ #s.rubyforge_project = "txtlocal"
16
+
17
+ s.add_dependency "json"
18
+
19
+ s.add_development_dependency "bundler", ">= 1.0.0"
20
+ s.add_development_dependency "rspec"
21
+ s.add_development_dependency "ruby-debug"
22
+ s.add_development_dependency "autotest"
23
+ s.add_development_dependency "webmock"
24
+
25
+ s.files = `git ls-files`.split("\n")
26
+ s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
27
+ s.require_path = 'lib'
28
+ end
metadata ADDED
@@ -0,0 +1,128 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: txtlocal
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Glen Mailer
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-11-13 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: json
16
+ requirement: &70290906322080 !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: *70290906322080
25
+ - !ruby/object:Gem::Dependency
26
+ name: bundler
27
+ requirement: &70290906316680 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.0
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70290906316680
36
+ - !ruby/object:Gem::Dependency
37
+ name: rspec
38
+ requirement: &70290906315460 !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: *70290906315460
47
+ - !ruby/object:Gem::Dependency
48
+ name: ruby-debug
49
+ requirement: &70290906311120 !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: *70290906311120
58
+ - !ruby/object:Gem::Dependency
59
+ name: autotest
60
+ requirement: &70290906306060 !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: *70290906306060
69
+ - !ruby/object:Gem::Dependency
70
+ name: webmock
71
+ requirement: &70290906301840 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70290906301840
80
+ description: An API wrapper for txtlocal.co.uk
81
+ email:
82
+ - glen@epigenesys.co.uk
83
+ executables: []
84
+ extensions: []
85
+ extra_rdoc_files: []
86
+ files:
87
+ - .autotest
88
+ - .gitignore
89
+ - .rspec
90
+ - Gemfile
91
+ - Gemfile.lock
92
+ - LICENSE
93
+ - README.md
94
+ - Rakefile
95
+ - lib/txtlocal.rb
96
+ - lib/txtlocal/config.rb
97
+ - lib/txtlocal/message.rb
98
+ - lib/txtlocal/version.rb
99
+ - spec/config_spec.rb
100
+ - spec/message_spec.rb
101
+ - spec/spec_helper.rb
102
+ - spec/txtlocal_spec.rb
103
+ - txtlocal.gemspec
104
+ homepage: https://github.com/epigenesys/txtlocal
105
+ licenses: []
106
+ post_install_message:
107
+ rdoc_options: []
108
+ require_paths:
109
+ - lib
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ! '>='
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ! '>='
120
+ - !ruby/object:Gem::Version
121
+ version: 1.3.6
122
+ requirements: []
123
+ rubyforge_project:
124
+ rubygems_version: 1.8.10
125
+ signing_key:
126
+ specification_version: 3
127
+ summary: An API wrapper for txtlocal.co.uk
128
+ test_files: []