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.
         
     |