def initialize( string, *args )
if !string.is_a? String
raise QRCodeArgumentError, "The passed data is #{string.class}, not String"
end
options = args.extract_options!
level = (options[:level] || :h).to_sym
if !QRERRORCORRECTLEVEL.has_key?(level)
raise QRCodeArgumentError, "Unknown error correction level `#{level.inspect}`"
end
@data = string
mode = QRMODE_NAME[(options[:mode] || '').to_sym]
mode ||= case
when RQRCode::QRNumeric.valid_data?(@data)
QRMODE_NAME[:number]
when QRAlphanumeric.valid_data?(@data)
QRMODE_NAME[:alphanumeric]
else
QRMODE_NAME[:byte_8bit]
end
max_size_array = QRMAXDIGITS[level][mode]
size = options[:size] || smallest_size_for(string, max_size_array)
if size > QRUtil.max_size
raise QRCodeArgumentError, "Given size greater than maximum possible size of #{QRUtil.max_size}"
end
@error_correct_level = QRERRORCORRECTLEVEL[level]
@version = size
@module_count = @version * 4 + QRPOSITIONPATTERNLENGTH
@modules = Array.new( @module_count )
@data_list =
case mode
when :mode_number
QRNumeric.new( @data )
when :mode_alpha_numk
QRAlphanumeric.new( @data )
else
QR8bitByte.new( @data )
end
@data_cache = nil
self.make
end