neo4j 7.2.3 → 8.0.0.alpha.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +30 -46
- data/Gemfile +15 -14
- data/README.md +21 -14
- data/bin/neo4j-jars +1 -1
- data/lib/neo4j.rb +12 -1
- data/lib/neo4j/active_base.rb +68 -0
- data/lib/neo4j/active_base/session_registry.rb +12 -0
- data/lib/neo4j/active_node.rb +13 -21
- data/lib/neo4j/active_node/dependent/query_proxy_methods.rb +6 -6
- data/lib/neo4j/active_node/enum.rb +3 -6
- data/lib/neo4j/active_node/has_n.rb +24 -19
- data/lib/neo4j/active_node/has_n/association.rb +6 -2
- data/lib/neo4j/active_node/has_n/association/rel_factory.rb +1 -1
- data/lib/neo4j/active_node/has_n/association/rel_wrapper.rb +1 -1
- data/lib/neo4j/active_node/has_n/association_cypher_methods.rb +1 -1
- data/lib/neo4j/active_node/id_property.rb +52 -15
- data/lib/neo4j/active_node/labels.rb +32 -10
- data/lib/neo4j/active_node/labels/index.rb +5 -55
- data/lib/neo4j/active_node/node_list_formatter.rb +13 -0
- data/lib/neo4j/active_node/node_wrapper.rb +39 -37
- data/lib/neo4j/active_node/persistence.rb +27 -13
- data/lib/neo4j/active_node/query/query_proxy.rb +11 -9
- data/lib/neo4j/active_node/query/query_proxy_eager_loading.rb +4 -4
- data/lib/neo4j/active_node/query/query_proxy_enumerable.rb +1 -0
- data/lib/neo4j/active_node/query/query_proxy_link.rb +13 -9
- data/lib/neo4j/active_node/query/query_proxy_methods.rb +76 -8
- data/lib/neo4j/active_node/query/query_proxy_methods_of_mass_updating.rb +1 -1
- data/lib/neo4j/active_node/query_methods.rb +3 -3
- data/lib/neo4j/active_node/scope.rb +24 -7
- data/lib/neo4j/active_rel.rb +21 -3
- data/lib/neo4j/active_rel/initialize.rb +2 -2
- data/lib/neo4j/active_rel/persistence.rb +32 -6
- data/lib/neo4j/active_rel/persistence/query_factory.rb +3 -3
- data/lib/neo4j/active_rel/property.rb +9 -9
- data/lib/neo4j/active_rel/query.rb +6 -4
- data/lib/neo4j/active_rel/rel_wrapper.rb +24 -16
- data/lib/neo4j/active_rel/related_node.rb +5 -1
- data/lib/neo4j/active_rel/types.rb +2 -2
- data/lib/neo4j/config.rb +0 -1
- data/lib/neo4j/errors.rb +3 -0
- data/lib/neo4j/migration.rb +90 -71
- data/lib/neo4j/migrations.rb +10 -0
- data/lib/neo4j/migrations/base.rb +44 -0
- data/lib/neo4j/migrations/helpers.rb +101 -0
- data/lib/neo4j/migrations/helpers/id_property.rb +75 -0
- data/lib/neo4j/migrations/helpers/relationships.rb +66 -0
- data/lib/neo4j/migrations/helpers/schema.rb +53 -0
- data/lib/neo4j/migrations/migration_file.rb +24 -0
- data/lib/neo4j/migrations/runner.rb +110 -0
- data/lib/neo4j/migrations/schema_migration.rb +9 -0
- data/lib/neo4j/model_schema.rb +100 -0
- data/lib/neo4j/railtie.rb +29 -110
- data/lib/neo4j/schema/operation.rb +24 -13
- data/lib/neo4j/session_manager.rb +137 -0
- data/lib/neo4j/shared.rb +20 -11
- data/lib/neo4j/shared/attributes.rb +10 -16
- data/lib/neo4j/shared/callbacks.rb +3 -3
- data/lib/neo4j/shared/cypher.rb +1 -1
- data/lib/neo4j/shared/declared_properties.rb +1 -1
- data/lib/neo4j/shared/declared_property.rb +1 -1
- data/lib/neo4j/shared/enum.rb +6 -18
- data/lib/neo4j/shared/identity.rb +27 -21
- data/lib/neo4j/shared/persistence.rb +26 -17
- data/lib/neo4j/shared/property.rb +5 -2
- data/lib/neo4j/shared/query_factory.rb +4 -5
- data/lib/neo4j/shared/type_converters.rb +8 -9
- data/lib/neo4j/shared/validations.rb +1 -5
- data/lib/neo4j/tasks/migration.rake +83 -2
- data/lib/neo4j/version.rb +1 -1
- data/lib/rails/generators/neo4j/migration/migration_generator.rb +14 -0
- data/lib/rails/generators/neo4j/migration/templates/migration.erb +9 -0
- data/lib/rails/generators/neo4j/model/model_generator.rb +1 -3
- data/lib/rails/generators/neo4j_generator.rb +1 -0
- data/neo4j.gemspec +3 -3
- metadata +58 -65
- data/bin/rake +0 -17
- data/lib/neo4j/shared/permitted_attributes.rb +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae62feb1503e7f65d35cbc182034a65a28c9361b
|
4
|
+
data.tar.gz: 5ddeb82fa562a1868c1a6b5d8898c5b0dca80276
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8acc45e1a6fa2cc4c314558f12b737ab2ffa0c30b914244672839da5f7ab9a64ea4194f39d9e4b90cb6f85e7a32b10b2f73c52eedd28c5d4bf072828881d4acc
|
7
|
+
data.tar.gz: 47c95259853558c3637073ef6150d3f53c6af8bf54c9866cee1fcff543561482e48e38bdc723916ba41c6125fa073dfb53f26689a15f497cd211b57deb8109af
|
data/CHANGELOG.md
CHANGED
@@ -3,47 +3,41 @@ All notable changes to this project will be documented in this file.
|
|
3
3
|
This file should follow the standards specified on [http://keepachangelog.com/]
|
4
4
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
5
5
|
|
6
|
-
## [
|
6
|
+
## [Unreleased] Unreleased
|
7
7
|
|
8
|
-
###
|
9
|
-
|
10
|
-
- `as` resetting scope of the current query chain (see #1298)
|
11
|
-
|
12
|
-
## [7.2.2] - 09-22-2016
|
13
|
-
|
14
|
-
### Fixed
|
15
|
-
|
16
|
-
- `where` clause with question mark parameter and array values only using the first element (see #1247 #1290)
|
17
|
-
|
18
|
-
## [7.2.1] - 09-19-2016
|
19
|
-
|
20
|
-
### Fixed
|
21
|
-
|
22
|
-
- During ActiveRel create, node and rel property values formatted like Cypher props (`{val}`) were interpreted as props, causing errors.
|
8
|
+
### Changed
|
23
9
|
|
24
|
-
|
10
|
+
- Improved `QueryProxy` and `AssociationProxy` `#inspect` method to show a result preview (thanks ProGM / see #1228 #1232)
|
11
|
+
- Renamed the old migration task to `neo4j:legacy_migrate`
|
12
|
+
- Renamed the ENV variable to silence migrations output from `silenced` to `MIGRATIONS_SILENCED`
|
13
|
+
- Changed the behavior with transactions when a validation fails. This is a potentially breaking change, since now calling `save` would not fail the current transaction, as expected. (thanks ProGM / see #1156)
|
14
|
+
- Invalid options to the `property` method now raise an exception (see #1169)
|
15
|
+
- Label #indexes/#constraints return array without needing to access [:property_keys]
|
16
|
+
- `server_db` server type is no longer supported. Use `http` instead to connect to Neo4j via the HTTP JSON API
|
25
17
|
|
26
18
|
### Added
|
27
19
|
|
28
|
-
-
|
29
|
-
|
30
|
-
|
20
|
+
- Allow to pass a Proc for a default property value (thanks @knapo / see #1250)
|
21
|
+
- Adding a new ActiveRecord-like migration framework (thanks ProGM / see #1197)
|
22
|
+
- Adding a set of rake tasks to manage migrations (thanks ProGM / see #1197)
|
23
|
+
- Implemented autoloading for new and legacy migration modules (there's no need to `require` them anymore)
|
24
|
+
- Adding explicit identity method for use in Query strings (thanks brucek / see #1159)
|
25
|
+
- New adaptor-based API has been created for connecting to Neo4j (See the [upgrade guide](TODO!!!!)). Changes include:
|
26
|
+
- The old APIs are deprecated and will be removed later.
|
27
|
+
- In the new API, there is no such thing as a "current" session. Users of `neo4j-core` must create and maintain references themselves to their sessions
|
28
|
+
- New `Neo4j::Core::Node` and `Neo4j::Core::Relationshp` classes have been created to provide consistent results between adaptors. `Neo4j::Core::Path` has also been added
|
29
|
+
- New API is centered around Cypher. No special methods are defined to, for example, load/create/etc... nodes/relationships
|
30
|
+
- There is now a new API for making multiple queries in the same HTTP request
|
31
|
+
- It is now possible to subscribe separately to events for querying in different adaptors and for HTTP requests (see [the docs](TODO!!!!))
|
32
|
+
- Schema queries (changes to indexes/constraints) happen in a separate thread for performance and reduce the complexity of the code
|
33
|
+
- New session API does not include replacement for on_next_session_available
|
34
|
+
- Adding a migration helper to mass relabel migrations (thanks @JustinAiken / see #1166 #1239)
|
35
|
+
- Added support for `find_or_initialize_by` and `first_or_initialize` methods from ActiveRecord (thanks ProGM / see #1164)
|
36
|
+
- Support for using Neo4j-provided IDs (`neo_id`) instead of UUID or another Ruby-provided ID. (Huge thanks to @klobuczek, see #1174)
|
31
37
|
|
32
38
|
### Fixed
|
33
39
|
|
34
|
-
-
|
35
|
-
|
36
|
-
## [7.1.3] - 08-18-2016
|
37
|
-
|
38
|
-
### Changed
|
39
|
-
|
40
|
-
- Default value for `enum` is `nil` instead of the first value. This is a **BREAKING** change but is being released as a patch because the original behavior was considered a bug. See [this pull request](https://github.com/neo4jrb/neo4j/pull/1270) (thanks to ProGM and andyweiss1982)
|
41
|
-
|
42
|
-
## [7.1.2] - 08-01-2016
|
43
|
-
|
44
|
-
### Fixed
|
45
|
-
|
46
|
-
- Fixed issue where the label wrapping cache would get stuck
|
40
|
+
- Made some memory optimizations (thanks ProGM / see #1221)
|
47
41
|
|
48
42
|
## [7.1.1] - 07-22-2016
|
49
43
|
|
@@ -58,18 +52,6 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
58
52
|
- Gemspec dependency requirements were modified where ActiveModel, ActiveSupport, and Railties are concerned. The gem now requires >= 4.0, < 5.1.
|
59
53
|
- `ActiveModel::Serializers::Xml` is only included if supported if available.
|
60
54
|
|
61
|
-
## [7.0.16] - 09-20-2016
|
62
|
-
|
63
|
-
### Fixed
|
64
|
-
|
65
|
-
- `where` clause with question mark parameter and array values only using the first element (see #1247 #1290)
|
66
|
-
|
67
|
-
## [7.0.15] - 08-18-2016
|
68
|
-
|
69
|
-
### Changed
|
70
|
-
|
71
|
-
- Default value for `enum` is `nil` instead of the first value. This is a **BREAKING** change but is being released as a patch because the original behavior was considered a bug. See [this pull request](https://github.com/neo4jrb/neo4j/pull/1270) (thanks to ProGM and andyweiss1982)
|
72
|
-
|
73
55
|
## [7.0.14] - 07-10-2016
|
74
56
|
|
75
57
|
### Fixed
|
@@ -87,6 +69,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
87
69
|
### Fixed
|
88
70
|
|
89
71
|
- Fix dipendence from JSON when using outside of rails (thanks ProGM)
|
72
|
+
>>>>>>> 7.1.x
|
90
73
|
|
91
74
|
## [7.0.10] - 06-07-2016
|
92
75
|
|
@@ -154,7 +137,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
154
137
|
No changes from `rc.7`
|
155
138
|
|
156
139
|
## [7.0.0.rc.7] - 03-16-2016
|
157
|
-
|
140
|
+
|
158
141
|
### Changed
|
159
142
|
|
160
143
|
- `with_associations` now generates separate `OPTIONAL MATCH` clauses, separated by `WITH` clauses and is preceeded by a `WITH` clause.
|
@@ -211,6 +194,7 @@ No changes from `rc.7`
|
|
211
194
|
- Rails will now rescue all `Neo4j::RecordNotFound` errors with a 404 status code by default
|
212
195
|
- A clone of [ActiveRecord::Enum](http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html) API. See docs for details. (thanks ProGM / #1129)
|
213
196
|
- Added #branch method to `QueryProxy` to allow for easy branching of matches in association chains (thanks ProGM / #1147 / #1143)
|
197
|
+
- The `.match` method on ActiveNode model class has changed to allow a second argument which takes `on_create`, `on_match`, and `set` keys. These allow you to define attribute values for the Cypher `MERGE` in the different cases (thanks leviwilson / see #1123)
|
214
198
|
|
215
199
|
### Removed
|
216
200
|
|
data/Gemfile
CHANGED
@@ -2,10 +2,14 @@ source 'http://rubygems.org'
|
|
2
2
|
|
3
3
|
gemspec
|
4
4
|
|
5
|
-
# if ENV['CI']
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
# gem 'neo4j-core', github: 'neo4jrb/neo4j-core', branch: 'master' if ENV['CI']
|
6
|
+
|
7
|
+
if branch = ENV['TRAVIS_BRANCH']
|
8
|
+
same_branch_exists = `curl --head https://github.com/neo4jrb/neo4j-core/tree/#{branch} | head -1`.match(/200 OK/)
|
9
|
+
gem 'neo4j-core', github: 'neo4jrb/neo4j-core', branch: same_branch_exists ? branch : 'master'
|
10
|
+
else
|
11
|
+
gem 'neo4j-core', github: 'neo4jrb/neo4j-core'
|
12
|
+
end
|
9
13
|
|
10
14
|
# gem 'active_attr', github: 'neo4jrb/active_attr', branch: 'performance'
|
11
15
|
# gem 'active_attr', path: '../active_attr'
|
@@ -13,26 +17,23 @@ gemspec
|
|
13
17
|
gem 'listen', '< 3.1'
|
14
18
|
|
15
19
|
if RUBY_VERSION.to_f < 2.2
|
16
|
-
gem 'activemodel', '~> 4
|
17
|
-
gem 'activesupport', '~> 4
|
18
|
-
gem 'railties', '~> 4
|
20
|
+
gem 'activemodel', '~> 4'
|
21
|
+
gem 'activesupport', '~> 4'
|
22
|
+
gem 'railties', '~> 4'
|
19
23
|
end
|
20
24
|
|
25
|
+
gem 'tins', '< 1.7' if RUBY_VERSION.to_f < 2.0
|
26
|
+
|
21
27
|
group 'test' do
|
22
28
|
gem 'coveralls', require: false
|
23
|
-
if RUBY_VERSION.to_f < 2.0
|
24
|
-
gem 'term-ansicolor', '< 1.4'
|
25
|
-
gem 'tins', '< 1.7'
|
26
|
-
gem 'overcommit', '< 0.35.0'
|
27
|
-
else
|
28
|
-
gem 'overcommit'
|
29
|
-
end
|
29
|
+
gem 'tins', '< 1.7' if RUBY_VERSION.to_f < 2.0
|
30
30
|
gem 'codecov', require: false
|
31
31
|
gem 'simplecov', require: false
|
32
32
|
gem 'simplecov-html', require: false
|
33
33
|
gem 'rspec', '~> 3.4'
|
34
34
|
gem 'its'
|
35
35
|
gem 'test-unit'
|
36
|
+
gem 'overcommit'
|
36
37
|
gem 'colored'
|
37
38
|
gem 'dotenv'
|
38
39
|
gem 'timecop'
|
data/README.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Welcome to Neo4j.rb
|
2
2
|
|
3
|
+
**FOR INFORMATION ABOUT NEO4J 3.0 SUPPORT, SEE [VERSION SUPPORT](https://github.com/neo4jrb/neo4j#neo4j-version-support) and [FEATURE SUPPORT](https://github.com/neo4jrb/neo4j#neo4j-feature-support) sections**
|
4
|
+
|
5
|
+
**ALSO NOTE THAT MASTER IS CURRENT IN FLUX IN PREPARATION FOR AN ALPHA OF 8.0 AND IT IS NOT RECOMMENDED TO BE USED**
|
6
|
+
|
3
7
|
## Code Status
|
4
8
|
|
5
9
|
[![Build Status](https://secure.travis-ci.org/neo4jrb/neo4j.png?branch=master)](http://travis-ci.org/neo4jrb/neo4j) [![Coverage Status](https://coveralls.io/repos/neo4jrb/neo4j/badge.png?branch=master)](https://coveralls.io/r/neo4jrb/neo4j?branch=master) [![Code Climate](https://codeclimate.com/github/neo4jrb/neo4j.png)](https://codeclimate.com/github/neo4jrb/neo4j) [![PullReview stats](https://www.pullreview.com/github/neo4jrb/neo4j/badges/master.svg?)](https://www.pullreview.com/github/neo4jrb/neo4j/reviews/master)
|
@@ -48,25 +52,27 @@ Neo4j.rb v4.1.0 was released in January of 2015. Its changes are outlined [here]
|
|
48
52
|
|
49
53
|
## Neo4j version support
|
50
54
|
|
51
|
-
| **Neo4j Version** | v2.x | v3.x | >= v4.x |
|
52
|
-
|
53
|
-
| 1.9.x | Yes | No | No |
|
54
|
-
| 2.0.x | No | Yes | No |
|
55
|
-
| 2.1.x | No | Yes | Yes * |
|
56
|
-
| 2.2.x | No | No | Yes |
|
57
|
-
| 2.3.x | No | No | Yes |
|
55
|
+
| **Neo4j Version** | v2.x | v3.x | >= v4.x | >= 7.0.3 |
|
56
|
+
|-------------------|------|-------|---------|----------|
|
57
|
+
| 1.9.x | Yes | No | No | No |
|
58
|
+
| 2.0.x | No | Yes | No | No |
|
59
|
+
| 2.1.x | No | Yes | Yes * | Yes |
|
60
|
+
| 2.2.x | No | No | Yes | Yes |
|
61
|
+
| 2.3.x | No | No | Yes | Yes |
|
62
|
+
| 3.0.x | No | No | No | Yes |
|
58
63
|
|
59
64
|
`*` Neo4j.rb >= 4.x doesn't support Neo4j versions before 2.1.5. To use 2.1.x you should upgrade to a version >= 2.1.5
|
60
65
|
|
61
66
|
## Neo4j feature support
|
62
67
|
|
63
|
-
| **Neo4j Feature** | v2.x | v3.x | >= v4.x |
|
64
|
-
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
| **Neo4j Feature** | v2.x | v3.x | >= v4.x | >= 8.x (coming soon) |
|
69
|
+
|----------------------------|--------|------|---------|----------------------|
|
70
|
+
| Bolt Protocol | No | No | No | Yes (coming soon) |
|
71
|
+
| Auth | No | No | Yes | Yes |
|
72
|
+
| Remote Cypher | Yes | Yes | Yes | Yes |
|
73
|
+
| Transactions | Yes | Yes | Yes | Yes |
|
74
|
+
| High Availability | No | Yes | Yes | Yes |
|
75
|
+
| Embedded JVM support | Yes | Yes | Yes | Yes |
|
70
76
|
|
71
77
|
## Modern (3.x/4.X) Documentation
|
72
78
|
|
@@ -101,3 +107,4 @@ Always welcome! Please review the [guidelines for contributing](CONTRIBUTING.md
|
|
101
107
|
* Neo4j - Dual free software/commercial license, see [Licensing Guide](http://www.neo4j.org/learn/licensing).
|
102
108
|
|
103
109
|
**Notice:** There are different licenses for the `neo4j-community`, `neo4j-advanced`, and `neo4j-enterprise` jar gems. Only the `neo4j-community` gem is required by default.
|
110
|
+
|
data/bin/neo4j-jars
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'neo4j'
|
4
4
|
|
5
|
-
if ARGV.
|
5
|
+
if ARGV.empty?
|
6
6
|
puts <<TEXT
|
7
7
|
A tool for copying jar files needed by the application server, like trinidad
|
8
8
|
It copies all jar files which has been required (neo4j-community, neo4j-advanced or neo4j-enterprise) to the lib folder of the current directory
|
data/lib/neo4j.rb
CHANGED
@@ -3,6 +3,11 @@ require 'neo4j/version'
|
|
3
3
|
require 'neo4j-core'
|
4
4
|
require 'neo4j/core/cypher_session'
|
5
5
|
require 'neo4j/core/query'
|
6
|
+
|
7
|
+
require 'neo4j/active_base'
|
8
|
+
require 'neo4j/model_schema'
|
9
|
+
require 'neo4j/active_base/session_registry'
|
10
|
+
|
6
11
|
require 'active_model'
|
7
12
|
require 'active_support/concern'
|
8
13
|
require 'active_support/core_ext/class/attribute.rb'
|
@@ -40,7 +45,6 @@ require 'neo4j/shared/typecaster'
|
|
40
45
|
require 'neo4j/shared/initialize'
|
41
46
|
require 'neo4j/shared/query_factory'
|
42
47
|
require 'neo4j/shared/cypher'
|
43
|
-
require 'neo4j/shared/permitted_attributes'
|
44
48
|
require 'neo4j/shared'
|
45
49
|
|
46
50
|
require 'neo4j/active_rel/callbacks'
|
@@ -54,6 +58,7 @@ require 'neo4j/active_rel/related_node'
|
|
54
58
|
require 'neo4j/active_rel/types'
|
55
59
|
require 'neo4j/active_rel'
|
56
60
|
|
61
|
+
require 'neo4j/active_node/node_list_formatter'
|
57
62
|
require 'neo4j/active_node/dependent'
|
58
63
|
require 'neo4j/active_node/dependent/query_proxy_methods'
|
59
64
|
require 'neo4j/active_node/dependent/association_methods'
|
@@ -88,6 +93,12 @@ require 'neo4j/active_node/query'
|
|
88
93
|
require 'neo4j/active_node/scope'
|
89
94
|
require 'neo4j/active_node'
|
90
95
|
|
96
|
+
module Neo4j
|
97
|
+
extend ActiveSupport::Autoload
|
98
|
+
autoload :Migrations
|
99
|
+
autoload :Migration
|
100
|
+
end
|
101
|
+
|
91
102
|
require 'neo4j/active_node/orm_adapter'
|
92
103
|
if defined?(Rails)
|
93
104
|
require 'rails/generators'
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Neo4j
|
2
|
+
# To contain any base login for ActiveNode/ActiveRel which
|
3
|
+
# is external to the main classes
|
4
|
+
module ActiveBase
|
5
|
+
class << self
|
6
|
+
# private?
|
7
|
+
def current_session
|
8
|
+
SessionRegistry.current_session.tap do |session|
|
9
|
+
fail 'No session defined!' if session.nil?
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def current_transaction_or_session
|
14
|
+
current_transaction || current_session
|
15
|
+
end
|
16
|
+
|
17
|
+
def query(*args)
|
18
|
+
current_transaction_or_session.query(*args)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Should support setting session via config options
|
22
|
+
def current_session=(session)
|
23
|
+
SessionRegistry.current_session = session
|
24
|
+
end
|
25
|
+
|
26
|
+
def current_adaptor=(adaptor)
|
27
|
+
self.current_session = Neo4j::Core::CypherSession.new(adaptor)
|
28
|
+
end
|
29
|
+
|
30
|
+
def run_transaction(run_in_tx = true)
|
31
|
+
Neo4j::Transaction.run(current_session, run_in_tx) do |tx|
|
32
|
+
yield tx
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def new_transaction
|
37
|
+
Neo4j::ModelSchema.validate_model_schema!
|
38
|
+
Neo4j::Transaction.new(current_session)
|
39
|
+
end
|
40
|
+
|
41
|
+
def new_query(options = {})
|
42
|
+
Neo4j::ModelSchema.validate_model_schema!
|
43
|
+
Neo4j::Core::Query.new({session: current_session}.merge(options))
|
44
|
+
end
|
45
|
+
|
46
|
+
def magic_query(*args)
|
47
|
+
if args.empty? || args.map(&:class) == [Hash]
|
48
|
+
ActiveBase.new_query(*args)
|
49
|
+
else
|
50
|
+
ActiveBase.current_session.query(*args)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def current_transaction
|
55
|
+
Neo4j::ModelSchema.validate_model_schema!
|
56
|
+
Neo4j::Transaction.current_for(current_session)
|
57
|
+
end
|
58
|
+
|
59
|
+
def label_object(label_name)
|
60
|
+
Neo4j::Core::Label.new(label_name, current_session)
|
61
|
+
end
|
62
|
+
|
63
|
+
def logger
|
64
|
+
@logger ||= (Neo4j::Config[:logger] || Logger.new(STDOUT))
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'active_support/per_thread_registry'
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module ActiveBase
|
5
|
+
# Provides a simple API to manage sessions in a thread-safe manner
|
6
|
+
class SessionRegistry
|
7
|
+
extend ActiveSupport::PerThreadRegistry
|
8
|
+
|
9
|
+
attr_accessor :current_session
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/neo4j/active_node.rb
CHANGED
@@ -44,11 +44,12 @@ module Neo4j
|
|
44
44
|
include Neo4j::ActiveNode::Scope
|
45
45
|
include Neo4j::ActiveNode::Dependent
|
46
46
|
include Neo4j::ActiveNode::Enum
|
47
|
-
include Neo4j::Shared::PermittedAttributes
|
48
47
|
|
49
48
|
def initialize(args = nil)
|
50
|
-
|
51
|
-
|
49
|
+
self.class.ensure_id_property_info! # So that we make sure all objects have an id_property
|
50
|
+
|
51
|
+
symbol_args = args.is_a?(Hash) ? args.symbolize_keys : args
|
52
|
+
super(symbol_args)
|
52
53
|
end
|
53
54
|
|
54
55
|
def neo4j_obj
|
@@ -68,9 +69,12 @@ module Neo4j
|
|
68
69
|
included do
|
69
70
|
include Neo4j::Timestamps if Neo4j::Config[:record_timestamps]
|
70
71
|
|
71
|
-
def self.inherited
|
72
|
-
|
72
|
+
def self.inherited?
|
73
|
+
!!@inherited
|
74
|
+
end
|
73
75
|
|
76
|
+
def self.inherited(other)
|
77
|
+
other.instance_variable_set('@inherited', true)
|
74
78
|
inherit_id_property(other)
|
75
79
|
attributes.each_pair do |k, v|
|
76
80
|
other.inherit_property k.to_sym, v.clone, declared_properties[k].options
|
@@ -81,22 +85,10 @@ module Neo4j
|
|
81
85
|
end
|
82
86
|
|
83
87
|
def self.inherit_id_property(other)
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
other.id_property id_prop[:name], conf
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
Neo4j::Session.on_next_session_available do |_|
|
93
|
-
next if manual_id_property?
|
94
|
-
id_property :uuid, auto: :uuid unless self.id_property?
|
95
|
-
|
96
|
-
name = Neo4j::Config[:id_property]
|
97
|
-
type = Neo4j::Config[:id_property_type]
|
98
|
-
value = Neo4j::Config[:id_property_type_value]
|
99
|
-
id_property(name, type => value) if name && type && value
|
88
|
+
return if other.manual_id_property? || !self.id_property?
|
89
|
+
id_prop = self.id_property_info
|
90
|
+
conf = id_prop[:type].empty? && id_prop[:name] != :neo_id ? {auto: :uuid} : id_prop[:type]
|
91
|
+
other.id_property id_prop[:name], conf, true
|
100
92
|
end
|
101
93
|
end
|
102
94
|
|
@@ -37,12 +37,12 @@ module Neo4j
|
|
37
37
|
|
38
38
|
def unique_nodes_query(association, self_identifer, other_node, other_rel)
|
39
39
|
query.with(identity).proxy_as_optional(source_object.class, self_identifer)
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
40
|
+
.send(association.name, other_node, other_rel)
|
41
|
+
.query
|
42
|
+
.with(other_node)
|
43
|
+
.match("()#{association.arrow_cypher(:orphan_rel)}(#{other_node})")
|
44
|
+
.with(other_node, count: 'count(*)')
|
45
|
+
.where('count = {one}', one: 1)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|