squid 0.0.0 → 1.0.0.beta1

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.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +11 -17
  3. data/.rspec +3 -0
  4. data/.travis.yml +7 -0
  5. data/CHANGELOG.md +11 -0
  6. data/MIT-LICENSE +21 -0
  7. data/README.md +146 -2
  8. data/Rakefile +26 -1
  9. data/bin/console +14 -0
  10. data/bin/setup +7 -0
  11. data/examples/manual.rb +7 -0
  12. data/examples/readme/01-basic.rb +5 -0
  13. data/examples/readme/02-type-point.rb +5 -0
  14. data/examples/readme/03-type-line.rb +5 -0
  15. data/examples/readme/04-color.rb +5 -0
  16. data/examples/readme/05-gridlines.rb +5 -0
  17. data/examples/readme/06-ticks.rb +5 -0
  18. data/examples/readme/07-baseline.rb +5 -0
  19. data/examples/readme/08-every.rb +5 -0
  20. data/examples/readme/09-legend.rb +5 -0
  21. data/examples/readme/10-legend-offset.rb +5 -0
  22. data/examples/readme/11-format.rb +5 -0
  23. data/examples/readme/12-labels.rb +5 -0
  24. data/examples/readme/13-border.rb +5 -0
  25. data/examples/readme/14-height.rb +5 -0
  26. data/examples/readme/15-multiple-columns.rb +5 -0
  27. data/examples/readme/16-multiple-stacks.rb +5 -0
  28. data/examples/readme/17-two-axis.rb +7 -0
  29. data/examples/readme/readme.rb +28 -0
  30. data/examples/readme.rb +7 -0
  31. data/examples/screenshots/readme_00.png +0 -0
  32. data/examples/screenshots/readme_01.png +0 -0
  33. data/examples/screenshots/readme_02.png +0 -0
  34. data/examples/screenshots/readme_03.png +0 -0
  35. data/examples/screenshots/readme_04.png +0 -0
  36. data/examples/screenshots/readme_05.png +0 -0
  37. data/examples/screenshots/readme_06.png +0 -0
  38. data/examples/screenshots/readme_07.png +0 -0
  39. data/examples/screenshots/readme_08.png +0 -0
  40. data/examples/screenshots/readme_09.png +0 -0
  41. data/examples/screenshots/readme_10.png +0 -0
  42. data/examples/screenshots/readme_11.png +0 -0
  43. data/examples/screenshots/readme_12.png +0 -0
  44. data/examples/screenshots/readme_13.png +0 -0
  45. data/examples/screenshots/readme_14.png +0 -0
  46. data/examples/screenshots/readme_15.png +0 -0
  47. data/examples/screenshots/readme_16.png +0 -0
  48. data/examples/screenshots/readme_17.png +0 -0
  49. data/examples/squid/baseline.rb +9 -0
  50. data/examples/squid/basic.rb +9 -0
  51. data/examples/squid/border.rb +9 -0
  52. data/examples/squid/columns.rb +9 -0
  53. data/examples/squid/every.rb +11 -0
  54. data/examples/squid/format.rb +9 -0
  55. data/examples/squid/gridlines.rb +9 -0
  56. data/examples/squid/height.rb +9 -0
  57. data/examples/squid/labels.rb +9 -0
  58. data/examples/squid/legend.rb +9 -0
  59. data/examples/squid/legend_offset.rb +9 -0
  60. data/examples/squid/line.rb +9 -0
  61. data/examples/squid/line_width.rb +9 -0
  62. data/examples/squid/lines.rb +11 -0
  63. data/examples/squid/point.rb +9 -0
  64. data/examples/squid/points.rb +9 -0
  65. data/examples/squid/squid.rb +48 -0
  66. data/examples/squid/stacks.rb +10 -0
  67. data/examples/squid/ticks.rb +9 -0
  68. data/examples/squid/two_axis.rb +10 -0
  69. data/lib/squid/axis.rb +61 -0
  70. data/lib/squid/axis_label.rb +15 -0
  71. data/lib/squid/config.rb +46 -0
  72. data/lib/squid/configuration.rb +80 -0
  73. data/lib/squid/format.rb +22 -0
  74. data/lib/squid/graph.rb +113 -0
  75. data/lib/squid/gridline.rb +16 -0
  76. data/lib/squid/plotter.rb +187 -0
  77. data/lib/squid/point.rb +40 -0
  78. data/lib/squid/settings.rb +15 -0
  79. data/lib/squid/version.rb +1 -1
  80. data/lib/squid.rb +35 -3
  81. data/squid.gemspec +22 -14
  82. metadata +176 -23
  83. data/HISTORY.md +0 -1
  84. data/LICENSE.txt +0 -22
  85. data/bin/squid +0 -8
