rqrcode 1.1.2 → 2.1.1

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
  SHA256:
3
- metadata.gz: a9e076ae820e4deb93f2efc1047d25110be344a9640a09ae8e8ffe89494711d6
4
- data.tar.gz: f8b73f342a99a77d54ea18f0e5b99ac24024fd91e79c5954758c4cdce9237c10
3
+ metadata.gz: 6d9f9771040408819ab4ae97bc5b0de8814863e5b9dba0402268799eb03350d9
4
+ data.tar.gz: 2f811a4fed92cfa3bed1fdbe8609c57910c76184c97eafb00985422d83c02385
5
5
  SHA512:
6
- metadata.gz: 5c40805e8febcc553452c1043618cbc1f48d654e6dbc88e9c26e61d5908c2aa197128357fedd9f41b67b9345db40f1b1aec10cd6400e3274ea5e59314844f9b9
7
- data.tar.gz: 93d829869f279cc3a5352d6ab4e0829e80825ff41c4a09bdfc1c6c0e1156b44743dfa4d05fc8fee8ad76baa3d0d21271b8d19a96eb70caed68b9a95632272507
6
+ metadata.gz: 6ece7165b08b181bd62a10069d5b60a849e0887c1c775b625cf691d3f7a439f0a5701d3fa362fb1263d7aae425e9a8a18c706ac621efb7f8f97955f5e7e11dbc
7
+ data.tar.gz: '0479794cb35208cffebf7355cbb3517b394f14b8af04eeebbcf51b2afdafd35f088fe2f9a60daf55752594578231411468f6eef090bd20b4e0c4864ea1cb00e4'
@@ -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
- build:
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
- ruby_version: [2.5.x, 2.6.x]
19
- os: [ubuntu-latest]
20
-
16
+ os: [ubuntu-latest, macos-latest]
17
+ ruby: [2.5, 2.6, 2.7, '3.0', 3.1]
18
+ runs-on: ${{ matrix.os }}
21
19
  steps:
22
- - uses: actions/checkout@v1
23
- - name: Use Ruby ${{ matrix.ruby_version }}
24
- uses: actions/setup-ruby@v1
20
+ - uses: actions/checkout@v2
21
+ - uses: ruby/setup-ruby@v1
25
22
  with:
26
- ruby-version: ${{ matrix.ruby_version }}
27
- - name: Gem install and test
28
- run: |
29
- gem install bundler
30
- bundle install --jobs 4 --retry 3
31
- bundle exec rake test
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
@@ -10,4 +10,4 @@
10
10
  .rvmrc
11
11
  *.sublime-project
12
12
  *.sublime-workspace
