rqrcode 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +6 -0
- data/README +12 -12
- data/lib/rqrcode/core_ext/array/behavior.rb +5 -5
- data/lib/rqrcode/qrcode/qr_code.rb +85 -50
- data/lib/rqrcode/qrcode/qr_polynomial.rb +1 -1
- data/lib/rqrcode/qrcode/qr_rs_block.rb +4 -4
- data/lib/rqrcode/qrcode/qr_util.rb +12 -12
- data/test/runtest.rb +45 -43
- metadata +3 -3
data/CHANGELOG
CHANGED
data/README
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
|
1
|
+
== rQRCode, Encode QRCodes
|
2
2
|
|
3
3
|
rQRCode is a library for encoding QR Codes in Ruby. It has a simple interface with all the standard qrcode options. It was adapted from the Javascript library by Kazuhiko Arase.
|
4
4
|
|
5
5
|
RubyForge Project Page http://rubyforge.org/projects/rqrcode/
|
6
6
|
|
7
|
-
|
7
|
+
== An Overview
|
8
8
|
|
9
9
|
Let's clear up some rQRCode stuff.
|
10
10
|
|
@@ -13,7 +13,7 @@ Let's clear up some rQRCode stuff.
|
|
13
13
|
# The interface is simple and assumes you just want to encode a string into a QR code
|
14
14
|
# QR code is trademarked by Denso Wave inc
|
15
15
|
|
16
|
-
|
16
|
+
== Rescources
|
17
17
|
|
18
18
|
wikipedia:: http://en.wikipedia.org/wiki/QR_Code
|
19
19
|
Denso-Wave website:: http://www.denso-wave.com/qrcode/index-e.html
|
@@ -31,12 +31,12 @@ You may get the latest stable version from Rubyforge. Source gems are also avail
|
|
31
31
|
You have installed the gem already, yeah?
|
32
32
|
|
33
33
|
require 'rubygems'
|
34
|
-
require '
|
34
|
+
require 'rqrcode'
|
35
35
|
|
36
36
|
=== Simple QRCode generation to screen
|
37
37
|
|
38
38
|
qr = RQRCode::QRCode.new( 'my string to generate', :size => 4, :level => :h )
|
39
|
-
puts qr.
|
39
|
+
puts qr.to_s
|
40
40
|
#
|
41
41
|
# Prints:
|
42
42
|
# xxxxxxx x x x x x xx xxxxxxx
|
@@ -52,10 +52,10 @@ You have installed the gem already, yeah?
|
|
52
52
|
<b>View: (minimal styling added)</b>
|
53
53
|
<style type="text/css">
|
54
54
|
table {
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
55
|
+
border-width: 0;
|
56
|
+
border-style: none;
|
57
|
+
border-color: #0000ff;
|
58
|
+
border-collapse: collapse;
|
59
59
|
}
|
60
60
|
td {
|
61
61
|
border-width: 0;
|
@@ -74,11 +74,11 @@ You have installed the gem already, yeah?
|
|
74
74
|
<table>
|
75
75
|
<% @qr.modules.each_index do |x| %>
|
76
76
|
<tr>
|
77
|
-
<%
|
77
|
+
<% @qr.modules.each_index do |y| %>
|
78
78
|
<% if @qr.is_dark(x,y) %>
|
79
|
-
|
79
|
+
<td class="black"/>
|
80
80
|
<% else %>
|
81
|
-
|
81
|
+
<td class="white"/>
|
82
82
|
<% end %>
|
83
83
|
<% end %>
|
84
84
|
</tr>
|
@@ -12,10 +12,10 @@
|
|
12
12
|
module RQRCode #:nodoc:
|
13
13
|
|
14
14
|
QRMODE = {
|
15
|
-
:mode_number
|
16
|
-
:
|
17
|
-
:mode_8bit_byte
|
18
|
-
:mode_kanji
|
15
|
+
:mode_number => 1 << 0,
|
16
|
+
:mode_alpha_numk => 1 << 1,
|
17
|
+
:mode_8bit_byte => 1 << 2,
|
18
|
+
:mode_kanji => 1 << 3
|
19
19
|
}
|
20
20
|
|
21
21
|
QRERRORCORRECTLEVEL = {
|
@@ -36,45 +36,57 @@ module RQRCode #:nodoc:
|
|
36
36
|
:pattern111 => 7
|
37
37
|
}
|
38
38
|
|
39
|
-
|
39
|
+
# StandardErrors
|
40
40
|
|
41
|
-
|
42
|
-
|
41
|
+
class QRCodeArgumentError < ArgumentError; end
|
42
|
+
class QRCodeRunTimeError < RuntimeError; end
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
|
44
|
+
# == Creation
|
45
|
+
#
|
46
|
+
# QRCode objects expect only one required constructor parameter
|
47
|
+
# and an optional hash of any other. Here's a few examples:
|
48
|
+
#
|
49
|
+
# qr = RQRCode::QRCode.new('hello world')
|
50
|
+
# qr = RQRCode::QRCode.new('hello world', :size => 1, :level => :m )
|
51
|
+
#
|
47
52
|
|
48
53
|
class QRCode
|
49
54
|
attr_reader :modules, :module_count
|
50
55
|
|
51
56
|
PAD0 = 0xEC
|
52
|
-
PAD1 = 0x11
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
57
|
+
PAD1 = 0x11
|
58
|
+
|
59
|
+
# Expects a string to be parsed in, other args are optional
|
60
|
+
#
|
61
|
+
# # string - the string you wish to encode
|
62
|
+
# # size - the size of the qrcode
|
63
|
+
# # level - the error correction level
|
64
|
+
# qr = RQRCode::QRCode.new('hello world', :size => 1, :level => :m )
|
65
|
+
#
|
66
|
+
|
67
|
+
def initialize( *args )
|
68
|
+
raise QRCodeArgumentError unless args.first.kind_of?( String )
|
69
|
+
|
70
|
+
@data = args.shift
|
71
|
+
options = args.extract_options!
|
72
|
+
level = options[:level] || :h
|
62
73
|
@error_correct_level = QRERRORCORRECTLEVEL[ level.to_sym ]
|
63
|
-
@type_number
|
64
|
-
|
65
|
-
@modules
|
66
|
-
@data_cache
|
67
|
-
|
74
|
+
@type_number = options[:size] || 4
|
75
|
+
@module_count = @type_number * 4 + 17
|
76
|
+
@modules = nil
|
77
|
+
@data_cache = nil
|
78
|
+
@data_list = QR8bitByte.new( @data )
|
68
79
|
|
69
|
-
|
80
|
+
self.make
|
70
81
|
end
|
71
82
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
83
|
+
# <tt>is_dark</tt> is called with a +col+ and +row+ parameter. This will
|
84
|
+
# return true or false based on whether that coordinate exists in the
|
85
|
+
# matrix returned. It would normally be called while iterating through
|
86
|
+
# <tt>modules</tt>. A simple example would be:
|
87
|
+
#
|
88
|
+
# instance.is_dark( 10, 10 ) => true
|
89
|
+
#
|
78
90
|
|
79
91
|
def is_dark( row, col )
|
80
92
|
if row < 0 || @module_count <= row || col < 0 || @module_count <= col
|
@@ -83,8 +95,31 @@ module RQRCode #:nodoc:
|
|
83
95
|
@modules[row][col]
|
84
96
|
end
|
85
97
|
|
86
|
-
|
87
|
-
|
98
|
+
# This is a public method that returns the QR Code you have
|
99
|
+
# generated as a string. It will not be able to be read
|
100
|
+
# in this format by a QR Code reader, but will give you an
|
101
|
+
# idea if the final outout. It takes two optional args
|
102
|
+
# +:true+ and +:false+ which are there for you to choose
|
103
|
+
# how the output looks. Here's an example of it's use:
|
104
|
+
#
|
105
|
+
# instance.to_s =>
|
106
|
+
# xxxxxxx x x x x x xx xxxxxxx
|
107
|
+
# x x xxx xxxxxx xxx x x
|
108
|
+
# x xxx x xxxxx x xx x xxx x
|
109
|
+
#
|
110
|
+
# instance._to_s( :true => 'E', :false => 'Q') =>
|
111
|
+
# EEEEEEEQEQQEQEQQQEQEQQEEQQEEEEEEE
|
112
|
+
# EQQQQQEQQEEEQQEEEEEEQEEEQQEQQQQQE
|
113
|
+
# EQEEEQEQQEEEEEQEQQQQQQQEEQEQEEEQE
|
114
|
+
#
|
115
|
+
|
116
|
+
def to_s( *args )
|
117
|
+
options = args.extract_options!
|
118
|
+
row = options[:true] || 'x'
|
119
|
+
col = options[:false] || ' '
|
120
|
+
|
121
|
+
res = []
|
122
|
+
|
88
123
|
@modules.each_index do |c|
|
89
124
|
tmp = []
|
90
125
|
@modules.each_index do |r|
|
@@ -95,17 +130,17 @@ module RQRCode #:nodoc:
|
|
95
130
|
end
|
96
131
|
end
|
97
132
|
res << tmp.join
|
98
|
-
|
99
|
-
|
133
|
+
end
|
134
|
+
res.join("\n")
|
100
135
|
end
|
101
136
|
|
102
|
-
|
137
|
+
protected
|
103
138
|
|
104
|
-
|
139
|
+
def make #:nodoc:
|
105
140
|
make_impl( false, get_best_mask_pattern )
|
106
|
-
|
141
|
+
end
|
107
142
|
|
108
|
-
|
143
|
+
private
|
109
144
|
|
110
145
|
|
111
146
|
def make_impl( test, mask_pattern ) #:nodoc:
|
@@ -196,7 +231,7 @@ module RQRCode #:nodoc:
|
|
196
231
|
@modules[row + r][col + c] = false
|
197
232
|
end
|
198
233
|
end
|
199
|
-
end
|
234
|
+
end
|
200
235
|
end
|
201
236
|
end
|
202
237
|
end
|
@@ -249,7 +284,7 @@ module RQRCode #:nodoc:
|
|
249
284
|
end
|
250
285
|
|
251
286
|
# fixed module
|
252
|
-
@modules[ @module_count - 8 ][8] = !test
|
287
|
+
@modules[ @module_count - 8 ][8] = !test
|
253
288
|
end
|
254
289
|
|
255
290
|
|
@@ -290,7 +325,7 @@ module RQRCode #:nodoc:
|
|
290
325
|
break
|
291
326
|
end
|
292
327
|
end
|
293
|
-
end
|
328
|
+
end
|
294
329
|
end
|
295
330
|
|
296
331
|
def QRCode.create_data( type_number, error_correct_level, data_list ) #:nodoc:
|
@@ -302,16 +337,16 @@ module RQRCode #:nodoc:
|
|
302
337
|
buffer.put(
|
303
338
|
data.get_length, QRUtil.get_length_in_bits( data.mode, type_number )
|
304
339
|
)
|
305
|
-
data.write( buffer )
|
340
|
+
data.write( buffer )
|
306
341
|
|
307
342
|
total_data_count = 0
|
308
343
|
( 0...rs_blocks.size ).each do |i|
|
309
|
-
total_data_count = total_data_count + rs_blocks[i].data_count
|
344
|
+
total_data_count = total_data_count + rs_blocks[i].data_count
|
310
345
|
end
|
311
346
|
|
312
347
|
if buffer.get_length_in_bits > total_data_count * 8
|
313
348
|
raise QRCodeRunTimeError,
|
314
|
-
|
349
|
+
"code length overflow. (#{buffer.get_length_in_bits}>#{total_data_count})"
|
315
350
|
end
|
316
351
|
|
317
352
|
if buffer.get_length_in_bits + 4 <= total_data_count * 8
|
@@ -374,8 +409,8 @@ module RQRCode #:nodoc:
|
|
374
409
|
( 0...rs_blocks.size ).each do |r|
|
375
410
|
if i < dcdata[r].size
|
376
411
|
index += 1
|
377
|
-
data[index-1] = dcdata[r][i]
|
378
|
-
end
|
412
|
+
data[index-1] = dcdata[r][i]
|
413
|
+
end
|
379
414
|
end
|
380
415
|
end
|
381
416
|
|
@@ -383,8 +418,8 @@ module RQRCode #:nodoc:
|
|
383
418
|
( 0...rs_blocks.size ).each do |r|
|
384
419
|
if i < ecdata[r].size
|
385
420
|
index += 1
|
386
|
-
data[index-1] = ecdata[r][i]
|
387
|
-
end
|
421
|
+
data[index-1] = ecdata[r][i]
|
422
|
+
end
|
388
423
|
end
|
389
424
|
end
|
390
425
|
|
@@ -44,7 +44,7 @@ module RQRCode #:nodoc:
|
|
44
44
|
[2, 35, 17],
|
45
45
|
[2, 35, 13],
|
46
46
|
|
47
|
-
# 4
|
47
|
+
# 4
|
48
48
|
[1, 100, 80],
|
49
49
|
[2, 50, 32],
|
50
50
|
[2, 50, 24],
|
@@ -62,7 +62,7 @@ module RQRCode #:nodoc:
|
|
62
62
|
[4, 43, 19],
|
63
63
|
[4, 43, 15],
|
64
64
|
|
65
|
-
# 7
|
65
|
+
# 7
|
66
66
|
[2, 98, 78],
|
67
67
|
[4, 49, 31],
|
68
68
|
[2, 32, 14, 4, 33, 15],
|
@@ -80,7 +80,7 @@ module RQRCode #:nodoc:
|
|
80
80
|
[4, 36, 16, 4, 37, 17],
|
81
81
|
[4, 36, 12, 4, 37, 13],
|
82
82
|
|
83
|
-
# 10
|
83
|
+
# 10
|
84
84
|
[2, 86, 68, 2, 87, 69],
|
85
85
|
[4, 69, 43, 1, 70, 44],
|
86
86
|
[6, 43, 19, 2, 44, 20],
|
@@ -94,7 +94,7 @@ module RQRCode #:nodoc:
|
|
94
94
|
|
95
95
|
if rs_block.nil?
|
96
96
|
raise QRCodeRunTimeError,
|
97
|
-
|
97
|
+
"bad rsblock @ typeno: #{type_no}/error_correct_level:#{error_correct_level}"
|
98
98
|
end
|
99
99
|
|
100
100
|
length = rs_block.size / 3
|
@@ -25,7 +25,7 @@ module RQRCode #:nodoc:
|
|
25
25
|
[6, 24, 42],
|
26
26
|
[6, 26, 46],
|
27
27
|
[6, 28, 50],
|
28
|
-
[6, 30, 54],
|
28
|
+
[6, 30, 54],
|
29
29
|
[6, 32, 58],
|
30
30
|
[6, 34, 62],
|
31
31
|
[6, 26, 46, 66],
|
@@ -57,7 +57,7 @@ module RQRCode #:nodoc:
|
|
57
57
|
[6, 30, 58, 86, 114, 142, 170]
|
58
58
|
]
|
59
59
|
|
60
|
-
G15 = 1 << 10 | 1 << 8 | 1 << 5 | 1 << 4 | 1 << 2 | 1 << 1 | 1 << 0
|
60
|
+
G15 = 1 << 10 | 1 << 8 | 1 << 5 | 1 << 4 | 1 << 2 | 1 << 1 | 1 << 0
|
61
61
|
G18 = 1 << 12 | 1 << 11 | 1 << 10 | 1 << 9 | 1 << 8 | 1 << 5 | 1 << 2 | 1 << 0
|
62
62
|
G15_MASK = 1 << 14 | 1 << 12 | 1 << 10 | 1 << 4 | 1 << 1
|
63
63
|
|
@@ -116,7 +116,7 @@ module RQRCode #:nodoc:
|
|
116
116
|
when QRMASKPATTERN[:pattern111]
|
117
117
|
( (i * j) % 3 + (i + j) % 2) % 2 == 0
|
118
118
|
else
|
119
|
-
raise QRCodeRunTimeError, "bad mask_pattern: #{mask_pattern}"
|
119
|
+
raise QRCodeRunTimeError, "bad mask_pattern: #{mask_pattern}"
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
@@ -137,7 +137,7 @@ module RQRCode #:nodoc:
|
|
137
137
|
|
138
138
|
# 1 - 9
|
139
139
|
case mode
|
140
|
-
when QRMODE[:mode_number] :
|
140
|
+
when QRMODE[:mode_number] : 10
|
141
141
|
when QRMODE[:mode_alpha_num] : 9
|
142
142
|
when QRMODE[:mode_8bit_byte] : 8
|
143
143
|
when QRMODE[:mode_kanji] : 8
|
@@ -149,7 +149,7 @@ module RQRCode #:nodoc:
|
|
149
149
|
|
150
150
|
# 10 -26
|
151
151
|
case mode
|
152
|
-
when QRMODE[:mode_number] :
|
152
|
+
when QRMODE[:mode_number] : 12
|
153
153
|
when QRMODE[:mode_alpha_num] : 11
|
154
154
|
when QRMODE[:mode_8bit_byte] : 16
|
155
155
|
when QRMODE[:mode_kanji] : 10
|
@@ -161,7 +161,7 @@ module RQRCode #:nodoc:
|
|
161
161
|
|
162
162
|
# 27 - 40
|
163
163
|
case mode
|
164
|
-
when QRMODE[:mode_number] :
|
164
|
+
when QRMODE[:mode_number] : 14
|
165
165
|
when QRMODE[:mode_alpha_num] : 13
|
166
166
|
when QRMODE[:mode_8bit_byte] : 16
|
167
167
|
when QRMODE[:mode_kanji] : 12
|
@@ -199,7 +199,7 @@ module RQRCode #:nodoc:
|
|
199
199
|
|
200
200
|
if same_count > 5
|
201
201
|
lost_point += (3 + same_count - 5)
|
202
|
-
end
|
202
|
+
end
|
203
203
|
end
|
204
204
|
end
|
205
205
|
|
@@ -211,8 +211,8 @@ module RQRCode #:nodoc:
|
|
211
211
|
count = count + 1 if qr_code.is_dark( row + 1, col )
|
212
212
|
count = count + 1 if qr_code.is_dark( row, col + 1 )
|
213
213
|
count = count + 1 if qr_code.is_dark( row + 1, col + 1 )
|
214
|
-
lost_point = lost_point + 3 if (count == 0 || count == 4)
|
215
|
-
end
|
214
|
+
lost_point = lost_point + 3 if (count == 0 || count == 4)
|
215
|
+
end
|
216
216
|
end
|
217
217
|
|
218
218
|
# level 3
|
@@ -239,15 +239,15 @@ module RQRCode #:nodoc:
|
|
239
239
|
( 0...module_count ).each do |row|
|
240
240
|
if qr_code.is_dark(row, col)
|
241
241
|
dark_count = dark_count + 1
|
242
|
-
end
|
242
|
+
end
|
243
243
|
end
|
244
244
|
end
|
245
245
|
|
246
246
|
ratio = (100 * dark_count / module_count / module_count - 50).abs / 5
|
247
247
|
lost_point = lost_point * 10
|
248
248
|
|
249
|
-
lost_point
|
250
|
-
end
|
249
|
+
lost_point
|
250
|
+
end
|
251
251
|
|
252
252
|
end
|
253
253
|
|
data/test/runtest.rb
CHANGED
@@ -2,75 +2,77 @@ require "test/unit"
|
|
2
2
|
require "lib/rqrcode"
|
3
3
|
|
4
4
|
class QRCodeTest < Test::Unit::TestCase
|
5
|
-
|
5
|
+
require "test/test_data"
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
7
|
+
def test_no_data_given
|
8
|
+
assert_raise(RQRCode::QRCodeArgumentError) {
|
9
|
+
RQRCode::QRCode.new( :size => 1, :level => :h )
|
10
|
+
RQRCode::QRCode.new( :size => 1 )
|
11
|
+
RQRCode::QRCode.new
|
12
|
+
}
|
13
|
+
assert_raise(RQRCode::QRCodeRunTimeError) {
|
14
|
+
qr = RQRCode::QRCode.new('duncan')
|
15
|
+
qr.is_dark(0,999999)
|
16
|
+
}
|
17
|
+
end
|
18
18
|
|
19
19
|
def test_H_
|
20
|
-
|
20
|
+
qr = RQRCode::QRCode.new( 'duncan', :size => 1 )
|
21
21
|
|
22
22
|
assert_equal qr.modules.size, 21
|
23
|
-
|
23
|
+
assert_equal qr.modules, MATRIX_1_H
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
25
|
+
qr = RQRCode::QRCode.new( 'duncan', :size => 1 )
|
26
|
+
assert_equal qr.modules, MATRIX_1_H
|
27
|
+
qr = RQRCode::QRCode.new( 'duncan', :size => 1, :level => :l )
|
28
|
+
assert_equal qr.modules, MATRIX_1_L
|
29
|
+
qr = RQRCode::QRCode.new( 'duncan', :size => 1, :level => :m )
|
30
|
+
assert_equal qr.modules, MATRIX_1_M
|
31
|
+
qr = RQRCode::QRCode.new( 'duncan', :size => 1, :level => :q )
|
32
|
+
assert_equal qr.modules, MATRIX_1_Q
|
33
33
|
end
|
34
34
|
|
35
35
|
def test_3_H_
|
36
|
-
|
36
|
+
qr = RQRCode::QRCode.new( 'duncan', :size => 3 )
|
37
37
|
|
38
38
|
assert_equal qr.modules.size, 29
|
39
|
-
|
39
|
+
assert_equal qr.modules, MATRIX_3_H
|
40
40
|
end
|
41
41
|
|
42
42
|
def test_5_H_
|
43
|
-
|
43
|
+
qr = RQRCode::QRCode.new( 'duncan', :size => 5 )
|
44
44
|
|
45
45
|
assert_equal qr.modules.size, 37
|
46
|
-
|
46
|
+
assert_equal qr.modules, MATRIX_5_H
|
47
47
|
end
|
48
48
|
|
49
49
|
def test_10_H_
|
50
|
-
|
50
|
+
qr = RQRCode::QRCode.new( 'duncan', :size => 10 )
|
51
51
|
|
52
52
|
assert_equal qr.modules.size, 57
|
53
|
-
|
53
|
+
assert_equal qr.modules, MATRIX_10_H
|
54
54
|
end
|
55
55
|
|
56
56
|
def test_4_H_
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
57
|
+
qr = RQRCode::QRCode.new('www.bbc.co.uk/programmes/b0090blw',
|
58
|
+
:level => :l )
|
59
|
+
assert_equal qr.modules, MATRIX_4_L
|
60
|
+
qr = RQRCode::QRCode.new('www.bbc.co.uk/programmes/b0090blw',
|
61
|
+
:level => :m )
|
62
|
+
assert_equal qr.modules, MATRIX_4_M
|
63
|
+
qr = RQRCode::QRCode.new('www.bbc.co.uk/programmes/b0090blw',
|
64
|
+
:level => :q )
|
65
|
+
assert_equal qr.modules, MATRIX_4_Q
|
66
66
|
|
67
|
-
|
67
|
+
qr = RQRCode::QRCode.new('www.bbc.co.uk/programmes/b0090blw')
|
68
68
|
assert_equal qr.modules.size, 33
|
69
|
-
|
69
|
+
assert_equal qr.modules, MATRIX_4_H
|
70
70
|
end
|
71
71
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
72
|
+
def test_to_s
|
73
|
+
qr = RQRCode::QRCode.new( 'duncan', :size => 1 )
|
74
|
+
assert_equal qr.to_s[0..21], "xxxxxxx xx x xxxxxxx\n"
|
75
|
+
assert_equal qr.to_s( :true => 'q', :false => 'n' )[0..21], "qqqqqqqnqqnqnnqqqqqqq\n"
|
76
|
+
assert_equal qr.to_s( :true => '@' )[0..21], "@@@@@@@ @@ @ @@@@@@@\n"
|
77
|
+
end
|
76
78
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rqrcode
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Duncan Robertson
|
@@ -9,11 +9,11 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-02-
|
12
|
+
date: 2008-02-28 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
16
|
-
description: rQRCode is a library for encoding
|
16
|
+
description: rQRCode is a library for encoding QR Codes. The simple interface allows you to simply create QR Code data structures ready to be displayed in the way you choose.
|
17
17
|
email: duncan@whomwah.com
|
18
18
|
executables: []
|
19
19
|
|