avromatic 0.10.0 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +9 -8
- data/lib/avromatic/model/attributes.rb +2 -0
- data/lib/avromatic/model_registry.rb +18 -2
- data/lib/avromatic/version.rb +1 -1
- data/lib/avromatic.rb +17 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce7da1b2c3c2ec8741eba98e50a294aa8db18bb1
|
4
|
+
data.tar.gz: 688813aeb07b275550fda92b30cc97f339ddf142
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 18c3b5f0a4aa093e9ed2868722f103fcd780361c417ab1a72b5f7e5a6a5c94b658e4100bfd42bbcf14fd30a2d6c0d9a154ee9bb8de4e5823a6ea4d76487d072a
|
7
|
+
data.tar.gz: 0988f486a37745ddf3e46d027d3b9976665807804c3f0355d05e99ceefa73abdeab881e6bab109f65220c60ee698d944017f9b487931fe75c5e19d6e7a60a9d0
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# avromatic changelog
|
2
2
|
|
3
|
+
## v0.11.0
|
4
|
+
- Replace `Avromatic.on_initialize` proc with `Avromatic.eager_load_models`
|
5
|
+
array. The models listed by this configuration are added to the registry
|
6
|
+
at the end of `.configure` and prior to code reloading in Rails applications.
|
7
|
+
This is a compatibility breaking change.
|
8
|
+
|
3
9
|
## v0.10.0
|
4
10
|
- Add `Avromatic.on_initialize` proc that is called at the end of `.configure`
|
5
11
|
and on code reloading in Rails applications.
|
data/README.md
CHANGED
@@ -41,10 +41,11 @@ Or install it yourself as:
|
|
41
41
|
that is used to store, by full schema name, the generated models that are
|
42
42
|
embedded within top-level models. By default a new `Avromatic::ModelRegistry`
|
43
43
|
is created.
|
44
|
-
* **
|
44
|
+
* **eager_load_models**: An optional array of models, or strings with class
|
45
|
+
names for models, that are added to `nested_models` at the end of
|
45
46
|
`Avromatic.configure` and during code reloading in Rails applications. This
|
46
|
-
option is useful for defining models that will be extended when the load
|
47
|
-
|
47
|
+
option is useful for defining models that will be extended when the load order
|
48
|
+
is important.
|
48
49
|
|
49
50
|
#### Using a Schema Registry/Messaging API
|
50
51
|
|
@@ -173,18 +174,18 @@ it can be used as a nested model.
|
|
173
174
|
To extend a model that will be used as a nested model, you must ensure that it
|
174
175
|
is defined, which will register it, prior it being referenced by another model.
|
175
176
|
|
176
|
-
Using the `Avromatic.
|
177
|
-
will be used as nested models to be defined at the end of the `.configure`
|
178
|
-
block. In Rails applications,
|
177
|
+
Using the `Avromatic.eager_load_models` option allows models that are extended
|
178
|
+
and will be used as nested models to be defined at the end of the `.configure`
|
179
|
+
block. In Rails applications, these models are also re-registered after
|
179
180
|
`nested_models` is cleared when code reloads to ensure that classes load in the
|
180
181
|
correct order:
|
181
182
|
|
182
183
|
```ruby
|
183
184
|
Avromatic.configure do |config|
|
184
|
-
config.
|
185
|
+
config.eager_load_models = [
|
185
186
|
# reference any extended models that should be defined first
|
186
187
|
MyNestedModel
|
187
|
-
|
188
|
+
]
|
188
189
|
end
|
189
190
|
|
190
191
|
#### Custom Types
|
@@ -18,11 +18,11 @@ module Avromatic
|
|
18
18
|
def [](fullname)
|
19
19
|
@hash.fetch(fullname)
|
20
20
|
end
|
21
|
+
alias_method :fetch, :[]
|
21
22
|
|
22
23
|
def register(model)
|
23
24
|
raise 'models with a key schema are not supported' if model.key_avro_schema
|
24
|
-
name = model
|
25
|
-
name = remove_prefix(name)
|
25
|
+
name = model_fullname(model)
|
26
26
|
raise "'#{name}' has already been registered" if registered?(name)
|
27
27
|
@hash[name] = model
|
28
28
|
end
|
@@ -31,6 +31,22 @@ module Avromatic
|
|
31
31
|
@hash.key?(fullname)
|
32
32
|
end
|
33
33
|
|
34
|
+
def model_fullname(model)
|
35
|
+
name = model.avro_schema.fullname
|
36
|
+
remove_prefix(name)
|
37
|
+
end
|
38
|
+
|
39
|
+
def ensure_registered_model(model)
|
40
|
+
name = model_fullname(model)
|
41
|
+
if registered?(name)
|
42
|
+
unless fetch(name).equal?(model)
|
43
|
+
raise "attempted to replace existing model #{fetch(name)} with new model #{model} as '#{name}'"
|
44
|
+
end
|
45
|
+
else
|
46
|
+
register(model)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
34
50
|
def remove_prefix(name)
|
35
51
|
return name if @prefix.nil?
|
36
52
|
|
data/lib/avromatic/version.rb
CHANGED
data/lib/avromatic.rb
CHANGED
@@ -3,11 +3,12 @@ require 'avromatic/model'
|
|
3
3
|
require 'avromatic/model_registry'
|
4
4
|
require 'avro_turf'
|
5
5
|
require 'avro_turf/messaging'
|
6
|
+
require 'active_support/core_ext/string/inflections'
|
6
7
|
|
7
8
|
module Avromatic
|
8
9
|
class << self
|
9
10
|
attr_accessor :schema_registry, :registry_url, :schema_store, :logger,
|
10
|
-
:messaging, :type_registry, :nested_models
|
11
|
+
:messaging, :type_registry, :nested_models
|
11
12
|
|
12
13
|
delegate :register_type, to: :type_registry
|
13
14
|
end
|
@@ -18,7 +19,7 @@ module Avromatic
|
|
18
19
|
|
19
20
|
def self.configure
|
20
21
|
yield self
|
21
|
-
|
22
|
+
eager_load_models!
|
22
23
|
end
|
23
24
|
|
24
25
|
def self.build_schema_registry
|
@@ -41,10 +42,23 @@ module Avromatic
|
|
41
42
|
self.messaging = build_messaging
|
42
43
|
end
|
43
44
|
|
45
|
+
# This method is called as a Rails to_prepare block after the application
|
46
|
+
# first initializes and prior to each code reloading.
|
44
47
|
def self.prepare!
|
45
48
|
nested_models.clear
|
46
|
-
|
49
|
+
eager_load_models!
|
47
50
|
end
|
51
|
+
|
52
|
+
def self.eager_load_models=(models)
|
53
|
+
@eager_load_model_names = Array(models).map { |model| model.is_a?(Class) ? model.name : model }
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.eager_load_models!
|
57
|
+
(@eager_load_model_names || []).each do |model_name|
|
58
|
+
nested_models.ensure_registered_model(model_name.constantize)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
private_class_method :eager_load_models!
|
48
62
|
end
|
49
63
|
|
50
64
|
require 'avromatic/railtie' if defined?(Rails)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: avromatic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Salsify Engineering
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: avro
|