ropian 0.1.1 → 0.1.2.pre
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/.gitignore +8 -0
- data/.yardopts +4 -0
- data/Gemfile +4 -0
- data/README.rdoc +9 -2
- data/Rakefile +6 -54
- data/lib/ropian/control/apc.rb +13 -6
- data/lib/ropian/control/generic.rb +56 -2
- data/lib/ropian/control/raritan.rb +13 -6
- data/lib/ropian/meter/apc.rb +12 -14
- data/lib/ropian/meter/generic.rb +78 -1
- data/lib/ropian/meter/raritan.rb +16 -19
- data/lib/ropian.rb +32 -19
- data/ropian.gemspec +14 -48
- metadata +59 -57
- data/.document +0 -5
- data/VERSION.yml +0 -4
data/.gitignore
ADDED
data/.yardopts
ADDED
data/Gemfile
ADDED
data/README.rdoc
CHANGED
@@ -1,6 +1,13 @@
|
|
1
|
-
=
|
1
|
+
= Ropian
|
2
2
|
|
3
|
-
|
3
|
+
Ropian is a library of Networked Power Distribution Unit management utilities. The library currently provides
|
4
|
+
support for collecting power usage stats and setting the power state of power sockets.
|
5
|
+
|
6
|
+
== Supported Hardware
|
7
|
+
This library currently supports the following vendors
|
8
|
+
|
9
|
+
* APC
|
10
|
+
* Raritan
|
4
11
|
|
5
12
|
== Copyright
|
6
13
|
|
data/Rakefile
CHANGED
@@ -1,60 +1,12 @@
|
|
1
|
-
require '
|
2
|
-
require 'rake'
|
3
|
-
require 'yaml'
|
1
|
+
require 'bundler/gem_helper'
|
4
2
|
|
5
|
-
|
6
|
-
require 'jeweler'
|
7
|
-
Jeweler::Tasks.new do |gem|
|
8
|
-
gem.name = "ropian"
|
9
|
-
gem.summary = %Q{Suite of tools for working with network power units}
|
10
|
-
gem.email = "geoff@geoffgarside.co.uk"
|
11
|
-
gem.homepage = "http://github.com/geoffgarside/ropian"
|
12
|
-
gem.authors = ["Geoff Garside"]
|
13
|
-
gem.add_dependency('snmp', '>= 1.0.2')
|
14
|
-
|
15
|
-
gem.files.exclude 'doc/*.mib'
|
16
|
-
|
17
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
18
|
-
end
|
19
|
-
rescue LoadError
|
20
|
-
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
21
|
-
end
|
22
|
-
|
23
|
-
require 'rake/testtask'
|
24
|
-
Rake::TestTask.new(:test) do |test|
|
25
|
-
test.libs << 'lib' << 'test'
|
26
|
-
test.pattern = 'test/**/*_test.rb'
|
27
|
-
test.verbose = true
|
28
|
-
end
|
3
|
+
Bundler::GemHelper.install_tasks
|
29
4
|
|
30
5
|
begin
|
31
|
-
require '
|
32
|
-
|
33
|
-
test.libs << 'test'
|
34
|
-
test.pattern = 'test/**/*_test.rb'
|
35
|
-
test.verbose = true
|
36
|
-
end
|
6
|
+
require 'yard'
|
7
|
+
YARD::Rake::YardocTask.new
|
37
8
|
rescue LoadError
|
38
|
-
task :
|
39
|
-
abort "
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
|
44
|
-
task :default => :test
|
45
|
-
|
46
|
-
require 'rake/rdoctask'
|
47
|
-
Rake::RDocTask.new do |rdoc|
|
48
|
-
if File.exist?('VERSION.yml')
|
49
|
-
config = YAML.load(File.read('VERSION.yml'))
|
50
|
-
version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
|
51
|
-
else
|
52
|
-
version = ""
|
9
|
+
task :yardoc do
|
10
|
+
abort "YARD is not available. In order to run yardoc you must: sudo gem install yard"
|
53
11
|
end
|
54
|
-
|
55
|
-
rdoc.rdoc_dir = 'rdoc'
|
56
|
-
rdoc.title = "ropian #{version}"
|
57
|
-
rdoc.rdoc_files.include('README*')
|
58
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
59
12
|
end
|
60
|
-
|
data/lib/ropian/control/apc.rb
CHANGED
@@ -1,12 +1,19 @@
|
|
1
1
|
module Ropian
|
2
2
|
module Control
|
3
|
+
# This class provides support for APC brand power devices.
|
3
4
|
class APC < Generic
|
4
|
-
|
5
|
-
@
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
protected
|
6
|
+
# @return [SNMP::ObjectId] the SNMP base OID for power control
|
7
|
+
def base_oid
|
8
|
+
@base_oid ||= SNMP::ObjectId.new('1.3.6.1.4.1.318.1.1.12.3.3.1.1.4')
|
9
|
+
end
|
10
|
+
|
11
|
+
# APC power devices map the on, off and reboot states to 1, 2, and 3.
|
12
|
+
#
|
13
|
+
# @return [Array] array to map the states to the SNMP integer values.
|
14
|
+
def state_order
|
15
|
+
@state_order ||= [nil, :on, :off, :reboot]
|
16
|
+
end
|
10
17
|
end
|
11
18
|
end
|
12
19
|
end
|
@@ -1,32 +1,86 @@
|
|
1
1
|
module Ropian
|
2
2
|
module Control
|
3
|
+
# Generic base class for vendor specific subclasses.
|
4
|
+
#
|
5
|
+
# Provides the common API which subclasses will adhere to.
|
3
6
|
class Generic
|
7
|
+
|
8
|
+
# Symbols for the types of supported power states which can
|
9
|
+
# be set on power device sockets.
|
4
10
|
States = [:on, :off, :reboot]
|
11
|
+
|
12
|
+
# Provides inspection details for the current receiver.
|
13
|
+
#
|
14
|
+
# @return [String] inspection string
|
15
|
+
# @private
|
5
16
|
def inspect
|
6
17
|
"#<#{self.class} #{@manager.host}@#{@manager.community}>"
|
7
18
|
end
|
19
|
+
|
20
|
+
# Creates and returns a new instance of a Ropian::Control::Generic class.
|
21
|
+
#
|
22
|
+
# @param [String] ip_addr The IP address of the power device.
|
23
|
+
# @param [String] community The SNMP write community string to
|
24
|
+
# be used when communicating with the device.
|
25
|
+
# @param [Symbol] version The SNMP version symbol specifying the
|
26
|
+
# version of SNMP to use when communicating with the device.
|
8
27
|
def initialize(ip_addr, community, version = :SNMPv2c)
|
9
28
|
@manager = SNMP::Manager.new(:Host => ip_addr,
|
10
29
|
:Community => community, :Version => version)
|
11
30
|
end
|
31
|
+
|
32
|
+
# Sets the power state of the specified port(s) to ON
|
33
|
+
#
|
34
|
+
# @param [#to_i, Array] port_index Port index or array of indexes to turn ON.
|
35
|
+
# @return [Boolean] success or failure of setting the ports to on.
|
12
36
|
def turn_on(port_index)
|
13
37
|
set_state(:on, port_index)
|
14
38
|
end
|
39
|
+
|
40
|
+
# Sets the power state of the specified port(s) to OFF
|
41
|
+
#
|
42
|
+
# @param [#to_i, Array] port_index Port index or array of indexes to turn OFF
|
43
|
+
# @return [Boolean] success or failure of setting the ports to off.
|
15
44
|
def turn_off(port_index)
|
16
45
|
set_state(:off, port_index)
|
17
46
|
end
|
47
|
+
|
48
|
+
# Power cycles the specified port(s) turning them OFF then ON.
|
49
|
+
#
|
50
|
+
# The delay between the OFF and the ON is usually configured on the
|
51
|
+
# device itself, it is usually in the region of 10 seconds.
|
52
|
+
#
|
53
|
+
# @param [#to_i, Array] port_index Port index or array of indexes to power cycle.
|
54
|
+
# @return [Boolean] success or failure of setting the ports to reboot.
|
18
55
|
def reboot(port_index)
|
19
56
|
set_state(:reboot, port_index)
|
20
57
|
end
|
58
|
+
|
59
|
+
# Sets the given +state+ on the specified port(s).
|
60
|
+
#
|
61
|
+
# @param [Symbol] state The state to set the ports to.
|
62
|
+
# @param [#to_i, Array] port_index Port index or array of indexes to set the state on.
|
63
|
+
# @return [Boolean] success or failure of setting the specified +state+.
|
64
|
+
# @raise [ArgumentError] if the provided +state+ is not a member of States.
|
65
|
+
# @see States
|
21
66
|
def set_state(state, port_index)
|
22
67
|
raise ArgumentError, "invalid state" unless States.include?(state)
|
23
|
-
|
24
|
-
|
68
|
+
|
69
|
+
varbindings = Array(port_index).map do |index|
|
70
|
+
SNMP::VarBind.new(base_oid + index,
|
71
|
+
SNMP::Integer.new(state_order.index(state)))
|
72
|
+
end
|
73
|
+
|
74
|
+
response = @manager.set(varbindings)
|
75
|
+
response.error_index == 0 # no error
|
25
76
|
end
|
77
|
+
|
26
78
|
protected
|
79
|
+
# @return [SNMP::ObjectId] SNMP Base OID for power control
|
27
80
|
def base_oid
|
28
81
|
raise NotImplementedError, "method must be overridden"
|
29
82
|
end
|
83
|
+
# @return [Array] Array mapping the States to the corresponding SNMP integer value to set.
|
30
84
|
def state_order
|
31
85
|
States
|
32
86
|
end
|
@@ -1,12 +1,19 @@
|
|
1
1
|
module Ropian
|
2
2
|
module Control
|
3
|
+
# This class provides support for Raritan brand power devices.
|
3
4
|
class Raritan < Generic
|
4
|
-
|
5
|
-
@
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
protected
|
6
|
+
# @return [SNMP::ObjectId] the SNMP base OID for power control
|
7
|
+
def base_oid
|
8
|
+
@base_oid ||= SNMP::ObjectId.new('1.3.6.1.4.1.13742.4.1.2.2.1.3')
|
9
|
+
end
|
10
|
+
|
11
|
+
# Raritan power devices map the on, off and reboot states to 1, 0, and 2.
|
12
|
+
#
|
13
|
+
# @return [Array] array to map the states to the SNMP integer values.
|
14
|
+
def state_order
|
15
|
+
@state_order ||= [:off, :on, :reboot]
|
16
|
+
end
|
10
17
|
end
|
11
18
|
end
|
12
19
|
end
|
data/lib/ropian/meter/apc.rb
CHANGED
@@ -1,21 +1,19 @@
|
|
1
1
|
module Ropian
|
2
2
|
module Meter
|
3
|
+
# This class provides support for APC brand power devices.
|
3
4
|
class APC < Generic
|
4
|
-
UnitCurrent = SNMP::ObjectId.new('1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.1')
|
5
|
-
|
6
|
-
def collect # :yields: total_amps, hash_of_outlet_amps
|
7
|
-
yield total_amps, {}
|
8
|
-
end
|
9
|
-
# Amps in total on whole bar
|
10
|
-
def total_amps
|
11
|
-
amps_for_oid(UnitCurrent)
|
12
|
-
end
|
13
|
-
def outlet_amps(outlet_index)
|
14
|
-
raise NotImplementedError, "APC Power Bars do not support per outlet power stats"
|
15
|
-
end
|
16
5
|
protected
|
17
|
-
|
18
|
-
|
6
|
+
# If the vendor returns current in values in milli-amps for example
|
7
|
+
# this method can be overridden to return 1000.
|
8
|
+
#
|
9
|
+
# @return [Numeric] Amps scaling factor.
|
10
|
+
def amps_scale_factor
|
11
|
+
10
|
12
|
+
end
|
13
|
+
|
14
|
+
# @return [SNMP::ObjectId] SNMP OID where the unit current can be retrieved
|
15
|
+
def unit_current_oid
|
16
|
+
@unit_current_oid ||= SNMP::ObjectId.new('1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.1')
|
19
17
|
end
|
20
18
|
end
|
21
19
|
end
|
data/lib/ropian/meter/generic.rb
CHANGED
@@ -1,16 +1,93 @@
|
|
1
1
|
module Ropian
|
2
2
|
module Meter
|
3
|
+
# Generic base class for vendor specific subclasses.
|
4
|
+
#
|
5
|
+
# Provides the common API which subclasses will adhere to.
|
3
6
|
class Generic
|
7
|
+
# Provides inspection details for the current receiver.
|
8
|
+
#
|
9
|
+
# @return [String] inspection string
|
10
|
+
# @private
|
4
11
|
def inspect
|
5
12
|
"#<#{self.class} #{@manager.host}@#{@manager.community}>"
|
6
13
|
end
|
14
|
+
|
15
|
+
# Creates and returns a new instance of Ropian::Meter::Generic.
|
16
|
+
#
|
17
|
+
# @param [String] ip_addr The IP address of the power device.
|
18
|
+
# @param [String] community The SNMP write community string to
|
19
|
+
# be used when communicating with the device.
|
20
|
+
# @param [Symbol] version The SNMP version symbol specifying the
|
21
|
+
# version of SNMP to use when communicating with the device.
|
7
22
|
def initialize(ip_addr, community, version = :SNMPv2c)
|
8
23
|
@manager = SNMP::Manager.new(:Host => ip_addr,
|
9
24
|
:Community => community, :Version => version)
|
10
25
|
end
|
26
|
+
|
27
|
+
# Collects and yields the unit current and outlet currents to the given block
|
28
|
+
#
|
29
|
+
# @yield [total_amps, outlet_amps]
|
30
|
+
# @yieldparam [Float] total_amps Total unit current in Amps
|
31
|
+
# @yieldparam [Hash<Integer,Float>] outlet_amps Hash of the power outlet Amps, may be empty if unsupported
|
32
|
+
def collect
|
33
|
+
yield total_amps, all_outlet_amps
|
34
|
+
end
|
35
|
+
|
36
|
+
# Returns the total number of amps for the receiver
|
37
|
+
# @return [Float] total current usage of the receiver in amps
|
38
|
+
def total_amps
|
39
|
+
amps_for_oid(unit_current_oid)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Returns the current of the given +outlet+ in amps.
|
43
|
+
# @param [#to_i] outlet Outlet number
|
44
|
+
# @return [Float] outlet current usage in amps.
|
45
|
+
def outlet_amps(outlet)
|
46
|
+
amps_for_oid(outlet_current_base_oid + outlet.to_i)
|
47
|
+
end
|
48
|
+
|
11
49
|
protected
|
50
|
+
# If the vendor returns current in values in milli-amps for example
|
51
|
+
# this method can be overridden to return 1000.
|
52
|
+
#
|
53
|
+
# @return [Numeric] Amps scaling factor.
|
54
|
+
def amps_scale_factor
|
55
|
+
1
|
56
|
+
end
|
57
|
+
|
58
|
+
# @param [SNMP::ObjectId] oid
|
59
|
+
# @return [Float] number of Amps for specified +oid+.
|
12
60
|
def amps_for_oid(oid)
|
13
|
-
@manager.get(oid).varbind_list.first.value.to_f /
|
61
|
+
@manager.get(oid).varbind_list.first.value.to_f / amps_scale_factor
|
62
|
+
end
|
63
|
+
|
64
|
+
# @return [SNMP::ObjectId] SNMP OID where the unit current can be retrieved
|
65
|
+
def unit_current_oid
|
66
|
+
raise NotImplementedError, "must be overridden by subclasses"
|
67
|
+
end
|
68
|
+
|
69
|
+
# @return [SNMP::ObjectId] Base SNMP OID where the outlet current can be retrieved
|
70
|
+
def outlet_current_base_oid
|
71
|
+
raise NotImplementedError, "must be overridden by subclasses"
|
72
|
+
end
|
73
|
+
|
74
|
+
# Returns a hash of the current for each outlet in amps.
|
75
|
+
# @return [Hash<Integer,Float>] Hash of the outlet numbers and their current in amps.
|
76
|
+
def all_outlet_amps
|
77
|
+
results = {}
|
78
|
+
|
79
|
+
begin
|
80
|
+
@manager.walk(outlet_current_base_oid) do |r|
|
81
|
+
r.each do |varbind|
|
82
|
+
results[varbind.name.index(outlet_current_base_oid)] = varbind.value.to_f / amps_scale_factor
|
83
|
+
end
|
84
|
+
end
|
85
|
+
rescue NotImplementedError
|
86
|
+
# catch from outlet_current_base_oid if not supported in subclass
|
87
|
+
# we don't interfere with the results and return the empty hash.
|
88
|
+
end
|
89
|
+
|
90
|
+
results
|
14
91
|
end
|
15
92
|
end
|
16
93
|
end
|
data/lib/ropian/meter/raritan.rb
CHANGED
@@ -1,28 +1,25 @@
|
|
1
1
|
module Ropian
|
2
2
|
module Meter
|
3
|
+
# This class provides support for Raritan brand power devices.
|
3
4
|
class Raritan < Generic
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
protected
|
6
|
+
# If the vendor returns current in values in milli-amps for example
|
7
|
+
# this method can be overridden to return 1000.
|
8
|
+
#
|
9
|
+
# @return [Numeric] Amps scaling factor.
|
10
|
+
def amps_scale_factor
|
11
|
+
1000
|
12
|
+
end
|
9
13
|
|
10
|
-
@
|
11
|
-
|
12
|
-
|
13
|
-
end
|
14
|
+
# @return [SNMP::ObjectId] SNMP OID where the unit current can be retrieved
|
15
|
+
def unit_current_oid
|
16
|
+
@unit_current_oid ||= SNMP::ObjectId.new("1.3.6.1.4.1.13742.4.1.4.2.1.3.1")
|
14
17
|
end
|
15
18
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
amps_for_oid(UnitCurrent)
|
21
|
-
end
|
22
|
-
# Amps per outlet
|
23
|
-
def outlet_amps(outlet_index)
|
24
|
-
amps_for_oid(OutletCurrent + outlet_index)
|
25
|
-
end
|
19
|
+
# @return [SNMP::ObjectId] Base SNMP OID where the outlet current can be retrieved
|
20
|
+
def outlet_current_base_oid
|
21
|
+
@outlet_current_base_oid ||= SNMP::ObjectId.new("1.3.6.1.4.1.13742.4.1.2.2.1.4")
|
22
|
+
end
|
26
23
|
end
|
27
24
|
end
|
28
25
|
end
|
data/lib/ropian.rb
CHANGED
@@ -1,33 +1,46 @@
|
|
1
1
|
require 'snmp'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
require 'ropian/meter/apc'
|
10
|
-
|
11
|
-
# :stopdoc:
|
3
|
+
# Extension to provides read access to :host, :community and :version
|
4
|
+
# instance variables.
|
5
|
+
#
|
6
|
+
# We've done this primarily for #inspect cases.
|
7
|
+
#
|
8
|
+
# @private
|
12
9
|
class SNMP::Manager
|
13
10
|
attr_reader :host, :community, :version
|
14
11
|
end
|
12
|
+
|
13
|
+
# Extension to provides additive properties to SNMP::ObjectId instances.
|
14
|
+
#
|
15
|
+
# @private
|
15
16
|
class SNMP::ObjectId
|
17
|
+
# Adds the provided suboid or array of suboids to the
|
18
|
+
# receiver an returns a new instance.
|
19
|
+
#
|
20
|
+
# @param [#to_i,Array] suboid or array of suboids to append to the receiver.
|
21
|
+
# @return [SNMP::ObjectId] new OID with the +val+ appended to the receivers suboids.
|
16
22
|
def +(val)
|
17
23
|
current = self.to_a
|
18
|
-
unless val.kind_of?(Array)
|
19
|
-
|
20
|
-
return self.class.new(current)
|
21
|
-
else
|
22
|
-
return self.class.new(current + val.to_a)
|
23
|
-
end
|
24
|
+
val = [val.to_i] unless val.kind_of?(Array)
|
25
|
+
return self.class.new(current + val)
|
24
26
|
end
|
25
27
|
end
|
26
|
-
# :startdoc:
|
27
28
|
|
28
|
-
|
29
|
-
|
29
|
+
# Ropian is a collection of modules and classes for working with SNMP power devices.
|
30
|
+
module Ropian
|
31
|
+
# The control module classes provide functionality for managing the power state of
|
32
|
+
# sockets on the power devices. Turning sockets on, off or rebooting for example.
|
33
|
+
module Control
|
34
|
+
autoload :Generic, File.expand_path('../ropian/control/generic', __FILE__)
|
35
|
+
autoload :APC, File.expand_path('../ropian/control/apc', __FILE__)
|
36
|
+
autoload :Raritan, File.expand_path('../ropian/control/raritan', __FILE__)
|
30
37
|
end
|
31
|
-
|
38
|
+
|
39
|
+
# The meter module classes provide functionality for collecting power usage information
|
40
|
+
# from power devices. They support per socket power usage stats where hardware support is present.
|
41
|
+
module Meter
|
42
|
+
autoload :Generic, File.expand_path('../ropian/meter/generic', __FILE__)
|
43
|
+
autoload :APC, File.expand_path('../ropian/meter/apc', __FILE__)
|
44
|
+
autoload :Raritan, File.expand_path('../ropian/meter/raritan', __FILE__)
|
32
45
|
end
|
33
46
|
end
|
data/ropian.gemspec
CHANGED
@@ -1,55 +1,21 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
3
|
|
3
4
|
Gem::Specification.new do |s|
|
4
|
-
s.name =
|
5
|
-
s.version = "0.1.
|
6
|
-
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
5
|
+
s.name = "ropian"
|
6
|
+
s.version = "0.1.2.pre"
|
8
7
|
s.authors = ["Geoff Garside"]
|
9
|
-
s.
|
10
|
-
s.
|
11
|
-
s.
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
s.files = [
|
16
|
-
".document",
|
17
|
-
".gitignore",
|
18
|
-
"LICENSE",
|
19
|
-
"README.rdoc",
|
20
|
-
"Rakefile",
|
21
|
-
"VERSION.yml",
|
22
|
-
"lib/ropian.rb",
|
23
|
-
"lib/ropian/control/apc.rb",
|
24
|
-
"lib/ropian/control/generic.rb",
|
25
|
-
"lib/ropian/control/raritan.rb",
|
26
|
-
"lib/ropian/meter/apc.rb",
|
27
|
-
"lib/ropian/meter/generic.rb",
|
28
|
-
"lib/ropian/meter/raritan.rb",
|
29
|
-
"ropian.gemspec",
|
30
|
-
"test/ropian_test.rb",
|
31
|
-
"test/test_helper.rb"
|
32
|
-
]
|
33
|
-
s.homepage = %q{http://github.com/geoffgarside/ropian}
|
34
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
35
|
-
s.require_paths = ["lib"]
|
36
|
-
s.rubygems_version = %q{1.3.4}
|
37
|
-
s.summary = %q{Suite of tools for working with network power units}
|
38
|
-
s.test_files = [
|
39
|
-
"test/ropian_test.rb",
|
40
|
-
"test/test_helper.rb"
|
41
|
-
]
|
8
|
+
s.email = ["geoff@geoffgarside.co.uk"]
|
9
|
+
s.homepage = "http://github.com/geoffgarside/ropian"
|
10
|
+
s.summary = "Suite of tools for working with network power distribution units"
|
11
|
+
s.description = "Provides metering and control of network power distribution units"
|
12
|
+
|
13
|
+
s.required_rubygems_version = ">= 1.3.6"
|
42
14
|
|
43
|
-
|
44
|
-
|
45
|
-
|
15
|
+
s.add_dependency "snmp", ">= 1.0.2"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n") - %w(doc/apc.mib doc/raritan.mib)
|
18
|
+
s.require_paths = ["lib"]
|
46
19
|
|
47
|
-
|
48
|
-
s.add_runtime_dependency(%q<snmp>, [">= 1.0.2"])
|
49
|
-
else
|
50
|
-
s.add_dependency(%q<snmp>, [">= 1.0.2"])
|
51
|
-
end
|
52
|
-
else
|
53
|
-
s.add_dependency(%q<snmp>, [">= 1.0.2"])
|
54
|
-
end
|
20
|
+
s.add_development_dependency "yard"
|
55
21
|
end
|
metadata
CHANGED
@@ -1,53 +1,61 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ropian
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
- 1
|
10
|
-
version: 0.1.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2.pre
|
5
|
+
prerelease: 6
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Geoff Garside
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-04-30 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: snmp
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 19
|
29
|
-
segments:
|
30
|
-
- 1
|
31
|
-
- 0
|
32
|
-
- 2
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
33
21
|
version: 1.0.2
|
34
22
|
type: :runtime
|
35
|
-
|
36
|
-
|
37
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.0.2
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: yard
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
description: Provides metering and control of network power distribution units
|
47
|
+
email:
|
48
|
+
- geoff@geoffgarside.co.uk
|
38
49
|
executables: []
|
39
|
-
|
40
50
|
extensions: []
|
41
|
-
|
42
|
-
|
43
|
-
-
|
44
|
-
-
|
45
|
-
|
46
|
-
- .document
|
51
|
+
extra_rdoc_files: []
|
52
|
+
files:
|
53
|
+
- .gitignore
|
54
|
+
- .yardopts
|
55
|
+
- Gemfile
|
47
56
|
- LICENSE
|
48
57
|
- README.rdoc
|
49
58
|
- Rakefile
|
50
|
-
- VERSION.yml
|
51
59
|
- lib/ropian.rb
|
52
60
|
- lib/ropian/control/apc.rb
|
53
61
|
- lib/ropian/control/generic.rb
|
@@ -60,36 +68,30 @@ files:
|
|
60
68
|
- test/test_helper.rb
|
61
69
|
homepage: http://github.com/geoffgarside/ropian
|
62
70
|
licenses: []
|
63
|
-
|
64
71
|
post_install_message:
|
65
72
|
rdoc_options: []
|
66
|
-
|
67
|
-
require_paths:
|
73
|
+
require_paths:
|
68
74
|
- lib
|
69
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
76
|
none: false
|
71
|
-
requirements:
|
72
|
-
- -
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
|
75
|
-
segments:
|
77
|
+
requirements:
|
78
|
+
- - ! '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
segments:
|
76
82
|
- 0
|
77
|
-
|
78
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
hash: 2435443475953317457
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
85
|
none: false
|
80
|
-
requirements:
|
81
|
-
- -
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
|
84
|
-
segments:
|
85
|
-
- 0
|
86
|
-
version: "0"
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.3.6
|
87
90
|
requirements: []
|
88
|
-
|
89
91
|
rubyforge_project:
|
90
|
-
rubygems_version: 1.8.
|
92
|
+
rubygems_version: 1.8.23
|
91
93
|
signing_key:
|
92
94
|
specification_version: 3
|
93
|
-
summary: Suite of tools for working with network power units
|
95
|
+
summary: Suite of tools for working with network power distribution units
|
94
96
|
test_files: []
|
95
|
-
|
97
|
+
has_rdoc:
|
data/.document
DELETED
data/VERSION.yml
DELETED