data_crate 0.1.3 → 0.1.4

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: b2f68e24db8a02b02e05cc10d54b34c04e2636d11d3a6e96466dc64584ac732e
4
- data.tar.gz: 8f4d80b7177ed6fb02a96b06eb3d91fe432bcf6e0676d2ef50b57fcb28217a5f
3
+ metadata.gz: 0615d86db1dac768da4efc39e5fa48a2a344449970c2b65a58f2f0d2d46a860b
4
+ data.tar.gz: 3c3df4057e0694668237824d15930c16a64613bfafc7c2ba2755784490bc4fe5
5
5
  SHA512:
6
- metadata.gz: '0169f00f004407f0bd56a2feb094ce98cba818c9f850ffbddfd00e7b594255c53d5752e027df0d0a6adcc66235f8bad4be215c6c0dcede0c63398852b668bb3b'
7
- data.tar.gz: ac28099a262a461332ce89e88bc0d92b79745dd4809bb31dccfdb3ce116cf5692afc7bec9e5fddfa8adc5ce749534fdbdec40dbb47705e8707432cdbdd5a6b09
6
+ metadata.gz: a17e0fd1d9cb0d4b619992cfd3f16e17136fef030f2b641ff40a39bd324dd58de021bf75fed9cc2dcad07e698879a8e7b732640924f7d9679728d07623ef1f0f
7
+ data.tar.gz: d473b70b5345e03ab9c55c0e36ac8766bb6000d90b0ae2a6ff10f7f4febee0177df94d9900d6bde72608fd4db2956c9e42950fdb2aadde5eb95af39baa5fa00d
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- data_crate (0.1.3)
4
+ data_crate (0.1.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/lib/crate/crate.rb CHANGED
@@ -8,6 +8,7 @@ module Crate
8
8
  def _initialize(**options)
9
9
  @_names = []
10
10
  @_crates = {}
11
+ @_arrays = {}
11
12
  @_hooks = []
12
13
  @_options = { logger: Logger.new(nil), **options }
13
14
  @_crate_klasses = []
@@ -33,6 +34,15 @@ module Crate
33
34
  )
34
35
  end
35
36
 
37
+ def array(*args, **options, &initializer)
38
+ name, klass, = args
39
+ declare(name)
40
+ @_arrays[name] = klass || _class(
41
+ **_options, basename: name.to_s, **options,
42
+ &initializer
43
+ )
44
+ end
45
+
36
46
  def versions(*crate_klasses)
37
47
  @_crate_klasses = crate_klasses
38
48
  end
@@ -97,7 +107,8 @@ module Crate
97
107
  end
98
108
  end
99
109
 
100
- attr_reader :_options, :_names, :_crates, :_hooks, :_crate_klasses
110
+ attr_reader :_options, :_names, :_crates, :_arrays,
111
+ :_hooks, :_crate_klasses
101
112
 
102
113
  def _basename
103
114
  _options[:basename]
@@ -121,6 +132,10 @@ module Crate
121
132
  "#{_fullname}[#{name.inspect}]"
122
133
  end
123
134
 
135
+ def _array_name(name, index)
136
+ "#{_name(name)}[#{index}]"
137
+ end
138
+
124
139
  attr_reader :_raw, :_options
125
140
 
126
141
  def initialize(raw, **options)
@@ -128,6 +143,7 @@ module Crate
128
143
  { **self.class._options, fullname: self.class._basename, **options }
129
144
  @_raw = Raw.new(raw, **_options).to_hash
130
145
  _new_crates
146
+ _new_arrays
131
147
  _run_hooks
132
148
  _select_klass_if_exist(**options)
133
149
  end
@@ -140,6 +156,16 @@ module Crate
140
156
  end
141
157
  end
142
158
 
159
+ def _new_arrays
160
+ self.class._arrays \
161
+ .select { |name, _klass| _raw.key?(name) } \
162
+ .each do |name, klass|
163
+ _raw[name].map!.with_index do |raw, index|
164
+ klass.new(raw, **_options, fullname: _array_name(name, index))
165
+ end
166
+ end
167
+ end
168
+
143
169
  def _run_hooks
144
170
  self.class._hooks.each { |hook| instance_eval(&hook) }
145
171
  end
data/lib/crate/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Crate
4
- VERSION = '0.1.3'
4
+ VERSION = '0.1.4'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: data_crate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Minwoo Lee
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-11-30 00:00:00.000000000 Z
11
+ date: 2017-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler