fanny_pack 0.1.0
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.
- data/README.markdown +75 -0
- data/Rakefile +45 -0
- data/lib/fanny_pack/errors.rb +21 -0
- data/lib/fanny_pack/ip.rb +162 -0
- data/lib/fanny_pack/request.rb +118 -0
- data/lib/fanny_pack/version.rb +3 -0
- data/lib/fanny_pack.rb +18 -0
- data/spec/fanny_pack/ip_spec.rb +125 -0
- data/spec/fanny_pack/request_spec.rb +92 -0
- data/spec/fanny_pack_spec.rb +33 -0
- data/spec/fixtures/add.txt +10 -0
- data/spec/fixtures/deactivate.txt +13 -0
- data/spec/fixtures/delete.txt +11 -0
- data/spec/fixtures/details.txt +13 -0
- data/spec/fixtures/edit.txt +11 -0
- data/spec/fixtures/list.txt +11 -0
- data/spec/fixtures/list_details.txt +20 -0
- data/spec/fixtures/reactivate.txt +13 -0
- data/spec/spec_helper.rb +17 -0
- metadata +150 -0
data/README.markdown
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
# FannyPack
|
2
|
+
|
3
|
+
[](http://travis-ci.org/site5/fanny_pack)
|
4
|
+
|
5
|
+
FannyPack is a Ruby library for working with the
|
6
|
+
[Fantastico API](https://netenberg.com/api/).
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
gem install fanny_pack
|
11
|
+
|
12
|
+
## Usage
|
13
|
+
|
14
|
+
Set your Fantastico `accountHASH`
|
15
|
+
|
16
|
+
FannyPack.account_hash = '0mgpwn13s'
|
17
|
+
|
18
|
+
Add an IP
|
19
|
+
|
20
|
+
FannyPack::IP.add '127.0.0.1'
|
21
|
+
|
22
|
+
Add a VPS IP
|
23
|
+
|
24
|
+
FannyPack::IP.add '127.0.0.1', :vps
|
25
|
+
|
26
|
+
Edit an IP (`127.0.0.1` is the current IP, `127.0.0.2` is the new IP)
|
27
|
+
|
28
|
+
FannyPack::IP.edit '127.0.0.1', '127.0.0.2'
|
29
|
+
|
30
|
+
Deactivate an IP
|
31
|
+
|
32
|
+
FannyPack::IP.deactivate '127.0.0.1'
|
33
|
+
|
34
|
+
Reactivate an IP
|
35
|
+
|
36
|
+
FannyPack::IP.reactivate '127.0.0.1'
|
37
|
+
|
38
|
+
Delete an IP
|
39
|
+
|
40
|
+
FannyPack::IP.delete '127.0.0.1'
|
41
|
+
|
42
|
+
List all IPs
|
43
|
+
|
44
|
+
FannyPack::IP.list :all
|
45
|
+
|
46
|
+
List only 'normal' IPs
|
47
|
+
|
48
|
+
FannyPack::IP.list :normal
|
49
|
+
|
50
|
+
List only VPS IPs
|
51
|
+
|
52
|
+
FannyPack::IP.list :vps
|
53
|
+
|
54
|
+
Include details when listing IPs:
|
55
|
+
|
56
|
+
FannyPack::IP.list :all, true
|
57
|
+
|
58
|
+
Get an IP's details
|
59
|
+
|
60
|
+
FannyPack::IP.details '127.0.0.1'
|
61
|
+
|
62
|
+
## Note on Patches/Pull Requests
|
63
|
+
|
64
|
+
* Fork the project.
|
65
|
+
* Make your feature addition or bug fix.
|
66
|
+
* Add tests for it. This is important so I don't break it in a future version
|
67
|
+
unintentionally.
|
68
|
+
* Commit, do not mess with rakefile, version, or history. (If you want to have
|
69
|
+
your own version, that is fine but bump version in a commit by itself I can
|
70
|
+
ignore when I pull)
|
71
|
+
* Send me a pull request. Bonus points for topic branches.
|
72
|
+
|
73
|
+
## Copyright
|
74
|
+
|
75
|
+
Copyright (c) 2011 Site5 LLC. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
$:.unshift 'lib'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
rescue LoadError
|
6
|
+
puts "Please install rspec (bundle install)"
|
7
|
+
exit
|
8
|
+
end
|
9
|
+
|
10
|
+
begin
|
11
|
+
require 'metric_fu'
|
12
|
+
MetricFu::Configuration.run do |config|
|
13
|
+
config.rcov[:rcov_opts] << "-Ispec"
|
14
|
+
end
|
15
|
+
rescue LoadError
|
16
|
+
puts "Can't find metric_fu"
|
17
|
+
end
|
18
|
+
|
19
|
+
RSpec::Core::RakeTask.new :spec
|
20
|
+
|
21
|
+
desc "Open an irb session preloaded with this library"
|
22
|
+
task :console do
|
23
|
+
sh "irb -rubygems -r ./lib/fanny_pack.rb -I ./lib"
|
24
|
+
end
|
25
|
+
|
26
|
+
desc "Push a new version to RubyGems"
|
27
|
+
task :publish do
|
28
|
+
require 'fanny_pack/version'
|
29
|
+
|
30
|
+
ver = FannyPack::Version
|
31
|
+
|
32
|
+
sh "gem build fanny_pack.gemspec"
|
33
|
+
sh "gem push fanny_pack-#{ver}.gem"
|
34
|
+
sh "git tag -a -m 'FannyPack v#{ver}' v#{ver}"
|
35
|
+
sh "git push origin v#{ver}"
|
36
|
+
sh "git push origin master"
|
37
|
+
end
|
38
|
+
|
39
|
+
desc "Run all specs with rcov"
|
40
|
+
RSpec::Core::RakeTask.new(:rcov) do |t|
|
41
|
+
t.rcov = true
|
42
|
+
t.rcov_opts = %w{--exclude osx\/objc,gems\/,spec\/,features\/}
|
43
|
+
end
|
44
|
+
|
45
|
+
task :default => :spec
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module FannyPack
|
2
|
+
module Errors #:nodoc: all
|
3
|
+
# Fault codes and error messages that are returned by the Fantastico API
|
4
|
+
FAULT_CODES = {
|
5
|
+
1302 => "You have specified an invalid hash.",
|
6
|
+
1401 => "You are trying to access the API from a server whose IP Address is not authorized.",
|
7
|
+
1603 => "You are not allowed to add any more IP Addresses because you have reached your IP Address quota.",
|
8
|
+
1703 => "The IP Address that you have specified is not a valid VPS IP Address.",
|
9
|
+
1704 => "The new IP Address that you have specified is not a valid cPanel IP Address.",
|
10
|
+
1705 => "The new IP Address that you have specified is not a valid cPanel IP Address.",
|
11
|
+
1801 => "The IP Address that you have specified does not exist.",
|
12
|
+
1804 => "The IP Address that you have specified already exists."
|
13
|
+
}.freeze
|
14
|
+
|
15
|
+
class AuthRequired < StandardError
|
16
|
+
def initialize(msg = nil)
|
17
|
+
super "Must set FannyPack.account_hash"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,162 @@
|
|
1
|
+
module FannyPack
|
2
|
+
# FannyPack::IP is the main class for managing IPs via the Fantastico API.
|
3
|
+
class IP
|
4
|
+
|
5
|
+
# The Fantastico API tags your IPs as "normal" or "vps".
|
6
|
+
IP_TYPES = {
|
7
|
+
:all => 0,
|
8
|
+
:normal => 1,
|
9
|
+
:vps => 2
|
10
|
+
}.freeze
|
11
|
+
|
12
|
+
# Add an IP address to your Fantastico account.
|
13
|
+
#
|
14
|
+
# Returns a Hash containing the new IP info on success
|
15
|
+
# Returns a Hash containing an error code and message on error
|
16
|
+
#
|
17
|
+
# ==== Options
|
18
|
+
#
|
19
|
+
# * +ip+ - The cPanel IP address to add
|
20
|
+
# * +ip_type* - The type of IP address (:vps or :normal)
|
21
|
+
#
|
22
|
+
# ==== Examples
|
23
|
+
#
|
24
|
+
# # Add normal IP
|
25
|
+
# FannyPack::IP.add '127.0.0.1'
|
26
|
+
#
|
27
|
+
# # Add vps IP
|
28
|
+
# FannyPack::IP.add '127.0.0.1', :vps
|
29
|
+
def self.add(ip, ip_type = :normal)
|
30
|
+
Request.new.commit :addIp, :ip => ip, :type => IP_TYPES[ip_type]
|
31
|
+
end
|
32
|
+
|
33
|
+
# Edit an IP address, replacing +ip+ with +new_ip+
|
34
|
+
#
|
35
|
+
# Returns a Hash containing the new IP info on success
|
36
|
+
# Returns a Hash containing an error code and message on error
|
37
|
+
#
|
38
|
+
# ==== Options
|
39
|
+
#
|
40
|
+
# * +ip+ - The current IP address
|
41
|
+
# * +new_ip+ - The new IP address
|
42
|
+
#
|
43
|
+
# ==== Example
|
44
|
+
#
|
45
|
+
# FannyPack::IP.edit '127.0.0.1', '127.0.0.2'
|
46
|
+
def self.edit(ip, new_ip)
|
47
|
+
Request.new.commit :editIp, :ip => ip, :new_ip => new_ip
|
48
|
+
end
|
49
|
+
|
50
|
+
# Get a list of IP addresses on your Fantastico account
|
51
|
+
#
|
52
|
+
# The Fantastico API allows you to filter for only normal IPs, or only
|
53
|
+
# vps IPs. Use +list_type+ :all to get all IPs, :normal to get only normal
|
54
|
+
# IPs, or :vps to get only vps IPs.
|
55
|
+
#
|
56
|
+
# Raises ArgumentError if list_type is invalid
|
57
|
+
#
|
58
|
+
# If +details+ is false:
|
59
|
+
# Returns an Array containing IP addresses
|
60
|
+
#
|
61
|
+
# If +details+ is true:
|
62
|
+
# Returns an Array of Hashes containing info for each IP
|
63
|
+
#
|
64
|
+
# Returns a Hash containing an error code and message on error
|
65
|
+
#
|
66
|
+
# ==== Options
|
67
|
+
#
|
68
|
+
# * +list_type+ - The list type, one of :normal, :vps, :all
|
69
|
+
# * +details+ - Set to true to return details for each IP
|
70
|
+
#
|
71
|
+
# ==== Examples
|
72
|
+
#
|
73
|
+
# # Show all IPs (simple list)
|
74
|
+
# FannyPack::IP.list :all
|
75
|
+
#
|
76
|
+
# # Show all IPs (detailed list)
|
77
|
+
# FannyPack::IP.list :all, true
|
78
|
+
#
|
79
|
+
# # Show normal IPs (simple list)
|
80
|
+
# FannyPack::IP.list :normal
|
81
|
+
#
|
82
|
+
# # Show normal IPs (detailed list)
|
83
|
+
# FannyPack::IP.list :normal, true
|
84
|
+
#
|
85
|
+
# # Show vps IPs (simple list)
|
86
|
+
# FannyPack::IP.list :vps
|
87
|
+
#
|
88
|
+
# # Show normal IPs (detailed list)
|
89
|
+
# FannyPack::IP.list :vps, true
|
90
|
+
def self.list(list_type, details = false)
|
91
|
+
cmd = details ? :getIpListDetailed : :getIpList
|
92
|
+
unless IP_TYPES.keys.include? list_type
|
93
|
+
raise ArgumentError, "Invalid list type"
|
94
|
+
end
|
95
|
+
Request.new.commit cmd, :listType => IP_TYPES[list_type]
|
96
|
+
end
|
97
|
+
|
98
|
+
# Delete an IP address from your Fantastico Account
|
99
|
+
#
|
100
|
+
# Returns a Hash containing the IP info
|
101
|
+
# Returns a Hash containing an error code and message on error
|
102
|
+
#
|
103
|
+
# ==== Options
|
104
|
+
#
|
105
|
+
# * +ip+ - The IP address to delete
|
106
|
+
#
|
107
|
+
# ==== Example
|
108
|
+
#
|
109
|
+
# FannyPack::IP.delete '127.0.0.1'
|
110
|
+
def self.delete(ip)
|
111
|
+
Request.new.commit :deleteIp, :ip => ip
|
112
|
+
end
|
113
|
+
|
114
|
+
# Reactivate a deactivated IP address
|
115
|
+
#
|
116
|
+
# Returns a Hash containing the IP info
|
117
|
+
# Returns a Hash containing an error code and message on error
|
118
|
+
#
|
119
|
+
# ==== Options
|
120
|
+
#
|
121
|
+
# * +ip+ - The IP address to reactivate
|
122
|
+
#
|
123
|
+
# ==== Example
|
124
|
+
#
|
125
|
+
# FannyPack::IP.reactivate '127.0.0.1'
|
126
|
+
def self.reactivate(ip)
|
127
|
+
Request.new.commit :reactivateIp, :ip => ip
|
128
|
+
end
|
129
|
+
|
130
|
+
# Deactivate an IP address
|
131
|
+
#
|
132
|
+
# Returns a Hash containing the IP info
|
133
|
+
# Returns a Hash containing an error code and message on error
|
134
|
+
#
|
135
|
+
# ==== Options
|
136
|
+
#
|
137
|
+
# * +ip+ - The IP address to deactivate
|
138
|
+
#
|
139
|
+
# ==== Example
|
140
|
+
#
|
141
|
+
# FannyPack::IP.deactivate '127.0.0.1'
|
142
|
+
def self.deactivate(ip)
|
143
|
+
Request.new.commit :deactivateIp, :ip => ip
|
144
|
+
end
|
145
|
+
|
146
|
+
# Get details for an IP address
|
147
|
+
#
|
148
|
+
# Returns a Hash containing the IP info
|
149
|
+
# Returns a Hash containing an error code and message on error
|
150
|
+
#
|
151
|
+
# ==== Options
|
152
|
+
#
|
153
|
+
# * +ip+ - The IP address to lookup
|
154
|
+
#
|
155
|
+
# ==== Example
|
156
|
+
#
|
157
|
+
# FannyPack::IP.details '127.0.0.1'
|
158
|
+
def self.details(ip)
|
159
|
+
Request.new.commit :getIpDetails, :ip => ip
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
require 'builder'
|
2
|
+
require 'crack'
|
3
|
+
require 'open-uri'
|
4
|
+
require 'net/https'
|
5
|
+
|
6
|
+
module FannyPack
|
7
|
+
# FannyPack::Request handles forming the XML request to be sent to the
|
8
|
+
# Fantastico API, and parsing the response.
|
9
|
+
class Request
|
10
|
+
attr_reader :params, :response
|
11
|
+
|
12
|
+
# The Fantastico API supports these methods
|
13
|
+
VALID_ACTIONS = [
|
14
|
+
:getIpList, :getIpListDetailed, :getIpDetails, :addIp,
|
15
|
+
:editIp, :deactivateIp, :reactivateIp, :deleteIp
|
16
|
+
].freeze
|
17
|
+
|
18
|
+
# The URL for the Fantastico API
|
19
|
+
API_URL = "https://netenberg.com/api/server.php"
|
20
|
+
|
21
|
+
def initialize
|
22
|
+
@action = :invalid
|
23
|
+
@response = {}
|
24
|
+
@params = {}
|
25
|
+
end
|
26
|
+
|
27
|
+
# Send this request to the Fantastico API
|
28
|
+
#
|
29
|
+
# Returns a Hash or Array, depending on the response from Fantastico
|
30
|
+
#
|
31
|
+
# ==== Options
|
32
|
+
#
|
33
|
+
# * +action+ - The action to perform, one of VALID_ACTIONS
|
34
|
+
# * +params+ - A hash containing parameters for the API method
|
35
|
+
def commit(action, params = {})
|
36
|
+
unless VALID_ACTIONS.include? action.to_sym
|
37
|
+
raise "Invalid action"
|
38
|
+
end
|
39
|
+
@action = action
|
40
|
+
@params = params
|
41
|
+
|
42
|
+
uri = URI.parse(API_URL)
|
43
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
44
|
+
http.use_ssl = true
|
45
|
+
res = http.post(uri.path, to_xml, 'Content-Type' => 'text/xml; charset=utf-8')
|
46
|
+
parse(res.body)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Parse the XML response from Fantastico
|
50
|
+
#
|
51
|
+
# Returns an Array or Hash depending on the API method called
|
52
|
+
#
|
53
|
+
# ==== Options
|
54
|
+
#
|
55
|
+
# * +data+ - The XML response from Fantastico
|
56
|
+
def parse(data)
|
57
|
+
res = find_key_in_hash(Crack::XML.parse(data), 'item')
|
58
|
+
if @action.to_sym == :getIpListDetailed
|
59
|
+
res.map! do |r|
|
60
|
+
Hash[r['item'].map { |i| [i['key'], i['value']] }]
|
61
|
+
end
|
62
|
+
elsif @action.to_sym == :getIpList
|
63
|
+
res
|
64
|
+
else
|
65
|
+
res = Hash[res.map { |r| [r['key'], r['value']] }] if res.is_a? Array
|
66
|
+
end
|
67
|
+
|
68
|
+
@success = ! res.has_key?("faultcode") if res.respond_to?(:has_key?)
|
69
|
+
res
|
70
|
+
end
|
71
|
+
|
72
|
+
# Returns true or false
|
73
|
+
def success?
|
74
|
+
@success
|
75
|
+
end
|
76
|
+
|
77
|
+
# Builds the SOAP Envelope to be sent to Fantastico for this request
|
78
|
+
def to_xml
|
79
|
+
xml = Builder::XmlMarkup.new :indent => 2
|
80
|
+
xml.instruct!
|
81
|
+
xml.tag! 'env:Envelope', 'xmlns:env' => 'http://schemas.xmlsoap.org/soap/envelope/' do
|
82
|
+
xml.tag! 'env:Body' do
|
83
|
+
xml.tag! @action do
|
84
|
+
xml.tag! 'accountHASH', FannyPack.account_hash
|
85
|
+
@params.each do |key, val|
|
86
|
+
xml.tag! key, val
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
xml.target!
|
92
|
+
end
|
93
|
+
|
94
|
+
private
|
95
|
+
|
96
|
+
# Finds +index+ in +hash+ by searching recursively
|
97
|
+
#
|
98
|
+
# ==== Options
|
99
|
+
#
|
100
|
+
# * +hash+ - The hash to search
|
101
|
+
# * +index+ - The hash key to look for
|
102
|
+
def find_key_in_hash(hash, index)
|
103
|
+
hash.each do |key, val|
|
104
|
+
if val.respond_to? :has_key?
|
105
|
+
if val.has_key? index
|
106
|
+
return val[index]
|
107
|
+
else
|
108
|
+
return find_key_in_hash val, index
|
109
|
+
end
|
110
|
+
else
|
111
|
+
val
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
data/lib/fanny_pack.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
module FannyPack
|
2
|
+
autoload :Version, 'fanny_pack/version'
|
3
|
+
autoload :Errors, 'fanny_pack/errors'
|
4
|
+
autoload :Request, 'fanny_pack/request'
|
5
|
+
autoload :IP, 'fanny_pack/ip'
|
6
|
+
|
7
|
+
class << self
|
8
|
+
# FannyPack.account_hash stores your Fantastico account hash. This is used
|
9
|
+
# to authenticate your account with the Fantastico API.
|
10
|
+
attr_accessor :account_hash
|
11
|
+
end
|
12
|
+
|
13
|
+
# Returns true if FannyPack.account_hash is not nil or blank
|
14
|
+
def self.account_hash?
|
15
|
+
! (account_hash.nil? || account_hash.to_s == "")
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FannyPack::IP do
|
4
|
+
describe "::IP_TYPES" do
|
5
|
+
it { FannyPack::IP::IP_TYPES.should be_a Hash }
|
6
|
+
|
7
|
+
it "has a value of 0 for :all" do
|
8
|
+
FannyPack::IP::IP_TYPES[:all].should == 0
|
9
|
+
end
|
10
|
+
|
11
|
+
it "has a value of 1 for :normal" do
|
12
|
+
FannyPack::IP::IP_TYPES[:normal].should == 1
|
13
|
+
end
|
14
|
+
|
15
|
+
it "has a value of 2 for :vps" do
|
16
|
+
FannyPack::IP::IP_TYPES[:vps].should == 2
|
17
|
+
end
|
18
|
+
|
19
|
+
it { FannyPack::IP::IP_TYPES.should be_frozen }
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "::add" do
|
23
|
+
it "raises ArgumentError without IP" do
|
24
|
+
expect {
|
25
|
+
FannyPack::IP.add
|
26
|
+
}.to raise_error(ArgumentError)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "returns a Hash" do
|
30
|
+
load_fixture :add
|
31
|
+
ip = FannyPack::IP.add '127.0.0.1'
|
32
|
+
ip.should be_a Hash
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "::edit" do
|
37
|
+
it "raises ArgumentError without IP" do
|
38
|
+
expect { FannyPack::IP.edit }.to raise_error(ArgumentError)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "edits the IP" do
|
42
|
+
load_fixture :edit
|
43
|
+
ip = FannyPack::IP.edit '127.0.0.1', '127.0.0.2'
|
44
|
+
ip.should be_a Hash
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "::list" do
|
49
|
+
it "raises ArgumentError without type" do
|
50
|
+
expect { FannyPack::IP.list }.to raise_error(ArgumentError)
|
51
|
+
end
|
52
|
+
|
53
|
+
it "raises error with invalid type" do
|
54
|
+
expect { FannyPack::IP.list :Hollywood }.to raise_error(ArgumentError)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "returns an array of IPs" do
|
58
|
+
load_fixture :list
|
59
|
+
ip = FannyPack::IP.list :all
|
60
|
+
ip.should be_a Array
|
61
|
+
ip.should have(2).items
|
62
|
+
ip[0].should == '127.0.0.1'
|
63
|
+
ip[1].should == '127.0.0.2'
|
64
|
+
end
|
65
|
+
|
66
|
+
it "returns an array of Hashes if details is true" do
|
67
|
+
load_fixture :list_details
|
68
|
+
ip = FannyPack::IP.list :all, true
|
69
|
+
ip.should be_a Array
|
70
|
+
ip.should have(2).items
|
71
|
+
ip.each do |hash|
|
72
|
+
hash.should be_a Hash
|
73
|
+
%w[ipAddress addedOn isVPS status].each do |key|
|
74
|
+
hash.should have_key key
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "::delete" do
|
81
|
+
it "raises ArgumentError without IP" do
|
82
|
+
expect { FannyPack::IP.delete }.to raise_error(ArgumentError)
|
83
|
+
end
|
84
|
+
|
85
|
+
it "deletes the IP" do
|
86
|
+
load_fixture :delete
|
87
|
+
ip = FannyPack::IP.delete '127.0.0.1'
|
88
|
+
ip.should be_a Hash
|
89
|
+
ip.should have_key 'deleted'
|
90
|
+
ip.should have_key 'ip'
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
%w[reactivate deactivate].each do |method|
|
95
|
+
describe "::#{method}" do
|
96
|
+
it "raises ArgumentError without IP" do
|
97
|
+
expect { FannyPack::IP.send method }.to raise_error(ArgumentError)
|
98
|
+
end
|
99
|
+
|
100
|
+
it "#{method}s the IP" do
|
101
|
+
load_fixture method
|
102
|
+
ip = FannyPack::IP.send method, '127.0.0.1'
|
103
|
+
ip.should be_a Hash
|
104
|
+
%w[ipAddress addedOn isVPS status].each do |key|
|
105
|
+
ip.should have_key key
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe "::details" do
|
112
|
+
it "raises ArgumentError without IP" do
|
113
|
+
expect { FannyPack::IP.details }.to raise_error(ArgumentError)
|
114
|
+
end
|
115
|
+
|
116
|
+
it "returns a hash of IP details" do
|
117
|
+
load_fixture :details
|
118
|
+
ip = FannyPack::IP.details '127.0.0.1'
|
119
|
+
ip.should be_a Hash
|
120
|
+
%w[ipAddress addedOn isVPS status].each do |key|
|
121
|
+
ip.should have_key key
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FannyPack::Request do
|
4
|
+
|
5
|
+
describe "::VALID_ACTIONS" do
|
6
|
+
it { FannyPack::Request::VALID_ACTIONS.should be_frozen }
|
7
|
+
end
|
8
|
+
|
9
|
+
before :each do
|
10
|
+
@req = FannyPack::Request.new
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "#initialize" do
|
14
|
+
%w[response params].each do |test|
|
15
|
+
it "sets @#{test} to a hash" do
|
16
|
+
@req.instance_variable_get("@#{test}").should be_a Hash
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
%w[response params].each do |test|
|
22
|
+
describe "##{test}" do
|
23
|
+
it "returns @#{test}" do
|
24
|
+
@req.instance_variable_get("@#{test}").should == @req.send(test)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#to_xml" do
|
30
|
+
it "builds a SOAP envelope" do
|
31
|
+
xml = @req.to_xml
|
32
|
+
xml.should include
|
33
|
+
%{<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">\n <env:Body>}
|
34
|
+
xml.should include
|
35
|
+
%{</env:Body>\n</env:Envelope>}
|
36
|
+
xml.should match %r{<accountHASH>.*</accountHASH>}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "#commit" do
|
41
|
+
it "raises exception unless action is valid" do
|
42
|
+
expect { @req.commit :HammerTime }.to raise_error
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "#parse" do
|
47
|
+
before :each do
|
48
|
+
@req.instance_variable_set("@action", :addIp)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "returns an Array of Hashes if @action == :getIpListDetailed" do
|
52
|
+
@req.instance_variable_set("@action", :getIpListDetailed)
|
53
|
+
res = @req.parse load_fixture :list_details
|
54
|
+
res.should be_a Array
|
55
|
+
res.should have(2).items
|
56
|
+
%w[ipAddress addedOn isVPS status].each do |key|
|
57
|
+
res.first.should have_key key
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
it "returns a flat Array if @action is :getIpList" do
|
62
|
+
@req.instance_variable_set("@action", :getIpList)
|
63
|
+
res = @req.parse load_fixture :list
|
64
|
+
res.should be_a Array
|
65
|
+
res.should have(2).items
|
66
|
+
res[0].should == '127.0.0.1'
|
67
|
+
res[1].should == '127.0.0.2'
|
68
|
+
end
|
69
|
+
|
70
|
+
it "returns a Hash if @action is not :getIpList or :getIpListDetailed" do
|
71
|
+
@req.instance_variable_set("@action", :addIp)
|
72
|
+
res = @req.parse load_fixture :add
|
73
|
+
res.should be_a Hash
|
74
|
+
end
|
75
|
+
|
76
|
+
it "sets @success" do
|
77
|
+
@req.instance_variable_set("@action", :addIp)
|
78
|
+
res = @req.parse load_fixture :add
|
79
|
+
@req.instance_variable_get("@success").should_not be_nil
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe "#success?" do
|
84
|
+
it "returns true or false based on @success" do
|
85
|
+
@req.instance_variable_set("@action", :addIp)
|
86
|
+
@req.parse load_fixture :add
|
87
|
+
@req.instance_variable_get("@success").should_not be_nil
|
88
|
+
@req.success?.should be_true
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FannyPack do
|
4
|
+
describe "::Version" do
|
5
|
+
it "has a valid version" do
|
6
|
+
FannyPack::Version.should match /\d+\.\d+\.\d+/
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "::account_hash" do
|
11
|
+
it "gets the account_hash" do
|
12
|
+
FannyPack.should respond_to :account_hash
|
13
|
+
end
|
14
|
+
|
15
|
+
it "sets the account_hash" do
|
16
|
+
FannyPack.should respond_to :account_hash=
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "::account_hash?" do
|
21
|
+
it "returns false if ::account_hash is nil or blank" do
|
22
|
+
[nil, ""].each do |hash|
|
23
|
+
FannyPack.account_hash = hash
|
24
|
+
FannyPack.account_hash?.should be_false
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it "returns true if ::account_hash is set" do
|
29
|
+
FannyPack.account_hash = "hash"
|
30
|
+
FannyPack.account_hash?.should be_true
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:xmethods-delayed-quotes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
|
3
|
+
<SOAP-ENV:Body><ns1:addIpResponse>
|
4
|
+
<Result xsi:type="ns2:Map">
|
5
|
+
<item><key xsi:type="xsd:string">ip</key><value xsi:type="xsd:string">127.0.0.1</value></item>
|
6
|
+
<item><key xsi:type="xsd:string">id</key><value xsi:type="xsd:string">123456</value></item>
|
7
|
+
</Result>
|
8
|
+
</ns1:addIpResponse>
|
9
|
+
</SOAP-ENV:Body>
|
10
|
+
</SOAP-ENV:Envelope>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:xmethods-delayed-quotes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
|
3
|
+
<SOAP-ENV:Body>
|
4
|
+
<ns1:deactivateIpResponse>
|
5
|
+
<Result xsi:type="ns2:Map">
|
6
|
+
<item><key xsi:type="xsd:string">ipAddress</key><value xsi:type="xsd:string">127.0.0.1</value></item>
|
7
|
+
<item><key xsi:type="xsd:string">addedOn</key><value xsi:type="xsd:string">2010-06-10 17:05:31</value></item>
|
8
|
+
<item><key xsi:type="xsd:string">isVPS</key><value xsi:type="xsd:string">No</value></item>
|
9
|
+
<item><key xsi:type="xsd:string">status</key><value xsi:type="xsd:string">Inactive</value></item>
|
10
|
+
</Result>
|
11
|
+
</ns1:deactivateIpResponse>
|
12
|
+
</SOAP-ENV:Body>
|
13
|
+
</SOAP-ENV:Envelope>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:xmethods-delayed-quotes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
|
3
|
+
<SOAP-ENV:Body>
|
4
|
+
<ns1:deleteIpResponse>
|
5
|
+
<Result xsi:type="ns2:Map">
|
6
|
+
<item><key xsi:type="xsd:string">ip</key><value xsi:type="xsd:string">127.0.0.1</value></item>
|
7
|
+
<item><key xsi:type="xsd:string">deleted</key><value xsi:type="xsd:string">Yes</value></item>
|
8
|
+
</Result>
|
9
|
+
</ns1:deleteIpResponse>
|
10
|
+
</SOAP-ENV:Body>
|
11
|
+
</SOAP-ENV:Envelope>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:xmethods-delayed-quotes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
|
3
|
+
<SOAP-ENV:Body>
|
4
|
+
<ns1:getIpDetailsResponse>
|
5
|
+
<Result xsi:type="ns2:Map">
|
6
|
+
<item><key xsi:type="xsd:string">ipAddress</key><value xsi:type="xsd:string">127.0.0.1</value></item>
|
7
|
+
<item><key xsi:type="xsd:string">addedOn</key><value xsi:type="xsd:string">2010-06-10 17:05:31</value></item>
|
8
|
+
<item><key xsi:type="xsd:string">isVPS</key><value xsi:type="xsd:string">No</value></item>
|
9
|
+
<item><key xsi:type="xsd:string">status</key><value xsi:type="xsd:string">Active</value></item>
|
10
|
+
</Result>
|
11
|
+
</ns1:getIpDetailsResponse>
|
12
|
+
</SOAP-ENV:Body>
|
13
|
+
</SOAP-ENV:Envelope>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:xmethods-delayed-quotes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
|
3
|
+
<SOAP-ENV:Body>
|
4
|
+
<ns1:editIpResponse>
|
5
|
+
<Result xsi:type="ns2:Map">
|
6
|
+
<item><key xsi:type="xsd:string">ip</key><value xsi:type="xsd:string">127.0.0.1</value></item>
|
7
|
+
<item><key xsi:type="xsd:string">new_ip</key><value xsi:type="xsd:string">127.0.0.2</value></item>
|
8
|
+
</Result>
|
9
|
+
</ns1:editIpResponse>
|
10
|
+
</SOAP-ENV:Body>
|
11
|
+
</SOAP-ENV:Envelope>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:xmethods-delayed-quotes" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
|
3
|
+
<SOAP-ENV:Body>
|
4
|
+
<ns1:getIpListResponse>
|
5
|
+
<Result SOAP-ENC:arrayType="xsd:string[1]" xsi:type="SOAP-ENC:Array">
|
6
|
+
<item xsi:type="xsd:string">127.0.0.1</item>
|
7
|
+
<item xsi:type="xsd:string">127.0.0.2</item>
|
8
|
+
</Result>
|
9
|
+
</ns1:getIpListResponse>
|
10
|
+
</SOAP-ENV:Body>
|
11
|
+
</SOAP-ENV:Envelope>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:xmethods-delayed-quotes" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
|
3
|
+
<SOAP-ENV:Body>
|
4
|
+
<ns1:getIpListDetailedResponse>
|
5
|
+
<Result SOAP-ENC:arrayType="ns2:Map[1]" xsi:type="SOAP-ENC:Array">
|
6
|
+
<item xsi:type="ns2:Map">
|
7
|
+
<item><key xsi:type="xsd:string">ipAddress</key><value xsi:type="xsd:string">127.0.0.1</value></item>
|
8
|
+
<item><key xsi:type="xsd:string">addedOn</key><value xsi:type="xsd:string">2011-05-19 14:23:57</value></item>
|
9
|
+
<item><key xsi:type="xsd:string">isVPS</key><value xsi:type="xsd:string">Yes</value></item>
|
10
|
+
<item><key xsi:type="xsd:string">status</key><value xsi:type="xsd:string">Active</value></item>
|
11
|
+
</item>
|
12
|
+
<item xsi:type="ns2:Map">
|
13
|
+
<item><key xsi:type="xsd:string">ipAddress</key><value xsi:type="xsd:string">127.0.0.2</value></item>
|
14
|
+
<item><key xsi:type="xsd:string">addedOn</key><value xsi:type="xsd:string">2011-05-19 14:23:57</value></item>
|
15
|
+
<item><key xsi:type="xsd:string">isVPS</key><value xsi:type="xsd:string">No</value></item>
|
16
|
+
<item><key xsi:type="xsd:string">status</key><value xsi:type="xsd:string">Active</value></item>
|
17
|
+
</item>
|
18
|
+
</Result>
|
19
|
+
</ns1:getIpListDetailedResponse>
|
20
|
+
</SOAP-ENV:Body></SOAP-ENV:Envelope>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:xmethods-delayed-quotes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
|
3
|
+
<SOAP-ENV:Body>
|
4
|
+
<ns1:reactivateIpResponse>
|
5
|
+
<Result xsi:type="ns2:Map">
|
6
|
+
<item><key xsi:type="xsd:string">ipAddress</key><value xsi:type="xsd:string">127.0.0.1</value></item>
|
7
|
+
<item><key xsi:type="xsd:string">addedOn</key><value xsi:type="xsd:string">2010-06-10 17:05:31</value></item>
|
8
|
+
<item><key xsi:type="xsd:string">isVPS</key><value xsi:type="xsd:string">No</value></item>
|
9
|
+
<item><key xsi:type="xsd:string">status</key><value xsi:type="xsd:string">Active</value></item>
|
10
|
+
</Result>
|
11
|
+
</ns1:reactivateIpResponse>
|
12
|
+
</SOAP-ENV:Body>
|
13
|
+
</SOAP-ENV:Envelope>
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'fakeweb'
|
3
|
+
require 'fanny_pack'
|
4
|
+
|
5
|
+
FakeWeb.allow_net_connect = false
|
6
|
+
|
7
|
+
def load_fixture(name, register = true)
|
8
|
+
body = File.read File.expand_path("../fixtures/#{name}.txt", __FILE__)
|
9
|
+
register_url(body) if register
|
10
|
+
body
|
11
|
+
end
|
12
|
+
|
13
|
+
def register_url(body)
|
14
|
+
FakeWeb.clean_registry
|
15
|
+
FakeWeb.allow_net_connect = false
|
16
|
+
FakeWeb.register_uri :any, FannyPack::Request::API_URL, :body => body
|
17
|
+
end
|
metadata
ADDED
@@ -0,0 +1,150 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fanny_pack
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Joshua Priddle
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-05-20 00:00:00 -04:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: builder
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0"
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: crack
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: "0"
|
36
|
+
type: :runtime
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: rspec
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 2.5.0
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id003
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: fakeweb
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ~>
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: 1.3.0
|
58
|
+
type: :development
|
59
|
+
version_requirements: *id004
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: awesome_print
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: "0"
|
69
|
+
type: :development
|
70
|
+
version_requirements: *id005
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: rcov
|
73
|
+
prerelease: false
|
74
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ~>
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: "0.9"
|
80
|
+
type: :development
|
81
|
+
version_requirements: *id006
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: metric_fu
|
84
|
+
prerelease: false
|
85
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ~>
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: "2.1"
|
91
|
+
type: :development
|
92
|
+
version_requirements: *id007
|
93
|
+
description: " Ruby bindings for the Fantastico API\n"
|
94
|
+
email: jpriddle@site5.com
|
95
|
+
executables: []
|
96
|
+
|
97
|
+
extensions: []
|
98
|
+
|
99
|
+
extra_rdoc_files:
|
100
|
+
- README.markdown
|
101
|
+
files:
|
102
|
+
- Rakefile
|
103
|
+
- README.markdown
|
104
|
+
- lib/fanny_pack/errors.rb
|
105
|
+
- lib/fanny_pack/ip.rb
|
106
|
+
- lib/fanny_pack/request.rb
|
107
|
+
- lib/fanny_pack/version.rb
|
108
|
+
- lib/fanny_pack.rb
|
109
|
+
- spec/fanny_pack/ip_spec.rb
|
110
|
+
- spec/fanny_pack/request_spec.rb
|
111
|
+
- spec/fanny_pack_spec.rb
|
112
|
+
- spec/fixtures/add.txt
|
113
|
+
- spec/fixtures/deactivate.txt
|
114
|
+
- spec/fixtures/delete.txt
|
115
|
+
- spec/fixtures/details.txt
|
116
|
+
- spec/fixtures/edit.txt
|
117
|
+
- spec/fixtures/list.txt
|
118
|
+
- spec/fixtures/list_details.txt
|
119
|
+
- spec/fixtures/reactivate.txt
|
120
|
+
- spec/spec_helper.rb
|
121
|
+
has_rdoc: true
|
122
|
+
homepage: https://github.com/site5/fanny_pack
|
123
|
+
licenses: []
|
124
|
+
|
125
|
+
post_install_message:
|
126
|
+
rdoc_options:
|
127
|
+
- --charset=UTF-8
|
128
|
+
require_paths:
|
129
|
+
- lib
|
130
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
131
|
+
none: false
|
132
|
+
requirements:
|
133
|
+
- - ">="
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: "0"
|
136
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: "0"
|
142
|
+
requirements: []
|
143
|
+
|
144
|
+
rubyforge_project:
|
145
|
+
rubygems_version: 1.6.2
|
146
|
+
signing_key:
|
147
|
+
specification_version: 3
|
148
|
+
summary: Ruby bindings for the Fantastico API
|
149
|
+
test_files: []
|
150
|
+
|