avromatic 0.10.0 → 0.11.0
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 +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
|