nxt_init 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
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