rqrencoder-magick 0.1.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.
@@ -0,0 +1,6 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
4
+ *.swp
5
+ Gemfile.lock
6
+ tmp/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in rqrencoder-magick.gemspec
4
+ gemspec
@@ -0,0 +1,32 @@
1
+ # RQREncoder-Magick
2
+
3
+ ## An image file generator for QRCodes using RMagick
4
+
5
+ ## Install
6
+
7
+ Install with Rubygems:
8
+
9
+ gem install rqrencoder-magick
10
+
11
+ ## Usage
12
+
13
+ Create a QRCode using the (required) rqrencoder gem (http://github.com/mattyr/rqrencoder)
14
+
15
+ This gem extends the QRCode class to have "draw" and "save" functions
16
+
17
+ >> require 'rqrencoder-magick'
18
+ => true
19
+ >> encoder = RQREncoder::QREncoder.new
20
+ => #<RQREncoder::QREncoder>
21
+ >> qrcode = encoder.encode("HELLO")
22
+ => #<RQREncoder::QRCode:0x0000010203b7b0>
23
+ >> qrcode.save("myqrcode.gif")
24
+ => myqrcodegif 290x290 PseudoClass 2c 16-bit
25
+
26
+ ## Notes
27
+
28
+ I had difficulties with the output of RMagick (ImageMagick)'s svg format, so there are two additional "special" functions, draw_svg and save_svg as workarounds.
29
+
30
+ ## Author
31
+
32
+ Matt Robinson
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,5 @@
1
+ module RQREncoder
2
+ module Magick
3
+ require 'rqrencoder-magick/qrcode_ext'
4
+ end
5
+ end
@@ -0,0 +1,70 @@
1
+ require 'rqrencoder'
2
+ require 'rvg/rvg'
3
+ require 'erb'
4
+ include Magick
5
+
6
+ module RQREncoder
7
+ class QRCode
8
+
9
+ @@default_render_options = {:module_pixels => 10, :margin => 4, :fill_color => 'black', :background_color => 'white'}
10
+
11
+ def draw(render_options = {})
12
+ render_rvg(@@default_render_options.merge(render_options)).draw
13
+ end
14
+
15
+ def save(filename, render_options = {})
16
+ draw(render_options).write(filename)
17
+ end
18
+
19
+ # imagemagick's svg output is messed up
20
+ def draw_svg(render_options = {})
21
+ render_svg(@@default_render_options.merge(render_options))
22
+ end
23
+
24
+ def save_svg(filename, render_options = {})
25
+ file = File.new(filename, "w")
26
+ file.puts(draw_svg(render_options))
27
+ file.close
28
+ end
29
+
30
+ private
31
+ def render_rvg(options)
32
+ pp_module = options[:module_pixels]
33
+ margin = options[:margin]
34
+ pixel_size = (size + (margin * 2)) * pp_module
35
+ grid_size = size + (margin * 2)
36
+
37
+ RVG.new(pixel_size, pixel_size).viewbox(0, 0, grid_size, grid_size) do |canvas|
38
+ canvas.background_fill = options[:background_color]
39
+ modules.each_index do |row_index|
40
+ modules[row_index].each_with_index do |val, col_index|
41
+ canvas.rect(1, 1, col_index + margin, row_index + margin).styles(:fill => options[:fill_color]) if val
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ def render_svg(options)
48
+ margin = options[:margin]
49
+ pp_module = options[:module_pixels]
50
+ overall_size = (size + (margin * 2)) * pp_module
51
+
52
+ ERB.new(svg_template, nil, "%<>").result(binding)
53
+ end
54
+
55
+ def svg_template
56
+ %q{<?xml version="1.0" standalone="yes"?>
57
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" width="<%= overall_size %>" height="<%= overall_size %>">
58
+ <rect style="fill:<%= options[:background_color] %>; stroke:none;" x="0" y="0" width="<%= overall_size %>" height="<%= overall_size %>" />
59
+ % modules.each_index do |row_index|
60
+ % modules[row_index].each_with_index do |val, col_index|
61
+ % if val
62
+ <rect style="fill:<%= options[:fill_color] %>; stroke:none;" x="<%= pp_module * (col_index + margin) %>" y="<%= pp_module * (row_index + margin) %>" width="<%= pp_module %>" height="<%= pp_module %>" />
63
+ % end
64
+ % end
65
+ % end
66
+ </svg>
67
+ }.gsub(/^ /, '')
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,5 @@
1
+ module RQREncoder
2
+ module Magick
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "rqrencoder-magick/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "rqrencoder-magick"
7
+ s.version = RQREncoder::Magick::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Matt Robinson"]
10
+ s.email = ["robinson.matty@gmail.com"]
11
+ s.homepage = "http://github.com/mattyr/rqrencoder-magick"
12
+ s.summary = %q{An image file generator for QRCodes using RMagick}
13
+ s.description = %q{An image file generator for QRCodes using RMagick}
14
+
15
+ s.rubyforge_project = "rqrencoder-magick"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_dependency('rqrencoder', '>= 0.1.2')
23
+ s.add_dependency('rmagick', '>= 2.13.1')
24
+ end
@@ -0,0 +1,40 @@
1
+ require 'test/unit'
2
+ require 'fileutils'
3
+ require 'rqrencoder'
4
+ require 'rqrencoder-magick'
5
+
6
+ class TestGenerator < Test::Unit::TestCase
7
+ def setup
8
+ FileUtils.mkdir_p("tmp")
9
+ end
10
+
11
+ def test_default_save
12
+ simple_save_test("tmp/test1.png")
13
+ end
14
+
15
+ def test_save_pdf
16
+ simple_save_test("tmp/test2.pdf")
17
+ end
18
+
19
+ def test_save_svg
20
+ filename = "tmp/test3.svg"
21
+ File.delete(filename) if File.exists?(filename)
22
+ make_qrcode.save_svg(filename)
23
+ assert(File.exists?(filename))
24
+ end
25
+
26
+ def test_save_ps
27
+ simple_save_test("tmp/test4.ps")
28
+ end
29
+
30
+ private
31
+ def make_qrcode
32
+ RQREncoder::QREncoder.new.encode("FOO BAR")
33
+ end
34
+
35
+ def simple_save_test(filename)
36
+ File.delete(filename) if File.exists?(filename)
37
+ make_qrcode.save(filename)
38
+ assert(File.exists?(filename))
39
+ end
40
+ end
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rqrencoder-magick
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Matt Robinson
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-10-30 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rqrencoder
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ - 1
31
+ - 2
32
+ version: 0.1.2
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rmagick
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 2
45
+ - 13
46
+ - 1
47
+ version: 2.13.1
48
+ type: :runtime
49
+ version_requirements: *id002
50
+ description: An image file generator for QRCodes using RMagick
51
+ email:
52
+ - robinson.matty@gmail.com
53
+ executables: []
54
+
55
+ extensions: []
56
+
57
+ extra_rdoc_files: []
58
+
59
+ files:
60
+ - .gitignore
61
+ - Gemfile
62
+ - README.markdown
63
+ - Rakefile
64
+ - lib/rqrencoder-magick.rb
65
+ - lib/rqrencoder-magick/qrcode_ext.rb
66
+ - lib/rqrencoder-magick/version.rb
67
+ - rqrencoder-magick.gemspec
68
+ - test/test_qrcode_ext.rb
69
+ has_rdoc: true
70
+ homepage: http://github.com/mattyr/rqrencoder-magick
71
+ licenses: []
72
+
73
+ post_install_message:
74
+ rdoc_options: []
75
+
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ segments:
84
+ - 0
85
+ version: "0"
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ segments:
92
+ - 0
93
+ version: "0"
94
+ requirements: []
95
+
96
+ rubyforge_project: rqrencoder-magick
97
+ rubygems_version: 1.3.7
98
+ signing_key:
99
+ specification_version: 3
100
+ summary: An image file generator for QRCodes using RMagick
101
+ test_files:
102
+ - test/test_qrcode_ext.rb