analytics_charts 0.0.6 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fb1fd9b3b22417079fab1f1c854ee83fd0021da1
4
- data.tar.gz: f73ea0e910d8ca8fa9d30b8dd386925d5e7949b7
3
+ metadata.gz: 848a574ba8f5c5be493f38e09db679afdd761f4c
4
+ data.tar.gz: 77a5ffdf8fdb2bf10d488a5d0c7119ff3182d8cf
5
5
  SHA512:
6
- metadata.gz: 10cbd799bd4c96bad88f88ba1189b71732a38042ed773ef88393bc9f9599cc3f4464d3cd69d7f7f140a88418640eeb2c2e1cff76111c11a45b043d55393b75da
7
- data.tar.gz: 2d2096a1536e49a9db8dccc4db384be6f72173481f074bc83b21ed53675c2f186e3c66b56080de3a7caeab132a636f908963c1da180d581556ec5aae62750c46
6
+ metadata.gz: 48126d6bceca1e5b6be4a7fe8836f07f53f76dc0f8d0886ce641c7889983c82f17820f9565200aebc450f0780afb44a8c72817ee8e49466acd3cd85b83b8aab3
7
+ data.tar.gz: 06010858e65cc939035fd9ba17ec546ce28c0eb560cb5013a5c427b522527fb640387459c98489ab66ad97e4c0d35577c43a6f6c888533020e776167961f7893
@@ -0,0 +1,75 @@
1
+ require 'RMagick'
2
+
3
+ class AnalyticsCharts::CustomModule
4
+ include Magick
5
+ def initialize(image_path, text, output_path)
6
+ @d = Draw.new
7
+ @d.fill = 'white'
8
+ @d.font = 'Helvetica'
9
+ @d.pointsize = 22
10
+ @d.font_weight = 500
11
+ @composite_image = Image.read(image_path)[0]
12
+ @dummy_image = Image.new(1,1)
13
+ @composite_columns = @composite_image.columns
14
+ @composite_rows = @composite_image.rows
15
+ begin
16
+ @rows_of_text = tokenize_text_by_lines(text)
17
+ rescue
18
+ puts "Had some error in CustomModule, probably a nil calling each"
19
+ return
20
+ end
21
+ @height = @composite_rows + @rows_of_text.size * 22
22
+ @base_image = Image.new(@composite_columns, @height) {
23
+ self.background_color = "black"
24
+ }
25
+ @base_image.composite!(@composite_image,0,0,OverCompositeOp)
26
+ #@d.stroke = 'white'
27
+ @d = @d.stroke_color 'white'
28
+ @d.stroke_width(1)
29
+ @d = @d.line(0, @composite_rows, @composite_columns, @composite_rows)
30
+ @d.draw(@base_image)
31
+ y_offset = 22 + @composite_rows + @d.get_type_metrics(@dummy_image,"a").height / 2
32
+ @rows_of_text.each do |text|
33
+ if text.include? "@$$" # No paragraph break if we insert this uncommonly used word
34
+ text.sub!("@$$", "")
35
+ @d.annotate(@base_image, 0 ,0, 22, y_offset, text)
36
+ next
37
+ else
38
+ @d.annotate(@base_image, 0 ,0, 22, y_offset, text)
39
+ y_offset += 22
40
+ end
41
+ end
42
+ @base_image.write(output_path)
43
+ end
44
+ def tokenize_text_by_lines(text)
45
+ # First split the text by the line carriage element
46
+ carriage_split_lines = text.split("\r\n")
47
+ line_tokens = Array.new
48
+ carriage_split_lines.each do |carriage_split_line|
49
+ line_wrap_lines = line_wrap(carriage_split_line)
50
+ line_wrap_lines.each { |line| line_tokens.push(line) }
51
+ line_tokens.push("\r\n")
52
+ end
53
+ line_tokens
54
+ end
55
+ def line_wrap(text)
56
+ tokens = text.split.reverse # Pop stuff off
57
+ # Safety check, do not allow super long words.
58
+ tokens.each {|token| return "" if not fits_in_a_line(token) }
59
+ line_wrap_tokens = Array.new
60
+ line_builder = ""
61
+ while tokens.size != 0
62
+ line_builder = tokens.pop # Pop the first word in a line
63
+ while tokens.size != 0 and fits_in_a_line(line_builder + " " + tokens.last)
64
+ line_builder += " " + tokens.pop
65
+ end
66
+ line_wrap_tokens.push(line_builder) # Add to list of lines
67
+ end
68
+ line_wrap_tokens
69
+ end
70
+
71
+ def fits_in_a_line(text)
72
+ return @d.get_type_metrics(@dummy_image,text).width < @composite_image.columns - 44
73
+ end
74
+ end
75
+ #Reference: Draw defaults[ font: "Helvetica", pointsize:12, x/y resolution 72 DPI, font_weight: 400]
@@ -12,11 +12,11 @@ class AnalyticsCharts::CustomPie
12
12
  attr_accessor :label_offset
