svgplot 0.2.0 → 1.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c34bf4dae7c76286d0c33dcd17be373d8bd786fe
4
- data.tar.gz: dc246aa266b423d779bea78b735995cfc0c21cc8
3
+ metadata.gz: f32bc9623d7681312a258c6e9b2d0d44e0570668
4
+ data.tar.gz: e26356a75dae5566315c4d3ac64c29c7134cbafe
5
5
  SHA512:
6
- metadata.gz: 6164dafb06d5e99a8c8bfd93dc7ce0f2891f9a65375ec466e8fec25011e8581318b5571d77b28199a3f5157067498cb245a08d68511c85827310cbfc15f5c44c
7
- data.tar.gz: 05b792cd73ad32864c3a97dd417d7f9b612cf1908189abdc9d557d4099311fbe68fbf3b5373e11a8684746ba12b1ad93841813c28df86de6578e8cb29bb52c18
6
+ metadata.gz: 3da5deef4fb30b076469c3da597b73f04d199ef373fac1b47b83cf6b0983c90f4bdcef0966f622ba09a555e2a1e52f76e085645292b1670bf73d867ef45d73b3
7
+ data.tar.gz: f2f38af1aa3c60f20c4d7149b141cb91b8ed7975bf10b7f2821fcb101054c520f64e706e5016ba543af550a4cc5e7bc35a6bbf98e42cd4c641b152c2623064e1
@@ -0,0 +1,4 @@
1
+ # 1.0.0 / 2015-01-19
2
+
3
+ * [ENHANCEMENT] Stabilized API
4
+
data/README.md CHANGED
@@ -3,15 +3,61 @@ svgplot
3
3
 
