class RqrcodePngBin::App

Attributes

border_modules[R]
canvas[R]
file[R]
level[R]
mode[R]
px_per_module[R]
size[R]
stdin[R]

Public Class Methods

new(argv = []) click to toggle source
# File lib/rqrcode_png_bin/app.rb, line 5
def initialize(argv = [])
  @argv   = argv

  @border_modules = 4
  @canvas = nil
  @file   = nil
  @level  = :m
  @mode   = nil
  @px_per_module = nil
  @size   = 4
  @stdin  = nil
  @try_larger = false

  parser.parse!(@argv)
end

Public Instance Methods

encoded_str(str) click to toggle source
# File lib/rqrcode_png_bin/app.rb, line 53
def encoded_str(str)
  str.encode('SJIS').force_encoding('ASCII-8BIT')
end
generate_png(str) click to toggle source
# File lib/rqrcode_png_bin/app.rb, line 37
def generate_png(str)
  qr_opts = opts.dup

  begin
    RQRCode::QRCode.new(encoded_str(str), qr_opts).as_png(png_opts)
  rescue RQRCode::QRCodeRunTimeError => e
    if @try_larger && qr_opts[:size] < 40
      qr_opts[:size] = qr_opts[:size] + 1
      STDERR.puts "retrying #{str} with options #{qr_opts}"
      retry
    else
      raise e
    end
  end
end
opts() click to toggle source
return

Hash

# File lib/rqrcode_png_bin/app.rb, line 72
def opts
  h = {
    :size  => @size,
    :level => @level
  }

  h[:mode] = @mode if @mode

  h
end
parser() click to toggle source
return

OptionParser

# File lib/rqrcode_png_bin/app.rb, line 96
def parser
  OptionParser.new do |opt|
    opt.version = VERSION
    opt.banner  = "Usage: rqrcode_png [option] string"

    opt.on('-b', '--border-modules BORDER') {|v|
      if v =~ /\A[0-9]+\z/
        @border_modules = v.to_i
      else
        raise ArgumentError, "option border modules should be integer"
      end
    }
    opt.on('-c', '--canvas CANVAS (ex 200)') {|v|
      if v =~ /\A[0-9]+\z/
        @canvas = v.to_i
      else
        raise ArgumentError, "option canvas should match be integer"
      end
    }
    opt.on('-f', '--from-file FILE') {|v|
      if File.exist?(v)
        @file = v
      else
        raise ArgumentError, "file you specified '#{v}' does not exist"
      end
    }
    opt.on('-l', '--level l|m|q|h (default m)') {|v|
      options = %w(l m q h)

      if options.include?(v)
        @level = v.to_sym
      else
        raise ArgumentError, "option level should be included #{options}"
      end
    }
    opt.on('-m', '--mode MODE') {|v|
      options = %w(number alphanumeric byte_8bit)

      if options.include?(v)
        @mode = v.to_sym
      else
        raise ArgumentError, "option mode should be included #{options}"
      end
    }
    opt.on('-p', '--pixels-per-module PIXELS') {|v|
      if v =~ /\A[0-9]+\z/
        @px_per_module = v.to_i
      else
        raise ArgumentError, "option pixels per module should be integer"
      end
    }
    opt.on('-s', '--size SIZE (default 4)') {|v|
      re = %r{\A[0-9]+\z}

      if v =~ re
        @size = v.to_i
      else
        raise ArgumentError, "option size should match #{re}"
      end
    }
    opt.on('-t', '--try-larger') {|v|
      @try_larger = true
    }
  end
end
png_opts() click to toggle source
# File lib/rqrcode_png_bin/app.rb, line 83
def png_opts
  h = {}

  h[:size]           = canvas if canvas
  h[:border_modules] = border_modules
  h[:module_px_size] = px_per_module  if px_per_module

  h
end
run() click to toggle source
# File lib/rqrcode_png_bin/app.rb, line 22
def run
  if file
    FileReader.new(file).each {|str, dest|
      FileUtils.mkdir_p(File.dirname(dest))
      open(dest, 'wb') {|f|
        f.puts generate_png(str)
      }
    }
  elsif str
    STDOUT.puts generate_png(str)
  else
    STDERR.puts "rqrcode_png #{VERSION}", '', parser.help
  end
end
str() click to toggle source
return

String

# File lib/rqrcode_png_bin/app.rb, line 60
def str
  if @argv.first
    @argv.first
  else
    @stdin ||= $stdin.gets
    stdin if stdin.size > 0
  end
end