@@ -0,0 +1,40 @@
1
+ require 'squid/format'
2
+
3
+ module Squid
4
+ class Point
5
+ extend Format
6
+
7
+ def self.for(series, minmax:, height:, labels:, stack:, format:)
8
+ @min = Hash.new 0
9
+ @max = Hash.new 0
10
+ min, max = minmax
11
+ offset = -> (value) { value * height.to_f / (max-min) }
12
+ series.map do |values|
13
+ values.map.with_index do |value, i|
14
+ h = y_for value, index: i, stack: false, &offset if value
15
+ y = y_for value, index: i, stack: stack, &offset if value
16
+ y = y - offset.call([min, 0].min) if value
17
+ label = format_for(value, format) if labels
18
+ new y: y, height: h, index: i, label: label, negative: value.to_f < 0
19
+ end
20
+ end
21
+ end
22
+
23
+ attr_reader :y, :height, :index, :label, :negative
24
+
25
+ def initialize(y:, height:, index:, label:, negative:)
26
+ @y, @height, @index, @label, @negative = y, height, index, label, negative
27
+ end
28
+
29
+ private
30
+
31
+ def self.y_for(value, index:, stack:, &block)
32
+ if stack
33
+ hash = (value > 0) ? @max : @min
34
+ yield(hash[index] += value)
35
+ else
36
+ yield(value)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,15 @@
1
+ require 'squid/config'
2
+
3
+ module Squid
4
+ # @private
5
+ module Settings
6
+ def has_settings(*keys)
7
+ keys.each do |key|
8
+ define_method key do
9
+ @settings.fetch key, Squid.configuration.public_send(key)
10
+ end
11
+ private key
12
+ end
13
+ end
14
+ end
15
+ end
data/lib/squid/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Squid
2
- VERSION = '0.0.0'
2
+ VERSION = '1.0.0.beta1'
3
3
  end
data/lib/squid.rb CHANGED
@@ -1,5 +1,37 @@
1
- # Provides a method to listen and respond to messages in a Campfire room.
1
+ require 'prawn'
2
+ require 'squid/graph'
3
+
2
4
  module Squid
3
- def self.run(options = {})
5
+ # Provides the `chart` method to use in Prawn::Document
6
+ # @see http://prawnpdf.org/api-docs/2.0/Prawn/Document.html
7
+ module Interface
8
+ # Plots a graph the current document.
9
+ #
10
+ # @param [Hash<#to_s, [Hash<#to_s, Numeric>]>] data the series to plot in
11
+ # the graph. Each key is the name of the series, and each value contains
12
+ # the values for the series. Values are also a hash, where each key is
13
+ # a category, and each value the numerical value for that category.
14
+ # @param [Hash] settings the option to customize the graph.
15
+ # @option settings [Boolean] :baseline (true) whether to plot the baseline.
16
+ # @option settings [Boolean] :border (false) whether to plot the border.
17
+ # @option settings [Boolean] :chart (true) whether to plot the chart.
18
+ # @option settings [Array<String>] :colors (true) the color of each series.
19
+ # @option settings [Integer] :every (1) how often to plot the categories.
20
+ # @option settings [Symbol] :format (:integer) the format of axis values.
21
+ # @option settings [Numeric] :height (250) the full height of the graph.
22
+ # @option settings [Boolean] :labels (false) whether to plot value labels.
23
+ # @option settings [<Boolean, Hash>] :legend (true) whether to plot the
24
+ # legend. If a Hash is provided, the `:offset` option can be set to
25
+ # specify the offset between the legend and the right margin.
26
+ # @option settings [Numeric] :line_width (3) the line width for line graphs.
27
+ # @option settings [Numeric] :steps (4) the number of gridlines.
28
+ # @option settings [Boolean] :ticks (true) whether to plot the ticks.
29
+ # @option settings [Symbol] :type (:column) the type of graph.
30
+ def chart(data = {}, settings = {})
31
+ Graph.new(self, data, settings).draw
32
+ end
4
33
  end