4
4
  [![Gem Version](https://img.shields.io/gem/v/svgplot.svg)](https://rubygems.org/gems/svgplot)
5
5
  [![Dependency Status](https://img.shields.io/gemnasium/akerl/svgplot.svg)](https://gemnasium.com/akerl/svgplot)
6
- [![Code Climate](https://img.shields.io/codeclimate/github/akerl/svgplot.svg)](https://codeclimate.com/github/akerl/svgplot)
7
- [![Coverage Status](https://img.shields.io/coveralls/akerl/svgplot.svg)](https://coveralls.io/r/akerl/svgplot)
8
- [![Build Status](https://img.shields.io/travis/akerl/svgplot.svg)](https://travis-ci.org/akerl/svgplot)
6
+ [![Build Status](https://img.shields.io/circleci/project/akerl/svgplot.svg)](https://circleci.com/gh/akerl/svgplot)
7
+ [![Coverage Status](https://img.shields.io/codecov/c/github/akerl/svgplot.svg)](https://codecov.io/github/akerl/svgplot)
8
+ [![Code Quality](https://img.shields.io/codacy/a4ad68dc9c4940b58f9b78ec1996f533.svg)](https://www.codacy.com/app/akerl/svgplot)
9
9
  [![MIT Licensed](https://img.shields.io/badge/license-MIT-green.svg)](https://tldrlegal.com/license/mit-license)
10
10
 
11
11
  SVG creation library forked from [xytis's Rasem fork](https://github.com/xytis/rasem).
12
12
 
13
13
  ## Usage
14
14
 
15
+ Create an SVG object by initializing it with a size:
16
+
17
+ ```
18
+ plot = SVGPlot.new(width: 100, height: 100)
19
+ ```
20
+
21
+ SVGPlot is based directly on the SVG spec. Add children by calling their methods on the plot:
22
+
23
+ ```
24
+ # Add the text 'foo' at position (1, 2)
25
+ plot.text(1, 2) { 'foo' }
26
+ ```
27
+
28
+ ```
29
+ # Add a rectangle
30
+ plot.rectangle(1, 1, 10, 10)
31
+ ```
32
+
33
+ A good example of the SVG library in practice is [GithubChart](https://github.com/akerl/githubchart/blob/master/lib/githubchart/svg.rb)
34
+
35
+ ### Transformations
36
+
37
+ To do an SVG transform on an object, just call the desired transform method on it:
38
+
39
+ ```
40
+ plot = SVGPlot.new(width: 100, height: 100)
41
+ plot.text(1, 1) { 'foobar' }.translate(5, 5)
42
+ ```
43
+
44
+ You can call transforms after the fact as well:
45
+
46
+ ```
47
+ plot = SVGPlot.new(width: 100, height: 100)
48
+ text = plot.text(1, 1) { 'foobar' }
49
+ text.scale(2)
50
+ ```
51
+
52
+ The list of available transforms:
53
+
54
+ * translate(x, y = 0)
55
+ * scale(x, y = 1)
56
+ * rotate(angle, x = nil, y = nil)
57
+ * skew_x(angle)
58
+ * skew_y(angle)
59
+ * matrix(a, b, c, d, e, f)
60
+
15
61
  ## Installation
16
62
 
17
63
  gem install svgplot
File without changes
@@ -0,0 +1,12 @@
1
+ dependencies:
2
+ override:
3
+ - 'rvm-exec 1.9.3-p551 bundle install'
4
+ - 'rvm-exec 2.0.0-p645 bundle install'
5
+ - 'rvm-exec 2.1.6 bundle install'
6
+ - 'rvm-exec 2.2.2 bundle install'
7
+ test:
8
+ override:
9
+ - 'rvm-exec 1.9.3-p551 bundle exec rake'
10
+ - 'rvm-exec 2.0.0-p645 bundle exec rake'
11
+ - 'rvm-exec 2.1.6 bundle exec rake'
12
+ - 'rvm-exec 2.2.2 bundle exec rake'
@@ -16,7 +16,6 @@ require 'svgplot/application'
16
16
  require 'svgplot/meta'
17
17
  require 'svgplot/parsers'
18
18
  require 'svgplot/transform'
19
- require 'svgplot/defaults'
20
19
  require 'svgplot/tag'
21
20
  require 'svgplot/path'
22
21
  require 'svgplot/gradient'
@@ -7,13 +7,15 @@ module SVGPlot
7
7
  end
8
8
 
9
9
  def stop(offset, color, opacity)
10
- append_child(ChildTag.new(
11
- @img,
12
- 'stop',
13
- 'offset' => offset,
14
- 'stop-color' => color,
15
- 'stop-opacity' => opacity
16
- ))
10
+ append_child(
11
+ ChildTag.new(
12
+ @img,
13
+ 'stop',
14
+ 'offset' => offset,
15
+ 'stop-color' => color,
16
+ 'stop-opacity' => opacity
17
+ )
18
+ )
17
19
  end
18
20
  end
19
21
 
@@ -43,7 +43,7 @@ module SVGPlot
43
43
  def parse_transforms(transforms)
44
44
  return nil unless transforms && valid_attribute?(:transform)
45
45
  transforms.each_with_object('') do |(attr, value), str|
46
- str << "#{attr}(#{value.is_a?(Array) ? value.join(',') : value }) "
46
+ str << "#{attr}(#{value.is_a?(Array) ? value.join(',') : value}) "
47
47
  end
48
48
  end
49
49
 
@@ -5,7 +5,7 @@ module SVGPlot
5
5
  DEFAULTS = {
6
6
  version: 1.1,
7
7
  xmlns: 'http://www.w3.org/2000/svg',
8
- :'xmlns:xlink' => 'http://www.w3.org/1999/xlink'
8
+ :'xmlns:xlink' => 'http://www.w3.org/1999/xlink' # rubocop:disable Style/HashSyntax, Metrics/LineLength, Lint/UnneededDisable
9
9
  }
10
10
 
11
11
  def initialize(params = {}, output = nil, &block)
@@ -17,6 +17,7 @@ module SVGPlot
17
17
 
18
18
  def add_def(id, child, if_exists = :skip, &block)
19
19
  @defs ||= ChildTag.new(@img, 'defs')
20
+ @defs_ids ||= {}
20
21
  old_id = check_conflicts(id, if_exists) if @defs_ids.key? id
21
22
  return old_id if old_id
22
23
 
@@ -4,10 +4,10 @@ module SVGPlot
4
4
  class Tag
5
5
  include Parsers::Tag
6
6
  include Transform
7
- include Defaults
8
7
  include Expansion
9
8
 
10
9
  attr_reader :tag, :attributes, :children
10
+ attr_writer :defaults
11
11
 
12
12
  def initialize(tag, attributes = {}, &block)
13
13
  @tag = parse_tag tag
@@ -25,6 +25,10 @@ module SVGPlot
25
25
  append_child Path.new(@img, attributes, &block)
26
26
  end
27
27
 
28
+ def defaults
29
+ @defaults ||= {}
30
+ end
31
+
28
32
  def use(id, attributes = {})
29
33
  id = id.attributes[:id] if id.is_a? Tag
30
34
  attributes.merge!('xlink:href' => "##{id}")
@@ -13,7 +13,7 @@ module SVGPlot
13
13
  end
14
14
 
15
15
  def rotate(angle, cx = nil, cy = nil)
16
- string = [cx, cy].any?(&:nil?) ? "#{angle}" : "#{angle}, #{cx}, #{cy}"
16
+ string = [cx, cy].any?(&:nil?) ? "#{angle}" : "#{angle}, #{cx}, #{cy}"
17
17
  add_transform(:rotate, string)
18
18
  self
19
19
  end
@@ -39,6 +39,7 @@ module SVGPlot
39
39
  def add_transform(type, params)
40
40
  validate_attribute(:transform)
41
41
  @attributes[:transform] ||= ''
42
+ @attributes[:transform] << ' ' if @attributes[:transform].size > 0
42
43
  @attributes[:transform] << "#{type}(#{params})"
43
44
  end
44
45
  end
@@ -1,9 +1,10 @@
1
- require 'simplecov'
2
- require 'coveralls'
3
-
4
- SimpleCov.formatter = Coveralls::SimpleCov::Formatter
5
- SimpleCov.start do
6
- add_filter '/spec/'
1
+ if ENV['CI'] == 'true'
2
+ require 'simplecov'
3
+ require 'codecov'
4
+ SimpleCov.formatter = SimpleCov::Formatter::Codecov
5
+ SimpleCov.start do
6
+ add_filter '/spec/'
7
+ end
7
8
  end
8
9
 
9
10
  require 'rspec'
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe SVGPlot do
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe SVGPlot do
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe SVGPlot do
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe SVGPlot do
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe SVGPlot do
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe SVGPlot do
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe SVGPlot do
4
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe SVGPlot::Tag do
4
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe SVGPlot::Transform do
4
+ let(:subject) do
5
+ SVGPlot.new(width: 10, height: 10).text(1, 1) { 'test' }
6
+ end
7
+
8
+ it 'can translate on x plane' do
9
+ subject.translate(1)
10
+ expect(subject.attributes[:transform]).to eql 'translate(1, 0)'
11
+ end
12
+
13
+ it 'can translate on y and y planes' do
14
+ subject.translate(1, 10)
15
+ expect(subject.attributes[:transform]).to eql 'translate(1, 10)'
16
+ end
17
+
18
+ it 'can scale on x plane' do
19
+ subject.scale(2)
20
+ expect(subject.attributes[:transform]).to eql 'scale(2, 1)'
21
+ end
22
+
23
+ it 'can scale on y and y planes' do
24
+ subject.scale(1, 10)
25
+ expect(subject.attributes[:transform]).to eql 'scale(1, 10)'
26
+ end
27
+
28
+ it 'can rotate to an angle' do
29
+ subject.rotate(10)
30
+ expect(subject.attributes[:transform]).to eql 'rotate(10)'
31
+ end
32
+
33
+ it 'can rotate to an angle and offset' do
34
+ subject.rotate(10, 5, 6)
35
+ expect(subject.attributes[:transform]).to eql 'rotate(10, 5, 6)'
36
+ end
37
+
38
+ it 'can skew to an x angle' do
39
+ subject.skew_x(10)
40
+ expect(subject.attributes[:transform]).to eql 'skewX(10)'
41
+ end
42
+
43
+ it 'can skew to a y angle' do
44
+ subject.skew_y(10)
45
+ expect(subject.attributes[:transform]).to eql 'skewY(10)'
46
+ end
47
+
48
+ it 'can do a matrix transform' do
49
+ subject.matrix(1, 2, 3, 4, 5, 6)
50
+ expect(subject.attributes[:transform]).to eql 'matrix(1, 2, 3, 4, 5, 6)'
51
+ end
52
+
53
+ it 'validates matrix args' do
54
+ expect { subject.matrix(1, 2) }.to raise_error RuntimeError
55
+ end
56
+
57
+ it 'can chain transforms' do
58
+ subject.skew_x(5).scale(1, 2)
59
+ expect(subject.attributes[:transform]).to eql 'skewX(5) scale(1, 2)'
60
+ end
61
+ end
@@ -1,7 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe SVGPlot do
4
- it 'works' do
5
- expect(true).to be true
4
+ describe '#new' do
5
+ it 'creates a Plot object' do
6
+ expect(SVGPlot.new).to be_an_instance_of SVGPlot::Plot
7
+ end
6
8
  end
7
9
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'svgplot'
3
- s.version = '0.2.0'
3
+ s.version = '1.0.0'
4
4
  s.date = Time.now.strftime("%Y-%m-%d")
5
5
 
6
6
  s.summary = 'SVG Generation Library'
@@ -19,10 +19,10 @@ Gem::Specification.new do |s|
19
19
  s.test_files = `git ls-files spec/*`.split
20
20
  s.executables = ['svgplot']
21
21
 
22
- s.add_development_dependency 'rubocop', '~> 0.28.0'
22
+ s.add_development_dependency 'rubocop', '~> 0.34.0'
23
23
  s.add_development_dependency 'rake', '~> 10.4.0'
24
- s.add_development_dependency 'coveralls', '~> 0.7.1'
25
- s.add_development_dependency 'rspec', '~> 3.1.0'
24
+ s.add_development_dependency 'codecov', '~> 0.1.1'
25
+ s.add_development_dependency 'rspec', '~> 3.3.0'
26
26
  s.add_development_dependency 'fuubar', '~> 2.0.0'
27
27
  s.add_development_dependency 'nokogiri', '~> 1.6.5'
28
28
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: svgplot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Les Aker
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2015-01-10 00:00:00.000000000 Z
14
+ date: 2015-10-28 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rubocop
@@ -19,14 +19,14 @@ dependencies:
19
19
  requirements:
20
20
  - - "~>"
21
21
  - !ruby/object:Gem::Version
22
- version: 0.28.0
22
+ version: 0.34.0
23
23
  type: :development
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: 0.28.0
29
+ version: 0.34.0
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: rake
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -42,33 +42,33 @@ dependencies:
42
42
  - !ruby/object:Gem::Version
43
43
  version: 10.4.0
44
44
  - !ruby/object:Gem::Dependency
45
- name: coveralls
45
+ name: codecov
46
46
  requirement: !ruby/object:Gem::Requirement
47
47
  requirements:
48
48
  - - "~>"
49
49
  - !ruby/object:Gem::Version
50
- version: 0.7.1
50
+ version: 0.1.1
51
51
  type: :development
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
55
  - - "~>"
56
56
  - !ruby/object:Gem::Version
57
- version: 0.7.1
57
+ version: 0.1.1
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rspec
60
60
  requirement: !ruby/object:Gem::Requirement
61
61
  requirements:
62
62
  - - "~>"
63
63
  - !ruby/object:Gem::Version
64
- version: 3.1.0
64
+ version: 3.3.0
65
65
  type: :development
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
69
  - - "~>"
70
70
  - !ruby/object:Gem::Version
71
- version: 3.1.0
71
+ version: 3.3.0
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: fuubar
74
74
  requirement: !ruby/object:Gem::Requirement
@@ -107,16 +107,16 @@ files:
107
107
  - ".gitignore"
108
108
  - ".rspec"
109
109
  - ".rubocop.yml"
110
- - ".travis.yml"
110
+ - CHANGELOG.md
111
111
  - Gemfile
112
112
  - LICENSE
113
113
  - README.md
114
114
  - Rakefile
115
115
  - bin/svgplot
116
+ - circle.yml
116
117
  - dev/update_spec.rb
117
118
  - lib/svgplot.rb
118
119
  - lib/svgplot/application.rb
119
- - lib/svgplot/defaults.rb
120
120
  - lib/svgplot/gradient.rb
121
121
  - lib/svgplot/meta.rb
122
122
  - lib/svgplot/parsers.rb
@@ -126,6 +126,15 @@ files:
126
126
  - lib/svgplot/tag.rb
127
127
  - lib/svgplot/transform.rb
128
128
  - spec/spec_helper.rb
129
+ - spec/svgplot/application_spec.rb
130
+ - spec/svgplot/gradients_spec.rb
131
+ - spec/svgplot/meta_spec.rb
132
+ - spec/svgplot/parsers_spec.rb
133
+ - spec/svgplot/path_spec.rb
134
+ - spec/svgplot/plot_spec.rb
135
+ - spec/svgplot/spec_spec.rb
136
+ - spec/svgplot/tag_spec.rb
137
+ - spec/svgplot/transform_spec.rb
129
138
  - spec/svgplot_spec.rb
130
139
  - svgplot.gemspec
131
140
  homepage: https://github.com/AUTHOR_NAME/REPO_NAME
@@ -148,10 +157,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
157
  version: '0'
149
158
  requirements: []
150
159
  rubyforge_project:
151
- rubygems_version: 2.2.2
160
+ rubygems_version: 2.4.5.1
152
161
  signing_key:
153
162
  specification_version: 4
154
163
  summary: SVG Generation Library
155
164
  test_files:
156
165
  - spec/spec_helper.rb
166
+ - spec/svgplot/application_spec.rb
167
+ - spec/svgplot/gradients_spec.rb
168
+ - spec/svgplot/meta_spec.rb
169
+ - spec/svgplot/parsers_spec.rb
170
+ - spec/svgplot/path_spec.rb
171
+ - spec/svgplot/plot_spec.rb
172
+ - spec/svgplot/spec_spec.rb
173
+ - spec/svgplot/tag_spec.rb
174
+ - spec/svgplot/transform_spec.rb
157
175
  - spec/svgplot_spec.rb
@@ -1,15 +0,0 @@
1
- language: ruby
2
- cache: bundler
3
- rvm:
4
- - 2.1.2
5
- - 2.1.1
6
- - 2.1.0
7
- - 2.0.0
8
- - 1.9.3
9
- notifications:
10
- email: false
11
- irc:
12
- template:
13
- - "%{repository}/%{branch}/%{build_number}: %{message} -- %{build_url}"
14
- channels:
15
- secure: abJmnLwEbJFJyI2hS+LS8kbdVw1be33W3ubjizV7/8z5jmqyYn6hWivOOIh88nquxPmtWvI2SZvWqnrse5MUAdn48vW04JWJSFLRewzkq7Scz4N+RgOT8ZvaVQBJnwJTTdBohOuiVASeRnigCgozS2MjJtnyqhUGgOhAjXCtnb0=
@@ -1,17 +0,0 @@
1
- module SVGPlot
2
- ##
3
- # Adds default attributes helpers for Tags
4
- module Defaults
5
- attr_writer :defaults
6
-
7
- def defaults
8
- @defaults ||= {}
9
- end
10
-
11
- def with(defaults, &block)
12
- @defaults = defaults
13
- instance_exec(&block)
14
- @defaults = {}
15
- end
16
- end
17
- end