neo4j 7.2.3 → 8.0.0.alpha.1
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/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
|
[](http://travis-ci.org/neo4jrb/neo4j) [](https://coveralls.io/r/neo4jrb/neo4j?branch=master) [](https://codeclimate.com/github/neo4jrb/neo4j) [](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
|