5
- end
34
+ end
35
+
36
+ # Extends Prawn::Document to include the `chart` methods
37
+ Prawn::Document.extensions << Squid::Interface
data/squid.gemspec CHANGED
@@ -1,23 +1,31 @@
1
- # coding: utf-8
2
1
  lib = File.expand_path('../lib', __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'squid/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = "squid"
6
+ spec.name = 'squid'
8
7
  spec.version = Squid::VERSION
9
- spec.authors = ["claudiob"]
10
- spec.email = ["claudiob@gmail.com"]
11
- spec.description = %q{Prawn evolved}
12
- spec.summary = %q{Prawn evolved}
13
- spec.homepage = ""
14
- spec.license = "MIT"
8
+ spec.authors = ['claudiob']
9
+ spec.email = ['claudiob@gmail.com']
15
10
 
16
- spec.files = `git ls-files`.split($/)
17
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
11
+ spec.summary = %q{Generates graphs in PDF files.}
12
+ spec.description = %q{Squid expands Prawn providing method to easily draw graphs in PDF files.}
13
+ spec.homepage = 'https://github.com/fullscreen/squid'
14
+ spec.license = 'MIT'
20
15
 
21
- spec.add_development_dependency "bundler", "~> 1.3"
22
- spec.add_development_dependency "rake"
16
+ spec.required_ruby_version = '>= 2.1.0' # 2.0 does not have Numeric#step(by:, to:)
17
+
18
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
+ spec.bindir = 'exe'
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.require_paths = ['lib']
22
+
23
+ spec.add_dependency 'prawn', '~> 2.0'
24
+ spec.add_dependency 'activesupport', '~> 4.0' # 3.2 does not have ActiveSupport::NumberHelper#number_to_rounded
25
+ spec.add_development_dependency 'pdf-inspector', '~> 1.2'
26
+ spec.add_development_dependency 'prawn-manual_builder', '~> 0.2.0'
27
+ spec.add_development_dependency 'rake', '~> 10.0'
28
+ spec.add_development_dependency 'rspec', '~> 3.3'
29
+ spec.add_development_dependency 'coveralls', '~> 0.8.2'
30
+ spec.add_development_dependency 'pry-nav', '~> 0.2.4'
23
31
  end
metadata CHANGED
@@ -1,62 +1,216 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: squid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 1.0.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - claudiob
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2015-06-03 00:00:00.000000000 Z
11
+ date: 2015-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: prawn
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.3'
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '4.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pdf-inspector
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.2'
20
48
  type: :development
21
49
  prerelease: false
22
50
  version_requirements: !ruby/object:Gem::Requirement
23
51
  requirements:
24
52
  - - "~>"
25
53
  - !ruby/object:Gem::Version
26
- version: '1.3'
54
+ version: '1.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: prawn-manual_builder
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.2.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.2.0
27
69
  - !ruby/object:Gem::Dependency
28
70
  name: rake
29
71
  requirement: !ruby/object:Gem::Requirement
30
72
  requirements:
31
- - - ">="
73
+ - - "~>"
32
74
  - !ruby/object:Gem::Version
33
- version: '0'
75
+ version: '10.0'
34
76
  type: :development
35
77
  prerelease: false
36
78
  version_requirements: !ruby/object:Gem::Requirement
37
79
  requirements:
38
- - - ">="
80
+ - - "~>"
39
81
  - !ruby/object:Gem::Version
40
- version: '0'
41
- description: Prawn evolved
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.3'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: coveralls
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.8.2
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.8.2
111
+ - !ruby/object:Gem::Dependency
112
+ name: pry-nav
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.2.4
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.2.4
125
+ description: Squid expands Prawn providing method to easily draw graphs in PDF files.
42
126
  email:
43
127
  - claudiob@gmail.com
44
- executables:
45
- - squid
128
+ executables: []
46
129
  extensions: []
47
130
  extra_rdoc_files: []
48
131
  files:
49
132
  - ".gitignore"
133
+ - ".rspec"
134
+ - ".travis.yml"
135
+ - CHANGELOG.md
50
136
  - Gemfile
51
- - HISTORY.md
52
- - LICENSE.txt
137
+ - MIT-LICENSE
53
138
  - README.md
54
139
  - Rakefile
55
- - bin/squid
140
+ - bin/console
141
+ - bin/setup
142
+ - examples/manual.rb
143
+ - examples/readme.rb
144
+ - examples/readme/01-basic.rb
145
+ - examples/readme/02-type-point.rb
146
+ - examples/readme/03-type-line.rb
147
+ - examples/readme/04-color.rb
148
+ - examples/readme/05-gridlines.rb
149
+ - examples/readme/06-ticks.rb
150
+ - examples/readme/07-baseline.rb
151
+ - examples/readme/08-every.rb
152
+ - examples/readme/09-legend.rb
153
+ - examples/readme/10-legend-offset.rb
154
+ - examples/readme/11-format.rb
155
+ - examples/readme/12-labels.rb
156
+ - examples/readme/13-border.rb
157
+ - examples/readme/14-height.rb
158
+ - examples/readme/15-multiple-columns.rb
159
+ - examples/readme/16-multiple-stacks.rb
160
+ - examples/readme/17-two-axis.rb
161
+ - examples/readme/readme.rb
162
+ - examples/screenshots/readme_00.png
163
+ - examples/screenshots/readme_01.png
164
+ - examples/screenshots/readme_02.png
165
+ - examples/screenshots/readme_03.png
166
+ - examples/screenshots/readme_04.png
167
+ - examples/screenshots/readme_05.png
168
+ - examples/screenshots/readme_06.png
169
+ - examples/screenshots/readme_07.png
170
+ - examples/screenshots/readme_08.png
171
+ - examples/screenshots/readme_09.png
172
+ - examples/screenshots/readme_10.png
173
+ - examples/screenshots/readme_11.png
174
+ - examples/screenshots/readme_12.png
175
+ - examples/screenshots/readme_13.png
176
+ - examples/screenshots/readme_14.png
177
+ - examples/screenshots/readme_15.png
178
+ - examples/screenshots/readme_16.png
179
+ - examples/screenshots/readme_17.png
180
+ - examples/squid/baseline.rb
181
+ - examples/squid/basic.rb
182
+ - examples/squid/border.rb
183
+ - examples/squid/columns.rb
184
+ - examples/squid/every.rb
185
+ - examples/squid/format.rb
186
+ - examples/squid/gridlines.rb
187
+ - examples/squid/height.rb
188
+ - examples/squid/labels.rb
189
+ - examples/squid/legend.rb
190
+ - examples/squid/legend_offset.rb
191
+ - examples/squid/line.rb
192
+ - examples/squid/line_width.rb
193
+ - examples/squid/lines.rb
194
+ - examples/squid/point.rb
195
+ - examples/squid/points.rb
196
+ - examples/squid/squid.rb
197
+ - examples/squid/stacks.rb
198
+ - examples/squid/ticks.rb
199
+ - examples/squid/two_axis.rb
56
200
  - lib/squid.rb
201
+ - lib/squid/axis.rb
202
+ - lib/squid/axis_label.rb
203
+ - lib/squid/config.rb
204
+ - lib/squid/configuration.rb
205
+ - lib/squid/format.rb
206
+ - lib/squid/graph.rb
207
+ - lib/squid/gridline.rb
208
+ - lib/squid/plotter.rb
209
+ - lib/squid/point.rb
210
+ - lib/squid/settings.rb
57
211
  - lib/squid/version.rb
58
212
  - squid.gemspec
59
- homepage: ''
213
+ homepage: https://github.com/fullscreen/squid
60
214
  licenses:
61
215
  - MIT
62
216
  metadata: {}
@@ -68,17 +222,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
68
222
  requirements:
69
223
  - - ">="
70
224
  - !ruby/object:Gem::Version
71
- version: '0'
225
+ version: 2.1.0
72
226
  required_rubygems_version: !ruby/object:Gem::Requirement
73
227
  requirements:
74
- - - ">="
228
+ - - ">"
75
229
  - !ruby/object:Gem::Version
76
- version: '0'
230
+ version: 1.3.1
77
231
  requirements: []
78
232
  rubyforge_project:
79
- rubygems_version: 2.4.5
233
+ rubygems_version: 2.4.5.1
80
234
  signing_key:
81
235
  specification_version: 4
82
- summary: Prawn evolved
236
+ summary: Generates graphs in PDF files.
83
237
  test_files: []
84
- has_rdoc:
data/HISTORY.md DELETED
@@ -1 +0,0 @@
1
- v0.0.0 - 2015/06/03 First version
data/LICENSE.txt DELETED
@@ -1,22 +0,0 @@
1
- Copyright (c) 2013 claudiob
2
-
3
- MIT License
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/bin/squid DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- begin
4
- require 'squid'
5
- rescue LoadError
6
- require 'rubygems'
7
- require 'squid'
8
- end