tronprint 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gemspec :path => '.'
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Derek Kastner
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.
@@ -0,0 +1,17 @@
1
+ = tronprint
2
+
3
+ Description goes here.
4
+
5
+ == Note on Patches/Pull Requests
6
+
7
+ * Fork the project.
8
+ * Make your feature addition or bug fix.
9
+ * Add tests for it. This is important so I don't break it in a
10
+ future version unintentionally.
11
+ * Commit, do not mess with rakefile, version, or history.
12
+ (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)
13
+ * Send me a pull request. Bonus points for topic branches.
14
+
15
+ == Copyright
16
+
17
+ Copyright (c) 2010 Derek Kastner. See LICENSE for details.
@@ -0,0 +1,49 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = 'tronprint'
8
+ gem.summary = 'Ruby process carbon footprinter'
9
+ gem.description = 'A gem for monitoring the carbon footprint of your ruby app'
10
+ gem.email = 'dkastner@gmail.com'
11
+ gem.homepage = 'http://github.com/dkastner/tronprint'
12
+ gem.authors = ['Derek Kastner']
13
+ gem.add_development_dependency 'cucumber'
14
+ gem.add_development_dependency 'jeweler', '~> 1.4.0'
15
+ gem.add_development_dependency 'rake'
16
+ gem.add_development_dependency 'rspec', '~>2.0'
17
+ gem.add_development_dependency 'sandbox'
18
+ gem.add_dependency 'carbon', '~> 1.0.3'
19
+ gem.add_dependency 'i18n'
20
+ gem.add_dependency 'moneta'
21
+ end
22
+ Jeweler::GemcutterTasks.new
23
+ rescue LoadError
24
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
25
+ end
26
+
27
+ begin
28
+ require 'rspec/core/rake_task'
29
+ RSpec::Core::RakeTask.new(:examples)
30
+
31
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
32
+ spec.rcov = true
33
+ end
34
+ rescue LoadError
35
+ puts 'RSpec tasks unavailable'
36
+ end
37
+
38
+ task :test => :examples
39
+ task :default => :test
40
+
41
+ require 'rake/rdoctask'
42
+ Rake::RDocTask.new do |rdoc|
43
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
+
45
+ rdoc.rdoc_dir = 'rdoc'
46
+ rdoc.title = "tronprint #{version}"
47
+ rdoc.rdoc_files.include('README*')
48
+ rdoc.rdoc_files.include('lib/**/*.rb')
49
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.2
@@ -0,0 +1 @@
1
+ Autotest.add_discovery { 'rspec2' }
@@ -0,0 +1,4 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
2
+ require 'tronprint'
3
+
4
+ require 'spec/expectations'
@@ -0,0 +1,9 @@
1
+ Feature: something something
2
+ In order to something something
3
+ A user something something
4
+ something something something
5
+
6
+ Scenario: something something
7
+ Given inspiration
8
+ When I create a sweet new gem
9
+ Then everyone should see how awesome I am
@@ -0,0 +1,76 @@
1
+ require 'yaml'
2
+ require 'tronprint/aggregator'
3
+ require 'tronprint/application'
4
+ require 'tronprint/cpu_monitor'
5
+
6
+ if defined?(Rails)
7
+ require 'tronprint/rails'
8
+ end
9
+
10
+ module Tronprint
11
+ extend self
12
+
13
+ attr_accessor :aggregator_options, :zip_code, :application_name, :brighter_planet_key
14
+
15
+ def aggregator_options
16
+ @aggregator_options ||= config[:aggregator_options]
17
+ end
18
+
19
+ def zip_code
20
+ @zip_code ||= config[:zip_code]
21
+ end
22
+
23
+ def brighter_planet_key
24
+ @brighter_planet_key ||= config[:brighter_planet_key]
25
+ end
26
+
27
+ def run
28
+ cpu_monitor
29
+ end
30
+
31
+ def running?
32
+ !@cpu_monitor.nil?
33
+ end
34
+
35
+ def aggregator
36
+ @aggregator ||= Aggregator.new aggregator_options
37
+ end
38
+
39
+ def cpu_monitor
40
+ @cpu_monitor ||= CPUMonitor.new aggregator, application_name
41
+ end
42
+
43
+ def application_name
44
+ @application_name ||= config[:application_name]
45
+ end
46
+
47
+ def total_duration
48
+ aggregator[cpu_monitor.key]
49
+ end
50
+
51
+ def config
52
+ load_config || default_config
53
+ end
54
+
55
+ def load_config
56
+ return @loaded_config unless @loaded_config.nil?
57
+ path = File.expand_path('config/tronprint.yml', Dir.pwd)
58
+ @loaded_config = YAML::load_file path if File.exist? path
59
+ end
60
+
61
+ def default_config
62
+ @default_config ||= {
63
+ :aggregator_options => {
64
+ :adapter => :YAML,
65
+ :path => File.expand_path('tronprint_stats.yml', Dir.pwd)
66
+ },
67
+ :application_name => File.basename(Dir.pwd)
68
+ }
69
+ end
70
+
71
+ def emission_estimate
72
+ app = Application.new :zip_code => zip_code, :duration => total_duration,
73
+ :brighter_planet_key => brighter_planet_key
74
+ app.emission_estimate
75
+ end
76
+ end
@@ -0,0 +1,43 @@
1
+ require 'delegate'
2
+ require 'moneta'
3
+
4
+ module Tronprint
5
+ class Aggregator < Delegator
6
+ def initialize(options = {})
7
+ adapter_underscored = options.delete :adapter
8
+ adapter_underscored ||= :pstore
9
+ begin
10
+ require "moneta/#{adapter_underscored.downcase}"
11
+ klass = Moneta.const_get adapter_constant(adapter_underscored)
12
+ rescue LoadError # Bundler hack
13
+ require "moneta/adapters/#{adapter_underscored.downcase}"
14
+ klass = Moneta::Adapters.const_get adapter_constant(adapter_underscored)
15
+ end
16
+ args = adapter_underscored == :memory ? [] : [options]
17
+ super klass.new(*args)
18
+ end
19
+
20
+ def __getobj__
21
+ @delegate_sd_obj
22
+ end
23
+ def __setobj__(obj)
24
+ @delegate_sd_obj = obj
25
+ end
26
+
27
+ def adapter_constant(adapter_underscored)
28
+ if adapter_underscored == :pstore
29
+ 'PStore'
30
+ elsif adapter_underscored == :yaml
31
+ 'YAML'
32
+ else
33
+ adapter_underscored.to_s.split('_').map(&:capitalize).join('')
34
+ end
35
+ end
36
+
37
+ def update(key, value)
38
+ old_value = self[key]
39
+ new_value = old_value ? old_value + value : value
40
+ self[key] = new_value
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,24 @@
1
+ require 'carbon'
2
+
3
+ module Tronprint
4
+ class Application
5
+ include Carbon
6
+
7
+ emit_as :computation do
8
+ provide :duration # hours
9
+ provide :zip_code
10
+ end
11
+
12
+ attr_accessor :duration, :zip_code, :brighter_planet_key
13
+
14
+ def initialize(attrs = {})
15
+ attrs.each do |name, value|
16
+ self.send("#{name}=", value)
17
+ end
18
+ end
19
+
20
+ def emission_estimate(options = {})
21
+ super options.merge(:key => brighter_planet_key)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,41 @@
1
+ module Tronprint
2
+ class CPUMonitor < Thread
3
+ attr_accessor :total_recorded_cpu_time, :aggregator, :application_name
4
+
5
+ def initialize(aggregator, application_name, options = {})
6
+ self.aggregator = aggregator
7
+ self.application_name = application_name
8
+ options[:run] ||= true
9
+ if options[:run]
10
+ super do
11
+ while(true) do
12
+ monitor
13
+ sleep(5)
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ def key
20
+ [application_name, 'application', 'cpu_time'].join('/')
21
+ end
22
+
23
+ def monitor
24
+ elapsed_time = elapsed_cpu_time
25
+ aggregator.update key, elapsed_time
26
+ self.total_recorded_cpu_time += elapsed_time
27
+ end
28
+
29
+ def total_cpu_time
30
+ Process.times.inject(0) { |sum, i| sum += i }
31
+ end
32
+
33
+ def total_recorded_cpu_time
34
+ @total_recorded_cpu_time ||= 0.0
35
+ end
36
+
37
+ def elapsed_cpu_time
38
+ total_cpu_time - total_recorded_cpu_time
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,14 @@
1
+ require 'rails'
2
+ require 'tronprint/rails/tronprint_helper'
3
+
4
+ module Tronprint
5
+ class Railtie < Rails::Railtie
6
+ initializer 'tronprint.run' do
7
+ Tronprint.run # if Rails.env.production?
8
+ end
9
+
10
+ generators do
11
+ require 'tronprint/rails/generator'
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ require 'rails/generators'
2
+
3
+ class TronprintGenerator < Rails::Generators::Base
4
+ def create_config_file
5
+ create_file 'config/tronprint.yml', Tronprint.config.to_yaml
6
+ end
7
+ end
@@ -0,0 +1,12 @@
1
+ module TronprintHelper
2
+ def total_footprint
3
+ emission_estimate.to_f
4
+ end
5
+ def footprint_methodology
6
+ emission_estimate.methodology
7
+ end
8
+
9
+ def emission_estimate
10
+ @emission_estimate ||= Tronprint.emission_estimate
11
+ end
12
+ end
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,4 @@
1
+ require 'bundler'
2
+ Bundler.setup
3
+
4
+ require 'tronprint'
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+ require 'sandbox'
3
+
4
+ describe Tronprint::Aggregator do
5
+ let(:aggregator) { Tronprint::Aggregator.new :adapter => :memory }
6
+
7
+ describe '#update' do
8
+ it 'should write statistics to an uninitailzed key' do
9
+ aggregator.update('foo/bar', 22.1)
10
+ aggregator['foo/bar'].should == 22.1
11
+ end
12
+ it 'should cumulatively update statistics' do
13
+ aggregator.update('foo/bar', 22.1)
14
+ aggregator.update('foo/bar', 44.2)
15
+ aggregator['foo/bar'].should be_within(0.01).of(66.3)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe Tronprint::Application do
4
+ let(:application) { Tronprint::Application.new }
5
+
6
+ describe '#duration' do
7
+
8
+ end
9
+ end
10
+
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe Tronprint::Application do
4
+ it 'should report emission esimates for application-related activity' do
5
+ app = Tronprint::Application.new :duration => 72831, :zip_code => 48915
6
+ app.should respond_to(:emission_estimate)
7
+ end
8
+ end
9
+
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe Tronprint::CPUMonitor do
4
+ let(:aggregator) { Tronprint::Aggregator.new :adapter => :memory }
5
+ let(:cpu_monitor) { Tronprint::CPUMonitor.new aggregator, 'my_app', :run => false }
6
+
7
+ describe '#monitor' do
8
+ before :each do
9
+ cpu_monitor.stub!(:elapsed_cpu_time).and_return 23.87
10
+ end
11
+ it 'should write the elapsed time to the aggregate statistics' do
12
+ cpu_monitor.monitor
13
+ aggregator['my_app/application/cpu_time'].should == 23.87
14
+ end
15
+ it 'should increment the toal recorded cpu time' do
16
+ cpu_monitor.stub!(:elapsed_cpu_time).and_return 9.0
17
+ cpu_monitor.monitor
18
+ cpu_monitor.total_recorded_cpu_time.should == 9.0
19
+ cpu_monitor.stub!(:elapsed_cpu_time).and_return 12.0
20
+ cpu_monitor.monitor
21
+ cpu_monitor.total_recorded_cpu_time.should == 21.0
22
+ end
23
+ end
24
+
25
+ describe '#elapsed_cpu_time' do
26
+ it 'should return the total CPU time on the first run' do
27
+ cpu_monitor.stub!(:total_recorded_cpu_time).and_return 0
28
+ cpu_monitor.stub!(:total_cpu_time).and_return 9.0
29
+ cpu_monitor.elapsed_cpu_time.should == 9.0
30
+ end
31
+ it 'should return the amount of CPU time used since the last check' do
32
+ cpu_monitor.stub!(:total_recorded_cpu_time).and_return 23.0
33
+ cpu_monitor.stub!(:total_cpu_time).and_return 36.0
34
+ cpu_monitor.elapsed_cpu_time.should == 13.0
35
+ end
36
+ end
37
+
38
+ describe '#total_cpu_time' do
39
+ it 'should return the total user and system time of the process' do
40
+ Process.stub!(:times).and_return [10.1, 12.3]
41
+ cpu_monitor.total_cpu_time.should == 22.4
42
+ end
43
+ end
44
+
45
+ describe '#total_recorded_cpu_time' do
46
+ it 'should return 0 by default' do
47
+ cpu_monitor.total_recorded_cpu_time.should == 0
48
+ end
49
+ it 'should return total recorded time' do
50
+ cpu_monitor.total_recorded_cpu_time = 3
51
+ cpu_monitor.total_recorded_cpu_time.should == 3
52
+ end
53
+ end
54
+ end
55
+
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+ require 'tronprint/rails/tronprint_helper'
3
+
4
+ describe TronprintHelper do
5
+ let :helper do
6
+ c = Class.new
7
+ c.send :include, TronprintHelper
8
+ c.new
9
+ end
10
+
11
+ describe '#total_footprint' do
12
+ it 'should return the total footprint' do
13
+ Tronprint.stub!(:footprint_amount).and_return 89.4
14
+ helper.total_footprint.should == 89.4
15
+ end
16
+ end
17
+ end
18
+
@@ -0,0 +1,93 @@
1
+ require 'spec_helper'
2
+
3
+ describe Tronprint do
4
+ let(:mock_cpu) { mock Tronprint::CPUMonitor, :total_recorded_cpu_time => 27.2 }
5
+
6
+ before do
7
+ Tronprint.aggregator_options[:adapter] = :memory
8
+ end
9
+
10
+ describe '.run' do
11
+ it 'should start up each monitor' do
12
+ Tronprint.should_receive :cpu_monitor
13
+ Tronprint.run
14
+ end
15
+ end
16
+
17
+ describe '.cpu_monitor' do
18
+ it 'should start the CPU monitor' do
19
+ Tronprint::CPUMonitor.should_receive(:new).and_return mock_cpu
20
+ Tronprint.cpu_monitor
21
+ end
22
+ it 'should return the CPU monitor instance' do
23
+ Tronprint.instance_variable_set :@cpu_monitor, nil
24
+ Tronprint::CPUMonitor.stub!(:new).and_return mock_cpu
25
+ Tronprint.cpu_monitor.should == mock_cpu
26
+ end
27
+ end
28
+
29
+ describe '.footprint_amount' do
30
+ let(:estimate) { mock Object, :to_f => 100.1 }
31
+
32
+ it 'should return the total footprint of the application' do
33
+ Tronprint.stub!(:emission_estimate).and_return estimate
34
+ Tronprint.footprint_amount.should == 100.1
35
+ end
36
+ end
37
+
38
+ describe '.emission_estimate' do
39
+ it 'should send the zip code and total duration to the application' do
40
+ Tronprint.instance_variable_set(:@emission_estimate, nil)
41
+ Tronprint.zip_code = 48915
42
+ Tronprint.brighter_planet_key = 'ABC123'
43
+ Tronprint.stub!(:total_duration).and_return 28.7
44
+ Tronprint::Application.should_receive(:new).
45
+ with(:zip_code => 48915, :duration => 28.7, :brighter_planet_key => 'ABC123').
46
+ and_return mock(Object, :emission_estimate => nil)
47
+ Tronprint.emission_estimate
48
+ end
49
+ end
50
+
51
+ describe '.config' do
52
+ it 'should return a configuration loaded from disk' do
53
+ Tronprint.stub!(:load_config).and_return nil
54
+ Tronprint.stub!(:default_config).and_return :foo => :bar
55
+ Tronprint.config.should == { :foo => :bar }
56
+ end
57
+ it 'should return a default configuration if no config file exists' do
58
+ Tronprint.stub!(:load_config).and_return :foo => :bar
59
+ Tronprint.config.should == { :foo => :bar }
60
+ end
61
+ end
62
+
63
+ describe '.load_config' do
64
+ it 'should load a config file from cwd/config/tronprint.yml if it exists' do
65
+ Dir.stub!(:pwd).and_return '/some/dir'
66
+ File.stub!(:exist?).and_return true
67
+ YAML.should_receive(:load_file).with('/some/dir/config/tronprint.yml').
68
+ and_return :my => :config
69
+ Tronprint.load_config.should == { :my => :config }
70
+ end
71
+ it 'should return nil if no config file exists' do
72
+ Tronprint.instance_variable_set :@loaded_config, nil
73
+ Dir.stub!(:pwd).and_return '/some/dir'
74
+ File.stub!(:exist?).and_return false
75
+ Tronprint.load_config.should be_nil
76
+ end
77
+ end
78
+
79
+ describe '.default_config' do
80
+ it 'should return a default configuration' do
81
+ Tronprint.default_config.should be_an_instance_of(Hash)
82
+ end
83
+ end
84
+
85
+ describe '.total_duration' do
86
+ it 'should look up the total for the application' do
87
+ Tronprint.instance_variable_set :@cpu_monitor, nil
88
+ Tronprint.application_name = 'groove'
89
+ Tronprint.aggregator.update 'groove/application/cpu_time', 5.0
90
+ Tronprint.total_duration.should == 5.0
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,123 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{tronprint}
8
+ s.version = "0.0.2"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Derek Kastner"]
12
+ s.date = %q{2011-01-12}
13
+ s.description = %q{A gem for monitoring the carbon footprint of your ruby app}
14
+ s.email = %q{dkastner@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rspec",
22
+ "Gemfile",
23
+ "LICENSE",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "autotest/discover.rb",
28
+ "features/step_definitions/tronprint_steps.rb",
29
+ "features/support/env.rb",
30
+ "features/tronprint.feature",
31
+ "lib/tronprint.rb",
32
+ "lib/tronprint/aggregator.rb",
33
+ "lib/tronprint/application.rb",
34
+ "lib/tronprint/cpu_monitor.rb",
35
+ "lib/tronprint/rails.rb",
36
+ "lib/tronprint/rails/generator.rb",
37
+ "lib/tronprint/rails/tronprint_helper.rb",
38
+ "spec/spec.opts",
39
+ "spec/spec_helper.rb",
40
+ "spec/tronprint/aggregator_spec.rb",
41
+ "spec/tronprint/application_spec.rb",
42
+ "spec/tronprint/computer_spec.rb",
43
+ "spec/tronprint/cpu_monitor_spec.rb",
44
+ "spec/tronprint/rails/tronprint_helper_spec.rb",
45
+ "spec/tronprint_spec.rb",
46
+ "tronprint.gemspec"
47
+ ]
48
+ s.homepage = %q{http://github.com/dkastner/tronprint}
49
+ s.require_paths = ["lib"]
50
+ s.rubygems_version = %q{1.3.7}
51
+ s.summary = %q{Ruby process carbon footprinter}
52
+ s.test_files = [
53
+ "spec/spec_helper.rb",
54
+ "spec/tronprint/aggregator_spec.rb",
55
+ "spec/tronprint/application_spec.rb",
56
+ "spec/tronprint/computer_spec.rb",
57
+ "spec/tronprint/cpu_monitor_spec.rb",
58
+ "spec/tronprint/rails/tronprint_helper_spec.rb",
59
+ "spec/tronprint_spec.rb"
60
+ ]
61
+
62
+ if s.respond_to? :specification_version then
63
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
64
+ s.specification_version = 3
65
+
66
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
67
+ s.add_runtime_dependency(%q<tronprint>, [">= 0"])
68
+ s.add_runtime_dependency(%q<carbon>, ["~> 1.0.3"])
69
+ s.add_runtime_dependency(%q<i18n>, [">= 0"])
70
+ s.add_runtime_dependency(%q<moneta>, [">= 0"])
71
+ s.add_development_dependency(%q<cucumber>, [">= 0"])
72
+ s.add_development_dependency(%q<jeweler>, ["~> 1.4.0"])
73
+ s.add_development_dependency(%q<rake>, [">= 0"])
74
+ s.add_development_dependency(%q<rspec>, ["~> 2.0"])
75
+ s.add_development_dependency(%q<sandbox>, [">= 0"])
76
+ s.add_development_dependency(%q<cucumber>, [">= 0"])
77
+ s.add_development_dependency(%q<jeweler>, ["~> 1.4.0"])
78
+ s.add_development_dependency(%q<rake>, [">= 0"])
79
+ s.add_development_dependency(%q<rspec>, ["~> 2.0"])
80
+ s.add_development_dependency(%q<sandbox>, [">= 0"])
81
+ s.add_runtime_dependency(%q<carbon>, ["~> 1.0.3"])
82
+ s.add_runtime_dependency(%q<i18n>, [">= 0"])
83
+ s.add_runtime_dependency(%q<moneta>, [">= 0"])
84
+ else
85
+ s.add_dependency(%q<tronprint>, [">= 0"])
86
+ s.add_dependency(%q<carbon>, ["~> 1.0.3"])
87
+ s.add_dependency(%q<i18n>, [">= 0"])
88
+ s.add_dependency(%q<moneta>, [">= 0"])
89
+ s.add_dependency(%q<cucumber>, [">= 0"])
90
+ s.add_dependency(%q<jeweler>, ["~> 1.4.0"])
91
+ s.add_dependency(%q<rake>, [">= 0"])
92
+ s.add_dependency(%q<rspec>, ["~> 2.0"])
93
+ s.add_dependency(%q<sandbox>, [">= 0"])
94
+ s.add_dependency(%q<cucumber>, [">= 0"])
95
+ s.add_dependency(%q<jeweler>, ["~> 1.4.0"])
96
+ s.add_dependency(%q<rake>, [">= 0"])
97
+ s.add_dependency(%q<rspec>, ["~> 2.0"])
98
+ s.add_dependency(%q<sandbox>, [">= 0"])
99
+ s.add_dependency(%q<carbon>, ["~> 1.0.3"])
100
+ s.add_dependency(%q<i18n>, [">= 0"])
101
+ s.add_dependency(%q<moneta>, [">= 0"])
102
+ end
103
+ else
104
+ s.add_dependency(%q<tronprint>, [">= 0"])
105
+ s.add_dependency(%q<carbon>, ["~> 1.0.3"])
106
+ s.add_dependency(%q<i18n>, [">= 0"])
107
+ s.add_dependency(%q<moneta>, [">= 0"])
108
+ s.add_dependency(%q<cucumber>, [">= 0"])
109
+ s.add_dependency(%q<jeweler>, ["~> 1.4.0"])
110
+ s.add_dependency(%q<rake>, [">= 0"])
111
+ s.add_dependency(%q<rspec>, ["~> 2.0"])
112
+ s.add_dependency(%q<sandbox>, [">= 0"])
113
+ s.add_dependency(%q<cucumber>, [">= 0"])
114
+ s.add_dependency(%q<jeweler>, ["~> 1.4.0"])
115
+ s.add_dependency(%q<rake>, [">= 0"])
116
+ s.add_dependency(%q<rspec>, ["~> 2.0"])
117
+ s.add_dependency(%q<sandbox>, [">= 0"])
118
+ s.add_dependency(%q<carbon>, ["~> 1.0.3"])
119
+ s.add_dependency(%q<i18n>, [">= 0"])
120
+ s.add_dependency(%q<moneta>, [">= 0"])
121
+ end
122
+ end
123
+
metadata ADDED
@@ -0,0 +1,327 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tronprint
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 2
9
+ version: 0.0.2
10
+ platform: ruby
11
+ authors:
12
+ - Derek Kastner
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-01-12 00:00:00 -05:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: tronprint
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :runtime
31
+ prerelease: false
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: carbon
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ segments:
41
+ - 1
42
+ - 0
43
+ - 3
44
+ version: 1.0.3
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: i18n
50
+ requirement: &id003 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ version: "0"
58
+ type: :runtime
59
+ prerelease: false
60
+ version_requirements: *id003
61
+ - !ruby/object:Gem::Dependency
62
+ name: moneta
63
+ requirement: &id004 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ segments:
69
+ - 0
70
+ version: "0"
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: *id004
74
+ - !ruby/object:Gem::Dependency
75
+ name: cucumber
76
+ requirement: &id005 !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ segments:
82
+ - 0
83
+ version: "0"
84
+ type: :development
85
+ prerelease: false
86
+ version_requirements: *id005
87
+ - !ruby/object:Gem::Dependency
88
+ name: jeweler
89
+ requirement: &id006 !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ~>
93
+ - !ruby/object:Gem::Version
94
+ segments:
95
+ - 1
96
+ - 4
97
+ - 0
98
+ version: 1.4.0
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *id006
102
+ - !ruby/object:Gem::Dependency
103
+ name: rake
104
+ requirement: &id007 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ segments:
110
+ - 0
111
+ version: "0"
112
+ type: :development
113
+ prerelease: false
114
+ version_requirements: *id007
115
+ - !ruby/object:Gem::Dependency
116
+ name: rspec
117
+ requirement: &id008 !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ~>
121
+ - !ruby/object:Gem::Version
122
+ segments:
123
+ - 2
124
+ - 0
125
+ version: "2.0"
126
+ type: :development
127
+ prerelease: false
128
+ version_requirements: *id008
129
+ - !ruby/object:Gem::Dependency
130
+ name: sandbox
131
+ requirement: &id009 !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ segments:
137
+ - 0
138
+ version: "0"
139
+ type: :development
140
+ prerelease: false
141
+ version_requirements: *id009
142
+ - !ruby/object:Gem::Dependency
143
+ name: cucumber
144
+ requirement: &id010 !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ segments:
150
+ - 0
151
+ version: "0"
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: *id010
155
+ - !ruby/object:Gem::Dependency
156
+ name: jeweler
157
+ requirement: &id011 !ruby/object:Gem::Requirement
158
+ none: false
159
+ requirements:
160
+ - - ~>
161
+ - !ruby/object:Gem::Version
162
+ segments:
163
+ - 1
164
+ - 4
165
+ - 0
166
+ version: 1.4.0
167
+ type: :development
168
+ prerelease: false
169
+ version_requirements: *id011
170
+ - !ruby/object:Gem::Dependency
171
+ name: rake
172
+ requirement: &id012 !ruby/object:Gem::Requirement
173
+ none: false
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ segments:
178
+ - 0
179
+ version: "0"
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: *id012
183
+ - !ruby/object:Gem::Dependency
184
+ name: rspec
185
+ requirement: &id013 !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ~>
189
+ - !ruby/object:Gem::Version
190
+ segments:
191
+ - 2
192
+ - 0
193
+ version: "2.0"
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: *id013
197
+ - !ruby/object:Gem::Dependency
198
+ name: sandbox
199
+ requirement: &id014 !ruby/object:Gem::Requirement
200
+ none: false
201
+ requirements:
202
+ - - ">="
203
+ - !ruby/object:Gem::Version
204
+ segments:
205
+ - 0
206
+ version: "0"
207
+ type: :development
208
+ prerelease: false
209
+ version_requirements: *id014
210
+ - !ruby/object:Gem::Dependency
211
+ name: carbon
212
+ requirement: &id015 !ruby/object:Gem::Requirement
213
+ none: false
214
+ requirements:
215
+ - - ~>
216
+ - !ruby/object:Gem::Version
217
+ segments:
218
+ - 1
219
+ - 0
220
+ - 3
221
+ version: 1.0.3
222
+ type: :runtime
223
+ prerelease: false
224
+ version_requirements: *id015
225
+ - !ruby/object:Gem::Dependency
226
+ name: i18n
227
+ requirement: &id016 !ruby/object:Gem::Requirement
228
+ none: false
229
+ requirements:
230
+ - - ">="
231
+ - !ruby/object:Gem::Version
232
+ segments:
233
+ - 0
234
+ version: "0"
235
+ type: :runtime
236
+ prerelease: false
237
+ version_requirements: *id016
238
+ - !ruby/object:Gem::Dependency
239
+ name: moneta
240
+ requirement: &id017 !ruby/object:Gem::Requirement
241
+ none: false
242
+ requirements:
243
+ - - ">="
244
+ - !ruby/object:Gem::Version
245
+ segments:
246
+ - 0
247
+ version: "0"
248
+ type: :runtime
249
+ prerelease: false
250
+ version_requirements: *id017
251
+ description: A gem for monitoring the carbon footprint of your ruby app
252
+ email: dkastner@gmail.com
253
+ executables: []
254
+
255
+ extensions: []
256
+
257
+ extra_rdoc_files:
258
+ - LICENSE
259
+ - README.rdoc
260
+ files:
261
+ - .document
262
+ - .rspec
263
+ - Gemfile
264
+ - LICENSE
265
+ - README.rdoc
266
+ - Rakefile
267
+ - VERSION
268
+ - autotest/discover.rb
269
+ - features/step_definitions/tronprint_steps.rb
270
+ - features/support/env.rb
271
+ - features/tronprint.feature
272
+ - lib/tronprint.rb
273
+ - lib/tronprint/aggregator.rb
274
+ - lib/tronprint/application.rb
275
+ - lib/tronprint/cpu_monitor.rb
276
+ - lib/tronprint/rails.rb
277
+ - lib/tronprint/rails/generator.rb
278
+ - lib/tronprint/rails/tronprint_helper.rb
279
+ - spec/spec.opts
280
+ - spec/spec_helper.rb
281
+ - spec/tronprint/aggregator_spec.rb
282
+ - spec/tronprint/application_spec.rb
283
+ - spec/tronprint/computer_spec.rb
284
+ - spec/tronprint/cpu_monitor_spec.rb
285
+ - spec/tronprint/rails/tronprint_helper_spec.rb
286
+ - spec/tronprint_spec.rb
287
+ - tronprint.gemspec
288
+ has_rdoc: true
289
+ homepage: http://github.com/dkastner/tronprint
290
+ licenses: []
291
+
292
+ post_install_message:
293
+ rdoc_options: []
294
+
295
+ require_paths:
296
+ - lib
297
+ required_ruby_version: !ruby/object:Gem::Requirement
298
+ none: false
299
+ requirements:
300
+ - - ">="
301
+ - !ruby/object:Gem::Version
302
+ segments:
303
+ - 0
304
+ version: "0"
305
+ required_rubygems_version: !ruby/object:Gem::Requirement
306
+ none: false
307
+ requirements:
308
+ - - ">="
309
+ - !ruby/object:Gem::Version
310
+ segments:
311
+ - 0
312
+ version: "0"
313
+ requirements: []
314
+
315
+ rubyforge_project:
316
+ rubygems_version: 1.3.7
317
+ signing_key:
318
+ specification_version: 3
319
+ summary: Ruby process carbon footprinter
320
+ test_files:
321
+ - spec/spec_helper.rb
322
+ - spec/tronprint/aggregator_spec.rb
323
+ - spec/tronprint/application_spec.rb
324
+ - spec/tronprint/computer_spec.rb
325
+ - spec/tronprint/cpu_monitor_spec.rb
326
+ - spec/tronprint/rails/tronprint_helper_spec.rb
327
+ - spec/tronprint_spec.rb