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: 755f69f2759cbef81f648647073101f1e832d18e
4
- data.tar.gz: 918e0c1720b2a2349e1430d39bb1be546cbde95d
3
+ metadata.gz: 826210a322d5f3d0672b28072c023478179b0e37
4
+ data.tar.gz: 78cef455bc1a4a059c275e876746ef0301a2ca47
5
5
  SHA512:
6
- metadata.gz: c55813b933ad427308bc20e31b61b0ce6a9146795df9ec7908c89e8cc5bed85de58759828d22e22dca5fd1cf57bd8549a3808ce4dc3b5d8b115bed75ad2f9a31
7
- data.tar.gz: 47c71a7ef9a882b0cee79ce1d7ba4484c0d486cc08c37f8d7da8de0b2c84dac8972c9f09ebf32a55651f44aef9e34f96d674547d4b779e301701ba1ae7e9f218
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
- Object.const_set name, klass
10
+ mod = get_module_from_options opts
11
11
 
12
- add_class klass
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.add_class(klass)
30
- @@dynamic_classes << klass
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
- list.map {|c| Object.send :remove_const, c.to_s }
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.list
63
+ def self.dynamic_classes
58
64
  @@dynamic_classes
59
65
  end
60
66
 
@@ -1,3 +1,3 @@
1
1
  module ModelBuilder
2
- VERSION = '1.1.0'
2
+ VERSION = '2.0.0'
3
3
  end
data/lib/model_builder.rb CHANGED
@@ -61,12 +61,12 @@ module ModelBuilder
61
61
  end
62
62
 
63
63
  def self.clean
64
- list.map {|c| drop_table c }
64
+ dynamic_models.map {|c| drop_table c }
65
65
  @@dynamic_models = []
66
66
  ClassBuilder.clean
67
67
  end
68
68
 
69
- def self.list
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.list).to include constant }
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.list.empty?).to be true }
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.list).to include constant }
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.list.empty?).to be true }
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: 1.1.0
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: 2015-12-02 00:00:00.000000000 Z
11
+ date: 2016-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler