neo4apis-activerecord 0.8.0 → 0.9.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/lib/neo4apis/activerecord.rb +32 -15
- data/lib/neo4apis/cli/activerecord.rb +1 -1
- data/lib/neo4apis/model_resolver.rb +6 -1
- data/lib/neo4apis/table_resolver.rb +0 -2
- data/neo4apis-activerecord.gemspec +2 -1
- metadata +23 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3ab07342eda78cdb202597bf1fcbe5a924ecb1a
|
4
|
+
data.tar.gz: 1cdd5de52c0fe390cadd3683b1ad874c33009de8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d4aca961167f3389348d9c9d9aacd323e1023efe5c8decbe2699bfcaf392f7b6afbb93175ecacddd0c9c0ec104408b5096f2f7690c7362088ee168a849b2e7ea
|
7
|
+
data.tar.gz: b32d89846180162ab0b5dcfc43d8fc1e0224c8b55f958e800acfc4f7ef8776533f6f206953273e8d9afab5f9f9fce6e66f876fd5a36b60efab485c9295cfc922
|
@@ -1,29 +1,45 @@
|
|
1
1
|
require 'neo4apis'
|
2
2
|
require 'ostruct'
|
3
|
+
require 'composite_primary_keys'
|
3
4
|
|
4
5
|
module Neo4Apis
|
5
6
|
class ActiveRecord < Base
|
6
7
|
batch_size 1000
|
7
8
|
|
8
9
|
def self.model_importer(model_class)
|
9
|
-
|
10
|
-
|
10
|
+
if model_class.primary_key.is_a?(Array)
|
11
|
+
relationship_name = model_class.table_name
|
12
|
+
associations = model_class.reflect_on_all_associations
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
+
importer model_class.name.to_sym do |object|
|
15
|
+
from_node = object.send(associations[0].name)
|
16
|
+
from_node = add_model_node from_node.class, from_node
|
14
17
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
18
|
+
to_node = object.send(associations[1].name)
|
19
|
+
|
20
|
+
puts 'add_model_relationship...'
|
21
|
+
add_model_relationship relationship_name, from_node, to_node
|
22
|
+
end
|
23
|
+
else
|
24
|
+
return if model_class.primary_key.nil?
|
25
|
+
uuid model_class.name.to_sym, model_class.primary_key
|
26
|
+
|
27
|
+
importer model_class.name.to_sym do |object|
|
28
|
+
node = add_model_node model_class, object
|
29
|
+
|
30
|
+
model_class.reflect_on_all_associations.each do |association_reflection|
|
31
|
+
case association_reflection.macro
|
32
|
+
when :belongs_to, :has_one
|
33
|
+
if options[:"import_#{association_reflection.macro}"]
|
34
|
+
referenced_object = object.send(association_reflection.name)
|
25
35
|
add_model_relationship association_reflection.name, node, referenced_object if referenced_object
|
26
36
|
end
|
37
|
+
when :has_many, :has_and_belongs_to_many
|
38
|
+
if options[:"import_#{association_reflection.macro}"]
|
39
|
+
object.send(association_reflection.name).each do |referenced_object|
|
40
|
+
add_model_relationship association_reflection.name, node, referenced_object if referenced_object
|
41
|
+
end
|
42
|
+
end
|
27
43
|
end
|
28
44
|
end
|
29
45
|
end
|
@@ -34,7 +50,8 @@ module Neo4Apis
|
|
34
50
|
referenced_class = referenced_object.class
|
35
51
|
referenced_node = add_model_node referenced_class, referenced_object
|
36
52
|
|
37
|
-
|
53
|
+
require 'pry'
|
54
|
+
add_relationship relationship_name, node, referenced_node rescue binding.pry
|
38
55
|
end
|
39
56
|
|
40
57
|
def add_model_node(model_class, object)
|
@@ -68,7 +68,7 @@ module Neo4Apis
|
|
68
68
|
puts 'Importing tables: ' + model_classes.map(&:table_name).join(', ')
|
69
69
|
|
70
70
|
model_classes.each do |model_class|
|
71
|
-
|
71
|
+
NEO4APIS_CLIENT_CLASS.model_importer(model_class)
|
72
72
|
end
|
73
73
|
|
74
74
|
neo4apis_client.batch do
|
@@ -53,8 +53,13 @@ module Neo4Apis
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def apply_identified_primary_key!(model_class)
|
56
|
-
identity =
|
56
|
+
identity = if model_class.columns.map(&:type) == [:integer, :integer]
|
57
|
+
model_class.columns.map(&:name)
|
58
|
+
else
|
59
|
+
::ActiveRecord::Base.connection.primary_key(model_class.table_name)
|
60
|
+
end
|
57
61
|
identity ||= identify_primary_key(model_class.column_names, model_class.name)
|
62
|
+
|
58
63
|
model_class.primary_key = identity if identity
|
59
64
|
end
|
60
65
|
end
|
@@ -22,8 +22,6 @@ module Neo4Apis
|
|
22
22
|
case standardize(column)
|
23
23
|
when 'id', 'uuid', /#{standardize(class_name.singularize)}id/, /#{standardize(class_name.pluralize)}id/
|
24
24
|
true
|
25
|
-
when
|
26
|
-
true
|
27
25
|
end
|
28
26
|
end.tap do |found_key| # rubocop:disable Style/MultilineBlockChain
|
29
27
|
fail UnfoundPrimaryKeyError, "Could not find a primary key for #{class_name}." if found_key.nil?
|
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = 'neo4apis-activerecord'
|
6
|
-
s.version = '0.
|
6
|
+
s.version = '0.9.0'
|
7
7
|
s.required_ruby_version = '>= 1.9.1'
|
8
8
|
|
9
9
|
s.authors = 'Brian Underwood'
|
@@ -20,4 +20,5 @@ A ruby gem using neo4apis to make importing SQL data to neo4j easy
|
|
20
20
|
|
21
21
|
s.add_dependency('neo4apis', '>= 0.8.1')
|
22
22
|
s.add_dependency('activerecord', '~> 4.0')
|
23
|
+
s.add_dependency('composite_primary_keys', '~> 8.0')
|
23
24
|
end
|
metadata
CHANGED
@@ -1,43 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: neo4apis-activerecord
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Underwood
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: neo4apis
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 0.8.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.8.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activerecord
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '4.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '4.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: composite_primary_keys
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '8.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '8.0'
|
41
55
|
description: |
|
42
56
|
A ruby gem using neo4apis to make importing SQL data to neo4j easy
|
43
57
|
email: public@brian-underwood.codes
|
@@ -63,17 +77,17 @@ require_paths:
|
|
63
77
|
- lib
|
64
78
|
required_ruby_version: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- -
|
80
|
+
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: 1.9.1
|
69
83
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
84
|
requirements:
|
71
|
-
- -
|
85
|
+
- - ">="
|
72
86
|
- !ruby/object:Gem::Version
|
73
87
|
version: '0'
|
74
88
|
requirements: []
|
75
89
|
rubyforge_project:
|
76
|
-
rubygems_version: 2.4.
|
90
|
+
rubygems_version: 2.4.5
|
77
91
|
signing_key:
|
78
92
|
specification_version: 4
|
79
93
|
summary: An ruby gem to import SQL data to neo4j using activerecord
|