13
- Gemfile.lock
13
+ *.gem
data/CHANGELOG.md ADDED
@@ -0,0 +1,54 @@
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.1] - 2022-02-11
11
+
12
+ - Added in a handler for when color arguments are passed in as symbols e.g `color: :yellow`. This also allows for the use of the `:currentColor` keyword. [#122]
13
+
14
+ ## [2.1.0] - 2021-08-26
15
+
16
+ - Sync Gemfile.lock with `rqrcode_core.1.2.0` [Adds Multimode Support](https://github.com/whomwah/rqrcode_core#multiple-encoding-support)
17
+ - Add badge for Standard linting
18
+
19
+ ### Changed
20
+
21
+ - Corrected method name referred to in CHANGELOG.
22
+
23
+ ## [2.0.0] - 2021-05-06
24
+
25
+ ### Added
26
+
27
+ - A new `use_path:` option on `.as_svg`. This uses a `<path>` node to greatly reduce the final SVG size. [#108]
28
+ - A new `viewbox:` option on `.as_svg`. Replaces the `svg.width` and `svg.height` attribute with `svg.viewBox` to allow CSS scaling. [#112]
29
+ - A new `svg_attributes:` option on `.as_svg`. Allows you to pass in custom SVG attributes to be used in the `<svg>` tag. [#113]
30
+
31
+ ### Changed
32
+
33
+ - README updated
34
+ - Rakefile cleaned up. You can now just run `rake` which will run specs and fix linting using `standardrb`
35
+ - Small documentation clarification [@smnscp](https://github.com/smnscp)
36
+ - Bump `rqrcode_core` to `~> 1.0`
37
+
38
+ ### Breaking Change
39
+
40
+ - 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
41
+
42
+ ## [1.2.0] - 2020-12-26
43
+
44
+ ### Changed
45
+
46
+ - README updated
47
+ - bump dependencies
48
+ - fix `required_ruby_version` for Ruby 3 support
49
+
50
+ [unreleased]: https://github.com/whomwah/rqrcode/compare/v2.1.1...HEAD
51
+ [2.1.1]: https://github.com/whomwah/rqrcode/compare/v2.1.0...v2.1.1
52
+ [2.1.0]: https://github.com/whomwah/rqrcode/compare/v2.0.0...v2.1.0
53
+ [2.0.0]: https://github.com/whomwah/rqrcode/compare/v1.2.0...v2.0.0
54
+ [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.1)
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.21.0)
15
+ parser (3.1.0.0)
16
+ ast (~> 2.4.1)
17
+ rainbow (3.0.0)
18
+ rake (13.0.3)
19
+ regexp_parser (2.2.0)
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.24.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.15.1, < 2.0)
42
+ ruby-progressbar (~> 1.7)
43
+ unicode-display_width (>= 1.4.0, < 3.0)
44
+ rubocop-ast (1.15.1)
45
+ parser (>= 3.0.1.1)
46
+ rubocop-performance (1.13.1)
47
+ rubocop (>= 1.7.0, < 2.0)
48
+ rubocop-ast (>= 0.4.0)
49
+ ruby-progressbar (1.11.0)
50
+ standard (1.6.0)
51
+ rubocop (= 1.24.1)
52
+ rubocop-performance (= 1.13.1)
53
+ standardrb (1.0.0)
54
+ standard
55
+ unicode-display_width (2.1.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.32
data/README.md CHANGED
@@ -1,20 +1,22 @@
1
1
  # RQRCode
2
2
 
3
- ![](https://github.com/whomwah/rqrcode/workflows/rqrcode/badge.svg)
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 `~> 2.3`
10
- * For `rqrcode` releases `< 1.0.0` please use [this README](https://github.com/whomwah/rqrcode/blob/cd2732a68434e6197c219e6c8cbdadfce0c4c4f3/README.md)
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 'rqrcode'
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 'rqrcode'
31
+ require "rqrcode"
30
32
 
31
- qr = RQRCode::QRCode.new('http://github.com')
32
- result = ''
33
+ qr = RQRCode::QRCode.new("https://kyan.com")
33
34
 
34
- qr.qrcode.modules.each do |row|
35
- row.each do |col|
36
- result << (col ? 'X' : 'O')
37
- end
38
-
39
- result << "\n"
40
- end
41
-
42
- puts result
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 Code generation options provided by [rqrqcode_core](https://github.com/whomwah/rqrcode_core).
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 - the string you wish to encode
54
+ Expects a string or array (for multi-segment encoding) to be parsed in, other args are optional
51
55
 
52
- size - the size of the qrcode (default 4)
56
+ data - the string, QRSegment or array of Hashes (with data:, mode: keys) you wish to encode
53
57
 
54
- level - the error correction level, can be:
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)
58
+ size - the size (Integer) of the QR Code (defaults to smallest size needed to encode the data)
59
59
 
60
- mode - the mode of the qrcode (defaults to alphanumeric or byte_8bit, depending on the input data):
61
- * :number
62
- * :alphanumeric
63
- * :byte_8bit
64
- * :kanji
60
+ max_size - the max_size (Integer) of the QR Code (default RQRCodeCore::QRUtil.max_size)
61
+
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
- qrcode = RQRCodeCore::QRCode.new('hello world', size: 1, level: :m, mode: :alphanumeric)
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 can output your QR code in various forms. These are detailed below:
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
- ### as SVG
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 or :currentColor
103
+ (default none)
104
+ color - Foreground color e.g "000" or :black or :currentColor
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 'rqrcode'
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
- offset: 0,
89
- color: '000',
90
- shape_rendering: 'crispEdges',
91
- module_size: 6,
92
- standalone: true
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
- ### as ANSI
139
+ ### `as_png`
99
140
 
100
- The ANSI renderer will produce as a string with ANSI color codes.
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
- ```ruby
103
- require 'rqrcode'
143
+ ```
144
+ Options:
104
145
 
105
- qrcode = RQRCode::QRCode.new("http://github.com/")
146
+ fill - Background ChunkyPNG::Color, defaults to 'white'
147
+ color - Foreground ChunkyPNG::Color, defaults to 'black'
106
148
 
107
- # NOTE: showing with default options specified explicitly
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
- ![QR code with github url](./images/ansi-screen-shot.png)
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.
165
+
166
+ The Google one will be used when no options are given or when the new size option is used.
167
+
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 --
116
176
 
117
- ### as PNG
177
+ *Original Sizing*
118
178
 
119
- The library can produce a PNG. Result will be a `ChunkyPNG::Image` instance.
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 'rqrcode'
189
+ require "rqrcode"
123
190
 
124
191
  qrcode = RQRCode::QRCode.new("http://github.com/")
125
192
 
@@ -128,40 +195,52 @@ png = qrcode.as_png(
128
195
  bit_depth: 1,
129
196
  border_modules: 4,
130
197
  color_mode: ChunkyPNG::COLOR_GRAYSCALE,
131
- color: 'black',
198
+ color: "black",
132
199
  file: nil,
133
- fill: 'white',
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.write("/tmp/github-qrcode.png", png.to_s)
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
- ```ruby
148
- require 'rqrcode'
213
+ ### `as_ansi`
149
214
 
150
- qr = RQRCode::QRCode.new('http://kyan.com', size: 4, level: :h)
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
- Output:
233
+ qrcode = RQRCode::QRCode.new("http://github.com/")
156
234
 
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
+ )
157
241
  ```
158
- xxxxxxx x x xxx xxxxxxx
159
- x x xxxxx x x x x
160
- x xxx x x x x x xxx x
161
- x xxx x xxx x xxx x xxx x
162
- x xxx x xxx x x x x xxx x
163
- ... etc
164
- ```
242
+
243
+ ![QR code with github url](./images/ansi-screen-shot.png)
165
244
 
166
245
  ## API Documentation
167
246
 
@@ -173,7 +252,8 @@ You can run the test suite using:
173
252
 
174
253
  ```
175
254
  $ ./bin/setup
176
- $ bundle exec rspec
255
+ $ rake # runs specs and standard:fix
256
+ $ rake spec # just runs the specs
177
257
  ```
178
258
 
179
259
  or try the lib from the console with:
@@ -182,11 +262,30 @@ or try the lib from the console with:
182
262
  $ ./bin/console
183
263
  ```
184
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
+
185
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
+
186
283
  * Fork the project
187
284
  * Send a pull request
188
285
  * Don't touch the .gemspec, I'll do that when I release a new version
189
286
 
287
+ Thanks D.
288
+
190
289
  ## Authors
191
290
 
192
291
  Original RQRCode author: Duncan Robertson
data/Rakefile CHANGED
@@ -1,10 +1,10 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
1
+ begin
2
+ require "standard/rake"
3
+ require "rspec/core/rake_task"
3
4
 
4
- Rake::TestTask.new(:test) do |t|
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 :default => :test
7
+ task default: [:spec, "standard:fix"]
8
+ rescue LoadError
9
+ # no standard/rspec available
10
+ end
@@ -9,15 +9,15 @@ module RQRCode
9
9
  #
10
10
  # Options:
11
11
  # light: Foreground ("\033[47m")
12
- # dark: Background ANSI code. ("\033[47m")
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
- row << fill_character
43
- else
42
+ elsif previous_dark != false
44
43
  # light
45
- if previous_dark != false
46
- row << light
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
- return quiet_rows + output.join + quiet_rows
69
+ quiet_rows + output.join + quiet_rows
72
70
  end
73
71
  end
74
72
  end
@@ -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
- ['<table>', rows.as_html, '</table>'].join
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
- ['<tr>', cells.map(&:as_html).join, '</tr>'].join
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) ? 'black' : 'white'
44
+ qr.checked?(row_index, col_index) ? "black" : "white"
45
45
  end
46
46
  end
47
47
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'chunky_png'
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. defaults to 'ChunkyPNG::COLOR_GRAYSCALE'
24
- # bit_depth - The bit depth to use. This option is only used for indexed images. defaults to '1' bit
25
- # interlace - Whether to use interlacing (true or false). defaults to ChunkyPNG default
26
- # compression - The compression level for Zlib. This can be a value between 0 and 9, or a Zlib constant like Zlib::BEST_COMPRESSION, defaults to ChunkyPNG defaults
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
- # *Googleis*
29
- # size - Total size of PNG in pixels. The module size is calculated so it fits. (defaults to 90)
30
- # border_modules - Width of white border around in modules. (defaults to 4).
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 - Border thickness, in pixels
44
+ # border - Border thickness, in pixels
37
45
  #
38
46
  # It first creates an image where 1px = 1 module, then resizes.
39
- # Defaults to 90x90 pixels, customizable by option.
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: 'black',
54
+ color: "black",
47
55
  file: false,
48
- fill: 'white',
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 || (options[:size] != nil)
63
+ googleis = options.length == 0 || !options[:size].nil?
56
64
  options = default_img_options.merge(options) # reverse_merge
57
- fill = ChunkyPNG::Color(options[:fill])
58
- color = ChunkyPNG::Color(options[: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 * module_px_size
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 , (x * module_px_size) + border_px + i] = color
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] = options[:interlace] if options.has_key?(: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
@@ -1,59 +1,206 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # This class creates a SVG files.
4
- # Code from: https://github.com/samvincent/rqrcode-rails3
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
+ # Prefix hexadecimal colors unless using a named color (symbol)
80
+ color = "##{color}" unless color.is_a?(Symbol)
81
+
82
+ @result << %{<path d="#{path.join}" style="fill:#{color}" transform="translate(#{offset},#{offset}) scale(#{module_size})"/>}
83
+ end
84
+ end
85
+
86
+ class Rect < BaseOutputSVG
87
+ def build(module_size, offset, color)
88
+ # Prefix hexadecimal colors unless using a named color (symbol)
89
+ color = "##{color}" unless color.is_a?(Symbol)
90
+
91
+ @qrcode.modules.each_index do |c|
92
+ tmp = []
93
+ @qrcode.modules.each_index do |r|
94
+ y = c * module_size + offset
95
+ x = r * module_size + offset
96
+
97
+ next unless @qrcode.checked?(c, r)
98
+ tmp << %(<rect width="#{module_size}" height="#{module_size}" x="#{x}" y="#{y}" style="fill:#{color}"/>)
99
+ end
100
+
101
+ @result << tmp.join
102
+ end
103
+ end
104
+ end
105
+
106
+ class Edge < Struct.new(:start_x, :start_y, :direction)
107
+ def end_x
108
+ case direction
109
+ when :right then start_x + 1
110
+ when :left then start_x - 1
111
+ else start_x
112
+ end
113
+ end
114
+
115
+ def end_y
116
+ case direction
117
+ when :down then start_y + 1
118
+ when :up then start_y - 1
119
+ else start_y
120
+ end
121
+ end
122
+ end
123
+
124
+ DEFAULT_SVG_ATTRIBUTES = [
125
+ %(version="1.1"),
126
+ %(xmlns="http://www.w3.org/2000/svg"),
127
+ %(xmlns:xlink="http://www.w3.org/1999/xlink"),
128
+ %(xmlns:ev="http://www.w3.org/2001/xml-events")
129
+ ]
130
+
131
+ SVG_PATH_COMMANDS = {
132
+ move: "M",
133
+ up: "v-",
134
+ down: "v",
135
+ left: "h-",
136
+ right: "h",
137
+ close: "z"
138
+ }
139
+
8
140
  #
9
141
  # Render the SVG from the Qrcode.
10
142
  #
11
143
  # Options:
12
- # offset - Padding around the QR Code (e.g. 10)
13
- # fill - Background color (e.g "ffffff" or :white)
14
- # color - Foreground color for the code (e.g. "000000" or :black)
15
- # module_size - The Pixel size of each module (e.g. 11)
16
- # shape_rendering - Defaults to crispEdges
17
- # standalone - wether to make this a full SVG file, or only svg to embed
18
- # in other svg.
144
+ # offset - Padding around the QR Code in pixels
145
+ # (default 0)
146
+ # fill - Background color e.g "ffffff"
147
+ # (default none)
148
+ # color - Foreground color e.g "000"
149
+ # (default "000")
150
+ # module_size - The Pixel size of each module
151
+ # (defaults 11)
152
+ # shape_rendering - SVG Attribute: auto | optimizeSpeed | crispEdges | geometricPrecision
153
+ # (defaults crispEdges)
154
+ # standalone - Whether to make this a full SVG file, or only an svg to embed in other svg
155
+ # (default true)
156
+ # use_path - Use <path> to render SVG rather than <rect> to significantly reduce size
157
+ # and quality. This will become the default in future versions.
158
+ # (default false)
159
+ # viewbox - replace `width` and `height` in <svg> with a viewBox, allows CSS scaling
160
+ # (default false)
161
+ # svg_attributes - A optional hash of custom <svg> attributes. Existing attributes will remain.
162
+ # (default {})
19
163
  #
20
- def as_svg(options={})
164
+ def as_svg(options = {})
165
+ fill = options[:fill]
166
+ use_path = options[:use_path]
21
167
  offset = options[:offset].to_i || 0
22
168
  color = options[:color] || "000"
23
169
  shape_rendering = options[:shape_rendering] || "crispEdges"
24
170
  module_size = options[:module_size] || 11
25
171
  standalone = options[:standalone].nil? ? true : options[:standalone]
172
+ viewbox = options[:viewbox].nil? ? false : options[:viewbox]
173
+ svg_attributes = options[:svg_attributes] || {}
26
174
 
27
175
  # height and width dependent on offset and QR complexity
28
- dimension = (@qrcode.module_count*module_size) + (2*offset)
176
+ dimension = (@qrcode.module_count * module_size) + (2 * offset)
177
+ # use dimensions differently if we are using a viewBox
178
+ dimensions_attr = viewbox ? %(viewBox="0 0 #{dimension} #{dimension}") : %(width="#{dimension}" height="#{dimension}")
29
179
 
30
- xml_tag = %{<?xml version="1.0" standalone="yes"?>}
31
- open_tag = %{<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="#{dimension}" height="#{dimension}" shape-rendering="#{shape_rendering}">}
32
- close_tag = "</svg>"
180
+ svg_tag_attributes = (DEFAULT_SVG_ATTRIBUTES + [
181
+ dimensions_attr,
182
+ %(shape-rendering="#{shape_rendering}")
183
+ ] + svg_attributes.map { |k, v| %(#{k}="#{v}") }).join(" ")
33
184
 
34
- result = []
35
- @qrcode.modules.each_index do |c|
36
- tmp = []
37
- @qrcode.modules.each_index do |r|
38
- y = c*module_size + offset
39
- x = r*module_size + offset
185
+ xml_tag = %(<?xml version="1.0" standalone="yes"?>)
186
+ open_tag = %(<svg #{svg_tag_attributes}>)
187
+ close_tag = "</svg>"
40
188
 
41
- next unless @qrcode.checked?(c, r)
42
- tmp << %{<rect width="#{module_size}" height="#{module_size}" x="#{x}" y="#{y}" style="fill:##{color}"/>}
43
- end
44
- result << tmp.join
45
- end
189
+ output_tag = (use_path ? Path : Rect).new(@qrcode)
190
+ output_tag.build(module_size, offset, color)
46
191
 
47
- if options[:fill]
48
- result.unshift %{<rect width="#{dimension}" height="#{dimension}" x="0" y="0" style="fill:##{options[:fill]}"/>}
192
+ if fill
193
+ # Prefix hexadecimal colors unless using a named color (symbol)
194
+ fill = "##{fill}" unless fill.is_a?(Symbol)
195
+ output_tag.result.unshift %(<rect width="#{dimension}" height="#{dimension}" x="0" y="0" style="fill:#{fill}"/>)
49
196
  end
50
197
 
51
198
  if standalone
52
- result.unshift(xml_tag, open_tag)
53
- result << close_tag
199
+ output_tag.result.unshift(xml_tag, open_tag)
200
+ output_tag.result << close_tag
54
201
  end
55
202
 
56
- result.join("\n")
203
+ output_tag.result.join
57
204
  end
58
205
  end
59
206
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'rqrcode/export/ansi'
4
- require 'rqrcode/export/html'
5
- require 'rqrcode/export/png'
6
- require 'rqrcode/export/svg'
3
+ require "rqrcode/export/ansi"
4
+ require "rqrcode/export/html"
5
+ require "rqrcode/export/png"
6
+ require "rqrcode/export/svg"
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'forwardable'
3
+ require "forwardable"
4
4
 
5
- module RQRCode #:nodoc:
5
+ module RQRCode # :nodoc:
6
6
  class QRCode
7
7
  extend Forwardable
8
8
  def_delegators :@qrcode, :to_s
@@ -1,3 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'rqrcode/qrcode/qrcode'
3
+ require "rqrcode/qrcode/qrcode"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RQRCode
4
- VERSION = "1.1.2"
4
+ VERSION = "2.1.1"
5
5
  end
data/lib/rqrcode.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RQRCode
4
- require 'rqrcode_core'
5
- require 'rqrcode/qrcode'
6
- require 'rqrcode/export'
7
- require 'rqrcode/version'
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 = "rqrcode"
9
- spec.version = RQRCode::VERSION
10
- spec.platform = Gem::Platform::RUBY
11
- spec.authors = ["Duncan Robertson"]
12
- spec.email = ["duncan@whomwah.com"]
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 = %q{A library to encode QR Codes}
15
- spec.description = <<EOF
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 = "https://github.com/whomwah/rqrcode"
21
- spec.license = "MIT"
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 = Dir.chdir(File.expand_path('..', __FILE__)) do
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 = "exe"
27
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
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 = '~> 2.3'
31
- spec.add_dependency 'rqrcode_core', '~> 0.1'
32
- spec.add_dependency 'chunky_png', '~> 1.0'
33
- spec.add_development_dependency 'bundler', '~> 2.0'
34
- spec.add_development_dependency 'rake', '~> 12.0'
35
- spec.add_development_dependency 'rspec', '~> 3.5'
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: 1.1.2
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Duncan Robertson
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-07 00:00:00.000000000 Z
11
+ date: 2022-02-11 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: '0.1'
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: '0.1'
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: '12.0'
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: '12.0'
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: {}
120
- post_install_message:
135
+ metadata:
136
+ bug_tracker_uri: https://github.com/whomwah/rqrcode/issues
137
+ changelog_uri: https://github.com/whomwah/rqrcode/blob/master/CHANGELOG.md
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,8 +150,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
150
  - !ruby/object:Gem::Version
133
151
  version: '0'
134
152
  requirements: []
135
- rubygems_version: 3.0.1
136
- signing_key:
153
+ rubygems_version: 3.3.3
154
+ signing_key:
137
155
  specification_version: 4
138
156
  summary: A library to encode QR Codes
139
157
  test_files: []