soleranetworks 0.1.4

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/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
22
+ *.pcap
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 fracBlend
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.
data/README.md ADDED
@@ -0,0 +1,99 @@
1
+ # soleranetworks
2
+
3
+ Solera Networks API Gem
4
+
5
+ ## Description
6
+
7
+ Handy little library and binary to automate building Solera Networks REST API calls
8
+
9
+ ### lib/soleranetworks.rb
10
+
11
+ Library for use in your own ruby scripts to build API Call URIs
12
+
13
+ ### solera_get
14
+
15
+ Command line tool that automatically builds an API Call and grabs the resulting PCAP.
16
+
17
+ ## Where to get a Demo VM Appliance
18
+
19
+ Don't have a Solera DS Network Forensics Appliance?
20
+
21
+ Download a [VMWare Based Demo Appliance](http://www.soleranetworks.com/products/network-forensics-appliances/virtual-appliance)
22
+
23
+ ## Install
24
+ $ sudo gem install soleranetworks
25
+ ## Usage (solera_get)
26
+ ### Command Line Options
27
+ $ solera_get -h
28
+ Usage: solera_get [options] host ...
29
+ -v, --verbose Output more information
30
+ -u, --username USERNAME API Username
31
+ -p, --password PASSWORD API Password
32
+ -o, --output_filename FILENAME Filename for Returned PCAP
33
+ -b, --build_uri Build and Dump the URI ONLY
34
+ --host HOSTNAME Hostname or IP of Solera Appliance
35
+ --ethernet_address MAC_ADDR ethernet_address
36
+ --ethernet_source MAC_ADDR ethernet_source
37
+ --ethernet_destination MAC_ADDR
38
+ ethernet_destination
39
+ --ethernet_protocol PROTOCOL ethernet_protocol
40
+ --interface INTERFACE interface
41
+ --ip_protocol IP_PROTOCOL ip_protocol
42
+ --ipv4_address IPv4_ADDRESS ipv4_address
43
+ --ipv4_source IPv4_ADDRESS ipv4_source
44
+ --ipv4_destination IPv4_ADDRESS
45
+ ipv4_destination
46
+ --ipv6_address IPv6_ADDRESS ipv6_address
47
+ --ipv6_source IPv6_ADDRESS ipv6_source
48
+ --ipv6_destination IPv6_ADDRESS
49
+ ipv6_destination
50
+ --packet_length PACKET_LENGTH
51
+ packet_length
52
+ --tcp_port TCP_PORT tcp_port
53
+ --tcp_source_port TCP_PORT tcp_source_port
54
+ --tcp_destination_port TCP_PORT
55
+ tcp_destination_port
56
+ --udp_port UDP_PORT udp_port
57
+ --udp_source_port UDP_PORT udp_source_port
58
+ --udp_destination_port UDP_PORT
59
+ udp_destination_port
60
+ --timespan TIMESPAN timespan
61
+ --vlan_id VLAN_ID vlan_id
62
+ -h, --help Display this screen
63
+
64
+ ### Pull all traffic from 1.2.3.4
65
+ $ solera_get -u username -p password --ipv4_address 1.2.3.4
66
+ ### Pull all traffic from 1.2.3.4 occurring on 03/02/2010
67
+ $ solera_get -u username -p password --ipv4_address 1.2.3.4 --timespan 03.02.2010.00.00.00.03.03.2010.00.00.00
68
+ ### Pull all DNS traffic larger than 52 bytes
69
+ $ solera_get -u username -p password --udp_port 53 --packet_length 53_to_1549
70
+ ## Usage lib/soleranetworks.rb
71
+ require 'rubygems'
72
+ require 'soleranetworks'
73
+
74
+ options = {
75
+ :host => '192.168.20.20',
76
+ :user => 'admin',
77
+ :pass => 'somePassword',
78
+ :ipv4_address => '1.2.3.4',
79
+ :timespan => (Time.now.getlocal-(60*5)).strftime('%m.%d.%Y.%H.%M.%S')+"."+Time.now.getlocal.strftime('%m.%d.%Y.%H.%M.%S')
80
+ }
81
+ request = SoleraNetworks.new(options)
82
+
83
+ # Generate API Call URI
84
+ puts request.uri
85
+ # https://192.168.20.20/ws/pcap?method=deepsee&user=admin&password=somePassword&path=%2Ftimespan%2F03.25.2010.14.14.37.03.25.2010.14.19.37%2Fipv4_address%2F1.2.3.4%2Fdata.pcap
86
+
87
+ ## Note on Patches/Pull Requests
88
+
89
+ * Fork the project.
90
+ * Make your feature addition or bug fix.
91
+ * Add tests for it. This is important so I don't break it in a
92
+ future version unintentionally.
93
+ * Commit, do not mess with rakefile, version, or history.
94
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
95
+ * Send me a pull request. Bonus points for topic branches.
96
+
97
+ ## Copyright
98
+
99
+ Copyright (c) 2010 fracBlend. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,54 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "soleranetworks"
8
+ gem.executables = "solera_get"
9
+ gem.summary = %Q{Solera Networks API gem}
10
+ gem.description = %Q{Solera Neworks API gem}
11
+ gem.email = "gbelknap@soleranetworks.com"
12
+ gem.homepage = "http://github.com/fracBlend/soleranetworks"
13
+ gem.authors = ["fracBlend"]
14
+ gem.requirements << "Solera Networks DS (Appliance or VM), SoleraOS v4.x or greater"
15
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
+ end
17
+ Jeweler::GemcutterTasks.new
18
+ rescue LoadError
19
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
20
+ end
21
+
22
+ require 'rake/testtask'
23
+ Rake::TestTask.new(:test) do |test|
24
+ test.libs << 'lib' << 'test'
25
+ test.pattern = 'test/**/test_*.rb'
26
+ test.verbose = true
27
+ end
28
+
29
+ begin
30
+ require 'rcov/rcovtask'
31
+ Rcov::RcovTask.new do |test|
32
+ test.libs << 'test'
33
+ test.pattern = 'test/**/test_*.rb'
34
+ test.verbose = true
35
+ end
36
+ rescue LoadError
37
+ task :rcov do
38
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
39
+ end
40
+ end
41
+
42
+ task :test => :check_dependencies
43
+
44
+ task :default => :test
45
+
46
+ require 'rake/rdoctask'
47
+ Rake::RDocTask.new do |rdoc|
48
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
49
+
50
+ rdoc.rdoc_dir = 'rdoc'
51
+ rdoc.title = "soleranetworks #{version}"
52
+ rdoc.rdoc_files.include('README*')
53
+ rdoc.rdoc_files.include('lib/**/*.rb')
54
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.4
data/bin/solera_get ADDED
@@ -0,0 +1,107 @@
1
+ #!/usr/bin/env ruby -w
2
+
3
+ ## Solera Networks API Example Script
4
+ ## gbelknap@soleranetworks.com
5
+
6
+ # Copyright (c) 2010 Solera Networks, Inc
7
+
8
+ # This program is free software; you can redistribute it and/or
9
+ # modify it under the terms of the GNU General Public License
10
+ # as published by the Free Software Foundation; either version 2
11
+ # of the License, or (at your option) any later version.
12
+
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+
18
+ require 'open-uri'
19
+ require 'openssl'
20
+ require 'optparse'
21
+ require 'rubygems'
22
+ require 'soleranetworks'
23
+
24
+ # Ignore self-signed SSL Certificates
25
+ module OpenSSL
26
+ module SSL
27
+ remove_const :VERIFY_PEER
28
+ end
29
+ end
30
+ OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
31
+
32
+ # Default Options
33
+ options = {
34
+ :verbose => false,
35
+ :host => "192.168.20.20",
36
+ :user => "changeme",
37
+ :pass => "changeme",
38
+ :output_filename => "data.pcap",
39
+ :ipv4_address => "127.0.0.1",
40
+ :timespan => (Time.now.getlocal-(60*5)).strftime('%m.%d.%Y.%H.%M.%S')+"."+Time.now.getlocal.strftime('%m.%d.%Y.%H.%M.%S'),
41
+ }
42
+
43
+ optparse = OptionParser.new do|opts|
44
+ opts.banner = "Usage: #{File.basename($0)} [options] host ..."
45
+ # Basic Params
46
+ opts.on( '-v', '--verbose', 'Output more information' ) {|options[:verbose]|}
47
+ opts.on( '-u', '--username USERNAME', String, 'API Username' ) {|options[:user]|}
48
+ opts.on( '-p', '--password PASSWORD', String, 'API Password' ) {|options[:pass]|}
49
+ opts.on( '-o', '--output_filename FILENAME', String, 'Filename for Returned PCAP' ) {|options[:output_filename]|}
50
+ opts.on( '-b', '--build_uri', 'Build and Dump the URI ONLY' ) {|options[:nop]|}
51
+ opts.on( '--host HOSTNAME', String, 'Hostname or IP of Solera Appliance' ) {|options[:host]|}
52
+ # Ethetnet Params
53
+ opts.on( '--ethernet_address MAC_ADDR', String, 'ethernet_address' ) {|options[:ethernet_address]|}
54
+ opts.on( '--ethernet_source MAC_ADDR', String, 'ethernet_source' ) {|options[:ethernet_source]|}
55
+ opts.on( '--ethernet_destination MAC_ADDR', String, 'ethernet_destination' ) {|options[:ethernet_destination]|}
56
+ opts.on( '--ethernet_protocol PROTOCOL', String, 'ethernet_protocol' ) {|options[:ethernet_protocol]|}
57
+ # Interface Params
58
+ opts.on( '--interface INTERFACE', String, 'interface' ) {|options[:interface]|}
59
+ # IP Params
60
+ opts.on( '--ip_protocol IP_PROTOCOL', String, 'ip_protocol' ) {|options[:ip_protocol]|}
61
+ # IPv4 Params
62
+ opts.on( '--ipv4_address IPv4_ADDRESS', String, 'ipv4_address' ) {|options[:ipv4_address]|}
63
+ opts.on( '--ipv4_source IPv4_ADDRESS', String, 'ipv4_source' ) {|options[:ipv4_source]|}
64
+ opts.on( '--ipv4_destination IPv4_ADDRESS', String, 'ipv4_destination' ) {|options[:ipv4_destination]|}
65
+ # IPv6 Params
66
+ opts.on( '--ipv6_address IPv6_ADDRESS', String, 'ipv6_address' ) {|options[:ipv6_address]|}
67
+ opts.on( '--ipv6_source IPv6_ADDRESS', String, 'ipv6_source' ) {|options[:ipv6_source]|}
68
+ opts.on( '--ipv6_destination IPv6_ADDRESS', String, 'ipv6_destination' ) {|options[:ipv6_destination]|}
69
+ # Packet Params
70
+ opts.on( '--packet_length PACKET_LENGTH', String, 'packet_length' ) {|options[:packet_length]|}
71
+ # TCP Params
72
+ opts.on( '--tcp_port TCP_PORT', String, 'tcp_port' ) {|options[:tcp_port]|}
73
+ opts.on( '--tcp_source_port TCP_PORT', String, 'tcp_source_port' ) {|options[:tcp_source_port]|}
74
+ opts.on( '--tcp_destination_port TCP_PORT', String, 'tcp_destination_port' ) {|options[:tcp_destination_port]|}
75
+ # UDP Params
76
+ opts.on( '--udp_port UDP_PORT', String, 'udp_port' ) {|options[:udp_port]|}
77
+ opts.on( '--udp_source_port UDP_PORT', String, 'udp_source_port' ) {|options[:udp_source_port]|}
78
+ opts.on( '--udp_destination_port UDP_PORT', String, 'udp_destination_port' ) {|options[:udp_destination_port]|}
79
+ # Time Params
80
+ opts.on( '--timespan TIMESPAN', String, 'timespan' ) {|options[:timespan]|}
81
+ # VLAN Params
82
+ opts.on( '--vlan_id VLAN_ID', String, 'vlan_id' ) {|options[:vlan_id]|}
83
+ # Help Param
84
+ opts.on( '-h', '--help', 'Display this screen' ) do
85
+ puts opts
86
+ exit
87
+ end
88
+ end
89
+
90
+ optparse.parse!
91
+
92
+ ARGV[0] ? options[:host] = ARGV[0] : options[:host]
93
+ # ARGV[0].nil? ? options[:host] = ARGV[0]
94
+
95
+ puts "Being Verbose" if options[:verbose]
96
+ puts "Username : #{options[:user]}" if options[:user] && options[:verbose]
97
+ puts "Password : #{options[:pass]}" if options[:pass] && options[:verbose]
98
+ puts "DS Appliance : #{options[:host]}" if options[:host] && options[:verbose]
99
+ puts "Output Filename : #{options[:output_filename]}" if options[:output_filename] && options[:verbose]
100
+
101
+ begin
102
+ s = SoleraNetworks.new(options)
103
+ puts "API CALL URI : " + s.uri if options[:verbose] || options[:nop]
104
+ s.get_pcap(s.uri) if !options[:nop]
105
+ rescue => error
106
+ puts "Awww SNAP! : #{error}"
107
+ end
@@ -0,0 +1,140 @@
1
+ ## Solera Networks API Gem
2
+ ## gbelknap@soleranetworks.com
3
+
4
+ # Copyright (c) 2010 Solera Networks, Inc
5
+
6
+ # This program is free software; you can redistribute it and/or
7
+ # modify it under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; either version 2
9
+ # of the License, or (at your option) any later version.
10
+
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+
16
+ class SoleraNetworks
17
+ attr_accessor :options
18
+
19
+ # Constants for Humanizing File Sizes
20
+ IS_AWESOME = 1
21
+ GIGA_SIZE = 1073741824.0
22
+ MEGA_SIZE = 1048576.0
23
+ KILO_SIZE = 1024.0
24
+
25
+ def initialize(options={})
26
+ @options = {
27
+ #
28
+ # GEM Specific Method Paramaters
29
+ #
30
+ # DS Appliance Hostname / IP
31
+ :host => '', # ie: 192.168.20.20
32
+ # Username for Accessing API
33
+ :user => '',
34
+ # Password
35
+ :pass => '',
36
+ # Filename for returned PCAP
37
+ :output_filename => "data.pcap",
38
+ # Type of Request URI ['pcap', 'sonar', 'applications', 'conversations', 'packetsizes', 'ipdiscovery', 'bandwidth']
39
+ :type => 'pcap',
40
+ #
41
+ # DeepSee API Method Parameters
42
+ #
43
+ :ethernet_address => '', # ff:ff:ff:ff:ff:ff
44
+ :ethernet_source => '', # ff:ff:ff:ff:ff:ff
45
+ :ethernet_destination => '', # ff:ff:ff:ff:ff:ff
46
+ :ethernet_protocol => '', # ipv4
47
+ :interface => '', # eth2
48
+ :ip_protocol => '', # tcp
49
+ :ipv4_address => '', # 127.0.0.1
50
+ :ipv4_destination => '', # 127.0.0.1
51
+ :ipv4_source => '', # 127.0.0.1
52
+ :ipv6_address => '', # ::ffff:127.0.0.1
53
+ :ipv6_destination => '', # ::ffff:127.0.0.1
54
+ :ipv6_source => '', # ::ffff:127.0.0.1
55
+ :packet_length => '', # 0_to_1549
56
+ :tcp_destination_port => '', # 80
57
+ :tcp_port => '', # 80
58
+ :tcp_source_port => '', # 80
59
+ # A Timespan is specified as start_time.end_time in the format of strftime('%m.%d.%Y.%I.%M.%S')
60
+ # Default here is last 5 mins
61
+ :timespan => (Time.now.getlocal-(60*5)).strftime('%m.%d.%Y.%H.%M.%S')+"."+Time.now.getlocal.strftime('%m.%d.%Y.%H.%M.%S'),
62
+ # :start_time => (Time.now.getlocal-(60*5)).strftime('%m.%d.%Y.%H.%M.%S'),
63
+ # :end_time => Time.now.getlocal.strftime('%m.%d.%Y.%H.%M.%S'),
64
+ :udp_destination_port => '', # 53
65
+ :udp_port => '', # 53
66
+ :udp_source_port => '', # 53
67
+ :vlan_id => '', # 1
68
+ }.merge(options)
69
+ end
70
+
71
+ def uri()
72
+ # Build Call : Long and Drawn out for ease of reading/editing
73
+ api_call = "https://#{@options[:host]}/ws/pcap?method=deepsee&"
74
+ api_call += "user=#{@options[:user]}&"
75
+ api_call += "password=#{@options[:pass]}&"
76
+ api_call += "path=%2F"
77
+ # Time Params
78
+ api_call += "timespan%2F#{@options[:timespan]}%2F" unless @options[:timespan].empty?
79
+ # Ethetnet Params
80
+ api_call += "ethernet_address%2F#{@options[:ethernet_address]}%2F" unless @options[:ethernet_address].empty?
81
+ api_call += "ethernet_source%2F#{@options[:ethernet_source]}%2F" unless @options[:ethernet_source].empty?
82
+ api_call += "ethernet_destination%2F#{@options[:ethernet_destination]}%2F" unless @options[:ethernet_destination].empty?
83
+ api_call += "ethernet_protocol%2F#{@options[:ethernet_protocol]}%2F" unless @options[:ethernet_protocol].empty?
84
+ # Interface Params
85
+ api_call += "interface%2F#{@options[:interface]}%2F" unless @options[:interface].empty?
86
+ # IP Params
87
+ api_call += "ip_protocol%2F#{@options[:ip_protocol]}%2F" unless @options[:ip_protocol].empty?
88
+ # IPv4 Params
89
+ api_call += "ipv4_address%2F#{@options[:ipv4_address]}%2F" unless @options[:ipv4_address].empty?
90
+ api_call += "ipv4_source%2F#{@options[:ipv4_source]}%2F" unless @options[:ipv4_source].empty?
91
+ api_call += "ipv4_destination%2F#{@options[:ipv4_destination]}%2F" unless @options[:ipv4_destination].empty?
92
+ # IPv6 Params
93
+ api_call += "ipv6_address%2F#{@options[:ipv6_address]}%2F" unless @options[:ipv6_address].empty?
94
+ api_call += "ipv6_source%2F#{@options[:ipv6_source]}%2F" unless @options[:ipv6_source].empty?
95
+ api_call += "ipv6_destination%2F#{@options[:ipv6_destination]}%2F" unless @options[:ipv6_destination].empty?
96
+ # Packet Params
97
+ api_call += "packet_length%2F#{@options[:packet_length]}%2F" unless @options[:packet_length].empty?
98
+ # TCP Params
99
+ api_call += "tcp_port%2F#{@options[:tcp_port]}%2F" unless @options[:tcp_port].empty?
100
+ api_call += "tcp_source_port%2F#{@options[:tcp_source_port]}%2F" unless @options[:tcp_source_port].empty?
101
+ api_call += "tcp_destination_port%2F#{@options[:tcp_destination_port]}%2F" unless @options[:tcp_destination_port].empty?
102
+ # UDP Params
103
+ api_call += "udp_port%2F#{@options[:udp_port]}%2F" unless @options[:udp_port].empty?
104
+ api_call += "udp_source_port%2F#{@options[:udp_source_port]}%2F" unless @options[:udp_source_port].empty?
105
+ api_call += "udp_destination_port%2F#{@options[:udp_destination_port]}%2F" unless @options[:udp_destination_port].empty?
106
+ # VLAN Params
107
+ api_call += "vlan_id%2F#{@options[:vlan_id]}%2F" unless @options[:vlan_id].empty?
108
+ # Type of URI [pcap, sonar, applications, conversations, packetsizes, ipdiscovery, bandwidth]
109
+ api_call += case @options[:type]
110
+ when "pcap" then "data.pcap"
111
+ when "sonar" then ";reportIndex=0"
112
+ when "applications" then ";reportIndex=1"
113
+ when "conversations" then ";reportIndex=2"
114
+ when "packetsizes" then ";reportIndex=3"
115
+ when "ipdiscovery"then ";reportIndex=4"
116
+ when "bandwidth" then ";reportIndex=5"
117
+ else "data.pcap"
118
+ end
119
+
120
+ return api_call
121
+ end
122
+
123
+ def make_readable(size, precision)
124
+ case
125
+ when size == 1 : "1 Byte"
126
+ when size < KILO_SIZE : "%d Bytes" % size
127
+ when size < MEGA_SIZE : "%.#{precision}f KB" % (size / KILO_SIZE)
128
+ when size < GIGA_SIZE : "%.#{precision}f MB" % (size / MEGA_SIZE)
129
+ else "%.#{precision}f GB" % (size / GIGA_SIZE)
130
+ end
131
+ end
132
+
133
+ def get_pcap(call)
134
+ open(call, 'User-Agent' => 'Wget') {|call| @pcap = call.read}
135
+ File.open(@options[:output_filename], 'w') {|file|
136
+ file.write(@pcap)
137
+ puts "#{@options[:output_filename]} : " + make_readable(file.stat.size, 2)
138
+ }
139
+ end
140
+ end
@@ -0,0 +1,55 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{soleranetworks}
8
+ s.version = "0.1.4"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["fracBlend"]
12
+ s.date = %q{2010-03-25}
13
+ s.default_executable = %q{solera_get}
14
+ s.description = %q{Solera Neworks API gem}
15
+ s.email = %q{gbelknap@soleranetworks.com}
16
+ s.executables = ["solera_get"]
17
+ s.extra_rdoc_files = [
18
+ "LICENSE",
19
+ "README.md"
20
+ ]
21
+ s.files = [
22
+ ".document",
23
+ ".gitignore",
24
+ "LICENSE",
25
+ "README.md",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "bin/solera_get",
29
+ "lib/soleranetworks.rb",
30
+ "soleranetworks.gemspec",
31
+ "test/helper.rb",
32
+ "test/test_soleranetworks.rb"
33
+ ]
34
+ s.homepage = %q{http://github.com/fracBlend/soleranetworks}
35
+ s.rdoc_options = ["--charset=UTF-8"]
36
+ s.require_paths = ["lib"]
37
+ s.requirements = ["Solera Networks DS (Appliance or VM), SoleraOS v4.x or greater"]
38
+ s.rubygems_version = %q{1.3.6}
39
+ s.summary = %q{Solera Networks API gem}
40
+ s.test_files = [
41
+ "test/helper.rb",
42
+ "test/test_soleranetworks.rb"
43
+ ]
44
+
45
+ if s.respond_to? :specification_version then
46
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
47
+ s.specification_version = 3
48
+
49
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
50
+ else
51
+ end
52
+ else
53
+ end
54
+ end
55
+
data/test/helper.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'soleranetworks'
8
+
9
+ class Test::Unit::TestCase
10
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestSoleranetworks < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: soleranetworks
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 4
9
+ version: 0.1.4
10
+ platform: ruby
11
+ authors:
12
+ - fracBlend
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-03-25 00:00:00 -06:00
18
+ default_executable: solera_get
19
+ dependencies: []
20
+
21
+ description: Solera Neworks API gem
22
+ email: gbelknap@soleranetworks.com
23
+ executables:
24
+ - solera_get
25
+ extensions: []
26
+
27
+ extra_rdoc_files:
28
+ - LICENSE
29
+ - README.md
30
+ files:
31
+ - .document
32
+ - .gitignore
33
+ - LICENSE
34
+ - README.md
35
+ - Rakefile
36
+ - VERSION
37
+ - bin/solera_get
38
+ - lib/soleranetworks.rb
39
+ - soleranetworks.gemspec
40
+ - test/helper.rb
41
+ - test/test_soleranetworks.rb
42
+ has_rdoc: true
43
+ homepage: http://github.com/fracBlend/soleranetworks
44
+ licenses: []
45
+
46
+ post_install_message:
47
+ rdoc_options:
48
+ - --charset=UTF-8
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ version: "0"
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ segments:
63
+ - 0
64
+ version: "0"
65
+ requirements:
66
+ - Solera Networks DS (Appliance or VM), SoleraOS v4.x or greater
67
+ rubyforge_project:
68
+ rubygems_version: 1.3.6
69
+ signing_key:
70
+ specification_version: 3
71
+ summary: Solera Networks API gem
72
+ test_files:
73
+ - test/helper.rb
74
+ - test/test_soleranetworks.rb