active_graph 0.0.2

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/History.txt ADDED
@@ -0,0 +1,4 @@
1
+ == 0.0.1 2008-12-21
2
+
3
+ * 1 major enhancement:
4
+ * Initial release
data/Manifest.txt ADDED
@@ -0,0 +1,16 @@
1
+ History.txt
2
+ Manifest.txt
3
+ PostInstall.txt
4
+ README.rdoc
5
+ Rakefile
6
+ lib/active_graph.rb
7
+ lib/active_graph/active_record_extension.rb
8
+ script/console
9
+ script/destroy
10
+ script/generate
11
+ spec/active_graph_spec.rb
12
+ spec/spec.opts
13
+ spec/spec_helper.rb
14
+ tasks/rspec.rake
15
+ rails/init.rb
16
+ init.rb
data/PostInstall.txt ADDED
@@ -0,0 +1,7 @@
1
+
2
+ For more information on active_graph, see http://active_graph.rubyforge.org
3
+
4
+ NOTE: Change this information in PostInstall.txt
5
+ You can also delete it if you don't want it.
6
+
7
+
data/README.rdoc ADDED
@@ -0,0 +1,130 @@
1
+ = active_graph
2
+
3
+ http://github.com/kazjote/active_graph/tree/master
4
+
5
+ == DESCRIPTION:
6
+
7
+ Gem which makes filling data for Gruff graphs based on ActiveRecord objects much easier.
8
+
9
+ == FEATURES/PROBLEMS:
10
+
11
+ Good points:
12
+ * Ease of use
13
+ * Flexible
14
+ * Created in model but enable to customize presentation in controller
15
+
16
+ Bad points:
17
+ * Slow - requires many database calls (it is intended to create cacheable graphs)
18
+ * Do not allow to customize options after model is loaded (TODO)
19
+
20
+ == SYNOPSIS:
21
+
22
+ The simplies case (mosts are defaults - you probably won't use it):
23
+
24
+
25
+ class User < ActiveRecord::Base
26
+ active_graph :posts,
27
+ :series => {:submited_posts => {:value => :count_have_posts_between, :caption => "posts"}}
28
+
29
+ def self.count_have_posts_between(min, max)
30
+ count(:all, :conditions => "posts_count > #{min} AND posts_count <= #{max}")
31
+ end
32
+ end
33
+
34
+ Now, featured one. It will create a line graph, which
35
+ * starts at User.start_time,
36
+ * end one week later
37
+ * shows data with 1 day step
38
+ * defines x_axis with formated labels
39
+ * presents 2 data series
40
+
41
+
42
+ class User < ActiveRecord::Base
43
+
44
+ active_graph :new_posts,
45
+ :type => :line,
46
+ :start => Proc.new {@@start_time}, :end => Proc.new { @@start_time + 1.week },
47
+ :step => 1.day,
48
+ :x_axis => {:interval => 3, :method => Proc.new {|time| time.strftime("%d-%m") }},
49
+ :width => 100,
50
+ :series => {:submited_posts => {:value => :count_have_posts_between, :caption => "posts"},
51
+ :submited_posts2 => {:value => :count_have_posts2_between, :caption => "posts2"}}
52
+
53
+ def self.count_have_posts_between(min, max); end
54
+ def self.count_have_posts2_between(min, max); end
55
+
56
+ end
57
+
58
+ Statistic on user age?
59
+
60
+ active_graph :age, :type => :bar,
61
+ :start => 0, :end => 100, :step => 10,
62
+ :x_axis => {:interval => 1, :method => Proc.new {|age| "#{age}-#{age + 10}" }},
63
+ :series => {
64
+ :age => {:value => :count_aged_between, :caption => "Age" }
65
+ }
66
+
67
+ Now, create an action in your controller:
68
+
69
+ class UsersController < ApplicationController
70
+ def new_posts_graph
71
+ graph = User.new_posts_graph
72
+ send_data graph.to_blob, :type => "image/png", :disposition => "inline",
73
+ :filename => "new_users_graph.png"
74
+ end
75
+ end
76
+
77
+ graph is a normal Gruff object, so you can customize presentation before rendering.
78
+
79
+ == REQUIREMENTS:
80
+
81
+ * gem 'activesupport' >= 2.0.2
82
+ * gem 'metaid' >= 1.0
83
+ * gem 'gruff' >= 0.3.1
84
+
85
+ It can run without Rails (testcase does not use rails at all).
86
+
87
+ == INSTALL:
88
+
89
+ * sudo gem install active_graph
90
+
91
+ In your envrionment.rb:
92
+
93
+ config.gem "metaid"
94
+ config.gem "gruff"
95
+ config.gem "active_graph"
96
+
97
+ If you have older rails you can load it with initializer or directly in your model:
98
+
99
+ require 'gruff'
100
+ require 'active_graph'
101
+
102
+ class User < ActiveRecord::Base
103
+ extend ActiveGraph::ActiveRecordExtension
104
+ ...
105
+ end
106
+
107
+ == LICENSE:
108
+
109
+ (The MIT License)
110
+
111
+ Copyright (c) 2008 FIXME full name
112
+
113
+ Permission is hereby granted, free of charge, to any person obtaining
114
+ a copy of this software and associated documentation files (the
115
+ 'Software'), to deal in the Software without restriction, including
116
+ without limitation the rights to use, copy, modify, merge, publish,
117
+ distribute, sublicense, and/or sell copies of the Software, and to
118
+ permit persons to whom the Software is furnished to do so, subject to
119
+ the following conditions:
120
+
121
+ The above copyright notice and this permission notice shall be
122
+ included in all copies or substantial portions of the Software.
123
+
124
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
125
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
126
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
127
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
128
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
129
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
130
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,29 @@
1
+ %w[rubygems rake rake/clean fileutils newgem rubigen].each { |f| require f }
2
+ require File.dirname(__FILE__) + '/lib/active_graph'
3
+
4
+ # Generate all the Rake tasks
5
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
6
+ $hoe = Hoe.new('active_graph', ActiveGraph::VERSION) do |p|
7
+ p.developer('Kacper Bielecki', 'kazjote@gmail.com')
8
+ p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
9
+ p.rubyforge_name = 'activegraph'
10
+ p.extra_deps = [
11
+ ['activesupport','>= 2.0.2'],
12
+ ['metaid', '>= 1.0'],
13
+ ['gruff', '>= 0.3.1']
14
+ ]
15
+ p.extra_dev_deps = [
16
+ ['newgem', ">= #{::Newgem::VERSION}"]
17
+ ]
18
+
19
+ p.clean_globs |= %w[**/.DS_Store tmp *.log]
20
+ path = (p.rubyforge_name == p.name) ? p.rubyforge_name : "\#{p.rubyforge_name}/\#{p.name}"
21
+ p.remote_rdoc_dir = File.join(path.gsub(/^#{p.rubyforge_name}\/?/,''), 'rdoc')
22
+ p.rsync_args = '-av --delete --ignore-errors'
23
+ end
24
+
25
+ require 'newgem/tasks' # load /tasks/*.rake
26
+ Dir['tasks/**/*.rake'].each { |t| load t }
27
+
28
+ # TODO - want other tests/tasks run by default? Add them to the list
29
+ # task :default => [:spec, :features]
data/init.rb ADDED
@@ -0,0 +1,3 @@
1
+ require "active_graph"
2
+
3
+ ActiveRecord::Base.send(:extend, ActiveGraph::ActiveRecordExtension)
@@ -0,0 +1,78 @@
1
+ require 'rubygems'
2
+ require 'metaid'
3
+
4
+ module ActiveGraph
5
+ module Support # :nodoc:
6
+ def self.valualize(value_or_proc)
7
+ value_or_proc.is_a?(Proc) ? value_or_proc.call : value_or_proc
8
+ end
9
+ end
10
+
11
+ module ActiveRecordExtension
12
+ # See README for examples and ActiveGraph for defaults.
13
+ #
14
+ # Available options are:
15
+ # * :start - proc or value - first value taken into consideration while creating a graph
16
+ # * :end - proc or value - last value
17
+ # * :step - x-axis step
18
+ # * :type - type of the graph (for example :line, :bar, see gruff documentation for other)
19
+ # * :width - target width of the image
20
+ # * :x_axis - options for x_axis
21
+ # * :series - data series
22
+ #
23
+ # x_axis is a hash with following keys allowed:
24
+ # * :interval - number of steps between two value labels
25
+ # * :method - proc which creates the label for particular x point
26
+ #
27
+ # series is a hash, which keys are the symbols of data series and value is a hash with following keys:
28
+ # * :value - symbol of the two argument method which gathers data for the graph
29
+ # * :caption - caption
30
+ def active_graph(name, options)
31
+ graph_start = options[:start] || ActiveGraph::DEFAULT_START
32
+ graph_end = options[:end] || ActiveGraph::DEFAULT_END
33
+ graph_type = options[:type] || ActiveGraph::DEFAULT_TYPE
34
+ width = options[:width] || ActiveGraph::DEFAULT_WIDTH
35
+ step = options[:step] || ActiveGraph::DEFAULT_STEP
36
+ x_axis_interval = (options[:x_axis] && options[:x_axis][:interval]) ||
37
+ ActiveGraph::DEFAULT_X_AXIS_INTERVAL
38
+ x_axis_method = (options[:x_axis] && options[:x_axis][:method]) ||
39
+ ActiveGraph::DEFAULT_X_AXIS_METHOD
40
+ series = options[:series]
41
+ raise "You must provide at least one data serie" unless series.is_a?(Hash)
42
+
43
+ graph_class = begin
44
+ "Gruff::#{graph_type.to_s.camelize}".constantize
45
+ rescue NameError
46
+ raise "No such graph type '#{graph_type}'"
47
+ end
48
+
49
+ meta_def("#{name}_graph") do
50
+ local_graph_start = Support.valualize(graph_start)
51
+ local_graph_end = Support.valualize(graph_end)
52
+ periods_count = ((local_graph_end - local_graph_start) / step).ceil
53
+ g = graph_class.new(width)
54
+
55
+ series.each_pair do |serie_name, serie_options|
56
+ data_method = serie_options[:value]
57
+ caption = serie_options[:caption]
58
+
59
+ data = Array.new(periods_count) do |i|
60
+ period_start = local_graph_start + i * step
61
+ period_end = period_start + step
62
+ send(data_method, period_start, period_end)
63
+ end
64
+ g.data(caption, data)
65
+ end
66
+
67
+ labels = Array.new((periods_count / x_axis_interval.to_f).ceil) do |i|
68
+ period_start = local_graph_start + i * x_axis_interval * step
69
+ label = x_axis_method.is_a?(Proc) ?
70
+ x_axis_method.call(period_start) : self.send(x_axis_method, period_start)
71
+ [i * x_axis_interval, label]
72
+ end.flatten
73
+ g.labels = Hash[*labels]
74
+ g
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,18 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'active_graph/active_record_extension'
5
+ require 'rubygems'
6
+ require 'activesupport'
7
+
8
+ module ActiveGraph
9
+ VERSION = '0.0.2'
10
+
11
+ DEFAULT_START = 0
12
+ DEFAULT_END = 7
13
+ DEFAULT_TYPE = :bar
14
+ DEFAULT_STEP = 1
15
+ DEFAULT_X_AXIS_INTERVAL = 1
16
+ DEFAULT_X_AXIS_METHOD = Proc.new {|x| "#{x} - #{x + ActiveGraph::DEFAULT_X_AXIS_INTERVAL}"}
17
+ DEFAULT_WIDTH=400
18
+ end
data/rails/init.rb ADDED
@@ -0,0 +1,3 @@
1
+ require "active_graph"
2
+
3
+ ActiveRecord::Base.send(:extend, ActiveGraph::ActiveRecordExtension)
data/script/console ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # File: script/console
3
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
+
5
+ libs = " -r irb/completion"
6
+ # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
+ # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/active_graph.rb'}"
9
+ puts "Loading active_graph gem"
10
+ exec "#{irb} #{libs} --simple-prompt"
data/script/destroy ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
data/script/generate ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
@@ -0,0 +1,148 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ module Gruff # :nodoc:all
4
+ module BasicMethods
5
+ attr_accessor :labels
6
+ attr_accessor :width
7
+
8
+ def data(label, data); end
9
+
10
+ def initialize(width)
11
+ @width = width
12
+ end
13
+ end
14
+
15
+ class Bar
16
+ include BasicMethods
17
+ end
18
+
19
+ class Line
20
+ include BasicMethods
21
+ end
22
+ end
23
+
24
+ class ActiveGraphTestModel # :nodoc:
25
+ extend ActiveGraph::ActiveRecordExtension
26
+
27
+ attr_accessor :start_time
28
+
29
+ active_graph :posts,
30
+ :series => {:submited_posts => {:value => :count_have_posts_between, :caption => "posts"}}
31
+
32
+ active_graph :new_posts,
33
+ :type => :line,
34
+ :start => Proc.new {@@start_time}, :end => Proc.new { @@start_time + 1.week },
35
+ :step => 1.day,
36
+ :x_axis => {:interval => 3, :method => Proc.new {|time| time.strftime("%d-%m") }},
37
+ :width => 100,
38
+ :series => {:submited_posts => {:value => :count_have_posts_between, :caption => "posts"},
39
+ :submited_posts2 => {:value => :count_have_posts2_between, :caption => "posts2"}}
40
+
41
+ def self.count_have_posts_between(min, max); end
42
+ def self.count_have_posts2_between(min, max); end
43
+ end
44
+
45
+ describe "ActiveGraph" do
46
+ it "should define method for creating the graph" do
47
+ ActiveGraphTestModel.respond_to?(:posts_graph).should be_true
48
+ end
49
+
50
+ describe "while based on defaults" do
51
+ before do
52
+ @graph = Gruff::Bar.new(400)
53
+ Gruff::Bar.should_receive(:new).with(400).and_return(@graph)
54
+ default_start = ActiveGraph::DEFAULT_START
55
+ default_end = ActiveGraph::DEFAULT_END
56
+ @number_of_periods = default_end - default_start
57
+ end
58
+
59
+ it "should gather data from default number of periods" do
60
+ @number_of_periods.times do |i|
61
+ ActiveGraphTestModel.should_receive(:count_have_posts_between).
62
+ with(i, i+1)
63
+ end
64
+ ActiveGraphTestModel.posts_graph
65
+ end
66
+
67
+ it "should set correct labels" do
68
+ labels = Hash[*Array.new(@number_of_periods) {|i| [i, "#{i} - #{i+1}"]}.flatten]
69
+ ActiveGraphTestModel.posts_graph
70
+ @graph.labels.should == labels
71
+ end
72
+
73
+ it "should set data properly" do
74
+ @number_of_periods.times do |i|
75
+ ActiveGraphTestModel.should_receive(:count_have_posts_between).
76
+ with(i, i+1).and_return(i)
77
+ end
78
+ data = Array.new(@number_of_periods) {|i| i}
79
+ @graph.should_receive(:data).with("posts", data)
80
+ ActiveGraphTestModel.posts_graph
81
+ end
82
+
83
+ it "should create the graph" do
84
+ ActiveGraphTestModel.posts_graph.should == @graph
85
+ end
86
+
87
+ it "should set default width" do
88
+ ActiveGraphTestModel.posts_graph.width.should == 400
89
+ end
90
+ end
91
+
92
+ describe "while used with all custom parameters" do
93
+ before do
94
+ @start_time = Time.now - 1.month
95
+ ActiveGraphTestModel.send(:class_variable_set, :@@start_time, @start_time)
96
+ end
97
+
98
+ it "should raise error on unknown graph type" do
99
+ lambda do
100
+ ActiveGraphTestModel.active_graph :wrong_type,
101
+ :type => :unknown,
102
+ :series => {:submited_posts => {:value => :count_have_posts_between,
103
+ :caption => "posts"}}
104
+ end.should raise_error
105
+ end
106
+
107
+ it "should be possible to specify start and end options with proc and step with value" do
108
+ 7.times do |i|
109
+ ActiveGraphTestModel.should_receive(:count_have_posts_between).
110
+ with(@start_time + i.days, @start_time + (i + 1).days)
111
+ end
112
+ ActiveGraphTestModel.new_posts_graph
113
+ end
114
+
115
+ it "should set correct width" do
116
+ ActiveGraphTestModel.new_posts_graph.width.should == 100
117
+ end
118
+
119
+ describe "and drawing the graph" do
120
+ before do
121
+ @graph = Gruff::Line.new(400)
122
+ Gruff::Line.should_receive(:new).and_return(@graph)
123
+ end
124
+
125
+ it "should be possible to specify graph type" do
126
+ ActiveGraphTestModel.new_posts_graph.class.should == Gruff::Line
127
+ end
128
+
129
+ it "should be possible to specify many series" do
130
+ @graph.should_receive(:data).with("posts", an_instance_of(Array))
131
+ @graph.should_receive(:data).with("posts2", an_instance_of(Array))
132
+ ActiveGraphTestModel.new_posts_graph
133
+ end
134
+
135
+ it "should be possible to set x_axis interval" do
136
+ ActiveGraphTestModel.new_posts_graph
137
+ @graph.labels.keys.sort.should == [0, 3, 6]
138
+ end
139
+
140
+ it "should be possible to specify x_axis labeling method" do
141
+ ActiveGraphTestModel.new_posts_graph
142
+ @graph.labels.should == {0 => @start_time.strftime("%d-%m"),
143
+ 3 => (@start_time + 3.days).strftime("%d-%m"),
144
+ 6 => (@start_time + 6.days).strftime("%d-%m")}
145
+ end
146
+ end
147
+ end
148
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --colour
@@ -0,0 +1,10 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems'
5
+ gem 'rspec'
6
+ require 'spec'
7
+ end
8
+
9
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
10
+ require 'active_graph'
data/tasks/rspec.rake ADDED
@@ -0,0 +1,21 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems'
5
+ require 'spec'
6
+ end
7
+ begin
8
+ require 'spec/rake/spectask'
9
+ rescue LoadError
10
+ puts <<-EOS
11
+ To use rspec for testing you must install rspec gem:
12
+ gem install rspec
13
+ EOS
14
+ exit(0)
15
+ end
16
+
17
+ desc "Run the specs under spec/models"
18
+ Spec::Rake::SpecTask.new do |t|
19
+ t.spec_opts = ['--options', "spec/spec.opts"]
20
+ t.spec_files = FileList['spec/**/*_spec.rb']
21
+ end
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: active_graph
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Kacper Bielecki
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-01-02 00:00:00 +01:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activesupport
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.0.2
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: metaid
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "1.0"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: gruff
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.3.1
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: newgem
47
+ type: :development
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 1.2.3
54
+ version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: hoe
57
+ type: :development
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 1.8.0
64
+ version:
65
+ description: Gem which makes filling data for Gruff graphs based on ActiveRecord objects much easier.
66
+ email:
67
+ - kazjote@gmail.com
68
+ executables: []
69
+
70
+ extensions: []
71
+
72
+ extra_rdoc_files:
73
+ - History.txt
74
+ - Manifest.txt
75
+ - PostInstall.txt
76
+ - README.rdoc
77
+ files:
78
+ - History.txt
79
+ - Manifest.txt
80
+ - PostInstall.txt
81
+ - README.rdoc
82
+ - Rakefile
83
+ - lib/active_graph.rb
84
+ - lib/active_graph/active_record_extension.rb
85
+ - script/console
86
+ - script/destroy
87
+ - script/generate
88
+ - spec/active_graph_spec.rb
89
+ - spec/spec.opts
90
+ - spec/spec_helper.rb
91
+ - tasks/rspec.rake
92
+ - rails/init.rb
93
+ - init.rb
94
+ has_rdoc: true
95
+ homepage: http://github.com/kazjote/active_graph/tree/master
96
+ post_install_message:
97
+ rdoc_options:
98
+ - --main
99
+ - README.rdoc
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: "0"
107
+ version:
108
+ required_rubygems_version: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: "0"
113
+ version:
114
+ requirements: []
115
+
116
+ rubyforge_project: activegraph
117
+ rubygems_version: 1.2.0
118
+ signing_key:
119
+ specification_version: 2
120
+ summary: Gem which makes filling data for Gruff graphs based on ActiveRecord objects much easier.
121
+ test_files: []
122
+