Module | Spreadsheet::Datatypes |
In: |
lib/spreadsheet/datatypes.rb
|
This module defines convenience-methods for the definition of Spreadsheet attributes (boolean, colors and enumerations)
COLORS | = | [ :builtin_black, :builtin_white, :builtin_red, :builtin_green, :builtin_blue, :builtin_yellow, :builtin_magenta, :builtin_cyan, :text, :border, :pattern_bg, :dialog_bg, :chart_text, :chart_bg, :chart_border, :tooltip_bg, :tooltip_text, :aqua, :black, :blue, :cyan, :brown, :fuchsia, :gray, :grey, :green, :lime, :magenta, :navy, :orange, :purple, :red, :silver, :white, :yellow ] | Valid colors for color attributes. |
# File lib/spreadsheet/datatypes.rb, line 9 9: def Datatypes.append_features mod 10: super 11: mod.module_eval do 12: class << self 13: ## 14: # Valid colors for color attributes. 15: COLORS = [ :builtin_black, :builtin_white, :builtin_red, :builtin_green, 16: :builtin_blue, :builtin_yellow, :builtin_magenta, :builtin_cyan, 17: :text, :border, :pattern_bg, :dialog_bg, :chart_text, :chart_bg, 18: :chart_border, :tooltip_bg, :tooltip_text, :aqua, 19: :black, :blue, :cyan, :brown, :fuchsia, :gray, :grey, :green, 20: :lime, :magenta, :navy, :orange, :purple, :red, :silver, :white, 21: :yellow ] 22: ## 23: # Define instance methods to read and write boolean attributes. 24: def boolean *args 25: args.each do |key| 26: define_method key do 27: name = ivar_name key 28: !!(instance_variable_get(name) if instance_variables.include?(name)) 29: end 30: define_method "#{key}?" do 31: send key 32: end 33: define_method "#{key}=" do |arg| 34: arg = false if arg == 0 35: instance_variable_set(ivar_name(key), !!arg) 36: end 37: define_method "#{key}!" do 38: send "#{key}=", true 39: end 40: end 41: end 42: ## 43: # Define instance methods to read and write color attributes. 44: # For valid colors see COLORS 45: def colors *args 46: args.each do |key| 47: attr_reader key 48: define_method "#{key}=" do |name| 49: name = name.to_s.downcase.to_sym 50: if COLORS.include?(name) 51: instance_variable_set ivar_name(key), name 52: else 53: raise ArgumentError, "unknown color '#{name}'" 54: end 55: end 56: end 57: end 58: ## 59: # Define instance methods to read and write enumeration attributes. 60: # * The first argument designates the attribute name. 61: # * The second argument designates the default value. 62: # * All subsequent attributes are possible values. 63: # * If the last attribute is a Hash, each value in the Hash designates 64: # aliases for the corresponding key. 65: def enum key, *values 66: aliases = {} 67: if values.last.is_a? Hash 68: values.pop.each do |value, synonyms| 69: if synonyms.is_a? Array 70: synonyms.each do |synonym| aliases.store synonym, value end 71: else 72: aliases.store synonyms, value 73: end 74: end 75: end 76: values.each do |value| 77: aliases.store value, value 78: end 79: define_method key do 80: name = ivar_name key 81: value = instance_variable_get(name) if instance_variables.include? name 82: value || values.first 83: end 84: define_method "#{key}=" do |arg| 85: if arg 86: arg = aliases.fetch arg do 87: aliases.fetch arg.to_s.downcase.gsub(/[ \-]/, '_').to_sym, arg 88: end 89: if values.any? do |val| val === arg end 90: instance_variable_set(ivar_name(key), arg) 91: else 92: valid = values.collect do |val| val.inspect end.join ', ' 93: raise ArgumentError, 94: "Invalid value '#{arg.inspect}' for #{key}. Valid values are: #{valid}" 95: end 96: else 97: instance_variable_set ivar_name(key), values.first 98: end 99: end 100: end 101: end 102: end 103: end
Define instance methods to read and write boolean attributes.
# File lib/spreadsheet/datatypes.rb, line 24 24: def boolean *args 25: args.each do |key| 26: define_method key do 27: name = ivar_name key 28: !!(instance_variable_get(name) if instance_variables.include?(name)) 29: end 30: define_method "#{key}?" do 31: send key 32: end 33: define_method "#{key}=" do |arg| 34: arg = false if arg == 0 35: instance_variable_set(ivar_name(key), !!arg) 36: end 37: define_method "#{key}!" do 38: send "#{key}=", true 39: end 40: end 41: end
Define instance methods to read and write color attributes. For valid colors see COLORS
# File lib/spreadsheet/datatypes.rb, line 45 45: def colors *args 46: args.each do |key| 47: attr_reader key 48: define_method "#{key}=" do |name| 49: name = name.to_s.downcase.to_sym 50: if COLORS.include?(name) 51: instance_variable_set ivar_name(key), name 52: else 53: raise ArgumentError, "unknown color '#{name}'" 54: end 55: end 56: end 57: end
Define instance methods to read and write enumeration attributes.
# File lib/spreadsheet/datatypes.rb, line 65 65: def enum key, *values 66: aliases = {} 67: if values.last.is_a? Hash 68: values.pop.each do |value, synonyms| 69: if synonyms.is_a? Array 70: synonyms.each do |synonym| aliases.store synonym, value end 71: else 72: aliases.store synonyms, value 73: end 74: end 75: end 76: values.each do |value| 77: aliases.store value, value 78: end 79: define_method key do 80: name = ivar_name key 81: value = instance_variable_get(name) if instance_variables.include? name 82: value || values.first 83: end 84: define_method "#{key}=" do |arg| 85: if arg 86: arg = aliases.fetch arg do 87: aliases.fetch arg.to_s.downcase.gsub(/[ \-]/, '_').to_sym, arg 88: end 89: if values.any? do |val| val === arg end 90: instance_variable_set(ivar_name(key), arg) 91: else 92: valid = values.collect do |val| val.inspect end.join ', ' 93: raise ArgumentError, 94: "Invalid value '#{arg.inspect}' for #{key}. Valid values are: #{valid}" 95: end 96: else 97: instance_variable_set ivar_name(key), values.first 98: end 99: end 100: end