humidifier 1.0.5 → 1.0.6

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: a87d6a8c680083d829f61fdbe36d81906621678b
4
- data.tar.gz: 662a02218ada43bc9ea0df34d5e1f86970037e79
3
+ metadata.gz: ee7bf139de1b6381e11257368d6cd1acbd8e8739
4
+ data.tar.gz: e4fdc11b944852860856039b9ba92c827719f0c3
5
5
  SHA512:
6
- metadata.gz: baf5e27e50335016952a6fe66be84d3fab9b3f8d0f50d916f74d971952042bda5ba23f2f6c86d2cf425aa485b1fa094c561a16c34598856abf6df462c213c8df
7
- data.tar.gz: 53cf909473ebc4574b141837ad01ad843cd94bd4f6b9bbbd2b57f098919d6b3c547998edf5edcad04e0c17a97bb58b05e31a7d888ad1081a9941de5ba13af412
6
+ metadata.gz: 3eb8a3c2fff29252acae925ae9bf6b1254ec180d59b509c162da13eeca7f08b1e9cf03f0015e15eeb8d98647d9520b61d33d5c027512e076c78707876a4a5747
7
+ data.tar.gz: 58e0cb21ed854e887be41b33377b73ac567bc8a04ba6a32afa41879f3523e79f1e8819e4a9485493afbb22f2f1daae10e64e888e1aa484924418034aa95dba05
@@ -10096,7 +10096,7 @@
10096
10096
  },
10097
10097
  "EvaluationPeriods": {
10098
10098
  "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-evaluationperiods",
10099
- "PrimitiveType": "Double",
10099
+ "PrimitiveType": "String",
10100
10100
  "Required": true,
10101
10101
  "UpdateType": "Mutable"
10102
10102
  },
@@ -10130,7 +10130,7 @@
10130
10130
  },
10131
10131
  "Period": {
10132
10132
  "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-period",
10133
- "PrimitiveType": "Integer",
10133
+ "PrimitiveType": "String",
10134
10134
  "Required": true,
10135
10135
  "UpdateType": "Mutable"
10136
10136
  },
@@ -10142,7 +10142,7 @@
10142
10142
  },
10143
10143
  "Threshold": {
10144
10144
  "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html#cfn-cloudwatch-alarms-threshold",
10145
- "PrimitiveType": "Double",
10145
+ "PrimitiveType": "String",
10146
10146
  "Required": true,
10147
10147
  "UpdateType": "Mutable"
10148
10148
  },
@@ -15,11 +15,6 @@ module Humidifier
15
15
  after_initialize(substructs) if respond_to?(:after_initialize, true)
16
16
  end
17
17
 
18
- # true if the property type knows how to convert its values
19
- def convertable?
20
- respond_to?(:convert)
21
- end
22
-
23
18
  # the link to the AWS docs
24
19
  def documentation
25
20
  spec['Documentation']
@@ -2,19 +2,19 @@ module Humidifier
2
2
  module Props
3
3
  # A boolean property
4
4
  class BooleanProp < Base
5
- # converts through value == 'true'
5
+ # converts the value through `value == 'true'` unless it is valid
6
6
  def convert(value)
7
- if %w[true false].include?(value)
7
+ if valid?(value) || !%w[true false].include?(value)
8
+ value
9
+ else
8
10
  puts "WARNING: Property #{name} should be a boolean, not a string"
9
11
  value == 'true'
10
- else
11
- value
12
12
  end
13
13
  end
14
14
 
15
15
  # true if it is a boolean
16
16
  def valid?(value)
17
- value.is_a?(TrueClass) || value.is_a?(FalseClass)
17
+ whitelisted_value?(value) || value.is_a?(TrueClass) || value.is_a?(FalseClass)
18
18
  end
19
19
  end
20
20
  end
@@ -2,10 +2,14 @@ module Humidifier
2
2
  module Props
3
3
  # A double property
4
4
  class DoubleProp < Base
5
- # converts the value through #to_f unless it is whitelisted
5
+ # converts the value through #to_f unless it is valid
6
6
  def convert(value)
7
- puts "WARNING: Property #{name} should be a double" unless valid?(value)
8
- value.to_f
7
+ if valid?(value) || !value.respond_to?(:to_f)
8
+ value
9
+ else
10
+ puts "WARNING: Property #{name} should be a double"
11
+ value.to_f
12
+ end
9
13
  end
10
14
 
11
15
  # true if it is whitelisted, an Integer, or a Float
@@ -2,10 +2,14 @@ module Humidifier
2
2
  module Props
3
3
  # An integer property
4
4
  class IntegerProp < Base
5
- # converts the value through #to_i unless it is whitelisted
5
+ # converts the value through #to_i unless it is valid
6
6
  def convert(value)
7
- puts "WARNING: Property #{name} should be an integer" unless valid?(value)
8
- value.to_i
7
+ if valid?(value) || !value.respond_to?(:to_i)
8
+ value
9
+ else
10
+ puts "WARNING: Property #{name} should be an integer"
11
+ value.to_i
12
+ end
9
13
  end
10
14
 
11
15
  # true if it is whitelisted or a Integer
@@ -2,9 +2,27 @@ module Humidifier
2
2
  module Props
3
3
  # A Json property
4
4
  class JsonProp < Base
5
+ # converts the value through `Hash[value]` unless it is valid
6
+ def convert(value)
7
+ if valid?(value) || !convertable?(value)
8
+ value
9
+ else
10
+ puts "WARNING: Property #{name} should be a Hash"
11
+ Hash[value]
12
+ end
13
+ end
14
+
5
15
  # true if the value is whitelisted, a Hash, or an Array
6
16
  def valid?(value)
7
- whitelisted_value?(value) || value.is_a?(Hash) || value.is_a?(Array)
17
+ whitelisted_value?(value) || value.is_a?(Hash)
18
+ end
19
+
20
+ private
21
+
22
+ def convertable?(value)
23
+ Hash[value]
24
+ rescue ArgumentError
25
+ false
8
26
  end
9
27
  end
10
28
  end
@@ -4,6 +4,11 @@ module Humidifier
4
4
  class ListProp < Base
5
5
  attr_reader :subprop
6
6
 
7
+ # converts the value through mapping using the subprop unless it is valid
8
+ def convert(list)
9
+ valid?(list) ? list : list.map { |value| subprop.convert(value) }
10
+ end
11
+
7
12
  # CFN stack syntax
8
13
  def to_cf(list)
9
14
  [key, list.map { |value| subprop.to_cf(value).last }]
@@ -4,6 +4,11 @@ module Humidifier
4
4
  class MapProp < Base
5
5
  attr_reader :subprop
6
6
 
7
+ # converts the value through mapping using the subprop unless it is valid
8
+ def convert(map)
9
+ valid?(map) ? map : Utils.enumerable_to_h(map) { |(key, value)| [key, subprop.convert(value)] }
10
+ end
11
+
7
12
  # CFN stack syntax
8
13
  def to_cf(map)
9
14
  dumped =
@@ -2,10 +2,14 @@ module Humidifier
2
2
  module Props
3
3
  # A string property
4
4
  class StringProp < Base
5
- # converts the value through #to_s unless it is whitelisted
5
+ # converts the value through #to_s unless it is valid
6
6
  def convert(value)
7
- puts "WARNING: Property #{name} should be a string" unless valid?(value)
8
- whitelisted_value?(value) ? value : value.to_s
7
+ if valid?(value)
8
+ value
9
+ else
10
+ puts "WARNING: Property #{name} should be a string"
11
+ value.to_s
12
+ end
9
13
  end
10
14
 
11
15
  # true if it is whitelisted or a String
