nxt_init 0.1.2 → 0.1.3

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
  SHA256:
3
- metadata.gz: a114d10945b4542471672c3c8e33d58b3b1284c30bd005fb76ca91603ecb3d97
4
- data.tar.gz: ce5041f6cc768f6bd2b672c909994d7938e78d082413091dd55e6b9de2e10508
3
+ metadata.gz: aba589829b0c74c391a585c58a6224f9f8777d236f4eaacdcd3c21d7c748b39a
4
+ data.tar.gz: 1201133becd45a239fdc192d555960d3c3e37ede6011f634854ddfb1e6f6c203
5
5
  SHA512:
6
- metadata.gz: 6aa8abb8314787aa77f187b91ec44ce7de339c0ab2b714488ce6c5d813796074d01864bcd3fd6220179a8b778bb1c4f269a5eec14f7b9557fafb7d232834a0f3
7
- data.tar.gz: c726dc8306b2aa821f9dfc2e7d427f833c4923f9e96e35ebaeb65d57c46456aad285ac45a44a6a67c9c43ba5ff634d167833c006a8700043d03c0a2cf62f909a
6
+ metadata.gz: 1e1a83e3e4afcd04ceb33a413ae239dd42ecd7fd11cb7b2621ec7b100c36aea9d2b63e97261ac3116e27d291f68fb9ad19c395cd42efdb47a52a6c00445371ee
7
+ data.tar.gz: 723ec48a995c218319309b50b943170b518df0323520b8fc8379531808afdc6b4dab492bdea9355e7008633b3f3735d4a2f1e82a6a47b55ff86513a8d88c5597
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nxt_init (0.1.0)
4
+ nxt_init (0.1.2)
5
5
  activesupport
6
6
 
7
7
  GEM
@@ -1,3 +1,3 @@
1
1
  module NxtInit
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
data/lib/nxt_init.rb CHANGED
@@ -52,11 +52,18 @@ module NxtInit
52
52
  self.class.send(:attr_init_opts).each do |opt|
53
53
  if opt.is_a?(Hash)
54
54
  key = opt.keys.first
55
- value = opt.values.first
56
- value = attrs[key] || (value.respond_to?(:call) ? instance_exec(&value) : value)
55
+ default_value = opt.values.first
56
+ given_value = attrs[key]
57
+ key_missing = !attrs.key?(key)
58
+
59
+ if default_value_is_preprocessor?(default_value)
60
+ value = key_missing ? raise_key_error(key) : instance_exec(given_value, &default_value)
61
+ else
62
+ value = given_value || (default_value.respond_to?(:call) ? instance_exec(&default_value) : default_value)
63
+ end
57
64
  elsif opt.is_a?(Symbol)
58
65
  key = opt
59
- value = attrs.fetch(opt)
66
+ value = attrs.fetch(opt) { |k| raise_key_error(k) }
60
67
  else
61
68
  raise InvalidOptionError, "Don't know how to deal with #{opt}"
62
69
  end
@@ -64,6 +71,17 @@ module NxtInit
64
71
  end
65
72
  end
66
73
 
74
+ def default_value_is_block?(default_value)
75
+ default_value.respond_to?(:call)
76
+ end
77
+
78
+ def default_value_is_preprocessor?(default_value)
79
+ default_value_is_block?(default_value) && default_value.arity == 1
80
+ end
81
+
82
+ def raise_key_error(key)
83
+ raise KeyError, "NxtInit attr_init key :#{key} was missing at initialization!"
84
+ end
67
85
  end
68
86
 
69
87
  def self.included(base)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nxt_init
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Robecke
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2019-02-06 00:00:00.000000000 Z
13
+ date: 2019-02-26 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport