rqrcode_core 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8882bf435375ba687cabacd9f79ec6e8ee6d820264e24375ce3cc69f5ac3cde2
4
- data.tar.gz: 5b7e795cdcc8ec3e232fd586157612c8fe72174ae6a31bd7a1b07201e25e64ed
3
+ metadata.gz: bc2b513b4aa28453c231e4fa52d53c4406bf03bbba9df84ab87eed0e22193389
4
+ data.tar.gz: fc7b7bfc2ad40315031899501b94a1b2a35c8987b6eeff9cd9c71d77b4e5d3d4
5
5
  SHA512:
6
- metadata.gz: 7de9ae7b15f8a102e1bc9529dc0bdd4147b3e1f11b3098eb4ca4e89c041ea19a7931f8ccf959ff1aed252f62682a80577771229e75a187b36be94f25a63921e8
7
- data.tar.gz: 1b986e1ba66995331c545d840ed358945a6ef7c6f94e483df5ee2f1b3954e59238f39de3aac25ad92b45b91c0a45f0aebfa7ec69ae257dcc4414a18264e81b6a
6
+ metadata.gz: de4b6fdb7ab8f356fb55aedbc93fb949f51f1f68acebdc1aa7d4b82ecf90cf785065104bbf68170ea39f20671ff513c5eb212cbbdb42f38f099f133612d70d17
7
+ data.tar.gz: 0a2e8ea5a6e0a2bf43a9d94a3333cc95d6558f47f6369dd5a07107e12079db85b8a21dec57ef31920a855648c96e630fc68d40942e3f9e4570a6f2f07b4c1ee5
data/CHANGELOG.md CHANGED
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.1.0] - 2021-07-01
11
+
12
+ - Add a basic benchmark file
13
+ - Add standardRB badge
14
+ - Add `.freeze` on `CONST` lookup objects
15
+ - Remove unused `@mode` instance variable
16
+ - A batch of small refactors and optimizations
17
+
10
18
  ## [1.0.0] - 2021-04-23
11
19
 
12
20
  ### Changed
@@ -25,6 +33,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
25
33
 
26
34
  - fix `required_ruby_version` for Ruby 3 support
27
35
 
28
- [unreleased]: https://github.com/whomwah/rqrcode_core/compare/v1.0.0...HEAD
36
+ [unreleased]: https://github.com/whomwah/rqrcode_core/compare/v1.1.0...HEAD
37
+ [1.1.0]: https://github.com/whomwah/rqrcode_core/compare/v1.0.0...v1.1.0
29
38
  [1.0.0]: https://github.com/whomwah/rqrcode_core/compare/v0.2.0...v1.0.0
30
39
  [0.2.0]: https://github.com/whomwah/rqrcode_core/compare/v0.1.2...v0.2.0
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rqrcode_core (1.0.0)
4
+ rqrcode_core (1.1.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -1,4 +1,5 @@
1
1
  ![](https://github.com/whomwah/rqrcode_core/actions/workflows/ruby.yml/badge.svg)
2
+ [![Ruby Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://github.com/testdouble/standard)
2
3
 
3
4
  # RQRCodeCore
4
5
 
@@ -6,7 +7,7 @@
6
7
 
7
8
  Features:
8
9
 
9
- * `rqrcode_core` is a ruby only library. It requires no native libraries. Just Ruby!
10
+ * `rqrcode_core` is a Ruby only library. It requires no native libraries. Just Ruby!
10
11
  * It is an encoding library. You can't decode QR codes with it.
11
12
  * The interface is simple and assumes you just want to encode a string into a QR code.
12
13
  * QR code is trademarked by Denso Wave inc.
data/Rakefile CHANGED
@@ -9,6 +9,11 @@ begin
9
9
  end
10
10
 
11
11
  task default: [:test, "standard:fix"]
12
+
13
+ desc "Run a simple benchmark (x1000)"
14
+ task :benchmark do
15
+ ruby "test/benchmark.rb"
16
+ end
12
17
  rescue LoadError
13
18
  # no standard/rspec available
14
19
  end
@@ -2,19 +2,13 @@
2
2
 
3
3
  module RQRCodeCore
4
4
  class QR8bitByte
5
- attr_reader :mode
6
-
7
5
  def initialize(data)
8
- @mode = QRMODE[:mode_8bit_byte]
9
6
  @data = data
10
7
  end
11
8
 
12
- def get_length
13
- @data.bytesize
14
- end
15
-
16
9
  def write(buffer)
17
- buffer.byte_encoding_start(get_length)
10
+ buffer.byte_encoding_start(@data.bytesize)
11
+
18
12
  @data.each_byte do |b|
19
13
  buffer.put(b, 8)
20
14
  end
@@ -1,32 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RQRCodeCore
4
- ALPHANUMERIC = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", " ", "$", "%", "*", "+", "-", ".", "/", ":"]
4
+ ALPHANUMERIC = [
5
+ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I",
6
+ "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", " ", "$",
7
+ "%", "*", "+", "-", ".", "/", ":"
8
+ ].freeze
5
9
 
6
10
  class QRAlphanumeric
7
- attr_reader :mode
8
-
9
11
  def initialize(data)
10
- @mode = QRMODE[:mode_alpha_numk]
11
-
12
- raise QRCodeArgumentError, "Not a alpha numeric uppercase string `#{data}`" unless QRAlphanumeric.valid_data?(data)
12
+ unless QRAlphanumeric.valid_data?(data)
13
+ raise QRCodeArgumentError, "Not a alpha numeric uppercase string `#{data}`"
14
+ end
13
15
 
14
16
  @data = data
15
17
  end
16
18
 
17
- def get_length
18
- @data.size
19
- end
20
-
21
- def self.valid_data? data
22
- data.each_char do |s|
23
- return false if ALPHANUMERIC.index(s).nil?
24
- end
25
- true
19
+ def self.valid_data?(data)
20
+ (data.chars - ALPHANUMERIC).empty?
26
21
  end
27
22
 
28
23
  def write(buffer)
29
- buffer.alphanumeric_encoding_start(get_length)
24
+ buffer.alphanumeric_encoding_start(@data.size)
30
25
 
31
26
  @data.size.times do |i|
32
27
  if i % 2 == 0
@@ -64,8 +64,8 @@ module RQRCodeCore
64
64
 
65
65
  # Pad with padding code words
66
66
  while get_length_in_bits < prefered_size
67
- put(QRBitBuffer::PAD0, 8)
68
- put(QRBitBuffer::PAD1, 8) if get_length_in_bits < prefered_size
67
+ put(PAD0, 8)
68
+ put(PAD1, 8) if get_length_in_bits < prefered_size
69
69
  end
70
70
  end
71
71
 
@@ -5,20 +5,20 @@ module RQRCodeCore
5
5
  mode_number: 1 << 0,
6
6
  mode_alpha_numk: 1 << 1,
7
7
  mode_8bit_byte: 1 << 2
8
- }
8
+ }.freeze
9
9
 
10
10
  QRMODE_NAME = {
11
11
  number: :mode_number,
12
12
  alphanumeric: :mode_alpha_numk,
13
13
  byte_8bit: :mode_8bit_byte
14
- }
14
+ }.freeze
15
15
 
16
16
  QRERRORCORRECTLEVEL = {
17
17
  l: 1,
18
18
  m: 0,
19
19
  q: 3,
20
20
  h: 2
21
- }
21
+ }.freeze
22
22
 
23
23
  QRMASKPATTERN = {
24
24
  pattern000: 0,
@@ -29,7 +29,7 @@ module RQRCodeCore
29
29
  pattern101: 5,
30
30
  pattern110: 6,
31
31
  pattern111: 7
32
- }
32
+ }.freeze
33
33
 
34
34
  QRMASKCOMPUTATIONS = [
35
35
  proc { |i, j| (i + j) % 2 == 0 },
@@ -40,7 +40,7 @@ module RQRCodeCore
40
40
  proc { |i, j| (i * j) % 2 + (i * j) % 3 == 0 },
41
41
  proc { |i, j| ((i * j) % 2 + (i * j) % 3) % 2 == 0 },
42
42
  proc { |i, j| ((i * j) % 3 + (i + j) % 2) % 2 == 0 }
43
- ]
43
+ ].freeze
44
44
 
45
45
  QRPOSITIONPATTERNLENGTH = (7 + 1) * 2 + 1
46
46
  QRFORMATINFOLENGTH = 15
@@ -132,7 +132,7 @@ module RQRCodeCore
132
132
  790, 842, 898, 958, 983, 1051, 1093, 1139, 1219, 1273
133
133
  ]
134
134
  }
135
- }
135
+ }.freeze
136
136
 
137
137
  # StandardErrors
138
138
 