13
13
  def initialize(image_path, label_hash, pie_label_hash)
14
14
  @base_image = Image.read(image_path)[0]
15
+ @columns = @base_image.columns
16
+ @rows = @base_image.rows
15
17
  @d = Draw.new
16
18
  @data = Hash.new # Value is array with two items
17
19
  @aggregate = Array([0,0,0,0]) # Cluster brands into categories
18
- @columns = @base_image.columns
19
- @rows = @base_image.rows
20
20
  @label_hash = Hash.new
21
21
  @pie_label_hash = Hash.new
22
22
  @label_hash = label_hash if label_hash
@@ -56,7 +56,6 @@ class AnalyticsCharts::CustomPie
56
56
 
57
57
  def draw
58
58
  if @data.size > 0
59
- @d = Draw.new
60
59
  @d.stroke_width(@pie_radius)
61
60
  total_sum = 0.0
62
61
  prev_degrees = 60.0
@@ -175,13 +174,13 @@ class AnalyticsCharts::CustomPie
175
174
  end
176
175
 
177
176
  def draw_pie_label(center_x, center_y, angle, radius, percent, index)
178
- #気を付けて、get_type_metrics depends on font and pointsize, image res so need to set those first
177
+ #気を付けて、get_type_metrics depends on font and pointsize, image res, AND font_weight so need to set those first
179
178
  # See more at http://studio.imagemagick.org/RMagick/doc/draw.html#get_type_metrics
180
179
  @d.font = @pie_label_hash['font'] if @pie_label_hash['font']
181
180
  @d.pointsize = @pie_label_hash['pointsize'] if @pie_label_hash['pointsize']
182
- width = @d.get_type_metrics(@base_image, percent.to_s).width
183
181
  ascent = @d.get_type_metrics(@base_image, percent.to_s).ascent
184
182
  descent = @d.get_type_metrics(@base_image, percent.to_s).descent
183
+ width = @d.get_type_metrics(@base_image, percent.to_s).width
185
184
  radians = angle * Math::PI / 180.0
186
185
  x = center_x + radius * Math.cos(radians)
187
186
  # By default, text is centered at bottom, so need to shift vertically to center it
@@ -202,6 +201,7 @@ class AnalyticsCharts::CustomPie
202
201
  # descent value retrieved is negative, so sub instead of add
203
202
  end
204
203
  @d.align = CenterAlign
204
+
205
205
  # Provide default fill of black
206
206
  insert_text(x, y, percent, {'fill'=> @colors[index]}.merge(@pie_label_hash))# {'fill'=> 'black', 'font_weight'=> 700, 'pointsize'=>48})
207
207
  end
@@ -1,3 +1,3 @@
1
1
  module AnalyticsCharts
2
- VERSION = "0.0.6"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -2,6 +2,7 @@ require 'analytics_charts/version'
2
2
 
3
3
  %w(
4
4
  custom_pie
5
+ custom_module
5
6
  ).each do |filename|
6
7
  require "analytics_charts/#{filename}"
7
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: analytics_charts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - STEPHEN YU
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-29 00:00:00.000000000 Z
11
+ date: 2015-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -71,6 +71,7 @@ files:
71
71
  - analytics_charts.gemspec
72
72
  - appendix.md
73
73
  - lib/analytics_charts.rb
74
+ - lib/analytics_charts/custom_module.rb
74
75
  - lib/analytics_charts/custom_pie.rb
75
76
  - lib/analytics_charts/version.rb
76
77
  homepage: https://github.com/tryceattack/analytics_charts