Class: WatirModel
- Inherits:
-
Object
- Object
- WatirModel
- Defined in:
- lib/watir_model.rb
Class Attribute Summary collapse
Class Method Summary collapse
- .boolean(symbol, &block) ⇒ Object
- .inherited(subclass) ⇒ Object
-
.key(symbol, &block) ⇒ Object
define a key and an optional block that provides a default value for the key.
Instance Method Summary collapse
- #[](key) ⇒ Object
- #eql?(other) ⇒ Boolean (also: #==)
-
#initialize(hash = nil) ⇒ WatirModel
constructor
A new instance of WatirModel.
- #keys ⇒ Object
- #process_value(value) ⇒ Object
- #to_hash(opt = nil) ⇒ Object
- #update(hash) ⇒ Object
Constructor Details
#initialize(hash = nil) ⇒ WatirModel
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/watir_model.rb', line 47 def initialize(hash=nil) hash ||= {} update(hash) (self.class.defaults.keys - hash.keys).each do |key| block = self.class.defaults[key] object = self.class.data_types[key] result = ENV[key.to_s.upcase] || instance_exec(&block) value = case when object == 'Key' result when object == String result.to_s when object == Integer result.to_i when object == Float result.to_f when object == 'Boolean' eval result else object.new result end instance_variable_set("@#{key}", value) end end |
Class Attribute Details
.data_types ⇒ Object
12 13 14 |
# File 'lib/watir_model.rb', line 12 def data_types @data_types ||= {} end |
.defaults ⇒ Object
16 17 18 |
# File 'lib/watir_model.rb', line 16 def defaults @defaults ||= {} end |
.keys ⇒ Object
8 9 10 |
# File 'lib/watir_model.rb', line 8 def keys @keys ||= [] end |
Class Method Details
.boolean(symbol, &block) ⇒ Object
33 34 35 36 |
# File 'lib/watir_model.rb', line 33 def boolean(symbol, &block) key(symbol, &block) data_types[symbol] = 'Boolean' end |
.inherited(subclass) ⇒ Object
20 21 22 23 24 |
# File 'lib/watir_model.rb', line 20 def inherited(subclass) subclass.keys = keys.dup subclass.defaults = defaults.dup subclass.data_types = data_types.dup end |
.key(symbol, &block) ⇒ Object
define a key and an optional block that provides a default value for the key
39 40 41 42 43 44 |
# File 'lib/watir_model.rb', line 39 def key(symbol, &block) keys << symbol unless @keys.include? symbol attr_accessor symbol data_types[symbol] = 'Key' defaults[symbol] = block if block end |
Instance Method Details
#[](key) ⇒ Object
85 86 87 |
# File 'lib/watir_model.rb', line 85 def [] key send key end |
#eql?(other) ⇒ Boolean Also known as: ==
89 90 91 |
# File 'lib/watir_model.rb', line 89 def eql?(other) keys.all? { |k| send(k) == other[k] } end |
#keys ⇒ Object
81 82 83 |
# File 'lib/watir_model.rb', line 81 def keys self.class.keys end |
#process_value(value) ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/watir_model.rb', line 102 def process_value(value) case value when WatirModel value.to_hash when Hash value.map { |k,v| [k, process_value(v)] }.to_h when Array value.map { |v| process_value(v) } else value end end |
#to_hash(opt = nil) ⇒ Object
94 95 96 97 98 99 100 |
# File 'lib/watir_model.rb', line 94 def to_hash(opt = nil) opt ||= keys opt.each_with_object({}) do |key, hash| value = send(key) hash[key] = process_value(value) end end |
#update(hash) ⇒ Object
73 74 75 76 77 78 79 |
# File 'lib/watir_model.rb', line 73 def update(hash) unknown = hash.keys - keys if unknown.count > 0 raise ArgumentError, "unknown keyword#{'s' if unknown.count > 1}: #{unknown.join ', '}" end hash.each { |key, v| instance_variable_set "@#{key}", v } end |