rqrcode 1.1.1 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +12 -15
- data/.gitignore +1 -1
- data/CHANGELOG.md +49 -0
- data/Gemfile.lock +68 -0
- data/README.md +185 -71
- data/Rakefile +8 -8
- data/lib/rqrcode/export/ansi.rb +9 -11
- data/lib/rqrcode/export/html.rb +3 -3
- data/lib/rqrcode/export/png.rb +33 -25
- data/lib/rqrcode/export/svg.rb +168 -29
- data/lib/rqrcode/export.rb +4 -4
- data/lib/rqrcode/qrcode/qrcode.rb +1 -1
- data/lib/rqrcode/qrcode.rb +1 -1
- data/lib/rqrcode/version.rb +1 -1
- data/lib/rqrcode.rb +4 -4
- data/rqrcode.gemspec +27 -24
- metadata +27 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e194a5360a135a0ba06a0ea02e0ec9b6aa865e138e60a50176c45e148ed05178
|
4
|
+
data.tar.gz: bcc56e289e6f09f750409c5433d8edfb91808280c88880b99cee377743164f0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b1ae5e3d66ab5de484c0f70dfd21efc683d5708128516c0da28a7aefdbe6be585a2a2c1939e49591fc9a3478f7ef9dfb96da8938871f83ce97bae5077aa0e41
|
7
|
+
data.tar.gz: d5df60860ebe56dae982aad6f01c11cd06fea0e324d543430d6694c663200e3aa48523082cd21af7d48cf229119bc117625cd714f6104975b4e9d8d4eeb7beef
|
data/.github/workflows/ruby.yml
CHANGED
@@ -4,28 +4,25 @@ on:
|
|
4
4
|
push:
|
5
5
|
branches:
|
6
6
|
- master
|
7
|
-
- release/*
|
8
7
|
pull_request:
|
9
8
|
branches:
|
10
9
|
- master
|
11
10
|
|
12
11
|
jobs:
|
13
|
-
|
14
|
-
name: Test Ruby ${{ matrix.ruby_version }} on ${{ matrix.os }}
|
15
|
-
runs-on: ${{ matrix.os }}
|
12
|
+
Build:
|
16
13
|
strategy:
|
14
|
+
fail-fast: false
|
17
15
|
matrix:
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
os: [ubuntu-latest, macos-latest]
|
17
|
+
ruby: [2.5, 2.6, 2.7, 3.0]
|
18
|
+
runs-on: ${{ matrix.os }}
|
21
19
|
steps:
|
22
20
|
- uses: actions/checkout@v1
|
23
|
-
-
|
24
|
-
uses: actions/setup-ruby@v1
|
21
|
+
- uses: ruby/setup-ruby@v1
|
25
22
|
with:
|
26
|
-
ruby-version: ${{ matrix.
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
23
|
+
ruby-version: ${{ matrix.ruby }}
|
24
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
25
|
+
- name: Run Tests for Ruby ${{ matrix.ruby }} on ${{ matrix.os }}
|
26
|
+
run: bundle exec rake spec
|
27
|
+
- name: StandardRB check for Ruby ${{ matrix.ruby }} on ${{ matrix.os }}
|
28
|
+
run: bundle exec standardrb --format progress
|
data/.gitignore
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
|
+
|
8
|
+
## [Unreleased]
|
9
|
+
|
10
|
+
## [2.1.0] - 2021-08-26
|
11
|
+
|
12
|
+
- Sync Gemfile.lock with `rqrcode_core.1.2.0` [Adds Multimode Support](https://github.com/whomwah/rqrcode_core#multiple-encoding-support)
|
13
|
+
- Add badge for Standard linting
|
14
|
+
|
15
|
+
### Changed
|
16
|
+
|
17
|
+
- Corrected method name referred to in CHANGELOG.
|
18
|
+
|
19
|
+
## [2.0.0] - 2021-05-06
|
20
|
+
|
21
|
+
### Added
|
22
|
+
|
23
|
+
- A new `use_path:` option on `.as_svg`. This uses a `<path>` node to greatly reduce the final SVG size. [#108]
|
24
|
+
- A new `viewbox:` option on `.as_svg`. Replaces the `svg.width` and `svg.height` attribute with `svg.viewBox` to allow CSS scaling. [#112]
|
25
|
+
- A new `svg_attributes:` option on `.as_svg`. Allows you to pass in custom SVG attributes to be used in the `<svg>` tag. [#113]
|
26
|
+
|
27
|
+
### Changed
|
28
|
+
|
29
|
+
- README updated
|
30
|
+
- Rakefile cleaned up. You can now just run `rake` which will run specs and fix linting using `standardrb`
|
31
|
+
- Small documentation clarification [@smnscp](https://github.com/smnscp)
|
32
|
+
- Bump `rqrcode_core` to `~> 1.0`
|
33
|
+
|
34
|
+
### Breaking Change
|
35
|
+
|
36
|
+
- The dependency `rqrcode_core-1.0.0` has a tiny breaking change to the `to_s` public method. https://github.com/whomwah/rqrcode_core/blob/master/CHANGELOG.md#breaking-changes
|
37
|
+
|
38
|
+
## [1.2.0] - 2020-12-26
|
39
|
+
|
40
|
+
### Changed
|
41
|
+
|
42
|
+
- README updated
|
43
|
+
- bump dependencies
|
44
|
+
- fix `required_ruby_version` for Ruby 3 support
|
45
|
+
|
46
|
+
[unreleased]: https://github.com/whomwah/rqrcode/compare/v2.1.0...HEAD
|
47
|
+
[2.1.0]: https://github.com/whomwah/rqrcode/compare/v2.0.0...v2.1.0
|
48
|
+
[2.0.0]: https://github.com/whomwah/rqrcode/compare/v1.2.0...v2.0.0
|
49
|
+
[1.2.0]: https://github.com/whomwah/rqrcode/compare/v1.1.1...v1.2.0
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
rqrcode (2.1.0)
|
5
|
+
chunky_png (~> 1.0)
|
6
|
+
rqrcode_core (~> 1.0)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
ast (2.4.2)
|
12
|
+
chunky_png (1.4.0)
|
13
|
+
diff-lcs (1.4.4)
|
14
|
+
parallel (1.20.1)
|
15
|
+
parser (3.0.1.0)
|
16
|
+
ast (~> 2.4.1)
|
17
|
+
rainbow (3.0.0)
|
18
|
+
rake (13.0.3)
|
19
|
+
regexp_parser (2.1.1)
|
20
|
+
rexml (3.2.5)
|
21
|
+
rqrcode_core (1.2.0)
|
22
|
+
rspec (3.10.0)
|
23
|
+
rspec-core (~> 3.10.0)
|
24
|
+
rspec-expectations (~> 3.10.0)
|
25
|
+
rspec-mocks (~> 3.10.0)
|
26
|
+
rspec-core (3.10.1)
|
27
|
+
rspec-support (~> 3.10.0)
|
28
|
+
rspec-expectations (3.10.1)
|
29
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
30
|
+
rspec-support (~> 3.10.0)
|
31
|
+
rspec-mocks (3.10.2)
|
32
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
33
|
+
rspec-support (~> 3.10.0)
|
34
|
+
rspec-support (3.10.2)
|
35
|
+
rubocop (1.12.1)
|
36
|
+
parallel (~> 1.10)
|
37
|
+
parser (>= 3.0.0.0)
|
38
|
+
rainbow (>= 2.2.2, < 4.0)
|
39
|
+
regexp_parser (>= 1.8, < 3.0)
|
40
|
+
rexml
|
41
|
+
rubocop-ast (>= 1.2.0, < 2.0)
|
42
|
+
ruby-progressbar (~> 1.7)
|
43
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
44
|
+
rubocop-ast (1.4.1)
|
45
|
+
parser (>= 2.7.1.5)
|
46
|
+
rubocop-performance (1.10.1)
|
47
|
+
rubocop (>= 0.90.0, < 2.0)
|
48
|
+
rubocop-ast (>= 0.4.0)
|
49
|
+
ruby-progressbar (1.11.0)
|
50
|
+
standard (1.0.5)
|
51
|
+
rubocop (= 1.12.1)
|
52
|
+
rubocop-performance (= 1.10.1)
|
53
|
+
standardrb (1.0.0)
|
54
|
+
standard
|
55
|
+
unicode-display_width (2.0.0)
|
56
|
+
|
57
|
+
PLATFORMS
|
58
|
+
ruby
|
59
|
+
|
60
|
+
DEPENDENCIES
|
61
|
+
bundler (~> 2.0)
|
62
|
+
rake (~> 13.0)
|
63
|
+
rqrcode!
|
64
|
+
rspec (~> 3.5)
|
65
|
+
standardrb (~> 1.0)
|
66
|
+
|
67
|
+
BUNDLED WITH
|
68
|
+
2.2.22
|
data/README.md
CHANGED
@@ -1,20 +1,22 @@
|
|
1
1
|
# RQRCode
|
2
2
|
|
3
|
-
![](https://github.com/whomwah/rqrcode/workflows/
|
3
|
+
![](https://github.com/whomwah/rqrcode/actions/workflows/ruby.yml/badge.svg)
|
4
|
+
[![Ruby Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://github.com/testdouble/standard)
|
4
5
|
|
5
6
|
|
6
7
|
[RQRCode](https://github.com/whomwah/rqrcode) is a library for creating and rendering QR codes into various formats. It has a simple interface with all the standard QR code options. It was adapted from the Javascript library by Kazuhiko Arase.
|
7
8
|
|
8
9
|
* QR code is trademarked by Denso Wave inc
|
9
|
-
* Minimum Ruby version is
|
10
|
-
* For `rqrcode` releases `<
|
10
|
+
* Minimum Ruby version is `>= 2.3`
|
11
|
+
* For `rqrcode` releases `< 2.0.0` please use [this README](https://github.com/whomwah/rqrcode/blob/v1.2.0/README.md)
|
12
|
+
* For `rqrcode` releases `< 1.0.0` please use [this README](https://github.com/whomwah/rqrcode/blob/v0.9.0/README.md)
|
11
13
|
|
12
14
|
## Installing
|
13
15
|
|
14
16
|
Add this line to your application's `Gemfile`:
|
15
17
|
|
16
18
|
```ruby
|
17
|
-
gem
|
19
|
+
gem "rqrcode", "~> 2.0"
|
18
20
|
```
|
19
21
|
|
20
22
|
or install manually:
|
@@ -26,100 +28,165 @@ gem install rqrcode
|
|
26
28
|
## Basic usage example
|
27
29
|
|
28
30
|
```ruby
|
29
|
-
require
|
31
|
+
require "rqrcode"
|
30
32
|
|
31
|
-
qr = RQRCode::QRCode.new(
|
32
|
-
result = ''
|
33
|
+
qr = RQRCode::QRCode.new("https://kyan.com")
|
33
34
|
|
34
|
-
qr.
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
35
|
+
puts qr.to_s
|
36
|
+
# to_s( dark: "x", light: " " ) # defaults
|
37
|
+
|
38
|
+
xxxxxxx xxxxxxx xxx xxxxxxx
|
39
|
+
x x x xxx xx x x
|
40
|
+
x xxx x xx x x xx x xxx x
|
41
|
+
x xxx x xx xx xx x xxx x
|
42
|
+
x xxx x x x xxx x xxx x
|
43
|
+
x x xxx x xx x x x x
|
44
|
+
...
|
43
45
|
```
|
44
46
|
|
47
|
+
Easy, but unlikely to be readable. For this you will need to use one of the many [rendering options](#render-types) below.
|
48
|
+
|
45
49
|
### Advanced Options
|
46
50
|
|
47
|
-
These are the various QR
|
51
|
+
These are the various QR code generation options provided by the underlying [rqrcode_core](https://github.com/whomwah/rqrcode_core). You may actually only need this library if you don't need the various rendering options `rqrcode` provides, but just need the data structure.
|
48
52
|
|
49
53
|
```
|
50
|
-
string
|
54
|
+
Expects a string or array (for multi-segment encoding) to be parsed in, other args are optional
|
55
|
+
|
56
|
+
data - the string, QRSegment or array of Hashes (with data:, mode: keys) you wish to encode
|
51
57
|
|
52
|
-
size
|
58
|
+
size - the size (Integer) of the QR Code (defaults to smallest size needed to encode the data)
|
53
59
|
|
54
|
-
|
55
|
-
* Level :l 7% of code can be restored
|
56
|
-
* Level :m 15% of code can be restored
|
57
|
-
* Level :q 25% of code can be restored
|
58
|
-
* Level :h 30% of code can be restored (default :h)
|
60
|
+
max_size - the max_size (Integer) of the QR Code (default RQRCodeCore::QRUtil.max_size)
|
59
61
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
62
|
+
level - the error correction level, can be:
|
63
|
+
* Level :l 7% of code can be restored
|
64
|
+
* Level :m 15% of code can be restored
|
65
|
+
* Level :q 25% of code can be restored
|
66
|
+
* Level :h 30% of code can be restored (default :h)
|
67
|
+
|
68
|
+
mode - the mode of the QR Code (defaults to :alphanumeric or :byte_8bit, depending on the input data,
|
69
|
+
only used when data is a string):
|
70
|
+
* :number
|
71
|
+
* :alphanumeric
|
72
|
+
* :byte_8bit
|
73
|
+
* :kanji
|
65
74
|
```
|
66
75
|
|
67
76
|
Example
|
68
77
|
|
69
|
-
```
|
70
|
-
|
78
|
+
```ruby
|
79
|
+
simple_qrcode = RQRCodeCore::QRCode.new("https://kyan.com", size: 1, level: :m, mode: :alphanumeric)
|
80
|
+
|
81
|
+
segment_qrcode = QRCodeCore::QRCode.new({ data: "foo", mode: :byte_8bit })
|
82
|
+
|
83
|
+
multi_qrcode = RQRCodeCore::QRCode.new([
|
84
|
+
{ data: 'foo', mode: :byte_8bit },
|
85
|
+
{ data: 'bar1', mode: :alphanumeric }
|
86
|
+
])
|
71
87
|
```
|
72
88
|
|
73
89
|
## Render types
|
74
90
|
|
75
|
-
You
|
91
|
+
You probably want to output your QR code in a specific format. We make this easy by providing a bunch of formats to choose from below, each with their own set of options:
|
76
92
|
|
77
|
-
###
|
93
|
+
### `as_svg`
|
78
94
|
|
79
95
|
The SVG renderer will produce a stand-alone SVG as a `String`
|
80
96
|
|
97
|
+
```
|
98
|
+
Options:
|
99
|
+
|
100
|
+
offset - Padding around the QR Code in pixels
|
101
|
+
(default 0)
|
102
|
+
fill - Background color e.g "ffffff" or :white
|
103
|
+
(default none)
|
104
|
+
color - Foreground color e.g "000" or :black
|
105
|
+
(default "000")
|
106
|
+
module_size - The Pixel size of each module
|
107
|
+
(defaults 11)
|
108
|
+
shape_rendering - SVG Attribute: auto | optimizeSpeed | crispEdges | geometricPrecision
|
109
|
+
(defaults crispEdges)
|
110
|
+
standalone - Whether to make this a full SVG file, or only an svg to embed in other svg
|
111
|
+
(default true)
|
112
|
+
use_path - Use <path> to render SVG rather than <rect> to significantly reduce size
|
113
|
+
and quality. This will become the default in future versions.
|
114
|
+
(default false)
|
115
|
+
viewbox - Replace the `svg.width` and `svg.height` attribute with `svg.viewBox` to
|
116
|
+
allow CSS scaling
|
117
|
+
(default false)
|
118
|
+
svg_attributes - A optional hash of custom <svg> attributes. Existing attributes will remain.
|
119
|
+
(default {})
|
120
|
+
```
|
121
|
+
Example
|
81
122
|
```ruby
|
82
|
-
require
|
123
|
+
require "rqrcode"
|
83
124
|
|
84
125
|
qrcode = RQRCode::QRCode.new("http://github.com/")
|
85
126
|
|
86
127
|
# NOTE: showing with default options specified explicitly
|
87
128
|
svg = qrcode.as_svg(
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
129
|
+
color: "000",
|
130
|
+
shape_rendering: "crispEdges",
|
131
|
+
module_size: 11,
|
132
|
+
standalone: true,
|
133
|
+
use_path: true
|
93
134
|
)
|
94
135
|
```
|
95
136
|
|
96
137
|
![QR code with github url](./images/github-qrcode.svg)
|
97
138
|
|
98
|
-
###
|
139
|
+
### `as_png`
|
99
140
|
|
100
|
-
The
|
141
|
+
The will produce a PNG using the [ChunkyPNG gem](https://github.com/wvanbergen/chunky_png). The result will be a `ChunkyPNG::Image` instance.
|
101
142
|
|
102
|
-
```
|
103
|
-
|
143
|
+
```
|
144
|
+
Options:
|
104
145
|
|
105
|
-
|
146
|
+
fill - Background ChunkyPNG::Color, defaults to 'white'
|
147
|
+
color - Foreground ChunkyPNG::Color, defaults to 'black'
|
106
148
|
|
107
|
-
|
108
|
-
svg = qrcode.as_ansi(
|
109
|
-
light: "\033[47m", dark: "\033[40m",
|
110
|
-
fill_character: ' ',
|
111
|
-
quiet_zone_size: 4
|
112
|
-
)
|
113
|
-
```
|
149
|
+
When option :file is supplied you can use the following ChunkyPNG constraints:
|
114
150
|
|
115
|
-
|
151
|
+
color_mode - The color mode to use. Use one of the ChunkyPNG::COLOR_* constants.
|
152
|
+
(defaults to 'ChunkyPNG::COLOR_GRAYSCALE')
|
153
|
+
bit_depth - The bit depth to use. This option is only used for indexed images.
|
154
|
+
(defaults to 1 bit)
|
155
|
+
interlace - Whether to use interlacing (true or false).
|
156
|
+
(defaults to ChunkyPNG default)
|
157
|
+
compression - The compression level for Zlib. This can be a value between 0 and 9, or a
|
158
|
+
Zlib constant like Zlib::BEST_COMPRESSION
|
159
|
+
(defaults to ChunkyPNG default)
|
160
|
+
|
161
|
+
There are two sizing algorithms.
|
162
|
+
|
163
|
+
* Original that can result in blurry and hard to scan images
|
164
|
+
* Google's Chart API inspired sizing that resizes the module size to fit within the given image size.
|
116
165
|
|
117
|
-
|
166
|
+
The Google one will be used when no options are given or when the new size option is used.
|
118
167
|
|
119
|
-
|
168
|
+
*Google Sizing*
|
169
|
+
|
170
|
+
size - Total size of PNG in pixels. The module size is calculated so it fits.
|
171
|
+
(defaults to 120)
|
172
|
+
border_modules - Width of white border around the modules.
|
173
|
+
(defaults to 4).
|
174
|
+
|
175
|
+
-- DONT USE border_modules OPTION UNLESS YOU KNOW ABOUT THE QUIET ZONE NEEDS OF QR CODES --
|
176
|
+
|
177
|
+
*Original Sizing*
|
178
|
+
|
179
|
+
module_px_size - Image size, in pixels.
|
180
|
+
border - Border thickness, in pixels
|
181
|
+
|
182
|
+
It first creates an image where 1px = 1 module, then resizes.
|
183
|
+
Defaults to 120x120 pixels, customizable by option.
|
184
|
+
```
|
185
|
+
|
186
|
+
Example
|
120
187
|
|
121
188
|
```ruby
|
122
|
-
require
|
189
|
+
require "rqrcode"
|
123
190
|
|
124
191
|
qrcode = RQRCode::QRCode.new("http://github.com/")
|
125
192
|
|
@@ -128,50 +195,97 @@ png = qrcode.as_png(
|
|
128
195
|
bit_depth: 1,
|
129
196
|
border_modules: 4,
|
130
197
|
color_mode: ChunkyPNG::COLOR_GRAYSCALE,
|
131
|
-
color:
|
198
|
+
color: "black",
|
132
199
|
file: nil,
|
133
|
-
fill:
|
200
|
+
fill: "white",
|
134
201
|
module_px_size: 6,
|
135
202
|
resize_exactly_to: false,
|
136
203
|
resize_gte_to: false,
|
137
204
|
size: 120
|
138
205
|
)
|
139
206
|
|
140
|
-
IO.
|
207
|
+
IO.binwrite("/tmp/github-qrcode.png", png.to_s)
|
141
208
|
```
|
142
209
|
|
143
210
|
![QR code with github url](./images/github-qrcode.png)
|
144
211
|
|
145
|
-
### On the console ( just because you can )
|
146
212
|
|
147
|
-
|
148
|
-
require 'rqrcode'
|
213
|
+
### `as_ansi`
|
149
214
|
|
150
|
-
|
215
|
+
The ANSI renderer will produce as a string with ANSI color codes.
|
151
216
|
|
152
|
-
puts qr.to_s
|
153
217
|
```
|
218
|
+
Options:
|
219
|
+
|
220
|
+
light - Foreground ANSI code
|
221
|
+
(default "\033[47m")
|
222
|
+
dark - Background ANSI code
|
223
|
+
(default "\033[40m")
|
224
|
+
fill_character - The written character
|
225
|
+
(default ' ')
|
226
|
+
quiet_zone_size - Padding around the edge
|
227
|
+
(default 4)
|
228
|
+
```
|
229
|
+
Example
|
230
|
+
```ruby
|
231
|
+
require "rqrcode"
|
154
232
|
|
155
|
-
|
233
|
+
qrcode = RQRCode::QRCode.new("http://github.com/")
|
156
234
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
... etc
|
235
|
+
# NOTE: showing with default options specified explicitly
|
236
|
+
svg = qrcode.as_ansi(
|
237
|
+
light: "\033[47m", dark: "\033[40m",
|
238
|
+
fill_character: " ",
|
239
|
+
quiet_zone_size: 4
|
240
|
+
)
|
164
241
|
```
|
165
242
|
|
243
|
+
![QR code with github url](./images/ansi-screen-shot.png)
|
244
|
+
|
166
245
|
## API Documentation
|
167
246
|
|
168
247
|
[http://www.rubydoc.info/gems/rqrcode](http://www.rubydoc.info/gems/rqrcode)
|
169
248
|
|
249
|
+
## Tests
|
250
|
+
|
251
|
+
You can run the test suite using:
|
252
|
+
|
253
|
+
```
|
254
|
+
$ ./bin/setup
|
255
|
+
$ rake # runs specs and standard:fix
|
256
|
+
$ rake spec # just runs the specs
|
257
|
+
```
|
258
|
+
|
259
|
+
or try the lib from the console with:
|
260
|
+
|
261
|
+
```
|
262
|
+
$ ./bin/console
|
263
|
+
```
|
264
|
+
|
265
|
+
## Linting
|
266
|
+
|
267
|
+
The project uses [standardrb](https://github.com/testdouble/standard) and can be used with:
|
268
|
+
|
269
|
+
```
|
270
|
+
$ ./bin/setup
|
271
|
+
$ rake standard # checks
|
272
|
+
$ rake standard:fix # fixes
|
273
|
+
```
|
274
|
+
|
170
275
|
## Contributing
|
276
|
+
|
277
|
+
I am not currently accepting any new renderers as the current `as_png`, `as_svg` and `as_ansi` work for most cases. If you need something different from what's available, the [`rqrcode_core`](https://github.com/whomwah/rqrcode_core) gem gives you access to all the QR Code information you will need so makes it simple to generate your own.
|
278
|
+
|
279
|
+
The motivation for the above is because the rendering side of this gem takes up the most time. It seems that many people want a slightly different version of a QR Code so supporting all the variations would be hard. The easiest way is to empower people to create their own versions which they can manage and share. This is what `rqrcode_core` does.
|
280
|
+
|
281
|
+
Any contribution PR's will be greatly accepted. It's important that they are well tested and backwards compatible.
|
282
|
+
|
171
283
|
* Fork the project
|
172
284
|
* Send a pull request
|
173
285
|
* Don't touch the .gemspec, I'll do that when I release a new version
|
174
286
|
|
287
|
+
Thanks D.
|
288
|
+
|
175
289
|
## Authors
|
176
290
|
|
177
291
|
Original RQRCode author: Duncan Robertson
|
data/Rakefile
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
|
2
|
-
require "rake
|
1
|
+
begin
|
2
|
+
require "standard/rake"
|
3
|
+
require "rspec/core/rake_task"
|
3
4
|
|
4
|
-
|
5
|
-
t.libs << "test"
|
6
|
-
t.libs << "lib"
|
7
|
-
t.test_files = FileList["test/**/*_test.rb"]
|
8
|
-
end
|
5
|
+
RSpec::Core::RakeTask.new(:spec)
|
9
6
|
|
10
|
-
task :
|
7
|
+
task default: [:spec, "standard:fix"]
|
8
|
+
rescue LoadError
|
9
|
+
# no standard/rspec available
|
10
|
+
end
|
data/lib/rqrcode/export/ansi.rb
CHANGED
@@ -9,15 +9,15 @@ module RQRCode
|
|
9
9
|
#
|
10
10
|
# Options:
|
11
11
|
# light: Foreground ("\033[47m")
|
12
|
-
# dark: Background ANSI code. ("\033[
|
12
|
+
# dark: Background ANSI code. ("\033[40m")
|
13
13
|
# fill_character: The written character. (' ')
|
14
14
|
# quiet_zone_size: (4)
|
15
15
|
#
|
16
|
-
def as_ansi(options={})
|
16
|
+
def as_ansi(options = {})
|
17
17
|
options = {
|
18
18
|
light: "\033[47m",
|
19
19
|
dark: "\033[40m",
|
20
|
-
fill_character:
|
20
|
+
fill_character: " ",
|
21
21
|
quiet_zone_size: 4
|
22
22
|
}.merge(options)
|
23
23
|
|
@@ -39,15 +39,13 @@ module RQRCode
|
|
39
39
|
row << dark
|
40
40
|
previous_dark = true
|
41
41
|
end
|
42
|
-
|
43
|
-
else
|
42
|
+
elsif previous_dark != false
|
44
43
|
# light
|
45
|
-
|
46
|
-
|
47
|
-
previous_dark = false
|
48
|
-
end
|
49
|
-
row << fill_character
|
44
|
+
row << light
|
45
|
+
previous_dark = false
|
50
46
|
end
|
47
|
+
|
48
|
+
row << fill_character
|
51
49
|
end
|
52
50
|
|
53
51
|
# add quiet zone
|
@@ -68,7 +66,7 @@ module RQRCode
|
|
68
66
|
quiet_row = light + fill_character * width + normal
|
69
67
|
quiet_rows = quiet_row * quiet_zone_size
|
70
68
|
|
71
|
-
|
69
|
+
quiet_rows + output.join + quiet_rows
|
72
70
|
end
|
73
71
|
end
|
74
72
|
end
|
data/lib/rqrcode/export/html.rb
CHANGED
@@ -6,7 +6,7 @@ module RQRCode
|
|
6
6
|
#
|
7
7
|
# Use this module to HTML-ify the QR code if you just want the default HTML
|
8
8
|
def as_html
|
9
|
-
[
|
9
|
+
["<table>", rows.as_html, "</table>"].join
|
10
10
|
end
|
11
11
|
|
12
12
|
private
|
@@ -27,7 +27,7 @@ module RQRCode
|
|
27
27
|
|
28
28
|
class Row < Struct.new(:qr, :qr_module, :row_index)
|
29
29
|
def as_html
|
30
|
-
[
|
30
|
+
["<tr>", cells.map(&:as_html).join, "</tr>"].join
|
31
31
|
end
|
32
32
|
|
33
33
|
def cells
|
@@ -41,7 +41,7 @@ module RQRCode
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def html_class
|
44
|
-
qr.checked?(row_index, col_index) ?
|
44
|
+
qr.checked?(row_index, col_index) ? "black" : "white"
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
data/lib/rqrcode/export/png.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
|
+
require "chunky_png"
|
3
4
|
|
4
5
|
# This class creates PNG files.
|
5
6
|
# Code from: https://github.com/DCarper/rqrcode
|
@@ -8,54 +9,61 @@ module RQRCode
|
|
8
9
|
module PNG
|
9
10
|
# Render the PNG from the QR Code.
|
10
11
|
#
|
11
|
-
# There are two sizing algoritams.
|
12
|
-
#
|
13
|
-
# - Original that can result in blurry and hard to scan images
|
14
|
-
# - Google's Chart API inspired sizing that resizes the module size to fit within the given image size.
|
15
|
-
#
|
16
|
-
# The Googleis one will be used when no options are given or when the new size option is used.
|
17
|
-
#
|
18
12
|
# Options:
|
19
13
|
# fill - Background ChunkyPNG::Color, defaults to 'white'
|
20
14
|
# color - Foreground ChunkyPNG::Color, defaults to 'black'
|
21
15
|
#
|
22
16
|
# When option :file is supplied you can use the following ChunkyPNG constraints
|
23
|
-
# color_mode - The color mode to use. Use one of the ChunkyPNG::COLOR_* constants.
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
17
|
+
# color_mode - The color mode to use. Use one of the ChunkyPNG::COLOR_* constants.
|
18
|
+
# (defaults to 'ChunkyPNG::COLOR_GRAYSCALE')
|
19
|
+
# bit_depth - The bit depth to use. This option is only used for indexed images.
|
20
|
+
# (defaults to 1 bit)
|
21
|
+
# interlace - Whether to use interlacing (true or false).
|
22
|
+
# (defaults to ChunkyPNG default)
|
23
|
+
# compression - The compression level for Zlib. This can be a value between 0 and 9, or a
|
24
|
+
# Zlib constant like Zlib::BEST_COMPRESSION
|
25
|
+
# (defaults to ChunkyPNG default)
|
26
|
+
#
|
27
|
+
# There are two sizing algorithms.
|
28
|
+
#
|
29
|
+
# - Original that can result in blurry and hard to scan images
|
30
|
+
# - Google's Chart API inspired sizing that resizes the module size to fit within the given image size.
|
31
|
+
#
|
32
|
+
# The Googleis one will be used when no options are given or when the new size option is used.
|
27
33
|
#
|
28
|
-
# *
|
29
|
-
# size - Total size of PNG in pixels. The module size is calculated so it fits.
|
30
|
-
#
|
34
|
+
# *Google*
|
35
|
+
# size - Total size of PNG in pixels. The module size is calculated so it fits.
|
36
|
+
# (defaults to 120)
|
37
|
+
# border_modules - Width of white border around in modules.
|
38
|
+
# (defaults to 4).
|
31
39
|
#
|
32
40
|
# -- DONT USE border_modules OPTION UNLESS YOU KNOW ABOUT THE QUIET ZONE NEEDS OF QR CODES --
|
33
41
|
#
|
34
42
|
# *Original*
|
35
43
|
# module_px_size - Image size, in pixels.
|
36
|
-
# border
|
44
|
+
# border - Border thickness, in pixels
|
37
45
|
#
|
38
46
|
# It first creates an image where 1px = 1 module, then resizes.
|
39
|
-
# Defaults to
|
47
|
+
# Defaults to 120x120 pixels, customizable by option.
|
40
48
|
#
|
41
49
|
def as_png(options = {})
|
42
50
|
default_img_options = {
|
43
51
|
bit_depth: 1,
|
44
52
|
border_modules: 4,
|
45
53
|
color_mode: ChunkyPNG::COLOR_GRAYSCALE,
|
46
|
-
color:
|
54
|
+
color: "black",
|
47
55
|
file: false,
|
48
|
-
fill:
|
56
|
+
fill: "white",
|
49
57
|
module_px_size: 6,
|
50
58
|
resize_exactly_to: false,
|
51
59
|
resize_gte_to: false,
|
52
60
|
size: 120
|
53
61
|
}
|
54
62
|
|
55
|
-
googleis = options.length == 0 ||
|
63
|
+
googleis = options.length == 0 || !options[:size].nil?
|
56
64
|
options = default_img_options.merge(options) # reverse_merge
|
57
|
-
fill
|
58
|
-
color
|
65
|
+
fill = ChunkyPNG::Color(options[:fill])
|
66
|
+
color = ChunkyPNG::Color(options[:color])
|
59
67
|
output_file = options[:file]
|
60
68
|
module_px_size = nil
|
61
69
|
border_px = nil
|
@@ -81,7 +89,7 @@ module RQRCode
|
|
81
89
|
else
|
82
90
|
options[:module_px_size]
|
83
91
|
end
|
84
|
-
border_px = border *
|
92
|
+
border_px = border * module_px_size
|
85
93
|
total_border_px = border_px * 2
|
86
94
|
resize_to = options[:resize_exactly_to]
|
87
95
|
|
@@ -96,7 +104,7 @@ module RQRCode
|
|
96
104
|
if @qrcode.checked?(x, y)
|
97
105
|
(0...module_px_size).each do |i|
|
98
106
|
(0...module_px_size).each do |j|
|
99
|
-
png[(y * module_px_size) + border_px + j
|
107
|
+
png[(y * module_px_size) + border_px + j, (x * module_px_size) + border_px + i] = color
|
100
108
|
end
|
101
109
|
end
|
102
110
|
end
|
@@ -112,7 +120,7 @@ module RQRCode
|
|
112
120
|
color_mode: options[:color_mode],
|
113
121
|
bit_depth: options[:bit_depth]
|
114
122
|
}
|
115
|
-
constraints[:interlace]
|
123
|
+
constraints[:interlace] = options[:interlace] if options.has_key?(:interlace)
|
116
124
|
constraints[:compression] = options[:compression] if options.has_key?(:compression)
|
117
125
|
png.save(output_file, constraints)
|
118
126
|
end
|
data/lib/rqrcode/export/svg.rb
CHANGED
@@ -1,59 +1,198 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# This class creates a SVG files.
|
4
|
-
#
|
4
|
+
# Initial code from: https://github.com/samvincent/rqrcode-rails3
|
5
5
|
module RQRCode
|
6
6
|
module Export
|
7
7
|
module SVG
|
8
|
+
class BaseOutputSVG
|
9
|
+
attr_reader :result
|
10
|
+
|
11
|
+
def initialize(qrcode)
|
12
|
+
@qrcode = qrcode
|
13
|
+
@result = []
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class Path < BaseOutputSVG
|
18
|
+
def build(module_size, offset, color)
|
19
|
+
modules_array = @qrcode.modules
|
20
|
+
matrix_width = matrix_height = modules_array.length + 1
|
21
|
+
empty_row = [Array.new(matrix_width - 1, false)]
|
22
|
+
edge_matrix = Array.new(matrix_height) { Array.new(matrix_width) }
|
23
|
+
|
24
|
+
(empty_row + modules_array + empty_row).each_cons(2).with_index do |row_pair, row_index|
|
25
|
+
first_row, second_row = row_pair
|
26
|
+
|
27
|
+
# horizontal edges
|
28
|
+
first_row.zip(second_row).each_with_index do |cell_pair, column_index|
|
29
|
+
edge = case cell_pair
|
30
|
+
when [true, false] then Edge.new column_index + 1, row_index, :left
|
31
|
+
when [false, true] then Edge.new column_index, row_index, :right
|
32
|
+
end
|
33
|
+
|
34
|
+
(edge_matrix[edge.start_y][edge.start_x] ||= []) << edge if edge
|
35
|
+
end
|
36
|
+
|
37
|
+
# vertical edges
|
38
|
+
([false] + second_row + [false]).each_cons(2).each_with_index do |cell_pair, column_index|
|
39
|
+
edge = case cell_pair
|
40
|
+
when [true, false] then Edge.new column_index, row_index, :down
|
41
|
+
when [false, true] then Edge.new column_index, row_index + 1, :up
|
42
|
+
end
|
43
|
+
|
44
|
+
(edge_matrix[edge.start_y][edge.start_x] ||= []) << edge if edge
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
edge_count = edge_matrix.flatten.compact.count
|
49
|
+
path = []
|
50
|
+
|
51
|
+
while edge_count > 0
|
52
|
+
edge_loop = []
|
53
|
+
next_matrix_cell = edge_matrix.find(&:any?).find { |cell| cell&.any? }
|
54
|
+
edge = next_matrix_cell.first
|
55
|
+
|
56
|
+
while edge
|
57
|
+
edge_loop << edge
|
58
|
+
matrix_cell = edge_matrix[edge.start_y][edge.start_x]
|
59
|
+
matrix_cell.delete edge
|
60
|
+
edge_matrix[edge.start_y][edge.start_x] = nil if matrix_cell.empty?
|
61
|
+
edge_count -= 1
|
62
|
+
|
63
|
+
# try to find an edge continuing the current edge
|
64
|
+
edge = edge_matrix[edge.end_y][edge.end_x]&.first
|
65
|
+
end
|
66
|
+
|
67
|
+
first_edge = edge_loop.first
|
68
|
+
edge_loop_string = SVG_PATH_COMMANDS[:move]
|
69
|
+
edge_loop_string += "#{first_edge.start_x} #{first_edge.start_y}"
|
70
|
+
|
71
|
+
edge_loop.chunk(&:direction).to_a[0...-1].each do |direction, edges|
|
72
|
+
edge_loop_string << "#{SVG_PATH_COMMANDS[direction]}#{edges.length}"
|
73
|
+
end
|
74
|
+
edge_loop_string << SVG_PATH_COMMANDS[:close]
|
75
|
+
|
76
|
+
path << edge_loop_string
|
77
|
+
end
|
78
|
+
|
79
|
+
@result << %{<path d="#{path.join}" style="fill:##{color}" transform="translate(#{offset},#{offset}) scale(#{module_size})"/>}
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
class Rect < BaseOutputSVG
|
84
|
+
def build(module_size, offset, color)
|
85
|
+
@qrcode.modules.each_index do |c|
|
86
|
+
tmp = []
|
87
|
+
@qrcode.modules.each_index do |r|
|
88
|
+
y = c * module_size + offset
|
89
|
+
x = r * module_size + offset
|
90
|
+
|
91
|
+
next unless @qrcode.checked?(c, r)
|
92
|
+
tmp << %(<rect width="#{module_size}" height="#{module_size}" x="#{x}" y="#{y}" style="fill:##{color}"/>)
|
93
|
+
end
|
94
|
+
|
95
|
+
@result << tmp.join
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
class Edge < Struct.new(:start_x, :start_y, :direction)
|
101
|
+
def end_x
|
102
|
+
case direction
|
103
|
+
when :right then start_x + 1
|
104
|
+
when :left then start_x - 1
|
105
|
+
else start_x
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def end_y
|
110
|
+
case direction
|
111
|
+
when :down then start_y + 1
|
112
|
+
when :up then start_y - 1
|
113
|
+
else start_y
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
DEFAULT_SVG_ATTRIBUTES = [
|
119
|
+
%(version="1.1"),
|
120
|
+
%(xmlns="http://www.w3.org/2000/svg"),
|
121
|
+
%(xmlns:xlink="http://www.w3.org/1999/xlink"),
|
122
|
+
%(xmlns:ev="http://www.w3.org/2001/xml-events")
|
123
|
+
]
|
124
|
+
|
125
|
+
SVG_PATH_COMMANDS = {
|
126
|
+
move: "M",
|
127
|
+
up: "v-",
|
128
|
+
down: "v",
|
129
|
+
left: "h-",
|
130
|
+
right: "h",
|
131
|
+
close: "z"
|
132
|
+
}
|
133
|
+
|
8
134
|
#
|
9
135
|
# Render the SVG from the Qrcode.
|
10
136
|
#
|
11
137
|
# Options:
|
12
|
-
# offset
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
138
|
+
# offset - Padding around the QR Code in pixels
|
139
|
+
# (default 0)
|
140
|
+
# fill - Background color e.g "ffffff"
|
141
|
+
# (default none)
|
142
|
+
# color - Foreground color e.g "000"
|
143
|
+
# (default "000")
|
144
|
+
# module_size - The Pixel size of each module
|
145
|
+
# (defaults 11)
|
146
|
+
# shape_rendering - SVG Attribute: auto | optimizeSpeed | crispEdges | geometricPrecision
|
147
|
+
# (defaults crispEdges)
|
148
|
+
# standalone - Whether to make this a full SVG file, or only an svg to embed in other svg
|
149
|
+
# (default true)
|
150
|
+
# use_path - Use <path> to render SVG rather than <rect> to significantly reduce size
|
151
|
+
# and quality. This will become the default in future versions.
|
152
|
+
# (default false)
|
153
|
+
# viewbox - replace `width` and `height` in <svg> with a viewBox, allows CSS scaling
|
154
|
+
# (default false)
|
155
|
+
# svg_attributes - A optional hash of custom <svg> attributes. Existing attributes will remain.
|
156
|
+
# (default {})
|
19
157
|
#
|
20
|
-
def as_svg(options={})
|
158
|
+
def as_svg(options = {})
|
159
|
+
fill = options[:fill]
|
160
|
+
use_path = options[:use_path]
|
21
161
|
offset = options[:offset].to_i || 0
|
22
162
|
color = options[:color] || "000"
|
23
163
|
shape_rendering = options[:shape_rendering] || "crispEdges"
|
24
164
|
module_size = options[:module_size] || 11
|
25
165
|
standalone = options[:standalone].nil? ? true : options[:standalone]
|
166
|
+
viewbox = options[:viewbox].nil? ? false : options[:viewbox]
|
167
|
+
svg_attributes = options[:svg_attributes] || {}
|
26
168
|
|
27
169
|
# height and width dependent on offset and QR complexity
|
28
|
-
dimension = (@qrcode.module_count*module_size) + (2*offset)
|
170
|
+
dimension = (@qrcode.module_count * module_size) + (2 * offset)
|
171
|
+
# use dimensions differently if we are using a viewBox
|
172
|
+
dimensions_attr = viewbox ? %(viewBox="0 0 #{dimension} #{dimension}") : %(width="#{dimension}" height="#{dimension}")
|
29
173
|
|
30
|
-
|
31
|
-
|
32
|
-
|
174
|
+
svg_tag_attributes = (DEFAULT_SVG_ATTRIBUTES + [
|
175
|
+
dimensions_attr,
|
176
|
+
%(shape-rendering="#{shape_rendering}")
|
177
|
+
] + svg_attributes.map { |k, v| %(#{k}="#{v}") }).join(" ")
|
33
178
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
@qrcode.modules.each_index do |r|
|
38
|
-
y = c*module_size + offset
|
39
|
-
x = r*module_size + offset
|
179
|
+
xml_tag = %(<?xml version="1.0" standalone="yes"?>)
|
180
|
+
open_tag = %(<svg #{svg_tag_attributes}>)
|
181
|
+
close_tag = "</svg>"
|
40
182
|
|
41
|
-
|
42
|
-
|
43
|
-
end
|
44
|
-
result << tmp.join
|
45
|
-
end
|
183
|
+
output_tag = (use_path ? Path : Rect).new(@qrcode)
|
184
|
+
output_tag.build(module_size, offset, color)
|
46
185
|
|
47
|
-
if
|
48
|
-
result.unshift %
|
186
|
+
if fill
|
187
|
+
output_tag.result.unshift %(<rect width="#{dimension}" height="#{dimension}" x="0" y="0" style="fill:##{fill}"/>)
|
49
188
|
end
|
50
189
|
|
51
190
|
if standalone
|
52
|
-
result.unshift(xml_tag, open_tag)
|
53
|
-
result << close_tag
|
191
|
+
output_tag.result.unshift(xml_tag, open_tag)
|
192
|
+
output_tag.result << close_tag
|
54
193
|
end
|
55
194
|
|
56
|
-
result.join
|
195
|
+
output_tag.result.join
|
57
196
|
end
|
58
197
|
end
|
59
198
|
end
|
data/lib/rqrcode/export.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
3
|
+
require "rqrcode/export/ansi"
|
4
|
+
require "rqrcode/export/html"
|
5
|
+
require "rqrcode/export/png"
|
6
|
+
require "rqrcode/export/svg"
|
data/lib/rqrcode/qrcode.rb
CHANGED
data/lib/rqrcode/version.rb
CHANGED
data/lib/rqrcode.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module RQRCode
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
4
|
+
require "rqrcode_core"
|
5
|
+
require "rqrcode/qrcode"
|
6
|
+
require "rqrcode/export"
|
7
|
+
require "rqrcode/version"
|
8
8
|
end
|
data/rqrcode.gemspec
CHANGED
@@ -1,36 +1,39 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
1
|
lib = File.expand_path("../lib", __FILE__)
|
4
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
3
|
require "rqrcode/version"
|
6
4
|
|
7
5
|
Gem::Specification.new do |spec|
|
8
|
-
spec.name
|
9
|
-
spec.version
|
10
|
-
spec.platform
|
11
|
-
spec.authors
|
12
|
-
spec.email
|
6
|
+
spec.name = "rqrcode"
|
7
|
+
spec.version = RQRCode::VERSION
|
8
|
+
spec.platform = Gem::Platform::RUBY
|
9
|
+
spec.authors = ["Duncan Robertson"]
|
10
|
+
spec.email = ["duncan@whomwah.com"]
|
13
11
|
|
14
|
-
spec.summary
|
15
|
-
spec.description =
|
16
|
-
rqrcode is a library for encoding QR Codes. The simple
|
17
|
-
interface allows you to create QR Code data structures
|
18
|
-
and then render them in the way you choose.
|
19
|
-
EOF
|
20
|
-
spec.homepage
|
21
|
-
spec.license
|
12
|
+
spec.summary = "A library to encode QR Codes"
|
13
|
+
spec.description = <<~EOF
|
14
|
+
rqrcode is a library for encoding QR Codes. The simple
|
15
|
+
interface allows you to create QR Code data structures
|
16
|
+
and then render them in the way you choose.
|
17
|
+
EOF
|
18
|
+
spec.homepage = "https://github.com/whomwah/rqrcode"
|
19
|
+
spec.license = "MIT"
|
20
|
+
spec.metadata = {
|
21
|
+
"bug_tracker_uri" => "https://github.com/whomwah/rqrcode/issues",
|
22
|
+
"changelog_uri" => "https://github.com/whomwah/rqrcode/blob/master/CHANGELOG.md"
|
23
|
+
}
|
22
24
|
|
23
|
-
spec.files
|
25
|
+
spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
|
24
26
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
27
|
end
|
26
|
-
spec.bindir
|
27
|
-
spec.executables
|
28
|
+
spec.bindir = "exe"
|
29
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
30
|
spec.require_paths = ["lib"]
|
29
31
|
|
30
|
-
spec.required_ruby_version =
|
31
|
-
spec.add_dependency
|
32
|
-
spec.add_dependency
|
33
|
-
spec.add_development_dependency
|
34
|
-
spec.add_development_dependency
|
35
|
-
spec.add_development_dependency
|
32
|
+
spec.required_ruby_version = ">= 2.3"
|
33
|
+
spec.add_dependency "rqrcode_core", "~> 1.0"
|
34
|
+
spec.add_dependency "chunky_png", "~> 1.0"
|
35
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
36
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
37
|
+
spec.add_development_dependency "rspec", "~> 3.5"
|
38
|
+
spec.add_development_dependency "standardrb", "~> 1.0"
|
36
39
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rqrcode
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Duncan Robertson
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rqrcode_core
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '1.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: '1.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: chunky_png
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '13.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '13.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '3.5'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: standardrb
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.0'
|
83
97
|
description: |
|
84
98
|
rqrcode is a library for encoding QR Codes. The simple
|
85
99
|
interface allows you to create QR Code data structures
|
@@ -93,7 +107,9 @@ files:
|
|
93
107
|
- ".github/workflows/ruby.yml"
|
94
108
|
- ".gitignore"
|
95
109
|
- ".rspec"
|
110
|
+
- CHANGELOG.md
|
96
111
|
- Gemfile
|
112
|
+
- Gemfile.lock
|
97
113
|
- LICENSE.txt
|
98
114
|
- README.md
|
99
115
|
- Rakefile
|
@@ -116,14 +132,16 @@ files:
|
|
116
132
|
homepage: https://github.com/whomwah/rqrcode
|
117
133
|
licenses:
|
118
134
|
- MIT
|
119
|
-
metadata:
|
135
|
+
metadata:
|
136
|
+
bug_tracker_uri: https://github.com/whomwah/rqrcode/issues
|
137
|
+
changelog_uri: https://github.com/whomwah/rqrcode/blob/master/CHANGELOG.md
|
120
138
|
post_install_message:
|
121
139
|
rdoc_options: []
|
122
140
|
require_paths:
|
123
141
|
- lib
|
124
142
|
required_ruby_version: !ruby/object:Gem::Requirement
|
125
143
|
requirements:
|
126
|
-
- - "
|
144
|
+
- - ">="
|
127
145
|
- !ruby/object:Gem::Version
|
128
146
|
version: '2.3'
|
129
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
@@ -132,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
150
|
- !ruby/object:Gem::Version
|
133
151
|
version: '0'
|
134
152
|
requirements: []
|
135
|
-
rubygems_version: 3.
|
153
|
+
rubygems_version: 3.2.22
|
136
154
|
signing_key:
|
137
155
|
specification_version: 4
|
138
156
|
summary: A library to encode QR Codes
|