watir_model 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGES.md +7 -0
- data/config/alternate/address.yml +4 -0
- data/config/data/address.yml +4 -0
- data/lib/watir_model.rb +87 -4
- data/watir_model.gemspec +2 -1
- metadata +19 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb66fe24b50991cf49d310d6a97f089e30913591
|
4
|
+
data.tar.gz: 7e3688b4c12b17d386371604ab359e63cdb66434
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e1c922f20e1d39fb88d9f8fc92cd08736937ebc63375a2f7c051cbf8751102dc5b17a19fb392cd8bba4076fdb5532c41e3805d416941690fffc5db0301cd1e5d
|
7
|
+
data.tar.gz: 2101fd335a12e59c92a8fb83d8d39ac9e22313ad1afd96453363a024e46926f814ccbb86567ecdefb3e5fb5a13ed0628d03136dc39eae2fcd8056b203249ea43
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
### 0.4.0 (2017-12-24)
|
2
|
+
|
3
|
+
* support for `:data_type` parameter to allow conversion and enforcement of key types
|
4
|
+
* support for data defaults pulled from yaml files
|
5
|
+
* support for referencing yaml defaults during initialization
|
6
|
+
* support for key aliases to support comparing same values from different sources
|
7
|
+
|
1
8
|
### 0.3.1 (2017-05-19)
|
2
9
|
|
3
10
|
* initialize and convert Model using Hash with keys as Strings
|
data/lib/watir_model.rb
CHANGED
@@ -1,30 +1,81 @@
|
|
1
1
|
require 'active_support/hash_with_indifferent_access'
|
2
|
+
require 'json'
|
3
|
+
require 'date'
|
4
|
+
require 'time'
|
5
|
+
require 'yml_reader'
|
2
6
|
|
3
7
|
class WatirModel
|
4
8
|
class << self
|
9
|
+
include YmlReader
|
5
10
|
|
6
|
-
attr_writer :keys, :defaults
|
11
|
+
attr_writer :keys, :aliases, :data_types, :defaults
|
7
12
|
|
8
13
|
def keys
|
9
14
|
@keys ||= []
|
10
15
|
end
|
11
16
|
|
17
|
+
def aliases
|
18
|
+
@aliases ||= {}
|
19
|
+
end
|
20
|
+
|
21
|
+
def data_types
|
22
|
+
@data_types ||= {}
|
23
|
+
end
|
24
|
+
|
12
25
|
def defaults
|
13
26
|
@defaults ||= {}
|
14
27
|
end
|
15
28
|
|
16
29
|
def inherited(subclass)
|
17
30
|
subclass.keys = keys.dup
|
31
|
+
subclass.aliases = aliases.dup
|
18
32
|
subclass.defaults = defaults.dup
|
33
|
+
subclass.data_types = data_types.dup
|
19
34
|
end
|
20
35
|
|
21
|
-
|
22
|
-
def key(symbol, &block)
|
36
|
+
def key(symbol, data_type: nil, aliases: [], &block)
|
23
37
|
keys << symbol unless @keys.include? symbol
|
38
|
+
aliases.each { |alias_key| self.aliases[alias_key] = symbol }
|
24
39
|
attr_accessor symbol
|
40
|
+
data_types[symbol] = data_type if data_type
|
25
41
|
defaults[symbol] = block if block
|
26
42
|
end
|
27
43
|
|
44
|
+
def convert_type(key, value)
|
45
|
+
data_type = data_types[key]
|
46
|
+
return value if data_type.nil?
|
47
|
+
return value if data_type.is_a?(Class) && value.is_a?(data_type)
|
48
|
+
value = case
|
49
|
+
when data_type == String
|
50
|
+
value.to_s
|
51
|
+
when data_type == Time
|
52
|
+
Time.parse value
|
53
|
+
when data_type == DateTime
|
54
|
+
DateTime.parse value
|
55
|
+
when data_type == Integer
|
56
|
+
value.to_i
|
57
|
+
when data_type == Float
|
58
|
+
value.to_f
|
59
|
+
when data_type == :boolean
|
60
|
+
return value if value.is_a?(TrueClass) || value.is_a?(FalseClass)
|
61
|
+
value = eval(value)
|
62
|
+
return value if value.is_a?(TrueClass) || value.is_a?(FalseClass)
|
63
|
+
raise StandardError, "Unable to convert #{value} to TrueClass or FalseClass"
|
64
|
+
when data_type == Symbol
|
65
|
+
value.to_sym
|
66
|
+
when data_type == Hash
|
67
|
+
JSON.parse value
|
68
|
+
when data_type == Array
|
69
|
+
JSON.parse value
|
70
|
+
else
|
71
|
+
file = factory_file(data_type)
|
72
|
+
data = data_from_yaml(file, value) || value
|
73
|
+
data_type.new(data)
|
74
|
+
end
|
75
|
+
return value if value.is_a?(data_type)
|
76
|
+
raise StandardError, "Unable to convert #{value} to #{data_type}"
|
77
|
+
end
|
78
|
+
|
28
79
|
def convert(hash, *args)
|
29
80
|
hash.deep_symbolize_keys!
|
30
81
|
filtered = hash.reject { |k| !keys.include?(k) }
|
@@ -36,6 +87,27 @@ class WatirModel
|
|
36
87
|
end
|
37
88
|
model
|
38
89
|
end
|
90
|
+
|
91
|
+
def default_directory
|
92
|
+
'config/data'
|
93
|
+
end
|
94
|
+
|
95
|
+
def method_missing(method, *args, &block)
|
96
|
+
file = factory_file(self)
|
97
|
+
return super unless file
|
98
|
+
data = data_from_yaml(file, method)
|
99
|
+
raise ArgumentError, "Factory '#{method}' does not exist in '#{file}'" if data.nil?
|
100
|
+
new(data)
|
101
|
+
end
|
102
|
+
|
103
|
+
def factory_file(type)
|
104
|
+
Dir.glob("#{WatirModel.yml_directory}/#{type.to_s.downcase}.yml").first
|
105
|
+
end
|
106
|
+
|
107
|
+
def data_from_yaml(file, value)
|
108
|
+
return nil unless !file.nil? || value.is_a?(Symbol) || value.is_a?(String)
|
109
|
+
YAML.load_file(file)[value.to_sym]
|
110
|
+
end
|
39
111
|
end
|
40
112
|
|
41
113
|
def initialize(hash={})
|
@@ -45,6 +117,7 @@ class WatirModel
|
|
45
117
|
(self.class.defaults.keys - hash.keys).each do |key|
|
46
118
|
block = self.class.defaults[key]
|
47
119
|
value = default_value(key, block)
|
120
|
+
value = self.class.convert_type(key, value)
|
48
121
|
instance_variable_set("@#{key}", value)
|
49
122
|
end
|
50
123
|
end
|
@@ -52,17 +125,27 @@ class WatirModel
|
|
52
125
|
def update(hash)
|
53
126
|
hash ||= {}
|
54
127
|
|
128
|
+
(hash.keys & aliases.keys).each do |alias_key|
|
129
|
+
hash[aliases[alias_key]] = hash.delete(alias_key)
|
130
|
+
end
|
131
|
+
|
55
132
|
unknown = hash.keys - keys
|
56
133
|
if unknown.count > 0
|
57
134
|
raise ArgumentError, "unknown keyword#{'s' if unknown.count > 1}: #{unknown.join ', '}"
|
58
135
|
end
|
59
|
-
hash.each
|
136
|
+
hash.each do |key, val|
|
137
|
+
instance_variable_set "@#{key}", self.class.convert_type(key, val)
|
138
|
+
end
|
60
139
|
end
|
61
140
|
|
62
141
|
def keys
|
63
142
|
self.class.keys
|
64
143
|
end
|
65
144
|
|
145
|
+
def aliases
|
146
|
+
self.class.aliases
|
147
|
+
end
|
148
|
+
|
66
149
|
def [] key
|
67
150
|
send key
|
68
151
|
end
|
data/watir_model.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = "watir_model"
|
5
|
-
spec.version = "0.
|
5
|
+
spec.version = "0.4.0"
|
6
6
|
spec.authors = ["Titus Fortner"]
|
7
7
|
spec.email = ["titusfortner@gmail.com"]
|
8
8
|
|
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.require_paths = ["lib"]
|
26
26
|
|
27
27
|
spec.add_runtime_dependency 'activesupport'
|
28
|
+
spec.add_runtime_dependency 'yml_reader', '>= 0.6'
|
28
29
|
|
29
30
|
spec.add_development_dependency "bundler", "~> 1.9"
|
30
31
|
spec.add_development_dependency "rake", "~> 10.0"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: watir_model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Titus Fortner
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-12-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: yml_reader
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.6'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.6'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +108,8 @@ files:
|
|
94
108
|
- LICENSE
|
95
109
|
- README.md
|
96
110
|
- Rakefile
|
111
|
+
- config/alternate/address.yml
|
112
|
+
- config/data/address.yml
|
97
113
|
- lib/config_model.rb
|
98
114
|
- lib/watir_model.rb
|
99
115
|
- watir_model.gemspec
|
@@ -118,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
134
|
version: '0'
|
119
135
|
requirements: []
|
120
136
|
rubyforge_project:
|
121
|
-
rubygems_version: 2.6.
|
137
|
+
rubygems_version: 2.6.11
|
122
138
|
signing_key:
|
123
139
|
specification_version: 4
|
124
140
|
summary: This is a simple class for modelling test data.
|