ropian 0.1.1 → 0.1.2.pre

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ *.gem
2
+ .bundle
3
+ .yardoc
4
+ Gemfile.lock
5
+ pkg/*
6
+ doc
7
+ b
8
+ vendor/bundle
data/.yardopts ADDED
@@ -0,0 +1,4 @@
1
+ lib/**/*.rb
2
+ --no-private
3
+ --readme README.rdoc
4
+ --files LICENSE
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in ropian.gemspec
4
+ gemspec
data/README.rdoc CHANGED
@@ -1,6 +1,13 @@
1
- = ropian
1
+ = Ropian
2
2
 
3
- Description goes here.
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 'rubygems'
2
- require 'rake'
3
- require 'yaml'
1
+ require 'bundler/gem_helper'
4
2
 
5
- begin
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 'rcov/rcovtask'
32
- Rcov::RcovTask.new do |test|
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 :rcov do
39
- abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
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
-
@@ -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
- def base_oid
5
- @base_oid ||= SNMP::ObjectId.new('1.3.6.1.4.1.318.1.1.12.3.3.1.1.4')
6
- end
7
- def state_order
8
- @state_order ||= [nil, :on, :off, :reboot]
9
- end
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
- @manager.set(SNMP::VarBind.new(base_oid + port_index,
24
- SNMP::Integer.new(state_order.index(state))))
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
- def base_oid
5
- @base_oid ||= SNMP::ObjectId.new('1.3.6.1.4.1.13742.4.1.2.2.1.3')
6
- end
7
- def state_order
8
- @state_order ||= [:off, :on, :reboot]
9
- end
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
@@ -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
- def amps_for_oid(oid)
18
- @manager.get(oid).varbind_list.first.value.to_f / 10
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
@@ -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 / 1000
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
@@ -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
- UnitCurrent = SNMP::ObjectId.new("1.3.6.1.4.1.13742.4.1.4.2.1.3.1")
5
- OutletCurrent = SNMP::ObjectId.new("1.3.6.1.4.1.13742.4.1.2.2.1.4")
6
-
7
- def collect # :yields: total_amps, hash_of_outlet_amps
8
- results = Hash.new
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
- @manager.walk(OutletCurrent) do |r|
11
- r.each do |varbind|
12
- results[varbind.name.index(OutletCurrent)] = varbind.value.to_f / 1000
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
- yield total_amps, results
17
- end
18
- # Amps in total on whole bar
19
- def total_amps
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
- require 'ropian/control/generic'
4
- require 'ropian/control/raritan'
5
- require 'ropian/control/apc'
6
-
7
- require 'ropian/meter/generic'
8
- require 'ropian/meter/raritan'
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
- current << val.to_i
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
- module Ropian # :nodoc:
29
- module Control # :nodoc:
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
- module Meter # :nodoc:
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 = %q{ropian}
5
- s.version = "0.1.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.date = %q{2009-06-11}
10
- s.email = %q{geoff@geoffgarside.co.uk}
11
- s.extra_rdoc_files = [
12
- "LICENSE",
13
- "README.rdoc"
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
- if s.respond_to? :specification_version then
44
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
45
- s.specification_version = 3
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
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
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
- hash: 25
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
- date: 2011-06-02 00:00:00 Z
19
- dependencies:
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
- prerelease: false
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
- version_requirements: *id001
36
- description:
37
- email: geoff@geoffgarside.co.uk
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
- extra_rdoc_files:
43
- - LICENSE
44
- - README.rdoc
45
- files:
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
- hash: 3
75
- segments:
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ segments:
76
82
  - 0
77
- version: "0"
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
- hash: 3
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.4
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
@@ -1,5 +0,0 @@
1
- README.rdoc
2
- lib/**/*.rb
3
- bin/*
4
- features/**/*.feature
5
- LICENSE
data/VERSION.yml DELETED
@@ -1,4 +0,0 @@
1
- ---
2
- :major: 0
3
- :minor: 1
4
- :patch: 1