├── MIT-LICENSE ├── README ├── Rakefile ├── assets ├── javascripts │ └── swfobject.js ├── open-flash-chart-bar-clicking.swf └── open-flash-chart.swf ├── init.rb ├── install.rb ├── lib ├── open_flash_chart.rb └── open_flash_chart │ ├── area_base.rb │ ├── area_hollow.rb │ ├── area_line.rb │ ├── arrow.rb │ ├── background.rb │ ├── bar.rb │ ├── bar_3d.rb │ ├── bar_base.rb │ ├── bar_filled.rb │ ├── bar_glass.rb │ ├── bar_sketch.rb │ ├── bar_stack.rb │ ├── base.rb │ ├── candle.rb │ ├── chart.rb │ ├── dot_base.rb │ ├── h_bar.rb │ ├── legend.rb │ ├── line.rb │ ├── line_base.rb │ ├── line_dot.rb │ ├── line_hollow.rb │ ├── line_style.rb │ ├── linear_regression.rb │ ├── menu.rb │ ├── ofc_ajax.rb │ ├── open_flash_chart_object.rb │ ├── pie.rb │ ├── radar_axis.rb │ ├── radar_axis_labels.rb │ ├── radar_spoke_labels.rb │ ├── scatter.rb │ ├── scatter_line.rb │ ├── shape.rb │ ├── sugar.rb │ ├── tags.rb │ ├── title.rb │ ├── tooltip.rb │ ├── upload_image.rb │ ├── x_axis.rb │ ├── x_axis_label.rb │ ├── x_axis_labels.rb │ ├── x_legend.rb │ ├── y_axis.rb │ ├── y_axis_base.rb │ ├── y_axis_label.rb │ ├── y_axis_labels.rb │ ├── y_axis_right.rb │ ├── y_legend.rb │ └── y_legend_right.rb ├── tasks └── open_flash_chart_tasks.rake ├── test └── open_flash_chart_test.rb └── uninstall.rb /MIT-LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2008 [name of plugin creator] 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. 21 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | OpenFlashChart Version 2.0.0 11/14/2008 2 | ============== 3 | 4 | 1) rails ofc2_test_app 5 | 2) cd ofc2_test_app 6 | 3) script/plugin install git://github.com/pullmonkey/open_flash_chart.git 7 | 3.1) If the install didn't copy the contents of the assets directory to your RAILS_ROOT/public directory, make sure to do so. 8 | 4) script/generate controller test_it 9 | 10 | 5) Add the following to the test_it_controller.rb in RAILS_ROOT/app/controllers: 11 | class TestItController < ApplicationController 12 | 13 | def index 14 | respond_to do |wants| 15 | wants.html { 16 | @graph = open_flash_chart_object( 600, 300, url_for( :action => 'index', :format => :json ) ) 17 | } 18 | wants.json { 19 | chart = OpenFlashChart.new( "MY TITLE" ) do |c| 20 | c << BarGlass.new( :values => (1..10).sort_by{rand} ) 21 | end 22 | render :text => chart, :layout => false 23 | } 24 | end 25 | end 26 | 27 | end 28 | 29 | 6) Add the following to index.html.erb in RAILS_ROOT/app/views/test_it/: 30 | 31 | 32 | 33 | 34 | 35 | <%= @graph %> 36 | 37 | 38 | 39 | 7) script/server 40 | 8) Let me know how it goes, thanks. 41 | 42 | 43 | Example 44 | ======= 45 | 46 | Example above and more to follow here - http://www.pullmonkey.com/projects/open_flash_chart 47 | 48 | Notes 49 | ====== 50 | The plugin breaks if the json gem is included, because of the way that the gem generates json vs the rails native json generator. 51 | 52 | Not tested, but klochner claims to have implemented a fix for it here - http://github.com/klochner/open_flash_chart/commit/00cf531387880af8c49ed5118737f0492b437f75 53 | 54 | Copyright (c) 2008 PullMonkey, released under the MIT license 55 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | require 'rake' 2 | require 'rake/testtask' 3 | require 'rake/rdoctask' 4 | 5 | desc 'Default: run unit tests.' 6 | task :default => :test 7 | 8 | desc 'Test the open_flash_chart plugin.' 9 | Rake::TestTask.new(:test) do |t| 10 | t.libs << 'lib' 11 | t.pattern = 'test/**/*_test.rb' 12 | t.verbose = true 13 | end 14 | 15 | desc 'Generate documentation for the open_flash_chart plugin.' 16 | Rake::RDocTask.new(:rdoc) do |rdoc| 17 | rdoc.rdoc_dir = 'rdoc' 18 | rdoc.title = 'OpenFlashChart' 19 | rdoc.options << '--line-numbers' << '--inline-source' 20 | rdoc.rdoc_files.include('README') 21 | rdoc.rdoc_files.include('lib/**/*.rb') 22 | end 23 | -------------------------------------------------------------------------------- /assets/javascripts/swfobject.js: -------------------------------------------------------------------------------- 1 | /* SWFObject v2.1 2 | Copyright (c) 2007-2008 Geoff Stearns, Michael Williams, and Bobby van der Sluis 3 | This software is released under the MIT License 4 | */ 5 | var swfobject=function(){var b="undefined",Q="object",n="Shockwave Flash",p="ShockwaveFlash.ShockwaveFlash",P="application/x-shockwave-flash",m="SWFObjectExprInst",j=window,K=document,T=navigator,o=[],N=[],i=[],d=[],J,Z=null,M=null,l=null,e=false,A=false;var h=function(){var v=typeof K.getElementById!=b&&typeof K.getElementsByTagName!=b&&typeof K.createElement!=b,AC=[0,0,0],x=null;if(typeof T.plugins!=b&&typeof T.plugins[n]==Q){x=T.plugins[n].description;if(x&&!(typeof T.mimeTypes!=b&&T.mimeTypes[P]&&!T.mimeTypes[P].enabledPlugin)){x=x.replace(/^.*\s+(\S+\s+\S+$)/,"$1");AC[0]=parseInt(x.replace(/^(.*)\..*$/,"$1"),10);AC[1]=parseInt(x.replace(/^.*\.(.*)\s.*$/,"$1"),10);AC[2]=/r/.test(x)?parseInt(x.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof j.ActiveXObject!=b){var y=null,AB=false;try{y=new ActiveXObject(p+".7")}catch(t){try{y=new ActiveXObject(p+".6");AC=[6,0,21];y.AllowScriptAccess="always"}catch(t){if(AC[0]==6){AB=true}}if(!AB){try{y=new ActiveXObject(p)}catch(t){}}}if(!AB&&y){try{x=y.GetVariable("$version");if(x){x=x.split(" ")[1].split(",");AC=[parseInt(x[0],10),parseInt(x[1],10),parseInt(x[2],10)]}}catch(t){}}}}var AD=T.userAgent.toLowerCase(),r=T.platform.toLowerCase(),AA=/webkit/.test(AD)?parseFloat(AD.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,q=false,z=r?/win/.test(r):/win/.test(AD),w=r?/mac/.test(r):/mac/.test(AD);/*@cc_on q=true;@if(@_win32)z=true;@elif(@_mac)w=true;@end@*/return{w3cdom:v,pv:AC,webkit:AA,ie:q,win:z,mac:w}}();var L=function(){if(!h.w3cdom){return }f(H);if(h.ie&&h.win){try{K.write(" 14 | #{self.to_open_flash_chart_data(div_name)} 15 |
16 | OUTPUT 17 | end 18 | 19 | def link_to_ofc_load(link_text, div_name) 20 | data_name = "#{link_text.gsub(" ","_")}_#{div_name.gsub(" ","_")}" 21 | <<-OUTPUT 22 | 29 | #{ActionView::Base.new.link_to_function link_text, "load_#{data_name}()"} 30 | OUTPUT 31 | end 32 | 33 | def link_to_remote_ofc_load(link_text, div_name, url) 34 | fx_name = "#{link_text.gsub(" ","_")}_#{div_name.gsub(" ","_")}" 35 | <<-OUTPUT 36 | 45 | #{ActionView::Base.new.link_to_function link_text, "reload_#{fx_name}()"} 46 | OUTPUT 47 | end 48 | 49 | def periodically_call_to_remote_ofc_load(div_name, url, options={}) 50 | fx_name = "#{div_name.gsub(" ","_")}" 51 | # fix a bug in rails with url_for 52 | url = url.gsub("&","&") 53 | <<-OUTPUT 54 | 63 | #{periodically_call_function("reload_#{fx_name}()", options)} 64 | OUTPUT 65 | end 66 | 67 | def findSWF_method 68 | <<-OUTPUT 69 | function findSWF(movieName) { 70 | if (navigator.appName.indexOf("Microsoft")!= -1) { 71 | return window[movieName]; 72 | } else { 73 | return document[movieName]; 74 | } 75 | } 76 | OUTPUT 77 | end 78 | 79 | def to_open_flash_chart_data(id="in", options={}) 80 | # this builds the open_flash_chart_data js function 81 | <<-OUTPUT 82 | 92 | OUTPUT 93 | end 94 | 95 | def save_as_image(post_url, options={}) 96 | id = options[:id] || "in" 97 | 98 | <<-OUTPUT 99 | 113 | OUTPUT 114 | end 115 | end 116 | end 117 | -------------------------------------------------------------------------------- /lib/open_flash_chart/open_flash_chart_object.rb: -------------------------------------------------------------------------------- 1 | require 'digest/sha1' 2 | 3 | module OpenFlashChart 4 | module Controller 5 | def open_flash_chart_object(width, height, url, use_swfobject=true, base="/", swf_file_name="open-flash-chart.swf") 6 | get_object_values(url) 7 | get_html(@ofc_url, @div_name, base, swf_file_name, width, height, @protocol, @obj_id) 8 | end 9 | 10 | # if you want the div name back for working with js, this is the ticket 11 | def open_flash_chart_object_and_div_name(width, height, url, use_swfobject=true, base="/", swf_file_name="open-flash-chart.swf") 12 | get_object_values(url) 13 | html = get_html(@ofc_url, @div_name, base, swf_file_name, width, height, @protocol, @obj_id) 14 | return [html, @div_name] 15 | end 16 | 17 | def open_flash_chart_object_from_hash(url, options={}) 18 | get_object_values(url) 19 | get_html(@ofc_url, 20 | options[:div_name] || @div_name, 21 | options[:base] || "/", 22 | options[:swf_file_name] || "open-flash-chart.swf", 23 | options[:width] || 550, 24 | options[:height] || 300, 25 | options[:protocol] || @protocol, 26 | options[:obj_id] || @obj_id) 27 | end 28 | 29 | def get_object_values(url) 30 | @ofc_url = CGI::escape(url) 31 | # need something that will not be repeated on the same request 32 | @special_hash = Base64.encode64(Digest::SHA1.digest("#{rand(1<<64)}/#{Time.now.to_f}/#{Process.pid}/#{@ofc_url}"))[0..7] 33 | # only good characters for our div 34 | @special_hash = @special_hash.gsub(/[^a-zA-Z0-9]/,rand(10).to_s) 35 | @obj_id = "chart_#{@special_hash}" # some sequencing without all the work of tracking it 36 | @div_name = "flash_content_#{@special_hash}" 37 | @protocol = "http" # !request.nil? ? request.env["HTTPS"] || "http" : "http" 38 | end 39 | 40 | def get_html(url, div_name, base, swf_file_name, width, height, protocol, obj_id) 41 | # NOTE: users should put this in the section themselves: 42 | ## 43 | 44 | <<-HTML 45 |
46 | 49 | HTML 50 | end 51 | end 52 | 53 | end 54 | -------------------------------------------------------------------------------- /lib/open_flash_chart/pie.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | 3 | class PieValue < Base 4 | def initialize(value, label, args={}) 5 | super args 6 | @value = value 7 | @label = label 8 | @animate = [] 9 | end 10 | 11 | def set_label(label, label_color, font_size) 12 | self.label = label 13 | self.label_colour = label_color 14 | self.font_size = font_size 15 | end 16 | 17 | def on_click(event) 18 | @on_click = event 19 | end 20 | 21 | def add_animation animation 22 | @animate ||= [] 23 | @animate << animation 24 | return self 25 | end 26 | end 27 | 28 | class BasePieAnimation < Base; end 29 | 30 | class PieFade < BasePieAnimation 31 | def initialize args={} 32 | @type = "fade" 33 | super 34 | end 35 | end 36 | 37 | class PieBounce < BasePieAnimation 38 | def initialize distance, args={} 39 | @type = "bounce" 40 | @distance = distance 41 | super 42 | end 43 | end 44 | 45 | class Pie < Base 46 | def initialize args={} 47 | @type = "pie" 48 | @colours = [] 49 | super 50 | end 51 | 52 | def set_animate bool 53 | self.add_animation PieFade.new if bool 54 | end 55 | 56 | def add_animation animation 57 | @animate ||= [] 58 | @animate << animation 59 | return self 60 | end 61 | 62 | def set_gradient_fill 63 | @gradient_fill = true 64 | end 65 | 66 | def set_no_labels 67 | @no_labels = true 68 | end 69 | 70 | def on_click(event) 71 | @on_click = event 72 | end 73 | end 74 | 75 | end 76 | -------------------------------------------------------------------------------- /lib/open_flash_chart/radar_axis.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | 3 | class RadarAxis < Base 4 | def initialize(max, args={}) 5 | super args 6 | @max = max 7 | end 8 | end 9 | 10 | end -------------------------------------------------------------------------------- /lib/open_flash_chart/radar_axis_labels.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | 3 | class RadarAxisLabels < Base 4 | def initialize(labels, args={}) 5 | super args 6 | @labels = labels 7 | end 8 | end 9 | 10 | end -------------------------------------------------------------------------------- /lib/open_flash_chart/radar_spoke_labels.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | 3 | class RadarSpokeLabels < Base 4 | def initialize(labels, args={}) 5 | super args 6 | @labels = labels 7 | end 8 | end 9 | 10 | end -------------------------------------------------------------------------------- /lib/open_flash_chart/scatter.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | 3 | class ScatterValue < Base 4 | def initialize(x,y,dot_size=-1, args={}) 5 | super args 6 | @x = x 7 | @y = y 8 | @dot_size = dot_size if dot_size.to_i > 0 9 | end 10 | end 11 | 12 | class Scatter < Base 13 | def initialize(colour, dot_style=nil, args={}) 14 | @type = "scatter" 15 | @colour = colour 16 | @dot_style = dot_style 17 | @values = [] 18 | super args 19 | end 20 | end 21 | 22 | end 23 | -------------------------------------------------------------------------------- /lib/open_flash_chart/scatter_line.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | 3 | class ScatterLine < Base 4 | def initialize(colour, width, args={}) 5 | super args 6 | @type = 'scatter_line' 7 | @colour = colour 8 | @width = width 9 | end 10 | 11 | def set_step_horizonal 12 | @stepgraph = 'horizontal' 13 | end 14 | 15 | def set_step_vertical 16 | @stepgraph = 'vertical' 17 | end 18 | end 19 | 20 | end 21 | -------------------------------------------------------------------------------- /lib/open_flash_chart/shape.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | 3 | class ShapePoint < Base 4 | def initialize(x, y, args={}) 5 | super args 6 | @x = x 7 | @y = y 8 | end 9 | end 10 | 11 | class Shape < Base 12 | def initialize(colour, args={}) 13 | @type = "shape" 14 | @colour = colour 15 | @values = [] 16 | super args 17 | end 18 | end 19 | 20 | end -------------------------------------------------------------------------------- /lib/open_flash_chart/sugar.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | class SStar < Star 3 | def initialize(colour, size, args={}) 4 | super args 5 | @colour = colour 6 | @size = size 7 | end 8 | end 9 | 10 | class SBox < Anchor 11 | def initialize(colour, size, args={}) 12 | super args 13 | @colour = colour 14 | @size = size 15 | @sides = 4 16 | @rotation = 45 17 | end 18 | end 19 | 20 | class SHollowDot < HollowDot 21 | def initialize(colour, size, args={}) 22 | super args 23 | @colour = colour 24 | @size = size 25 | end 26 | end 27 | end 28 | -------------------------------------------------------------------------------- /lib/open_flash_chart/tags.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | class OFCTags < Base 3 | def initialize args={} 4 | super args 5 | @type = 'tags' 6 | @values = [] 7 | end 8 | 9 | def font(font, size) 10 | @font = font 11 | @font_size = size 12 | end 13 | 14 | def padding(x,y) 15 | @pad_x = x 16 | @pad_y = y 17 | end 18 | 19 | def align_x_center 20 | @align_x = "center" 21 | end 22 | 23 | def align_x_left 24 | @align_x = "left" 25 | end 26 | 27 | def align_x_right 28 | @align_x = "right" 29 | end 30 | 31 | def align_y_above 32 | @align_y = "above" 33 | end 34 | 35 | def align_y_below 36 | @align_y = "below" 37 | end 38 | 39 | def align_y_center 40 | @align_y = "center" 41 | end 42 | 43 | def style(bold, underline, border, alpha) 44 | @bold = bold 45 | @border = border 46 | @underline = underline 47 | @alpha = alpha 48 | end 49 | 50 | def append_tag(tag) 51 | @values << tag 52 | end 53 | end 54 | 55 | class OFCTag < Base 56 | def initialize(x,y, args={}) 57 | super args 58 | @x = x 59 | @y = y 60 | end 61 | end 62 | end 63 | -------------------------------------------------------------------------------- /lib/open_flash_chart/title.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | 3 | class Title < Base 4 | def initialize(text='', args = {}) 5 | super args 6 | @text = text 7 | end 8 | end 9 | 10 | end -------------------------------------------------------------------------------- /lib/open_flash_chart/tooltip.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | 3 | class Tooltip < Base 4 | def set_body_style(style) 5 | @body = style 6 | end 7 | 8 | def set_title_style(style) 9 | @title = style 10 | end 11 | 12 | def set_background_colour(bg) 13 | @background = bg 14 | end 15 | 16 | def set_proximity 17 | @mouse = 1 18 | end 19 | 20 | def set_hover 21 | @mouse = 2 22 | end 23 | end 24 | 25 | end -------------------------------------------------------------------------------- /lib/open_flash_chart/upload_image.rb: -------------------------------------------------------------------------------- 1 | # TODO 2 | -------------------------------------------------------------------------------- /lib/open_flash_chart/x_axis.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | 3 | class XAxis < Base 4 | def set_3d(v) 5 | @threed = v 6 | end 7 | # for some reason the json that needs to be produced is like this: 8 | # "x_axis": { "offset": false, "labels": { "labels": [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ] } } 9 | # note the "labels":{"labels": ....} 10 | def set_labels(labels) 11 | @labels = labels 12 | @labels = {:labels => labels} unless labels.is_a?(XAxisLabels) 13 | end 14 | 15 | alias_method :labels=, :set_labels 16 | end 17 | 18 | end -------------------------------------------------------------------------------- /lib/open_flash_chart/x_axis_label.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | 3 | class XAxisLabel < Base 4 | def initialize(text, colour, size, rotate, args={}) 5 | super args 6 | @text = text 7 | @colour = colour 8 | @size = size 9 | @rotate = rotate 10 | end 11 | 12 | def set_vertical 13 | @rotate = "vertical" 14 | end 15 | 16 | def set_visible 17 | @visible = true 18 | end 19 | end 20 | 21 | end -------------------------------------------------------------------------------- /lib/open_flash_chart/x_axis_labels.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | 3 | class XAxisLabels < Base 4 | def set_vertical 5 | @rotate = 270 6 | end 7 | end 8 | 9 | end 10 | -------------------------------------------------------------------------------- /lib/open_flash_chart/x_legend.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | 3 | class XLegend < Base 4 | def initialize(text, args={}) 5 | super args 6 | @text = text 7 | end 8 | end 9 | 10 | end -------------------------------------------------------------------------------- /lib/open_flash_chart/y_axis.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | class YAxis < YAxisBase ; end 3 | end -------------------------------------------------------------------------------- /lib/open_flash_chart/y_axis_base.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | class YAxisBase < Base 3 | def set_vertical 4 | @rotate = "vertical" 5 | end 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /lib/open_flash_chart/y_axis_label.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | class YAxisLabel < Base 3 | def initialize(y, text) 4 | @y = y 5 | @text = text 6 | end 7 | 8 | def set_vertical 9 | @rotate = "vertical" 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /lib/open_flash_chart/y_axis_labels.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | class YAxisLabels < Base 3 | def set_vertical 4 | @rotate = 270 5 | end 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /lib/open_flash_chart/y_axis_right.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | class YAxisRight < YAxisBase 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /lib/open_flash_chart/y_legend.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | 3 | class YLegend < Base 4 | def initialize(text = '', args={}) 5 | super args 6 | @text = text 7 | end 8 | end 9 | 10 | end -------------------------------------------------------------------------------- /lib/open_flash_chart/y_legend_right.rb: -------------------------------------------------------------------------------- 1 | module OpenFlashChart 2 | 3 | class YLegendRight < YLegend 4 | end 5 | 6 | end 7 | -------------------------------------------------------------------------------- /tasks/open_flash_chart_tasks.rake: -------------------------------------------------------------------------------- 1 | # desc "Explaining what the task does" 2 | # task :open_flash_chart do 3 | # # Task goes here 4 | # end 5 | -------------------------------------------------------------------------------- /test/open_flash_chart_test.rb: -------------------------------------------------------------------------------- 1 | require 'test/unit' 2 | 3 | class OpenFlashChartTest < Test::Unit::TestCase 4 | # Replace this with your real tests. 5 | def test_this_plugin 6 | flunk 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /uninstall.rb: -------------------------------------------------------------------------------- 1 | # Uninstall hook code here 2 | --------------------------------------------------------------------------------