model-builder 1.1.0 → 2.0.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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 826210a322d5f3d0672b28072c023478179b0e37
|
4
|
+
data.tar.gz: 78cef455bc1a4a059c275e876746ef0301a2ca47
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b3b985ca816f10018e23cebbfcfd257f6f3e40dbf254ab9f8550c8ae7c21cc6ca5af5e3a95b131cae50b6b53f382e928a811ed381e6d355d9b0d1c4117e16da
|
7
|
+
data.tar.gz: c9a5efb7833fdecfd932c9f9bd6fe372226e0edb03ce7f1036292cd2c7be71e768d4d3757e69ab56928a9f70c61e33d77b32153451fb5b409a9b8d1d10baf2d5
|
@@ -1,15 +1,17 @@
|
|
1
1
|
module ModelBuilder
|
2
2
|
module ClassBuilder
|
3
3
|
|
4
|
-
@@dynamic_classes ||=
|
4
|
+
@@dynamic_classes ||= {}
|
5
5
|
|
6
6
|
def self.build(name, opts={})
|
7
7
|
return Object.const_get name if Object.const_defined? name
|
8
8
|
|
9
9
|
klass = get_class_from_options opts
|
10
|
-
|
10
|
+
mod = get_module_from_options opts
|
11
11
|
|
12
|
-
|
12
|
+
mod.const_set name, klass
|
13
|
+
|
14
|
+
add_class mod, klass
|
13
15
|
include_modules klass, opts[:includes]
|
14
16
|
create_accessors klass, opts[:accessors]
|
15
17
|
|
@@ -26,8 +28,12 @@ module ModelBuilder
|
|
26
28
|
superclass.is_a?(String) ? superclass.constantize : superclass
|
27
29
|
end
|
28
30
|
|
29
|
-
def self.
|
30
|
-
|
31
|
+
def self.get_module_from_options(opts)
|
32
|
+
opts[:module] || Object
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.add_class(mod, klass)
|
36
|
+
@@dynamic_classes[mod] = klass
|
31
37
|
end
|
32
38
|
|
33
39
|
def self.include_modules(klass, modules)
|
@@ -50,11 +56,11 @@ module ModelBuilder
|
|
50
56
|
end
|
51
57
|
|
52
58
|
def self.clean
|
53
|
-
|
54
|
-
@@dynamic_classes =
|
59
|
+
dynamic_classes.each_pair { |mod, klass| mod.send :remove_const, klass.to_s.gsub(/^.*::/, '') }
|
60
|
+
@@dynamic_classes = {}
|
55
61
|
end
|
56
62
|
|
57
|
-
def self.
|
63
|
+
def self.dynamic_classes
|
58
64
|
@@dynamic_classes
|
59
65
|
end
|
60
66
|
|
data/lib/model_builder.rb
CHANGED
@@ -61,12 +61,12 @@ module ModelBuilder
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def self.clean
|
64
|
-
|
64
|
+
dynamic_models.map {|c| drop_table c }
|
65
65
|
@@dynamic_models = []
|
66
66
|
ClassBuilder.clean
|
67
67
|
end
|
68
68
|
|
69
|
-
def self.
|
69
|
+
def self.dynamic_models
|
70
70
|
@@dynamic_models
|
71
71
|
end
|
72
72
|
|
@@ -5,8 +5,12 @@ describe ModelBuilder::ClassBuilder do
|
|
5
5
|
|
6
6
|
let(:builder) { ModelBuilder::ClassBuilder }
|
7
7
|
let(:name) { 'ClassBuilderTest' }
|
8
|
-
let(:options) { { superclass: Array, includes: [Spec::Support::DummyModule], accessors: %w(a1 a2) } }
|
9
8
|
let(:constant) { Object.const_get name }
|
9
|
+
let(:options) {{
|
10
|
+
superclass: Array,
|
11
|
+
includes: [Spec::Support::DummyModule],
|
12
|
+
accessors: %w(a1 a2)
|
13
|
+
}}
|
10
14
|
|
11
15
|
before { @build_result = builder.build name, options }
|
12
16
|
|
@@ -17,7 +21,18 @@ describe ModelBuilder::ClassBuilder do
|
|
17
21
|
subject { @build_result }
|
18
22
|
|
19
23
|
it { is_expected.to eq constant }
|
20
|
-
it { expect(builder.
|
24
|
+
it { expect(builder.dynamic_classes.values).to include constant }
|
25
|
+
|
26
|
+
context 'module validations' do
|
27
|
+
let(:options) {{
|
28
|
+
module: ModelBuilder,
|
29
|
+
superclass: Array,
|
30
|
+
includes: [Spec::Support::DummyModule],
|
31
|
+
accessors: %w(a1 a2)
|
32
|
+
}}
|
33
|
+
|
34
|
+
it { is_expected.to eq ModelBuilder.const_get(name) }
|
35
|
+
end
|
21
36
|
|
22
37
|
context 'includes validations' do
|
23
38
|
|
@@ -52,7 +67,7 @@ describe ModelBuilder::ClassBuilder do
|
|
52
67
|
before { builder.clean }
|
53
68
|
|
54
69
|
it { expect{constant}.to raise_error(NameError, "uninitialized constant #{name}") }
|
55
|
-
it { expect(builder.
|
70
|
+
it { expect(builder.dynamic_classes.empty?).to be true }
|
56
71
|
|
57
72
|
end
|
58
73
|
|
@@ -36,7 +36,7 @@ describe ModelBuilder do
|
|
36
36
|
subject { @build_result }
|
37
37
|
|
38
38
|
it { is_expected.to eq constant }
|
39
|
-
it { expect(builder.
|
39
|
+
it { expect(builder.dynamic_models).to include constant }
|
40
40
|
|
41
41
|
context 'options validations' do
|
42
42
|
|
@@ -87,7 +87,7 @@ describe ModelBuilder do
|
|
87
87
|
|
88
88
|
before { builder.clean }
|
89
89
|
it { expect{constant}.to raise_error(NameError, "uninitialized constant #{name}") }
|
90
|
-
it { expect(builder.
|
90
|
+
it { expect(builder.dynamic_models.empty?).to be true }
|
91
91
|
|
92
92
|
end
|
93
93
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: model-builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- r4z3c
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|