vorpal 0.1.0.rc2 → 0.1.0.rc3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 69f36cf61329620f00d5afc82600cb4827072f34
4
- data.tar.gz: 2d750d2d81bc23bab69d7491842815bc3a528662
3
+ metadata.gz: 824912a10087771cda48b9ad66dac75861e80bb1
4
+ data.tar.gz: 67ff5e87b3e45c8308866036e79cfb83ae5959d8
5
5
  SHA512:
6
- metadata.gz: 05c571066a636c8ac35e802ed6f27385af70ab22973c10641216e64f122f5c1e9d8776acace14693f4ed559dc1c6ad74d9566449385f7a697b471c786761866a
7
- data.tar.gz: 61e7fdb650dfc01c9ec66e59d388ee60fd52411bbe190fd8e79df62ea35340acd3ad63c8f967374a03068ef2cbb0beb6839720bbbd0187a8ab4d60a18a518676
6
+ metadata.gz: 3db514381c185a0dc4b9b4a408ca35b34a244bb1fe97e899ff1b89ebb84d14cd20d5159c2a459316d77c1e3b4d81e4529e0ff110d02dfdece3f06817531653b1
7
+ data.tar.gz: 5437e2611a1ae1e75b1143cd1f9732429fa9acb0fb5e11fc105e60bb7d0330fe4e23021ca7c63b676758977fedeafaed2b39f26be24f83b1f431fc5c7ab1a0b2
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Vorpal
1
+ # Vorpal [![Build Status](https://travis-ci.org/nulogy/vorpal.svg?branch=master)](https://travis-ci.org/nulogy/vorpal) [![Code Climate](https://codeclimate.com/github/nulogy/vorpal/badges/gpa.svg)](https://codeclimate.com/github/nulogy/vorpal)
2
2
 
3
3
  Separate your domain model from your persistence mechanism. Some problems call for a really sharp tool.
4
4
 
@@ -266,7 +266,7 @@ module Vorpal
266
266
 
267
267
  # @private
268
268
  class HasManyConfig
269
- include HashInitialization
269
+ include Util::HashInitialization
270
270
  include RemoteEndConfig
271
271
  include ToManyConfig
272
272
 
@@ -276,7 +276,7 @@ module Vorpal
276
276
 
277
277
  # @private
278
278
  class HasOneConfig
279
- include HashInitialization
279
+ include Util::HashInitialization
280
280
  include RemoteEndConfig
281
281
  include ToOneConfig
282
282
 
@@ -286,7 +286,7 @@ module Vorpal
286
286
 
287
287
  # @private
288
288
  class BelongsToConfig
289
- include HashInitialization
289
+ include Util::HashInitialization
290
290
  include LocalEndConfig
291
291
  include ToOneConfig
292
292
 
@@ -1,3 +1,5 @@
1
+ require 'vorpal/util/string_utils.rb'
2
+
1
3
  module Vorpal
2
4
  # Interface between the database and Vorpal
3
5
  #
@@ -57,27 +59,33 @@ module Vorpal
57
59
 
58
60
  # Builds an ORM Class for accessing data in the given DB table.
59
61
  #
62
+ # @param model_class [Class] The PORO class that we are creating a DB interface class for.
60
63
  # @param table_name [String] Name of the DB table the DB class should interface with.
61
64
  # @return [Class] ActiveRecord::Base Class
62
- def build_db_class(table_name)
65
+ def build_db_class(model_class, table_name)
63
66
  db_class = Class.new(ActiveRecord::Base) do
64
- # This is overridden for two reasons:
65
- # 1) For anonymous classes, #name normally returns nil. Class names in Ruby come from the
66
- # name of the constant they are assigned to.
67
- # 2) Because the default implementation for Class#name for anonymous classes is very, very
68
- # slow. https://bugs.ruby-lang.org/issues/11119
69
- # Remove this override once #2 has been fixed!
70
- def self.name
71
- @name ||= "Vorpal_Generated_ActiveRecord_Base_Class_for_#{table_name}_Object_ID_#{object_id}"
72
- end
73
-
74
- # Overridden because, like #name, the default implementation for anonymous classes is very,
75
- # very slow.
76
- def self.to_s
77
- name
67
+ class << self
68
+ # This is overridden for two reasons:
69
+ # 1) For anonymous classes, #name normally returns nil. Class names in Ruby come from the
70
+ # name of the constant they are assigned to.
71
+ # 2) Because the default implementation for Class#name for anonymous classes is very, very
72
+ # slow. https://bugs.ruby-lang.org/issues/11119
73
+ # Remove this override once #2 has been fixed!
74
+ def name
75
+ @name ||= "Vorpal_generated_ActiveRecord__Base_class_for_#{vorpal_model_class_name}"
76
+ end
77
+
78
+ # Overridden because, like #name, the default implementation for anonymous classes is very,
79
+ # very slow.
80
+ def to_s
81
+ name
82
+ end
83
+
84
+ attr_accessor :vorpal_model_class_name
78
85
  end
79
86
  end
80
87
 
88
+ db_class.vorpal_model_class_name = Util::StringUtils.escape_class_name(model_class.name)
81
89
  db_class.table_name = table_name
82
90
  db_class
83
91
  end
@@ -72,7 +72,7 @@ module Vorpal
72
72
 
73
73
  # @private
74
74
  class LookupInstructions
75
- include ArrayHash
75
+ include Util::ArrayHash
76
76
  def initialize
77
77
  @lookup_by_id = {}
78
78
  @lookup_by_fk = {}
@@ -124,4 +124,4 @@ module Vorpal
124
124
  end
125
125
  end
126
126
  end
127
- end
127
+ end
@@ -12,7 +12,7 @@ module Vorpal
12
12
  end
13
13
 
14
14
  def build_db_class(user_table_name)
15
- @db_driver.build_db_class(user_table_name || table_name)
15
+ @db_driver.build_db_class(@domain_class, user_table_name || table_name)
16
16
  end
17
17
 
18
18
  def table_name
@@ -42,4 +42,4 @@ module Vorpal
42
42
  end
43
43
  end
44
44
  end
45
- end
45
+ end
@@ -5,7 +5,7 @@ module Vorpal
5
5
 
6
6
  # @private
7
7
  class LoadedObjects
8
- include ArrayHash
8
+ include Util::ArrayHash
9
9
  extend Forwardable
10
10
  include Enumerable
11
11
 
@@ -1,17 +1,19 @@
1
1
  module Vorpal
2
- # @private
3
- module ArrayHash
4
- def add_to_hash(array_hash, key, values)
5
- if array_hash[key].nil? || array_hash[key].empty?
6
- array_hash[key] = []
2
+ module Util
3
+ # @private
4
+ module ArrayHash
5
+ def add_to_hash(array_hash, key, values)
6
+ if array_hash[key].nil? || array_hash[key].empty?
7
+ array_hash[key] = []
8
+ end
9
+ array_hash[key].concat(Array(values))
7
10
  end
8
- array_hash[key].concat(Array(values))
9
- end
10
11
 
11
- def pop(array_hash)
12
- key = array_hash.first.first
13
- values = array_hash.delete(key)
14
- [key, values]
12
+ def pop(array_hash)
13
+ key = array_hash.first.first
14
+ values = array_hash.delete(key)
15
+ [key, values]
16
+ end
15
17
  end
16
18
  end
17
19
  end
@@ -1,9 +1,11 @@
1
1
  module Vorpal
2
- # @private
3
- module HashInitialization
4
- def initialize(attrs)
5
- attrs.each do |k,v|
6
- instance_variable_set("@#{k}", v)
2
+ module Util
3
+ # @private
4
+ module HashInitialization
5
+ def initialize(attrs)
6
+ attrs.each do |k,v|
7
+ instance_variable_set("@#{k}", v)
8
+ end
7
9
  end
8
10
  end
9
11
  end
@@ -0,0 +1,15 @@
1
+ module Vorpal
2
+ module Util
3
+ # @private
4
+ module StringUtils
5
+ extend self
6
+
7
+ # Escapes the name of a class so that it can be embedded into the name
8
+ # of another class. This means that the result should always be `#const_defined?`
9
+ # friendly.
10
+ def escape_class_name(class_name)
11
+ class_name.gsub("::", "__")
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,3 +1,3 @@
1
1
  module Vorpal
2
- VERSION = "0.1.0.rc2"
2
+ VERSION = "0.1.0.rc3"
3
3
  end
@@ -3,14 +3,40 @@ require 'vorpal'
3
3
 
4
4
  describe Vorpal::DbDriver do
5
5
  describe '#build_db_class' do
6
- let(:db_class) { subject.build_db_class('example') }
6
+ let(:db_class) { subject.build_db_class(DbDriverSpec::Foo, 'example') }
7
7
 
8
- it 'generates a vald class name so that rails auto-reloading works' do
8
+ it 'generates a valid class name so that rails auto-reloading works' do
9
9
  expect { Vorpal.const_defined?(db_class.name) }.to_not raise_error
10
10
  end
11
11
 
12
12
  it 'does not let the user access the generated class' do
13
13
  expect { Vorpal.const_get(db_class.name) }.to raise_error(NameError)
14
14
  end
15
+
16
+ it 'isolates two POROs that map to the same db table' do
17
+ db_class1 = build_db_class(DbDriverSpec::Foo)
18
+ db_class2 = build_db_class(DbDriverSpec::Bar)
19
+
20
+ expect(db_class1).to_not eq(db_class2)
21
+ expect(db_class1.name).to_not eq(db_class2.name)
22
+ end
23
+
24
+ it 'uses the model class name to make the generated AR::Base class name unique' do
25
+ db_class = build_db_class(DbDriverSpec::Foo)
26
+
27
+ expect(db_class.name).to match("DbDriverSpec__Foo")
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ module DbDriverSpec
34
+ class Foo; end
35
+ class Bar; end
36
+ end
37
+
38
+ def build_db_class(clazz)
39
+ db_driver = Vorpal::DbDriver.new
40
+ db_driver.build_db_class(clazz, 'example')
15
41
  end
16
42
  end
@@ -16,14 +16,14 @@ describe Vorpal::Dsl::DefaultsGenerator do
16
16
  describe '#build_db_class' do
17
17
  it 'derives the table_name from the domain class name' do
18
18
  generator = build_generator(Tester)
19
- expect(db_driver).to receive(:build_db_class).with("testers")
19
+ expect(db_driver).to receive(:build_db_class).with(Tester, "testers")
20
20
 
21
21
  generator.build_db_class(nil)
22
22
  end
23
23
 
24
24
  it 'specifies the table_name manually' do
25
25
  generator = build_generator(Tester)
26
- expect(db_driver).to receive(:build_db_class).with("override")
26
+ expect(db_driver).to receive(:build_db_class).with(Tester, "override")
27
27
 
28
28
  generator.build_db_class("override")
29
29
  end
@@ -0,0 +1,25 @@
1
+ require 'unit_spec_helper'
2
+ require 'vorpal/util/string_utils'
3
+
4
+ describe Vorpal::Util::StringUtils do
5
+
6
+ describe '.escape_class_name' do
7
+ it 'does nothing when there are no :: in the class name' do
8
+ expect(escape_class_name("Foo")).to eq("Foo")
9
+ end
10
+
11
+ it 'converts :: into __' do
12
+ expect(escape_class_name("Foo::Bar")).to eq("Foo__Bar")
13
+ end
14
+
15
+ it 'converts multiple :: into __' do
16
+ expect(escape_class_name("Foo::Bar::Baz")).to eq("Foo__Bar__Baz")
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def escape_class_name(class_name)
23
+ Vorpal::Util::StringUtils.escape_class_name(class_name)
24
+ end
25
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vorpal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.rc2
4
+ version: 0.1.0.rc3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Kirby
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-28 00:00:00.000000000 Z
11
+ date: 2016-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simple_serializer
@@ -170,6 +170,7 @@ files:
170
170
  - lib/vorpal/loaded_objects.rb
171
171
  - lib/vorpal/util/array_hash.rb
172
172
  - lib/vorpal/util/hash_initialization.rb
173
+ - lib/vorpal/util/string_utils.rb
173
174
  - lib/vorpal/version.rb
174
175
  - spec/helpers/db_helpers.rb
175
176
  - spec/helpers/profile_helpers.rb
@@ -184,6 +185,7 @@ files:
184
185
  - spec/vorpal/unit/dsl/defaults_generator_spec.rb
185
186
  - spec/vorpal/unit/identity_map_spec.rb
186
187
  - spec/vorpal/unit/loaded_objects_spec.rb
188
+ - spec/vorpal/unit/util/string_utils_spec.rb
187
189
  - vorpal.gemspec
188
190
  homepage: https://github.com/nulogy/vorpal
189
191
  licenses:
@@ -223,3 +225,4 @@ test_files:
223
225
  - spec/vorpal/unit/dsl/defaults_generator_spec.rb
224
226
  - spec/vorpal/unit/identity_map_spec.rb
225
227
  - spec/vorpal/unit/loaded_objects_spec.rb
228
+ - spec/vorpal/unit/util/string_utils_spec.rb