@@ -4,10 +4,22 @@ module Humidifier
4
4
  class StructureProp < Base
5
5
  attr_reader :subprops
6
6
 
7
+ # converts the value through mapping using the subprop unless it is valid
8
+ def convert(struct)
9
+ if valid?(struct)
10
+ struct
11
+ else
12
+ Utils.enumerable_to_h(struct) do |(subkey, subvalue)|
13
+ subkey = Utils.underscore(subkey.to_s)
14
+ [subkey.to_sym, subprops[subkey].convert(subvalue)]
15
+ end
16
+ end
17
+ end
18
+
7
19
  # CFN stack syntax
8
- def to_cf(value)
20
+ def to_cf(struct)
9
21
  dumped =
10
- Utils.enumerable_to_h(value) do |(subkey, subvalue)|
22
+ Utils.enumerable_to_h(struct) do |(subkey, subvalue)|
11
23
  subprops[subkey.to_s].to_cf(subvalue)
12
24
  end
13
25
  [key, dumped]
@@ -15,9 +27,7 @@ module Humidifier
15
27
 
16
28
  # true if the value is whitelisted or Hash and all keys are valid for their corresponding props
17
29
  def valid?(struct)
18
- whitelisted_value?(struct) ||
19
- (struct.is_a?(Hash) &&
20
- struct.all? { |key, value| subprops.key?(key.to_s) && subprops[key.to_s].valid?(value) })
30
+ whitelisted_value?(struct) || (struct.is_a?(Hash) && valid_struct?(struct))
21
31
  end
22
32
 
23
33
  private
@@ -25,11 +35,15 @@ module Humidifier
25
35
  def after_initialize(substructs)
26
36
  type = spec['ItemType'] || spec['Type']
27
37
  @subprops =
28
- Utils.enumerable_to_h(substructs[type]['Properties']) do |(key, config)|
38
+ Utils.enumerable_to_h(substructs.fetch(type, {}).fetch('Properties', {})) do |(key, config)|
29
39
  subprop = config['ItemType'] == type ? self : Props.from(key, config, substructs)
30
40
  [Utils.underscore(key), subprop]
31
41
  end
32
42
  end
43
+
44
+ def valid_struct?(struct)
45
+ struct.all? { |key, value| subprops.key?(key.to_s) && subprops[key.to_s].valid?(value) }
46
+ end
33
47
  end
34
48
  end
35
49
  end
@@ -2,10 +2,14 @@ module Humidifier
2
2
  module Props
3
3
  # A timestamp (ISO 8601) property
4
4
  class TimestampProp < Base
5
- # converts the value through #to_s unless it is whitelisted
5
+ # converts the value through DateTime.parse(value) unless it is valid
6
6
  def convert(value)
7
- puts "WARNING: Property #{name} should be a Date or Time" unless valid?(value)
8
- valid?(value) ? value : DateTime.parse(value)
7
+ if valid?(value) || !value.is_a?(String)
8
+ value
9
+ else
10
+ puts "WARNING: Property #{name} should be a Date or Time"
11
+ DateTime.parse(value)
12
+ end
9
13
  end
10
14
 
11
15
  # true if it is whitelisted, a Time, or a Date
@@ -106,7 +106,7 @@ module Humidifier
106
106
 
107
107
  def validate_value(property, value, raw)
108
108
  prop = self.class.props[property]
109
- value = prop.convert(value) if raw && prop.convertable?
109
+ value = prop.convert(value) if raw
110
110
  unless prop.valid?(value)
111
111
  raise ArgumentError, "Invalid value for #{property}: #{value.inspect}"
112
112
  end
@@ -1,4 +1,4 @@
1
1
  module Humidifier
2
2
  # Gem version
3
- VERSION = '1.0.5'.freeze
3
+ VERSION = '1.0.6'.freeze
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: humidifier
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Localytics
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-09 00:00:00.000000000 Z
11
+ date: 2016-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler