Class: WatirModel

Inherits:
Object
  • Object
show all
Defined in:
lib/watir_model.rb

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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_typesObject



12
13
14
# File 'lib/watir_model.rb', line 12

def data_types
  @data_types ||= {}
end

.defaultsObject



16
17
18
# File 'lib/watir_model.rb', line 16

def defaults
  @defaults ||= {}
end

.keysObject



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

#keysObject



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