Class: Device::IO
Constant Summary collapse
- F1 =
"\001"- F2 =
"\002"- F3 =
"\003"- F4 =
"\004"- FUNC =
"\006"- UP =
"\007"- DOWN =
"\008"- MENU =
"\009"- ENTER =
0x0D.chr
- CLEAR =
0x0F.chr
- ALPHA =
0x10.chr
- SHARP =
0x11.chr
- KEY_TIMEOUT =
0x12.chr
- BACK =
"\017"- CANCEL =
0x1B.chr
- IO_INPUT_NUMBERS =
:numbers- IO_INPUT_LETTERS =
:letters- IO_INPUT_ALPHA =
:alpha- IO_INPUT_SECRET =
:secret- IO_INPUT_DECIMAL =
:decimal- IO_INPUT_MONEY =
:money- IO_INPUT_MASK =
:mask- MASK_ALPHA =
:alpha- MASK_LETTERS =
:letters- MASK_NUMBERS =
:number- DEFAULT_TIMEOUT =
30000- NUMBERS =
%w(1 2 3 4 5 6 7 8 9 0)
- ONE_NUMBER =
"1"- TWO_NUMBER =
"2"- THREE_NUMBER =
"3"- FOUR_NUMBER =
"4"- FIVE_NUMBER =
"5"- SIX_NUMBER =
"6"- SEVEN_NUMBER =
"7"- EIGHT_NUMBER =
"8"- NINE_NUMBER =
"9"- ZERO_NUMBER =
"0"- KEYBOARD_DEFAULT =
["qzQZ.", "abcABC", "defDEF", "ghiGHI", "jklJKL", "mnoMNO", "prsPRS", "tuvTUV", "wxyWXY", ", *\#_$%-+="]
Class Attribute Summary collapse
-
.back_key ⇒ Object
Returns the value of attribute back_key.
-
.back_key_label ⇒ Object
Returns the value of attribute back_key_label.
-
.forward_key ⇒ Object
Returns the value of attribute forward_key.
-
.forward_key_label ⇒ Object
Returns the value of attribute forward_key_label.
-
.keys_range ⇒ Object
Returns the value of attribute keys_range.
-
.keys_valid ⇒ Object
Returns the value of attribute keys_valid.
-
.timeout ⇒ Object
Returns the value of attribute timeout.
Class Method Summary collapse
- .change_next(text, mask_type = Device::IO::MASK_ALPHA) ⇒ Object
- .check_mask(char) ⇒ Object
- .check_mask_type(text, options) ⇒ Object
- .format(string, options) ⇒ Object
-
.get_format(min, max, options = {}) ⇒ String
Restricted to terminals, get strings and numbers.
-
.getc(timeout = self.timeout) ⇒ String
Read 1 byte on keyboard, wait until be pressed.
-
.getxy ⇒ Object
> => 1, “x” => 10, “y” => 50.
- .insert_key?(key, options) ⇒ Boolean
- .set_default_format_option(options) ⇒ Object
-
.setup_keyboard(map, options = {}) ⇒ NilClass
Setup Keyboard Map.
Class Attribute Details
.back_key ⇒ Object
Returns the value of attribute back_key.
51 52 53 |
# File 'lib/device/io.rb', line 51 def back_key @back_key end |
.back_key_label ⇒ Object
Returns the value of attribute back_key_label.
51 52 53 |
# File 'lib/device/io.rb', line 51 def back_key_label @back_key_label end |
.forward_key ⇒ Object
Returns the value of attribute forward_key.
51 52 53 |
# File 'lib/device/io.rb', line 51 def forward_key @forward_key end |
.forward_key_label ⇒ Object
Returns the value of attribute forward_key_label.
51 52 53 |
# File 'lib/device/io.rb', line 51 def forward_key_label @forward_key_label end |
.keys_range ⇒ Object
Returns the value of attribute keys_range.
51 52 53 |
# File 'lib/device/io.rb', line 51 def keys_range @keys_range end |
.keys_valid ⇒ Object
Returns the value of attribute keys_valid.
51 52 53 |
# File 'lib/device/io.rb', line 51 def keys_valid @keys_valid end |
.timeout ⇒ Object
Returns the value of attribute timeout.
51 52 53 |
# File 'lib/device/io.rb', line 51 def timeout @timeout end |
Class Method Details
.change_next(text, mask_type = Device::IO::MASK_ALPHA) ⇒ Object
186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/device/io.rb', line 186 def self.change_next(text, mask_type = Device::IO::MASK_ALPHA) char = text[-1] if char && (range = self.keys_range[mask_type].detect { |range| range.include?(char) }) index = range.index(char) new_value = range[index+1] if new_value text[-1] = new_value else text[-1] = range[0] end end text end |
.check_mask(char) ⇒ Object
237 238 239 240 241 242 243 244 245 246 |
# File 'lib/device/io.rb', line 237 def self.check_mask(char) case char when "9" Device::IO::MASK_NUMBERS when "A" Device::IO::MASK_LETTERS else # "a" Device::IO::MASK_ALPHA end end |
.check_mask_type(text, options) ⇒ Object
174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/device/io.rb', line 174 def self.check_mask_type(text, ) if [:mode] == Device::IO::IO_INPUT_ALPHA Device::IO::MASK_ALPHA elsif [:mode] == Device::IO::IO_INPUT_LETTERS Device::IO::MASK_LETTERS elsif [:mode] == Device::IO::IO_INPUT_MASK check_mask([:mask_clean].to_s[text.size - 1]) else Device::IO::MASK_ALPHA end end |
.format(string, options) ⇒ Object
209 210 211 212 213 214 215 216 217 218 219 220 |
# File 'lib/device/io.rb', line 209 def self.format(string, ) [:label].to_s + if [:mode] == IO_INPUT_MONEY || [:mode] == IO_INPUT_DECIMAL number_to_currency(string, ) elsif [:mode] == IO_INPUT_SECRET "*" * string.size elsif [:mode] == IO_INPUT_MASK string.to_mask([:mask]) else string end end |
.get_format(min, max, options = {}) ⇒ String
Restricted to terminals, get strings and numbers. The switch method between uppercase, lowercase and number characters is to keep pressing a same button quickly. The timeout of this operation is 1 second.
:value - Represent the current value, to be initially used.
:precision - Sets the level of precision (defaults to 2).
:separator - Sets the separator between the units (defaults to “.”).
:delimiter - Sets the thousands delimiter (defaults to “,”).
:label - Sets the label display before currency, eg.: “U$:”, “R$:”
:mask - If mode IO_INPUT_MASK a mask should send
(only numbers and letters are allowed), eg.: "9999-AAAA"
:mode - Define input modes:
:numbers (IO_INPUT_NUMBERS) - Only number.
:letters (IO_INPUT_LETTERS) - Only Letters.
:alpha (IO_INPUT_ALPHA) - Letters and numbers.
:secret (IO_INPUT_SECRET) - Secret *.
:decimal (IO_INPUT_DECIMAL) - Decimal input, only number.
:money (IO_INPUT_MONEY) - Money input, only number.
:mask (IO_INPUT_MASK) - Custom mask.
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/device/io.rb', line 137 def self.get_format(min, max, = {}) set_default_format_option() key = text = [:value] || "" while key != CANCEL Device::Display.clear [:line] Device::Display.print_line format(text, ), [:line], [:column] key = getc if key == BACK text = text[0..-2] elsif key == KEY_TIMEOUT return KEY_TIMEOUT elsif key == ENTER return text elsif key == CANCEL return CANCEL elsif key == F1 || key == DOWN || key == UP || key == ALPHA change_next(text, check_mask_type(text, )) next elsif text.size >= max next elsif insert_key?(key, ) text << key end end end |
.getc(timeout = self.timeout) ⇒ String
Read 1 byte on keyboard, wait until be pressed
If not sent the default timeout is 30_000. If nil should be blocking.
207 |
# File 'lib/device/io.rb', line 207 def self.getc(timeout = self.timeout); super(timeout); end |
.getxy ⇒ Object
> => 1, “x” => 10, “y” => 50
223 224 225 |
# File 'lib/device/io.rb', line 223 def self.getxy super end |
.insert_key?(key, options) ⇒ Boolean
227 228 229 230 231 232 233 234 235 |
# File 'lib/device/io.rb', line 227 def self.insert_key?(key, ) if [:mode] == IO_INPUT_MONEY || [:mode] == IO_INPUT_DECIMAL || [:mode] == IO_INPUT_NUMBERS NUMBERS.include?(key) elsif [:mode] != IO_INPUT_NUMBERS && [:mode] != IO_INPUT_MONEY && [:mode] != IO_INPUT_DECIMAL self.keys_valid.include? key else false end end |
.set_default_format_option(options) ⇒ Object
164 165 166 167 168 169 170 171 172 |
# File 'lib/device/io.rb', line 164 def self.set_default_format_option() [:mode] ||= IO_INPUT_LETTERS [:line] ||= 2 [:column] ||= 0 if [:mask] [:mask_clean] = [:mask].chars.reject{|ch| ch.match(/[^0-9A-Za-z]/) }.join end end |
.setup_keyboard(map, options = {}) ⇒ NilClass
Setup Keyboard Map
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/device/io.rb', line 74 def self.setup_keyboard(map, = {}) one_letters, two_letters, three_letters, four_letters, five_letters, six_letters, seven_letters, eight_letters, nine_letters, zero_letters = map range_number = [ ONE_NUMBER , TWO_NUMBER , THREE_NUMBER , FOUR_NUMBER , FIVE_NUMBER , SIX_NUMBER , SEVEN_NUMBER , EIGHT_NUMBER , NINE_NUMBER , ZERO_NUMBER ] range_letters = [ one_letters, two_letters, three_letters, four_letters, five_letters, six_letters, seven_letters, eight_letters, nine_letters, zero_letters ] range_alpha = [ ONE_NUMBER + one_letters, TWO_NUMBER + two_letters, THREE_NUMBER + three_letters, FOUR_NUMBER + four_letters, FIVE_NUMBER + five_letters, SIX_NUMBER + six_letters, SEVEN_NUMBER + seven_letters, EIGHT_NUMBER + eight_letters, NINE_NUMBER + nine_letters, ZERO_NUMBER + zero_letters ] @keys_range = {MASK_ALPHA => range_alpha, MASK_LETTERS => range_letters, MASK_NUMBERS => range_number} @keys_valid = range_alpha.flatten.join self.back_key = [:back_key] || Device::IO::F1 self.back_key_label = [:back_key_label] || " F1 " self.forward_key = [:forward_key] || Device::IO::F2 self.forward_key_label = [:forward_key_label] || " F2 " end |