watir_model 0.2.3 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ab1689db304049abb351bde85194b3f340a50f8f
4
- data.tar.gz: d47df53a7990ecb91e7dff1fdb141dc20d5503a3
3
+ metadata.gz: 93dd97375c9cde4f1f0248a82f41112b20ac2c70
4
+ data.tar.gz: 95284dab556334ff3ef5bf1cf1cab1764801d4f6
5
5
  SHA512:
6
- metadata.gz: dde4a20f417a3d605b284936f557a96174333982ed1254da68833a6963d17fd9a611011644ffbafaf6c3e6b597d67f324e34033f0e2779e6d537e7244f4fc2ef
7
- data.tar.gz: e03628d2206d9e55a41a6bc0bb9e4c1e77ce2655d01700cc721db4aabed8b54f3da1dcab9e671fddf3127178ff2b75e8ceeb2fc85f9b19873b5bfbd9824a4626
6
+ metadata.gz: 55e94841ba3795a67b045325c235ff7e5295200f9ef4dbce1f983bc54c42fc80c888140b8f8e68e91dd4df953deb1fa161e7d3f1a6a2b55943dcc300270c4999
7
+ data.tar.gz: 02520b948b3879bd9702d4dad4fd5553c0e0fb47f3af896abc7bf1ce4dcfcc5ce65df7a49f7ce744195ce062aa8512603915044eff1626fd2fa0e14cb0e26fd1
data/CHANGES.md ADDED
@@ -0,0 +1,16 @@
1
+ ### 0.3.0 (2016-12-31)
2
+
3
+ * move ENV variable override into ConfigModel subclass
4
+ * remove support for specifying data types
5
+ * implement #convert method
6
+
7
+ ### 0.2.3 (2016-12-22)
8
+
9
+ * Support for #to_hash
10
+
11
+ ### 0.2.2 (2016-02-15)
12
+
13
+ * fork from https://github.com/bret/model
14
+ * rename model to watir_model
15
+ * support for specifying data types
16
+ * ENV variables override supplied defaults in Model
data/LICENSE CHANGED
@@ -1,7 +1,7 @@
1
1
  The MIT License (MIT)
2
2
 
3
3
  Copyright (c) 2015 Bret Pettichord
4
- Copyright (c) 2016 Titus Fortner
4
+ Copyright (c) 2016-2017 Titus Fortner
5
5
 
6
6
  Permission is hereby granted, free of charge, to any person obtaining a copy
7
7
  of this software and associated documentation files (the "Software"), to deal
@@ -0,0 +1,7 @@
1
+ require 'pp'
2
+
3
+ class ConfigModel < WatirModel
4
+ def default_value(key, block)
5
+ ENV[key.to_s.upcase] || instance_exec(&block)
6
+ end
7
+ end
data/lib/watir_model.rb CHANGED
@@ -3,16 +3,12 @@ require 'pp'
3
3
  class WatirModel
4
4
  class << self
5
5
 
6
- attr_writer :keys, :data_types, :defaults
6
+ attr_writer :keys, :defaults
7
7
 
8
8
  def keys
9
9
  @keys ||= []
10
10
  end
11
11
 
12
- def data_types
13
- @data_types ||= {}
14
- end
15
-
16
12
  def defaults
17
13
  @defaults ||= {}
18
14
  end
@@ -20,57 +16,40 @@ class WatirModel
20
16
  def inherited(subclass)
21
17
  subclass.keys = keys.dup
22
18
  subclass.defaults = defaults.dup
23
- subclass.data_types = data_types.dup
24
- end
25
-
26
- %w(string float integer symbol time).each do |type|
27
- define_method(type) do |symbol, &block|
28
- key(symbol, &block)
29
- data_types[symbol] = Object.const_get(type.capitalize)
30
- end
31
- end
32
-
33
- def boolean(symbol, &block)
34
- key(symbol, &block)
35
- data_types[symbol] = 'Boolean'
36
19
  end
37
20
 
38
21
  # define a key and an optional block that provides a default value for the key
39
22
  def key(symbol, &block)
40
23
  keys << symbol unless @keys.include? symbol
41
24
  attr_accessor symbol
42
- data_types[symbol] = 'Key'
43
25
  defaults[symbol] = block if block
44
26
  end
27
+
28
+ def convert(hash, *args)
29
+ filtered = hash.reject { |k| !keys.include?(k) }
30
+ model = new(filtered)
31
+ args.each do |key|
32
+ model.instance_eval do
33
+ define_singleton_method(key) { hash[key] }
34
+ end
35
+ end
36
+ model
37
+ end
45
38
  end
46
39
 
47
- def initialize(hash=nil)
48
- hash ||= {}
40
+ def initialize(hash={})
49
41
  update(hash)
50
42
 
51
43
  (self.class.defaults.keys - hash.keys).each do |key|
52
44
  block = self.class.defaults[key]
53
- object = self.class.data_types[key]
54
- result = ENV[key.to_s.upcase] || instance_exec(&block)
55
- value = case
56
- when object == 'Key'
57
- result
58
- when object == String
59
- result.to_s
60
- when object == Integer
61
- result.to_i
62
- when object == Float
63
- result.to_f
64
- when object == 'Boolean'
65
- eval result
66
- else
67
- object.new result
68
- end
45
+ value = default_value(key, block)
69
46
  instance_variable_set("@#{key}", value)
70
47
  end
71
48
  end
72
49
 
73
50
  def update(hash)
51
+ hash ||= {}
52
+
74
53
  unknown = hash.keys - keys
75
54
  if unknown.count > 0
76
55
  raise ArgumentError, "unknown keyword#{'s' if unknown.count > 1}: #{unknown.join ', '}"
@@ -95,21 +74,14 @@ class WatirModel
95
74
  opt ||= keys
96
75
  opt.each_with_object({}) do |key, hash|
97
76
  value = send(key)
98
- hash[key] = process_value(value)
77
+ next if value.nil?
78
+ hash[key] = value
99
79
  end
100
80
  end
101
81
 
102
- def process_value(value)
103
- case value
104
- when WatirModel
105
- value.to_hash
106
- when Hash
107
- value.map { |k,v| [k, process_value(v)] }.to_h
108
- when Array
109
- value.map { |v| process_value(v) }
110
- else
111
- value
112
- end
82
+ private
83
+
84
+ def default_value(key, block)
85
+ instance_exec(&block)
113
86
  end
114
-
115
87
  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.2.3"
5
+ spec.version = "0.3.0"
6
6
  spec.authors = ["Titus Fortner"]
7
7
  spec.email = ["titusfortner@gmail.com"]
8
8
 
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.2.3
4
+ version: 0.3.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: 2016-12-22 00:00:00.000000000 Z
11
+ date: 2016-12-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -75,10 +75,12 @@ extensions: []
75
75
  extra_rdoc_files: []
76
76
  files:
77
77
  - ".gitignore"
78
+ - CHANGES.md
78
79
  - Gemfile
79
80
  - LICENSE
80
81
  - README.md
81
82
  - Rakefile
83
+ - lib/config_model.rb
82
84
  - lib/watir_model.rb
83
85
  - watir_model.gemspec
84
86
  homepage: https://github.com/titusfortner/watir_model