@@ -314,7 +314,7 @@ module RQRCodeCore
314
314
 
315
315
  private
316
316
 
317
- def prepare_common_patterns
317
+ def prepare_common_patterns #:nodoc:
318
318
  @modules.map! { |row| Array.new(@module_count) }
319
319
 
320
320
  place_position_probe_pattern(0, 0)
@@ -490,7 +490,7 @@ module RQRCodeCore
490
490
  end
491
491
 
492
492
  class << self
493
- def count_max_data_bits(rs_blocks)
493
+ def count_max_data_bits(rs_blocks) #:nodoc:
494
494
  max_data_bytes = rs_blocks.reduce(0) do |sum, rs_block|
495
495
  sum + rs_block.data_count
496
496
  end
@@ -21,8 +21,8 @@ module RQRCodeCore
21
21
  log_table[exp_table[i]] = i
22
22
  end
23
23
 
24
- const_set(:EXP_TABLE, exp_table)
25
- const_set(:LOG_TABLE, log_table)
24
+ const_set(:EXP_TABLE, exp_table).freeze
25
+ const_set(:LOG_TABLE, log_table).freeze
26
26
  }
27
27
 
28
28
  class << self
@@ -1,32 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RQRCodeCore
4
- NUMERIC = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"].freeze
4
+ NUMERIC = %w[0 1 2 3 4 5 6 7 8 9].freeze
5
5
 
6
6
  class QRNumeric
7
- attr_reader :mode
8
-
9
7
  def initialize(data)
10
- @mode = QRMODE[:mode_number]
11
-
12
8
  raise QRCodeArgumentError, "Not a numeric string `#{data}`" unless QRNumeric.valid_data?(data)
13
9
 
14
10
  @data = data
15
11
  end
16
12
 
17
- def get_length
18
- @data.size
19
- end
20
-
21
- def self.valid_data? data
22
- data.each_char do |s|
23
- return false if NUMERIC.index(s).nil?
24
- end
25
- true
13
+ def self.valid_data?(data)
14
+ (data.chars - NUMERIC).empty?
26
15
  end
27
16
 
28
17
  def write(buffer)
29
- buffer.numeric_encoding_start(get_length)
18
+ buffer.numeric_encoding_start(@data.size)
30
19
 
31
20
  @data.size.times do |i|
32
21
  if i % 3 == 0
@@ -10,7 +10,7 @@ module RQRCodeCore
10
10
  end
11
11
 
12
12
  # http://www.thonky.com/qr-code-tutorial/error-correction-table/
13
- RQRCodeCore::QRRSBlock::RS_BLOCK_TABLE = [
13
+ RS_BLOCK_TABLE = [
14
14
  # L
15
15
  # M
16
16
  # Q
@@ -256,7 +256,7 @@ module RQRCodeCore
256
256
  [34, 54, 24, 34, 55, 25],
257
257
  [20, 45, 15, 61, 46, 16]
258
258
 
259
- ]
259
+ ].freeze
260
260
 
261
261
  def self.get_rs_blocks(version, error_correct_level)
262
262
  rs_block = QRRSBlock.get_rs_block_table(version, error_correct_level)
@@ -43,7 +43,7 @@ module RQRCodeCore
43
43
  [6, 32, 58, 84, 110, 136, 162],
44
44
  [6, 26, 54, 82, 110, 138, 166],
45
45
  [6, 30, 58, 86, 114, 142, 170]
46
- ]
46
+ ].freeze
47
47
 
48
48
  G15 = 1 << 10 | 1 << 8 | 1 << 5 | 1 << 4 | 1 << 2 | 1 << 1 | 1 << 0
49
49
  G18 = 1 << 12 | 1 << 11 | 1 << 10 | 1 << 9 | 1 << 8 | 1 << 5 | 1 << 2 | 1 << 0
@@ -59,7 +59,7 @@ module RQRCodeCore
59
59
  QRMODE[:mode_alpha_numk] => [9, 11, 13],
60
60
  QRMODE[:mode_8bit_byte] => [8, 16, 16],
61
61
  QRMODE[:mode_kanji] => [8, 10, 12]
62
- }
62
+ }.freeze
63
63
 
64
64
  def self.max_size
65
65
  PATTERN_POSITION_TABLE.count
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RQRCodeCore
4
- VERSION = "1.0.0"
4
+ VERSION = "1.1.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rqrcode_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.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: 2021-04-23 00:00:00.000000000 Z
11
+ date: 2021-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler