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 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