Hi Greg,
Thanks a lot for your information. We will very seriously consider to release ChartDirector for Ruby as a gem.
When we released "ChartDirector for Ruby", we were worried that many Ruby hosting companies did not allow custom gems. (I suspect this is still the case today.) So we would need a method that can work without any specific installation step (other than to copy files to the hard disk).
Currently, for a Rails application, you just need to copy the ChartDirector for Ruby library files to the "vendor" subdirectory of the Rails application directory. No installation is needed. You can choose to run the "install.rb" script included in ChartDirector if you are using Ruby but not Rails.
I have never used "Bundler" before. From reading the Bundlers web page, my interpretation is that if you want to install software using "Bundler", then the software must be in a gem format. However, you can "install" the software without using "Bundler". Also, you may not need to "install" the software at all. As mentioned above, ChartDirector for Ruby does not require any particular installation step (other than to copy files to the hard disk).
I have not tried JRuby before. From the JRuby web page, it seems to suggest JRuby can use Java libraries. ChartDirector for JSP/Java is a Java library, so its API should be accessible from JRuby. The API of ChartDirector for JSP/Java and ChartDirector for Ruby are almost identical. I have attached the Ruby and Java version of the "Multiline Chart" sample code for your reference. You can see that they are very similar.
Regards
Peter Kwan
=========== Ruby Version ============
#!/usr/bin/env ruby
require("chartdirector")
# The data for the line chart
data0 = [42, 49, 33, 38, 51, 46, 29, 41, 44, 57, 59, 52, 37, 34, 51, 56, 56, 60, 70,
76, 63, 67, 75, 64, 51]
data1 = [50, 55, 47, 34, 42, 49, 63, 62, 73, 59, 56, 50, 64, 60, 67, 67, 58, 59, 73,
77, 84, 82, 80, 84, 98]
data2 = [36, 28, 25, 33, 38, 20, 22, 30, 25, 33, 30, 24, 28, 15, 21, 26, 46, 42, 48,
45, 43, 52, 64, 60, 70]
# The labels for the line chart
labels = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
"14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"]
# Create an XYChart object of size 600 x 300 pixels, with a light blue (EEEEFF)
# background, black border, 1 pxiel 3D border effect and rounded corners
c = ChartDirector::XYChart.new(600, 300, 0xeeeeff, 0x000000, 1)
c.setRoundedFrame()
# Set the plotarea at (55, 58) and of size 520 x 195 pixels, with white background.
# Turn on both horizontal and vertical grid lines with light grey color (0xcccccc)
c.setPlotArea(55, 58, 520, 195, 0xffffff, -1, -1, 0xcccccc, 0xcccccc)
# Add a legend box at (50, 30) (top of the chart) with horizontal layout. Use 9 pts
# Arial Bold font. Set the background and border color to Transparent.
c.addLegend(50, 30, false, "arialbd.ttf", 9).setBackground(ChartDirector::Transparent
)
# Add a title box to the chart using 15 pts Times Bold Italic font, on a light blue
# (CCCCFF) background with glass effect. white (0xffffff) on a dark red (0x800000)
# background, with a 1 pixel 3D border.
c.addTitle("Application Server Throughput", "timesbi.ttf", 15).setBackground(
0xccccff, 0x000000, ChartDirector::glassEffect())
# Add a title to the y axis
c.yAxis().setTitle("MBytes per hour")
# Set the labels on the x axis.
c.xAxis().setLabels(labels)
# Display 1 out of 3 labels on the x-axis.
c.xAxis().setLabelStep(3)
# Add a title to the x axis
c.xAxis().setTitle("Jun 12, 2006")
# Add a line layer to the chart
layer = c.addLineLayer2()
# Set the default line width to 2 pixels
layer.setLineWidth(2)
# Add the three data sets to the line layer. For demo purpose, we use a dash line
# color for the last line
layer.addDataSet(data0, 0xff0000, "Server #1")
layer.addDataSet(data1, 0x008800, "Server #2")
layer.addDataSet(data2, c.dashLineColor(0x3333ff, ChartDirector::DashLine),
"Server #3")
# Output the chart
c.makeChart("multiline.png")
============= Java Version ==============
class Test
{
public static void main(String[] args)
{
// The data for the line chart
double[] data0 = {42, 49, 33, 38, 51, 46, 29, 41, 44, 57, 59, 52, 37, 34, 51,
56, 56, 60, 70, 76, 63, 67, 75, 64, 51};
double[] data1 = {50, 55, 47, 34, 42, 49, 63, 62, 73, 59, 56, 50, 64, 60, 67,
67, 58, 59, 73, 77, 84, 82, 80, 84, 98};
double[] data2 = {36, 28, 25, 33, 38, 20, 22, 30, 25, 33, 30, 24, 28, 15, 21,
26, 46, 42, 48, 45, 43, 52, 64, 60, 70};
// The labels for the line chart
String[] labels = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
"11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22",
"23", "24"};
// Create an XYChart object of size 600 x 300 pixels, with a light blue
// (EEEEFF) background, black border, 1 pxiel 3D border effect and rounded
// corners
XYChart c = new XYChart(600, 300, 0xeeeeff, 0x000000, 1);
c.setRoundedFrame();
// Set the plotarea at (55, 58) and of size 520 x 195 pixels, with white
// background. Turn on both horizontal and vertical grid lines with light
// grey color (0xcccccc)
c.setPlotArea(55, 58, 520, 195, 0xffffff, -1, -1, 0xcccccc, 0xcccccc);
// Add a legend box at (50, 30) (top of the chart) with horizontal layout.
// Use 9 pts Arial Bold font. Set the background and border color to
// Transparent.
c.addLegend(50, 30, false, "Arial Bold", 9).setBackground(Chart.Transparent);
// Add a title box to the chart using 15 pts Times Bold Italic font, on a
// light blue (CCCCFF) background with glass effect. white (0xffffff) on a
// dark red (0x800000) background, with a 1 pixel 3D border.
c.addTitle("Application Server Throughput", "Times New Roman Bold Italic", 15
).setBackground(0xccccff, 0x000000, Chart.glassEffect());
// Add a title to the y axis
c.yAxis().setTitle("MBytes per hour");
// Set the labels on the x axis.
c.xAxis().setLabels(labels);
// Display 1 out of 3 labels on the x-axis.
c.xAxis().setLabelStep(3);
// Add a title to the x axis
c.xAxis().setTitle("Jun 12, 2006");
// Add a line layer to the chart
LineLayer layer = c.addLineLayer2();
// Set the default line width to 2 pixels
layer.setLineWidth(2);
// Add the three data sets to the line layer. For demo purpose, we use a dash
// line color for the last line
layer.addDataSet(data0, 0xff0000, "Server #1");
layer.addDataSet(data1, 0x008800, "Server #2");
layer.addDataSet(data2, c.dashLineColor(0x3333ff, Chart.DashLine),
"Server #3");
// Output the chart
c.makeChart("multiline.png");
}
} |