All notable changes to this project will be documented in this file. This file should follow the standards specified on [http://keepachangelog.com/] This project adheres to Semantic Versioning.
- migrated to zeitwerk
- rails 7.1 support
- caching of has one relationships
- Added support for cypher UNION
- Fixed an issue with keyword arguments on jruby-9.3 when none were passed
- support for keyword arguments in scopes
- Fixed issue with psych #1684 (Thanks @chytreg)
- support for neo4j:schema:dump and :load for neo4j 4 and 5. No automatic migration of schema on major neo4j upgrades. Schema must be regenerated with neo4j:schema:dump or manually adjusted to new syntax on those upgrades.
- support for pure ruby driver, neo4j-ruby-driver 4.4
- support for neo4j 5
- moved migrations into their own transactions
- Uniqueness within a scope defined by a proc
- Fixed lost @rel_var when branching QueryProxy
- Fixed issue where some has_one relationships where incorrectly deleted disregarding direction
- It changes the relationship length assignment in query proxy eagerloading module to be consistent with query proxy relationship length syntax.
- support for neo4j 4.1, 4.2, 4.3
- support for ruby 3.0.0
- fixed bad require (#1634)
- removed unused exception class (Thanks @joshjordan)
- prevented after_commit callbacks from being called multiple times (Thanks @joshjordan)
- fixed incorrect id comparison, which could result in lost relationships (#1611)
- brought back BigDecimalConverter
- fixed rails template (Thanks @ekampp)
- neo4j 4.0 support (default database only)
- dropped support for neo4j 3.3 or earlier
- full bolt support
- full causal cluster support
- removal of http support
- removal of embedded support (neo4j embedded is still supported via bolt)
- support for a neo4j ruby driver with an api of the official drivers
- discontinuation of the
neo4j-core
gem. Its functionality is replaced partially byneo4j-ruby-driver
and partially byactivegraph
- higher naming consistency with
activerecord
and the officialneo4j-java-driver
- configuration more consistent with
activerecord
- changed transaction API
- support for sessions with bookmarks and read and write transaction
- enforcing has one constraint on relationships
- better handling of has_many (no deletion and recreation)
- executing association callbacks on relationship deletion
- Fixed duplicate records with with_associations on QueryProxy. (#1576)
- support for activemodel and activesupport version 6 (thanks @mrhardikjoshi)
- fixed cypher generation for
remove_property
(thanks @lshimokawa) - cleaned up deprecations, unused files and badges (thanks @olleolleolle)
- Enforces has_one uniqness constraint on relationship with config flag. (#1566)
- Restricting activemodel and activesupport version to < 6.0.
- Made neo4j_community gem a development dependency rather than a runtime dependency.
- Reverse has_one relationships with ActiveRel (thanks @amitsuryavanshi / #1560)
- Variable length relatinships in eager laoding (thanks @amitsuryavanshi / #1545)
- fixed
wait_for_connection
(thanks @ayghor / see #1540) - Reverse has_one relationships (thanks @amitsuryavanshi / #1548)
- Missing require 'forwardable' (thanks @jschulenklopper / #1535)
verbose_query_logs
configuration option to allow outputting of source location of queries- Adaptor classes loaded dynamically on demand
- Optionally specify the full adaptor class name instead of session type only (supports driver adaptor)
- Wrong conflicting node aliases on same
branch
usage (see #1526) - Incorrect order when
order
andwith_associations
are used together ScopeEvalContext
redirects now all method missing calls to QueryProxy or Target
- Scopes will now automatically show up on instances as well as classes / proxies
- BigDecimal handling on properties (thanks @klobuczek / see #1507)
- Rescue when node labels cause a LoadError in addition to a NameError (thanks @Grafikart / see #1500)
- Introduced a fix to account for the fact that
ActiveModel
now returns a frozenHash
forchanged_attributes
(thanks @anamba and subvertallchris / see #1496 and #1499)
- Fixed .first and .last methods for QueryProxyMethods (thanks @kopylovvlad / see #1494)
- Ability to create association with
labels: false
by default (thanks @thefliik / see #1485)
- Micro-optimizations which help when dealing with a lot of data (thanks @jgaskins / see #1490)
- Micro-optimizations which help when dealing with a lot of data (thanks @jgaskins / see #1490)
- Created helpful error message to AssociationTree (thanks @thefliik / see #1488)
- Adding link to
CHANGELOG.md
as shown on https://olivierlacan.com/posts/changelogs-on-rubygems-org/
- Performance improvement for attributes (thanks @jgaskins / see #1487)
- Fixed issue with
ActiveRel.find
for when the ID isn't there (thanks @lshimokawa / WARNING: Use ofActiveRel.find
is NOT recommended, see #1482)
- Fixed issue with Rails 5.1 where
neo4j_config.session
refers to the wrong this (thanks @RicardoTrindade / see #1471 and #1475)
- Issue where the order of
ORDER BY
was from.order
method was not being respected for chains withwith_association
(thanks @klobuczek / see #1454)
- Model.find will, when raising an error about not being able to find the object, now call
inspect
on the ID value to make it clearer what the error is about (thanks @anamba / see #1314)
- Add
rel_where_not
to allow negative filtering of relationships (thanks @pmaite88 / see #1446)
- Fix "Variable
other_rel
not defined" error when destroying objects with adependent: :delete_orphans
associations (thanks @nearapogee, @TyGuy, and @leehericks / see #1395)
- Ensure
RecordNotFound
consistent in providing the model (thanks @leviwilson / see #1442)
- Ensure
branch
andwith_association
methods propagatedistinct
(thanks @klobuczek / see #1438)
- Change YAML.safe_load call in
neo4j:schema:load
rake task to allow Symbols (thanks @evanob / see #1439)
- Ensure branch method propagates with_association_tree context (brought forward from 8.3.1. Thanks @klobuczek / see #1437)
- Accidental release
- Properties defined on a superclass after the subclass has been defined will now take effect on the subclass (intended to be released in 9.0.0) (thanks @thefliik / see #1428)
- By default,
enum
values are now case-insensitive (but there are local and global_case_sensitive
options see the docs) (thanks @thefliik / see #1419)
- Ensure
branch
andwith_association
methods propagatedistinct
(thanks @klobuczek / see #1438)
- Change YAML.safe_load call in
neo4j:schema:load
rake task to allow Symbols (thanks @evanob / see #1439)
- Ensure branch method propagates with_association_tree context (thanks @klobuczek / see #1437)
- Accidental release
- Allow
chainable: true
option when callinghas_one
associations to start chaining (thanks @thefliik / see #1422)
- Error when using
pluck(:id)
on an association which has an array argument formodel_class
(thanks @thefliik / see #1426)
- Fixes ability to run
rails destroy model
andrails destroy migration
(thanks @thefliik / see #1420)
- Scopes now work when inherited three or more levels deep (see #1415, #1413, #1412 / thanks @thefliik)
- Allow enums to be created without associated indexes (thanks @thefliik / see #1411)
- Bringing forward changes from 8.1.x
- Ability to load nested associations with one query using
with_associations
(big thanks to @klobuczek / see #1398)
- Make sure that we handle the state of the SchemaMigration correctly when we get failures in non-transactional migrations (see #1383 / thanks @leviwilson and @ProGM)
- Issue where node Cypher variable could change during a
branch
(see issue #1348 / thanks @klobuczek for the report)
ActiveRel
.first
/.last
aren't dependable for ordering in Neo4j enterprise, so fixed test (be aware that using.first
/.last
are not recommended inActiveRel
) (see #1396 / thanks @klobuczek)- Labels for models are now returned alphabetically (see #1396 / thanks @klobuczek)
- JSON serialization is fixed for
String
and objects in general which respond toto_json
(see #1397 / thanks @leviwilson)
- Populates relationship with with already retrieved node (see #1393 / thanks @klobuczek)
- Comment to the top of the
schema.yml
file to help explain it's presence
- Issue where
neo4j:schema:load
rake task would set schema migration properties asversion
rather thanmigration_id
- Support for jRuby 1.7.x
- Created
neo4j:schema:dump
andneo4j:schema:load
rake tasks to createschema.yml
files which can be checked into the repository for quick setup of a fresh database
- Removed
before
andafter
callback options from associations (model callbacks still exist)
- Migration name when generating a model shouldn't be the same as the model (see #1387 / thanks @thefliik and @apotonick)
- Don't lock out Rails 5.1 in
gemspec
- Don't lock out Rails 5.1 in
gemspec
- Error message for getting distinct on count was not clear
- Simple change to description in gemspec file to remove "Ruby on Rails" and "Rack" as the gem can be use in any Ruby-based script / application
- Removed
put(s|c)
statements to avoid issues with background jobs (thanks @andyweiss1982 and @sureshblp71)
- Sessions in the
neo4j
gem are automatically set to havewrap_level: :proc
to ensure that nodes and relationships are wrapped in models (even if you aren't using Rails)
- Fix issue where an association (which hasn't been accessed) is accessed from an ActiveNode callback
- Fix more Ruby 2.4 deprecations re: Integer (see #1363 / thanks @jboler)
- Support
to_ary
on association proxies to help support serializers (thanks @gnapse / see #1362)
- Performance and response consistency improvements to
exists?
methods
- Fix Ruby 2.4 deprecations re: Integer (see #1360 / thanks @jboler)
- Rake tasks broken without Rails (thanks @CoralineAda, @phreakocious, and @Joshfindit, see #1330, #1331, and #1353)
- When invalid session type is given, an exception will be raised to aid debugging (see #1335 / thanks @Joshfindit)
- Fixed/refactored
wait_for_connection
- Fixed/refactored
wait_for_connection
- Camelization of class names for migrations should now match the snake case of the migration file name (see #1329)
- Use UTC timezone for timestamps on migration files
NO CHANGES FROM 8.0.0.rc.4
find_or_create_by
on an association does not look for nodes which aren't related to the node in question (thanks for the report @efatsi / see #1240)
- Inconsistent
drop_constraint
anddrop_index
behavior: they were acceptingforce
option (likeadd_*
methods) PendingMigrationError
not showing pending migrations versions- Fixed
silenced: true
forNeo4j::Migration::Runner
option, not working properly - Removed "strange" inheritance between Neo4j::Migrations::Base and the legacy Neo4j::Migration class
- Avoid creating the
SchemaMigration
model constraint when it already exists
distinct
method for QueryProxy (thanks @ProGM / see #1305)- Added
update_node_property
/update_node_properties
(aliased asupdate_column
/update_columns
)
- Pending migration check was failing when there are no migrations
- Pending migrations check, now using a Rack Middleware instead of failing on startup (thanks @ProGM / see #1300)
- Add support for undeclared properties on specific models (see #1294 / thanks @klobuczek)
- Add
update_node_property
andupdate_node_properties
methods, aliased asupdate_column
andupdate_columns
, to persist changes without triggering validations, callbacks, timestamps, etc,...
- Allow multiple arguments to scopes (see #1297 / thanks @klobuczek)
- Fixed validations with unpersisted nodes (see #1293 / thanks @klobuczek & @ProGM)
- Fixed various association bugs (see #1293 / thanks @klobuczek & @ProGM)
- Fix
as
losing the current query chain scope (see #1298 and #1278 / thanks @ProGM & @ernestoe)
- Don't fire database when accessing to unpersisted model associations (thanks @klobuczek & @ProGM see #1273)
size
andlength
methods not taking account of@deferred_objects
(see #1293)update
was not rolling-back association changes when validations fail- Broken Rails
neo4j:migrate_v8
generator
count
method in associations, now always fire the database like AR does- Neo4j now passes all association validations specs, taken from AR (thanks @klobuczek)
- Remove blank objects from association results to be compatible with
ActiveRecord
(see #1276 / thanks klobuczek) - Allow https scheme in the NEO4J_URL (see #1287 / thanks jacob-ewald)
- String / symbol issue for session types in railtie
- Put in fix for allowing models to reload for wrapping nodes / relationshps
- Issues with railtie
- Multiple sessions in Rails config no longer supported
- Instead of using
session_type
,session_url
,session_path
, andsession_options
in configsession.type
,session.url
,session.path
, andsession.options
should now be used. - Issue where
session_url
(nowsession.url
) was not working - Broken sessions when threading
- Various issues with not be able to run migrations when migration were pending (see 22b7e6aaadd46c11d421b4dac8d3fb15f663a4c4)
- A
Neo4j::Migrations.maintain_test_schema!
method, to keep the test database up to date with schema changes. (see #1277) - A
Neo4j::Migrations.check_for_pending_migrations!
method, that fails when there are pending migration. In Rails, it's executed automatically on startup. (see #1277) - Support for
ForbiddenAttributesProtection
API from ActiveRecord. (thanks ProGM, see #1245)
ActiveNode#destroy
andActiveRel#destroy
now return the object in question rather thantrue
to be compatible withActiveRecord
(see #1254)
- Bugs with using
neo_id
asActiveNode
id_property
(thanks klobuczek / see #1274)
- Improve migration output format / show execution time in migrations
- Caching of model index and constraint checks
- Error when running schema migrations. Migrations now give a warning and instructions if a migration fails and cannot be recovered
- Error when running rake tasks to generate "force" creations of indexes / constraints and there is no migration directory
WARNING
is no longer displayed for constraints defined fromid_property
(either one which is implict or explict)
- Improved
QueryProxy
andAssociationProxy
#inspect
method to show a result preview (thanks ProGM / see #1228 #1232) - Renamed the old migration task to
neo4j:legacy_migrate
- Renamed the ENV variable to silence migrations output from
silenced
toMIGRATIONS_SILENCED
- 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) - Invalid options to the
property
method now raise an exception (see #1169) - Label #indexes/#constraints return array without needing to access [:property_keys]
server_db
server type is no longer supported. Usehttp
instead to connect to Neo4j via the HTTP JSON API
- Allow to pass a Proc for a default property value (thanks @knapo / see #1250)
- Adding a new ActiveRecord-like migration framework (thanks ProGM / see #1197)
- Adding a set of rake tasks to manage migrations (thanks ProGM / see #1197)
- Implemented autoloading for new and legacy migration modules (there's no need to
require
them anymore) - Adding explicit identity method for use in Query strings (thanks brucek / see #1159)
- New adaptor-based API has been created for connecting to Neo4j (See the upgrade guide). Changes include:
- The old APIs are deprecated and will be removed later.
- 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 - New
Neo4j::Core::Node
andNeo4j::Core::Relationshp
classes have been created to provide consistent results between adaptors.Neo4j::Core::Path
has also been added - New API is centered around Cypher. No special methods are defined to, for example, load/create/etc... nodes/relationships
- There is now a new API for making multiple queries in the same HTTP request
- It is now possible to subscribe separately to events for querying in different adaptors and for HTTP requests (see the docs)
- Schema queries (changes to indexes/constraints) happen in a separate thread for performance and reduce the complexity of the code
- New session API does not include replacement for on_next_session_available
- Adding a migration helper to mass relabel migrations (thanks @JustinAiken / see #1166 #1239)
- Added support for
find_or_initialize_by
andfirst_or_initialize
methods from ActiveRecord (thanks ProGM / see #1164) - Support for using Neo4j-provided IDs (
neo_id
) instead of UUID or another Ruby-provided ID. (Huge thanks to @klobuczek, see #1174)
- Made some memory optimizations (thanks ProGM / see #1221)
as
resetting scope of the current query chain (see #1298)
where
clause with question mark parameter and array values only using the first element (see #1247 #1290)
- During ActiveRel create, node and rel property values formatted like Cypher props (
{val}
) were interpreted as props, causing errors.
- Backporting #1245 to 7.x versions. It implements the
ForbiddenAttributesProtection
API from ActiveRecord.
where
clause with question mark parameter and array values only using the first element (see #1247 #1290)
- Default value for
enum
isnil
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 (thanks to ProGM and andyweiss1982)
- Fixed issue where the label wrapping cache would get stuck
AssociationProxy
changed so thatpluck
can be used in rails/acivesupport 5 (thanks ProGM / see #1243)
- Gemspec dependency requirements were modified where ActiveModel, ActiveSupport, and Railties are concerned. The gem now requires >= 4.0, < 5.1.
ActiveModel::Serializers::Xml
is only included if supported if available.
where
clause with question mark parameter and array values only using the first element (see #1247 #1290)
- Default value for
enum
isnil
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 (thanks to ProGM and andyweiss1982)
- Bug in setting
NEO4J_TYPE
(thanks bloomdido / see #1235)
- Bug where models weren't being loaded correctly by label (thanks bloomdido / see #1220)
- Fix dipendence from JSON when using outside of rails (thanks ProGM)
- Calling
.create
on associations shouldn't involve extra queries (thanks for the report from rahulmeena13 / see #1216)
- Fix to parens in Cypher query for
with_associations
for Neo4j 3.0 (thanks ProGM / see #1211)
- Fix to
find_in_batches
(thanks to ProGM / see #1208)
- Allow models to use their superclass' scopes (forward-ported from 6.1.11 / thanks to veetow for the heads-up / see #1205)
- Explination about why you can't have an index and a constraint at the same time
- Added parens to delete_all query to support new required syntax in Neo4j 3.0
- A bug/inconsistency between ActiveNode's class method
create
and instancesave
led to faulty validation of associations in some cases.
- Added parens to queries to support new required syntax in Neo4j 3.0
- Multiparameter Attributes for properties of type
Time
were failing due to a hack that should have been removed withActiveAttr
's removal - Rel creation factory was not using backticks around rel type during create action.
- Conversion of string values from form inputs (thanks to jbhannah / see #1163)
No changes from rc.7
with_associations
now generates separateOPTIONAL MATCH
clauses, separated byWITH
clauses and is preceeded by aWITH
clause.
- Question mark methods (
node.foo?
) broke when ActiveAttr was removed
- Fixed issue where backticks weren't being added to where clauses for
with_associations
- Catching errors for 404s in Rails (thanks ProGm, see #1153)
- Allow for array values when querying for enums (i.e.
where(enum_field: [:value1, :value2])
) (see #1150)
- Issue where creating relationships via
has_one
association created two relationships (forward ported from 6.0.7 / 6.1.9)
- All explicit dependencies on
ActiveAttr
code that was not removed outright can now be found in theNeo4j::Shared
namespace. - All type conversion uses Neo4j.rb-owned converters in the
Neo4j::Shared::TypeConverters
namespace. This is of particular importance whereBoolean
is concerned. Where explicitly usingActiveAttr::Typecasting::Boolean
, useNeo4j::Shared::Boolean
. Neo4j::Shared::TypeConverters.converters
was replaced withNeo4j::Shared::TypeConverters::CONVERTERS
.- Error classes refactor: All errors now inherits from
Neo4j::Error
. All specificInvalidParameterError
were replaced with a more genericNeo4j::InvalidParameterError
. - When calling
Node.find(...)
with missing ids,Neo4j::RecordNotFound
now returns a better error message and some informations about the query.
- Ran transpec and fixed error warning (thanks brucek / #1132)
- A number of modules and unit tests were moved directly from the ActiveAttr gem, which is no longer being maintained.
ActiveNode
models now respond toupdate_all
(thanks ProGM / #1113)- Association chains now respond to
update_all
andupdate_all_rels
(thanks ProGM / #1113) - Rails will now rescue all
Neo4j::RecordNotFound
errors with a 404 status code by default - A clone of ActiveRecord::Enum API. See docs for details. (thanks ProGM / #1129)
- Added #branch method to
QueryProxy
to allow for easy branching of matches in association chains (thanks ProGM / #1147 / #1143) - The
.match
method on ActiveNode model class has changed to allow a second argument which takeson_create
,on_match
, andset
keys. These allow you to define attribute values for the CypherMERGE
in the different cases (thanks leviwilson / see #1123)
- All external ActiveAttr dependencies.
- All
call
class methods from Type Converters. Useto_ruby
instead. Neo4j::ActiveNode::Labels::InvalidQueryError
, since it's unused.
- Fix to
find_in_batches
(thanks to ProGM / see #1208)
- Allow models to use their superclass' scopes (thanks to veetow for the heads-up / see #1205)
- Fixed issue where backticks weren't being added to where clauses for
with_associations
- Issue where creating relationships via
has_one
association created two relationships (forward ported from 6.0.7)
- The
@attributes
hash of the first node of each class returned from the database would have have the wrong id property key. This did not appear to cause any problems accessing the value and would be normal for subsequent saves of the affected node as well as all other nodes.
- Bug related to creating subclassed nodes alongside rels in ActiveRel. (#1135. Thanks, brucek!)
wait_for_connection
configuration variable allows you to tell the gem to wait for up to 60 seconds for Neo4j to be available. This is useful in environments such as Docker Compose
- Calls to
.find
/.find_by_id
/.find_by_ids
now respect scopes and associations
- Model generators now respect module namespaces (thanks to michaeldelorenzo in #1119)
- Issue where
ActiveRel.create
would not work withRelatedNode
(rel.from_node
) instances (Thanks, djvs #1107)
- Issue where
inspect
failed outside of Rails (Thanks to louspringer, #1111)
- Fixed version requirement for
neo4j-core
in gemspec
- When a
model_class
is specified on an association which is not an ActiveNode model, an error is raised - The
model_class
option on associations can no longer be aClass
constant (should be a String, Symbol, nil, false, or an Array of Symbols/Strings) - The
rel_class
option on associations can no longer be aClass
constant (should be a String, Symbol, or nil) - The
from_class
andto_class
arguments can no longer be aClass
constant (should be a String, Symbol, :any, or false) - ActiveNode and ActiveRel models can now be marshaled (thanks to jhoffner for the suggestion in #1093)
- Inheritance of properties in ActiveRel is fixed (see #1080)
config/neo4j.yml
now renders with an ERB step (thanks to mrstif via #1060)#increment
,#increment!
and#concurrent_increment!
methods added to instances of ActiveNode and ActiveRel (thanks to ProGM in #1074)
- Fix to
find_in_batches
(thanks to ProGM / see #1208)
- Fixed issue where backticks weren't being added to where clauses for
with_associations
- Issue where creating relationships via
has_one
association created two relationships
- Issue where
inspect
failed outside of Rails (Thanks to louspringer, #1111)
- If a property and a scope have the same name, a "Stack level too deep" error occurs. Fixed by removing the instance method which scopes define. Could break something, but I very much doubt anybody is using this, and if they are it's likely a bug (#1088)
- When a
model_class
is specified on an association which is not an ActiveNode model, an error is raised
- Fixed issue where find_or_create was prioritizing property`s default value rather than what was being passed in (Thanks to brucek via #1071)
- Fixed issue where association setting can't be set on initialize via #new (#1065)
#with_associations
should use multipleOPTIONAL MATCH
clauses instead of one so that matches are independent (behavior changed in Neo4j 2.3.0) (forward ported from 5.2.15)
- Refactor unpersisted association logic to store objects directly on the object rather than the association proxy since different association proxies may be created at different times (see #1043)
- Following a '#with' with a '#count' no longer causes issues with variables specified twice
- Removed extra
MATCH
which occurs fromproxy_as
calls
QueryProxy#<<
and#create
, whenrel_class
option is set, will useRelClass.create!
instead ofcreate
to alert the user of failed rel creations.
This release contains no changes since the last alpha. Below are all modifications introduced in alpha releases.
_classname
property has been completely removed, officially dropping support for Neo4j < 2.1.5.ActiveRel#creates_unique
and the:unique
Association option take arguments to control how the query is built. See #1038.#<<
and#create
methods on associations now create with therel_class
when available so that validations/callbacks/defaults are all used as expected- Allow calling of
#method=
methods via modelnew
methodHash
argument - Remove uniqueness validation for
id_property
because we already have Neo4j constraints - Improved eager loading when no with_associations is specified (see #905)
- Change size and length so that they match expected Ruby / ActiveRecord behavior (see http://stackoverflow.com/questions/6083219/activerecord-size-vs-count and #875)
- Refactoring around indexing and constraints in
Neo4j::ActiveNode
. The public interfaces are unchanged. Neo4j::Shared::DeclaredPropertyManager
was renamedNeo4j::Shared::DeclaredProperties
. All methods referencing the old name were updated to reflect this.- Methods that were using
Neo4j::Session#on_session_available
were updated to reflect the upstream change toon_next_session_available
. rel_where
will now use ActiveRel classes for type conversion, when possible.- Converters will look for a
converted?
method to determine whether an object is of the appropriate type for the database. This allows converters to be responsible for multiple types, if required. - Removed the ability to set both an exact index and unique constraint on the same property in a model. Unique constraints also provide exact indexes.
- Deprecated all methods in ActiveRel's Query module except for those that allow finding by id.
- Return
true
on successful#save!
calls (Thanks to jmdeldin)
- Optional three-argument signature for
ActiveRel#create
and#create!
, just likeinitialize
. - Alternate
ActiveRel
init syntax:RelClass.new(from_node, to_node, args)
. This is optional, so giving a single hash with props with or without nodes is still possible. ActiveRel
create
actions can now handle unpersisted nodes.rel_order
method for association chaining- Support
config/neo4j.yaml
- Look for ENV variables for Neo4j URL / path for Rails apps
- New classes for schema operations, predictably called
Neo4j::Schema::Operation
and subclassesUniqueConstraintOperation
andExactIndexOperation
. These provide methods to aid in the additional, removal, and presence checking of indexes and constraints. - A few methods were added to
Neo4j::Shared::DeclaredProperties
to make it easier to work with. In particular,[key]
acts as a shortcut forDeclaredProperties#registered_properties
. - Type Converters were added for String, Integer, Fixnum, BigDecimal, and Boolean to provide type conversion for these objects in QueryProxy.
- Support for Array arguments to ActiveRel's
from_class
andto_class
.
- Regression RE: properties being overwritten with their defaults on save in alpha.10.
- Long properties in
ActiveNode
/ActiveRel
#inspect
are truncated - Property defaults are set initially when an instance of a model is loaded, then checked again before save to ensure
valid?
works. QueryProxy
was not converting Boolean properties correctly- Certain actions that were intended as once-in-the-app's-lifetime events, notably schema operations, will only occur immediately upon the first session's establishment.
- Context now set for Model.all QueryProxy so that logs can reflect that it wasn't just a raw Cypher query
- Railtie was removing username/password and putting them into the session options. This has been unneccessary in
neo4j-core
for a while now
_classname
property has been completely removed, officially dropping support for Neo4j < 2.1.5.ActiveRel#creates_unique
and the:unique
Association option take arguments to control how the query is built. See #1038.
- Optional three-argument signature for
ActiveRel#create
and#create!
, just likeinitialize
.
- Regression RE: properties being overwritten with their defaults on save in alpha.10.
#<<
and#create
methods on associations now create with therel_class
when available so that validations/callbacks/defaults are all used as expected- Allow calling of
#method=
methods via modelnew
methodHash
argument
- Alternate
ActiveRel
init syntax:RelClass.new(from_node, to_node, args)
. This is optional, so giving a single hash with props with or without nodes is still possible.
- Long properties in
ActiveNode
/ActiveRel
#inspect
are truncated - Property defaults are set initially when an instance of a model is loaded, then checked again before save to ensure
valid?
works.
ActiveRel
create
actions can now handle unpersisted nodes.
uninitialized constant Neo4j::Core::CypherSession
error
rel_order
method for association chaining
- Remove uniqueness validation for
id_property
because we already have Neo4j constraints
- Support
config/neo4j.yaml
- Improved eager loading when no with_associations is specified (see #905)
- Change size and length so that they match expected Ruby / ActiveRecord behavior (see http://stackoverflow.com/questions/6083219/activerecord-size-vs-count and #875)
QueryProxy
was not converting Boolean properties correctly
- Railtie was removing username/password and putting them into the session options. This has been unneccessary in
neo4j-core
for a while now
- Look for ENV variables for Neo4j URL / path for Rails apps
- Refactoring around indexing and constraints in
Neo4j::ActiveNode
. The public interfaces are unchanged. Neo4j::Shared::DeclaredPropertyManager
was renamedNeo4j::Shared::DeclaredProperties
. All methods referencing the old name were updated to reflect this.- Methods that were using
Neo4j::Session#on_session_available
were updated to reflect the upstream change toon_next_session_available
. rel_where
will now use ActiveRel classes for type conversion, when possible.- Converters will look for a
converted?
method to determine whether an object is of the appropriate type for the database. This allows converters to be responsible for multiple types, if required. - Removed the ability to set both an exact index and unique constraint on the same property in a model. Unique constraints also provide exact indexes.
- Deprecated all methods in ActiveRel's Query module except for those that allow finding by id.
- Return
true
on successful#save!
calls (Thanks to jmdeldin)
- New classes for schema operations, predictably called
Neo4j::Schema::Operation
and subclassesUniqueConstraintOperation
andExactIndexOperation
. These provide methods to aid in the additional, removal, and presence checking of indexes and constraints. - A few methods were added to
Neo4j::Shared::DeclaredProperties
to make it easier to work with. In particular,[key]
acts as a shortcut forDeclaredProperties#registered_properties
. - Type Converters were added for String, Integer, Fixnum, BigDecimal, and Boolean to provide type conversion for these objects in QueryProxy.
- Support for Array arguments to ActiveRel's
from_class
andto_class
.
- Certain actions that were intended as once-in-the-app's-lifetime events, notably schema operations, will only occur immediately upon the first session's establishment.
- Context now set for Model.all QueryProxy so that logs can reflect that it wasn't just a raw Cypher query
#with_associations
should use multipleOPTIONAL MATCH
clauses instead of one so that matches are independent (behavior changed in Neo4j 2.3.0)
- Fixed
#after_initialize
and#after_find
callbacks. - The
#touch
method should to raise errors when unsuccessful and avoid#attributes
for performance.
- Fix the
#touch
method forActiveNode
andActiveRel
- Unable to give additional options as first argument to chained QueryProxy method
has_one
does not define_id
methods if they are already defined. Also usemethod_defined?
instead ofrespond_to?
since it is at the class level
- Better error message for
ActiveRel
creation when from_node|to_node is not persisted
- Support
references
in model/scaffold generators
- Allow for association
model_class
to be prepended with double colons
- Fixed issue where caching an association causes further queries on the association to return the cached result
- Regression in last release caused properties to revert to default on update if not present in the properties for update
- Use
debug
log level for query logging updated_at
properties were not being added upupdate
events, only updated.- Default values of Boolean properties were not being set when
default: false
props_for_update
was using String keys instead of Symbols, likeprops_for_update
props_for_create
andprops_for_update
were not adding default property values to the hash.- ActiveNode's
merge
andfind_or_create
methods were not setting default values of declared properties whenON CREATE
was triggered. The code now usesprops_for_create
.
Added bugfixes from 5.1.4 and 5.1.5 that were missed in earlier 5.2.x releases:
AssociationProxy
now responds toserializable_hash
so thatinclude
can be used inrender json
in Rails controllers- Fixed errors when trying to call
#{association}_ids=
on an unpersisted node with UUIDs or an array thereof. - Removed extra Cypher query to replace relationships when working with unpersisted nodes and association=.
- Bug related to Rails reloading an app and returning nodes without first reinitializing models, resulting in CypherNodes.
- Fixed setting of association(_id|_ids) on .create
- Now possible to configure
record_timestamps
with railsconfig
props_for_persistence
,props_for_create
,props_for_update
instance methods for all nodes and rels. Each returns a hash with properties appropriate for sending to the database in a Cypher query to create or update an object.- Added
record_timestamps
configuration do default allActiveNode
andActiveRel
models to havecreated_at
andupdated_at
timestamps (from #939, thanks @rebecca-eakins) - Added
timestamp_type
configuration to specify how timestamps should be stored (from #939, thanks @rebecca-eakins)
- Methods related to basic node and rel persistence (
save
,create_model
,_create_node
, others) were refactored to make the processes simpler, clearer, and slightly faster. - Unit test directory structure was rearranged to mirror the
lib
directory.
has_one
associations are now properly cached (likehas_many
associations)QueryProxy
now responds to#to_ary
. Fixes integration with ActiveModelSerializer gem
- When association has
model_class
andtype: false
the association doesn't work (see: #930)
- Fixed a bug where the
Neo4j::Timestamps
mixin was not able to be included
- Associations defined in ActiveNode models will delegate
unique?
to the model set inrel_class
. This makes it easier for the rel class to act as the single source of truth for relationship behavior.
- ActiveRel:
#{related_node}_neo_id
instance methods to match CypherRelationship. Works with start/from and end/to. - ActiveRel:
type
now has a new alias,rel_type
. You might recognize this from the(Cypher|Embedded)Relationship
class and ActiveNode association option. - Contributing to the gem? Rejoice, for it now supports Dotenv.
- Ability to use
#where_not
method onActiveNode
/QueryProxy
- Added a
before_remove_const
method to clear cached models when Railsreload!
is called. 5.0.1 included a workaround but this appears to cut to the core of the issue. See #855. - To prevent errors, changing an index to constraint or constraint to index will drop the existing index/constraint before adding the new.
- Fixed
AssociationProxy#method_missing
so it properly raises errors.
- Added ability to view
model_class
fromAssociation
class forrails_admin
Neo4j adapter - QueryProxy
where
will now look for declared properties matching hash keys. When found, it will send the value through that property's type converter if the type matches the property's unconverted state. - Improved handling of unpersisted nodes with associations. You can now use
<<
to create associations between unpersisted nodes. Asave
will cascade through unpersisted objects, creating nodes and rels along the way. See #871 - Support formatted cypher queries for easy reading by humans via the
pretty_logged_cypher_queries
configuration variable - Ability to query for just IDs on associations
- On
QueryProxy
objects you can now use an:id
key inwhere
andfind_by
methods to refer to the property fromid_property
(uuid
by default) - Added
ActiveRel.creates_unique
and deprecatedActiveRel.creates_unique_rel
- Added #inspect method to ActiveRel to show Cypher-style representation of from node, to node, and relationship type
- Added
Neo4j::Timestamps
,Neo4j::Timestamps::Created
, andNeo4j::Timestamps::Updated
mixins to add timestamp properties toActiveNode
orActiveRel
classes
- Methods related to ActiveNode's IdProperty module were refactored to improve performance and simplify the API. Existing
default_properties
methods were reworked to reflect their use as-implemented: storage for a single default property, not multiple. - Implementation adjustments that improve node and rel initialization speed, particularly when loading large numbers of objects from the database.
reload!
within Rails apps will work correctly. An earlier release included a workaround but this uses ActiveModel's system for clearing caches to provide a more thorough resolution.
- Calling
all
on a QueryProxy chain would cause the currently set node identity within Cypher to be lost.
- Backport AssociationProxy#method_missing fix to raise errors on invalid methods
- Fix the count issue on depth two associations (#881)
- Break between associations so that potential
where
clauses get applied to the correct(OPTIONAL )MATCH
clause
- Delegate
first
andlast
fromAssociationProxy
toQueryProxy
- Fix
order
behavior forfirst
andlast
inQueryProxy
- Delegate
first
andlast
fromAssociationProxy
toQueryProxy
- Fix
order
behavior forfirst
andlast
inQueryProxy
- Fix what should have been a very obvious bug in
_active_record_destroyed_behavior
behavior - Add eager loading to QueryProxy so that it works in all expected places
- "NameError: uninitialized constant Class::Date" (#852)
- Copied QueryClauseMethods doc from master
- Copied
docs
folder from master because a lot of work had gone into the docs since 5.0.0 was released
- Fix query logging so that by default it only outputs to the user in the console and development server. Logger can be changed with
neo4j.config.logger
configuration option
- Added
log_cypher_queries
configuration option so that queries aren't on by default but that they can be controlled
- Fixed bug which caused
QueryProxy
context to repeat (showed up in query logging)
- Moved
#with_associations
method fromAssociationProxy
toQueryProxy
so that allQueryProxy
chains can benefit from it. - Added
_active_record_destroyed_behavior
semi-hidden configuration variable so that behavior forActiveNode#destroyed?
andActiveRel#destroyed?
can be changed to upcoming 6.0.0 behavior (matching ActiveRecord) where the database is not accessed.
- Fix error when calling
#empty?
or#blank?
on a query chain with onorder
specified - Make
#find_each
and#find_in_batches
return the actual objects rather than the result objects - Query logging on console should be to STDOUT with
puts
. UsingRails.logger
outputs to the file in thelog
directory - Modified queryproxy include? to accept a uuid instead of full node
- Longstanding bug that would prevent association changes (
<<
and ActiveRel.create) in Rails afterreload!
had been called, see #839 - ActiveNode#inspect wasn't displaying the id_property
- Default property values and magic typecasting not being inherited correctly
- In the absense of a
model_class
key, associations defined in ActiveNode models will usefrom_/to_class
defined inrel_class
to find destination. (Huge thanks to @olance, #838) - ActiveRel's DSL was made a bit friendlier by making the
type
,from_class
andto_class
methods return their set values when called without arguments. - Reworked ActiveRel's wrapper to behave more like ActiveNode's, removing some duplicate methods and moving others to Neo4j::Shared, resulting in a big performance boost when returning large numbers of rels.
- Updated gemspec to require neo4j-core 5.0.1+
- ActiveRel was given
find_or_create_by
, usable across single associations.
- Prevented
to_key
from requiring an extra DB query. (See #827)
- QueryProxy associations accept
labels: false
option to prevent generated Cypher from using labels.
- Properties explicitly set to type
Time
will no longer be converted toDateTime
.
- Associations now allow
unique
option. Error handling is generalized to make this testable (Thanks to @olance, see #824)
- Set Ruby version requirement back to 1.9.3 because of problems with JRuby
- Ruby 2.0.0 now required (>= 2.2.1 is recommended)
- All
ActiveNode
associations now require either atype
,origin
, orrel_class
option. Only one is allowed - Defining associations will fail if unknown options are used (#796)
Model#find
fails if no node found (Model#find_by
available whennil
result desired) (#799)#find_or_create
and#merge
model class methods have been added- Ensuring that all model callbacks are happening within transactions
- Major refactoring using
rubocop
with a lot of focus on speed improvements - Specifically when loading many nodes at once we've measured 3x speed improvements
#find
onQueryProxy
objects now does a modelfind
rather than anEnumerable
find- Subclassed model classes now both create and query against it's ancestor's labels in addition to it's own (#690)
#first
and#last
now work property when precedend by an#order
in aQueryProxy
chain (#720)#count
when called after#limit
will be performed within the bounds of limit specified
- Eager Loading is now supported! See: [http://neo4jrb.readthedocs.org/en/latest/ActiveNode.html#eager-loading]
- Associations now return
AssociationProxy
objects (which areEnumerable
) which have convenient#inspect
methods for cleaner viewing in the Ruby console model_class
key on associations now supports an Array (#589)- When using
all
inside of a class method an argument for the node name can now be passed in (#737) - Query(Proxy) syntax of
where("foo = ?", val)
andwhere("foo = {bar}", bar: val)
now supported (#675) module_handling
config option now available to control how class module namespaces translate to Neo4j labels (#753) (See: [http://neo4jrb.readthedocs.org/en/latest/Configuration.html])#id_property
method has newconstraints
option to disable automatic uuid constraint (#738/#736)
(There are probably other changes too!)
Changes above this point should conform to [http://keepachangelog.com/]
- Fixes two bugs related to inheritance: one regarding ActiveRel classes and relationship types, the other regarding ActiveNode primary_key properties not being set when a model is loaded prior to Neo4j session.
- Switches use of Fixnum to Integer to improve 32-bit support
This release includes many performance fixes and new features. The most notable:
- Huge stylist cleanup/refactoring by Brian on the entire gem by Brian armed with Rubocop. See http://neo4jrb.io/blog/2014/12/29/stay-out-of-trouble.html.
- Every node create, update, and destroy is now wrapped in a transaction. See http://neo4jrb.io/blog/2015/01/06/transactions_everywhere.html.
- New
dependent
options for associations::delete
,:destroy
,:delete_orphans
,:destroy_orphans
. See http://neo4jrb.io/blog/2015/01/07/association_dependent_options.html. - New
unique: true
option for associations,creates_unique_rel
class method for ActiveRel. Both of these will result in relationship creation Cypher using "CREATE UNIQUE" instead of "CREATE". - Fixed an n+1 query issue during node creation and update.
- Dieter simplified some code related to frozen attributes. See #655. We now have a new website online at http://neo4jrb.io! Keep an eye on it for news and blogs related to this and other projects.
- Change neo4j-core dependency from 3.1.0 to 4.0.0.
- _classname property is disabled by default for ActiveRel! It had been disabled for ActiveNode, this just evens the score.
- Fixes a bug to create better
result
labels in Cypher. - Made the
delete_all
anddestroy_all
ActiveNode class methods consistent with their ActiveRecord counterparts.destroy_all
previously performed its deletes in Cypher but it should have been returning nodes to Ruby and callingdestroy
.delete_all
didn't exist at all.
Released minutes after rc.2 to catch one late addition!
- Adds serialization support for QueryProxy.
This release builds on features introduced in the first RC. We are releasing this as another RC because the API may be tweaked before release.
- New
proxy_as
for Core::Query to build QueryProxy chains onto Core::Query objects! - Using
proxy_as
, newoptional
method in QueryProxy to use theOPTIONAL MATCH
Cypher function. match_to
and methods that depend on it now support arrays of nodes or IDs.- New
rels_to
/all_rels_to
methods. - New
delete
anddestroy
methods in QueryProxy to easily remove relationships. - Serialized objects will include IDs by default.
This release introduces API changes that may be considered breaking under certain conditions. See See https://github.com/neo4jrb/neo4j/wiki/Neo4j.rb-v4-Introduction. Please use https://github.com/neo4jrb/neo4j/issues for support regarding this update! You can also reach us on Twitter: @neo4jrb (Brian) and @subvertallmedia (Chris).
- Default behavior changed: relationship types default to all caps, no prepending of "#". This behavior can be changed.
- ActiveRel models no longer require explicit calling of
type
. When missing, the model will infer a type using the class name following the same rules used to determine automatic relationship types from ActiveNode models. - _classname properties will not be added automatically if you are using a version Neo4j >= 2.1.5. Instead, models are found using labels or relationship type. This is a potentially breaking change, particularly where ActiveRel is concerned. See the link at the beginning of this message for the steps required to work around this.
- Query scopes are now chainable! Call
all
at the start of your scope or method to take advantage of this. - Changes required for Neo4j 2.2.
- Support for custom typecasters.
- New method
rel_where
, expanded behavior ofmatch_to
andfirst_rel_to
- Implemented ActiveSupport load hooks.
- Assorted performance improvements and refactoring.
- Gemspec requires the latest neo4j-core.
- Fixed a pagination bug — thanks, @chrisgogreen!
- New QueryProxy methods
match_to
andfirst_rel_to
are pretty cool. - include_root_in_json is now configurable through config.neo4j.include_root_in_json or Neo4j::Config[:include_root_in_json]. Also cool.
- There's a new
delete_all
method for QueryProxy, too. - @codebeige removed the
include?
class method, which was smart. - Did I mention we won an award from Neo Tech? Check it out. https://github.com/neo4jrb/neo4j#welcome-to-neo4jrb
- Gemspec has been updated to require neo4j-core 3.0.5
- Added
find_in_batches
- Pagination has been updated to allow better ordering. Relaunch of neo4j-will_paginate as neo4j-will_paginate_redux is imminent!
- Everything is better:
create
's handling of blocks, better behavior fromcount
, better ActiveRel from_class/to_class checks, better handling of rel_class strings, and more - Added a new find_or_create_by class method
Big thanks to new contributors Miha Rekar and Michael Perez! Also check out or Github issues, where we're discussing changes for 3.1.0. https://github.com/neo4jrb/neo4j/issues
- "Model#all" now evaluates lazily, models no longer include Enumerable
- Faster, more efficient uniqueness validations
- Adjusted many common queries to use params, will improve performance
- ActiveRel fixes: create uses Core Query instead of Core's
rels
method,{ classname: #{_classname} }
no longer inserted into every query, find related node IDs without loading the nodes - Allow inheritance when checking model class on a relation (Andrew Jones)
- Provided migrations will use Rake.original_dir instead of Rails.env to provide better compatibility with frameworks other than Rails
- rel_class option in ActiveNode models will now accept string of a model name
- Additional bug fixes
- Removed reference to neo4j-core from Gemfile and set neo4j.gemspec to use neo4j-core ~>3.0.0
No change from rc 4
- UUIDs are now automatically specified on models as neo IDs won't be reliable in future versions of neo4j
- Migrations now supported (including built-in migrations to migrate UUIDs and insert the _classname property which is used for performance)
- Association reflection
- Model.find supports ids/node objects as well as arrays of id/node objects
- rake tasks now get automatically included into rails app
- thread safety improvements
- scope and general refactoring
- Added ability to create relationships on init (persisted on save)
- Use newer neo4j-core release
- Support for count, size, length, empty, blank? for has_many relationship
- Support for rails logger of cypher queries in development
- Support for distinct count
- Optimized methods: https://github.com/andreasronge/neo4j/wiki/Optimized-Methods
- Queries should respect mapped label names (#421)
- Warn if no session is available
- Fix broken == and equality (#424)
- Bug fixes
- ActiveRel support, see Wiki pages (chris #393)
- Complete rewrite of the query api, see wiki page (#406, chris, brian)
- Performance improvements (#382,#400, #402, chris)
- idproperty - user defined primary keys (#396,#389)
- Reimplementation of Neo4j::Config
- Serialization of node properties (#381)
- Better first,last syntax (#379)
- Integration with new Query API from neo4j-core including:
-
- .query_as and #query_as methods to get queries from models (#366)
-
- .qq method for QuickQuery syntax ( https://github.com/andreasronge/neo4j/wiki/Neo4j-v3#quickquery-work-in-progress / #366)
- Before and after callbacks on associations (#373)
- .find / .all / .count changed to be more like ActiveRecord
- .first / .last methods (#378)
- .find_by / .find_by! (#375)
- Bug fix uniqueness-validator (#356 from JohnKellyFerguson)
- Many improvements, like update_attributes and validation while impl orm_adapter, Brian Underwood
- Impl orm_adapter API for neo4j so it can be used from for example devise, Brian Underwood (#355)
- Fix of inheritance of Neo4j::ActiveNode (#307)
- Expose add_label, and remove_label (#335)
- Fixed auto loading of classes bug, (#349)
- Bumped neo4j-core, 3.0.0.alpha.16
- Support for Heroku URLs, see wiki https://github.com/andreasronge/neo4j/wiki/Neo4j-v3 (#334)
- Added allow session options via 'config.neo4j.session_options' so it can run on heroku (#333)
- Relaxed Dependencies for Rails 4.1 (#332)
- Using neo4j-core version 3.0.0.alpha.12
- Implemented validates_uniqueness_of (#311)
- Using neo4j-core version 3.0.0.alpha.11
- Support for rails scaffolds
- Support for created_at and updated_at (#305)
- Support for ability to select a session to use per model (#299)
- BugFix: updating a model should not clear out old properties (#296)
- Support for both embedded (only JRuby) and server API (runs on MRI Ruby !)
- Simple Rails app now work
- Support for has_n and has_one method
- ActiveModel support, callback, validation
- Declared properties (via active_attr gem)
- Fix Issue with HA console when ruby-debug is loaded (#261, thekendalmiller)
- Use 1.9 Neo4j
- get_or_create should return wrapped ruby nodes, alex-klepa, #241, #246
- Make sure freeze does not have side effects, #235
- Fix for carrierwave-neo4j (attribute_defaults), #235
- Support for HA cluster with neo4j 1.9.X, #228, #99, #223
- Make sure the Identity map is cleared after an exception, #214
- Relationship other_node should return wrapped node, #226
- Automatically convert DateTimes to UTC, (neo4j-wrapper #7)
- get_or_create should return a wrapped node (neo4j-wrapper #8)
- Make it work with Neo4j 1.7.1 (neo4j-core, #19)
- Fix for JRuby 1.7.1 and Equal #225
- Fix for create nodes and relationship using Cypher (neo4j-core #17)
- Using neo4j-cypher gem (1.0.0)
- Fix of neo4j-core configuration issue using boolean values #218
- Fixed RSpec issue on JRuby 1.7.x #217
- Aliased has_many to has_n, #183
- Use neo4j-core and neo4j-wrapper version 2.2.0.rc1
- Use the neo4j-cypher gem
- Better support for Orm Adapter, #212
- Use Cypher query when finder method does not have a lucene index, #210
- Use neo4j-core and neo4j-wrapper version 2.0.1
(same as rc2)
- Enable Identity Map by default
- Added versioning for Neo4j::Core
- Fix of rake task to upgrade to 2.0
- Various Cypher DSL improvements, core(#3,#4,#5), #196
- Added Neo4j::VERSION
- Fix for rails scaffold generator
- Fix for "relationship to :all assigned twice for single instance" #178
- Fix for callback fire more then once (=> performance increase) #172
- Support for lucene search on array properties, #118
- Support for creating unique entities (get_or_create) #143
- Support for specifying has_n/has_one relationship with Strings instead of Class #160
- Support for serializer of hash and arrays on properties #185
- Fix for Neo4j::Rails::Relationship default property, #195
- Added support for pagination, see the neo4j-will_paginate gem
- Fixed Rails generators
- Added Cypher DSL support for is_a?
- Fix for "write_attribute persistes, contrary to AR convention" closes #182
- fix for Neo4j::Config bug - did not work from rails to set the db location, closes #191
- has_n and has_one method generate class method returning the name of the relationship as a Symbol, closes #170
- Raise exception if trying to index boolean property, closes #180
- Made start_node= and end_node= protected closes 186
- Support for things like @dungeon.monsters.dangerous { |m| m[:weapon?] == 'sword' } closes #181
- Complete rewrite and smaller change of API + lots of refactoring and better RSpecs
- Moved code to the neo4j-core and neo4j-wrapper gems
- Changed API - index properties using the Neo4j::Rails::Model (property :name, :index => :exact)
- Changed API - rel_type always returns a Symbol
- Changed API - #rels and #rel first parameter is always :outgoing, :incoming or :both
- Cypher DSL support, see neo4j-core
- Made the Lucene indexing more flexible
- Renamed size methods to count since it does simply count all the relationships (e.g. Person.all.count)
- Modularization - e.g. make it possible to create your own wrapper
- Added builder method for has_one relationships (just like ActiveRecord build_best_friend)
- Fix for HA/cluster bug [#173]
- Upgrade to neo4j-community jars 1.7.0.alpha.1
- Fix for rails 3.2 [#131]
- Fix for BatchInserter bug, [#139]
- Added rake task for upgrading [#116]
- Added scripts for upgrading database [#116]
- Fix node and rel enumerable for JRuby 1.9, Dmytrii Nagirniak
- Remove the will_paginate and move it to a separate gem Dmytrii Nagirniak, [#129][#132]
- Use type converter to determine how to handle multi-param attributes, Dmyitrii Nagirniak [#97]
- Set default storage_path in Rails to db [#96]
- Fix numeric Converter with nils and Float converter, Dmytrii Nagirniak
- Fix Neo4j::Rails::Model.find incorrect behavior with negative numbers, Dmytrii Nagirniak [#101]
- Allow to use symbols in batch inserter [#104]
- Split neo4j-jars gem into three jars, community,advanced&enterprise
== 2.0.0.alpha.1 / 2012-01-11
- Split JARS into a separate gem (neo4j-jars) [#115]
- Changed prefix of relationships so that it allows having incoming relationships from different classes with different relationship names. Migration is needed to update an already existing database - see issue #116. [#117]
- Fix for undefined method 'add_unpersited_outgoing_rel' [#111]
- Fix for Rails models named Property [#108] (Vivek Prahlad)
== 1.3.1 / 2011-12-14
- Make all relationships visible in Rails callback (rspecs #87, Dmytrii Nagirniak) [#211]
- Enable travis to build JRuby 1.9 (pull #87, Dmytrii Nagirniak) [#214]
- Support for composite lucene queries with OR and NOT (pull #89, Deepak N)
- Enforce the correct converter on a property type when the type is given (pull #86, Dmytrii Nagirniak)
- Development: make it easier to run RSpecs and guard (pull #85, Dmytrii Nagirniak)
- Added ability to disable observer (pull #84, Dmytrii Nagirniak)
- Fixing multiple assignment of has_one assocaition (pull #83 Deepak N)
- Accept association_id for has_one assocations (pull #82, Deepak N)
- Upgrade to 1.6.M01 Neo4j java jars [#209]
- Defer warning message 'Unknown outgoing relationship' (pull #81, Vivek Prahlad)
- Added string converter, e.g. property :name, :type => String (pull #80, Dmytrii Nagirniak)
- Added symbol converter e.g. property :status, :type => Symbol (pull #79, Dmytrii Nagirniak) [#205]
== 1.3.0 / 2011-12-06
- Added neo4j-upgrade script to rename lucene index files and upgrade to 1.5 [#197]
- Expose Neo4j::NodeMixin#index_types returning available indices (useful for Cypher queries) [#194]
- The to_other method is now available also in the Neo4j::Rails API [#193]
- Expose rel_type method for Neo4j::Rails::Relationship [#196]
- Support for breadth and depth first traversals [#198]
- Support for cypher query [#197]
- Fix for rule node concurrency issue (pull #78, Vivek Prahlad)
- Bugfix for the uniqueness validation for properties with quotes (pull #76, Vivek Prahlad)
- More performance tweaks (pull #75, #77, Vivek Prahlad)
- Fixing add_index for properties other than type string (pull #74, Deepak N)
- Significant performance boost for creating large numbers of models in a transaction (pull #73, Vivek Prahlad)
- Upgrade to neo4j 1.5 jars (pull #72, Vivek Prahlad)
- Fix for assigning nil values to incoming has_one relation (pull #70, Deepak N)
- Support for revert and fixes for Neo4j::Rails::Versioning (pull #71, Vivek Prahlad)
== 1.2.6 / 2011-11-02
- Generators can now generate relationships as well [#195]
- Better will_paginate support for Neo4j::Rails::Model [#194]
- Fixing updated_at to be set only if model has changed (pull #68, Deepak N)
- Bringing back changes removed during identiy map to fix bug [#190] (Deepak N)
- Fixing updated_at to be set only if model has changed, using callbacks instead of overriding method for stamping time (Deepak N)
- Added versioning support (pull #67) (Vivek Prahlad)
== 1.2.5 / 2011-10-21
- Faster traversals by avoiding loading Ruby wrappers (new method 'raw' on traversals) [#189]
- Support for IdentityMap [#188]
- Improved performance in event handler (Vivek Prahlad)
- Fixing issue with validates_presence_of validation (Vivek Prahlad)
- Implemented compositions support on Neo4j::Rails::Relationship (Kalyan Akella)
- Added after_initialize callback (Deepak N)
- Fixed performance issues on node deleted (Vivek Prahlad)
- Fixed a performance issue in the index_registry (Vivek Prahlad)
- Fixed uniqueness validation for :case_sensitive => false (Vivek Prahlad)
- Fixed update_attributes deleting relations when model is invalid (Deepak N)
- Fixed timestamp rails generator (Marcio Toshio)
== 1.2.4 / 2011-10-07
- Support for traversing with Neo4j::Node#eval_paths and setting uniqueness on traversals [#187]
- Removed unnecessary node creation on database start up (class nodes attached to reference node) (Vivek Prahlad)
- Safer multitenancy - automatically reset the reference node in thread local context after each request using rack middleware
- Bugfixes for multitenancy (Deepak N and Vivek Prahlad)
== 1.2.3 / 2011-10-01
- Multitenancy support by namespaced-indices & changeable reference node (Vivek Prahlad, pull 41)
- Added a Neo4j::Rails::Model#columns which returns all defined properties [#186]
- Fixed validation associated entities, parent model should be invalid if its nested model(s) is invalid (Vivek Prahlad)
- Fixed property validation to read value before conversion as per active model conventions (Deepak N)
- Fixed property_before_type_cast for loaded models (Deepak N)
- Better support for nested models via ActionView field_for [#185]
- BUG: fix for null pointer issue after delete_all on Neo4j::Rails::Model#has_n relationships (Vivek Prahlad)
- BUG: init_on_create was not called when creating a new relationship via the << operator [#183]
== 1.2.2 / 2011-09-15
- Added compositions support for rails mode (Deepak N)
- Added support for nested transactions at the Rails model level (Vivek Prahlad)
- Fixing issue where save for invalid entities puts them into an inconsistent state (Vivek Prahlad)
- Fix for issue with save when validation fails (Vivek Prahlad)
- Fix for accepts_nested_attributes_for when the associated entities are created before a new node (Vivek Prahlad)
- Fix to allow has_one relationships to handle nil assignments in models (Vivek Prahlad)
- Observers support for neo4j rails model using active model (Deepak N)
- Override ActiveModel i18n_scope for neo4j (Deepak N)
- Added finders similar to active record and mongoid (Deepak N)
- Added find!, find_or_create_by and find_or_initialize_by methods, similar to active record finders (Deepak N)
== 1.2.1 / 2011-08-29
- Fixed failing RSpecs for devise-neo4j gem - column_names method on neo4j orm adapter throws NoMethodError (thanks Deepak N)
== 1.2.0 / 2011-08-16
- Upgrade to java library neo4j 1.4.1, see http://neo4j.rubyforge.org/guides/configuration.html
== 1.1.4 / 2011-08-10
-
Fixed dependency to will_paginate, locked to 3.0.pre4 (newly released 3.0.0 does not work yet with neo4j.rb)
== 1.1.3 / 2011-08-09
-
real recursive rule to the top class, subclasses with rules did not work (Frédéric Vanclef)
-
BUG: not able to create array properties on relationships (Pere Urbon)
-
BUG: lucene did not work if starting up neo4j in read only mode (like rails console when the rails is already running)
== 1.1.2 / 2011-06-08
- Added configuration option 'enable_rules' to disable the _all relationships and custom rules [#176]
- Added a #node method on the Neo4j::Node and Neo4j::NodeMixin. Works like the #rel method but returns the node instead. [#174]
- Simplify creating relationship between two existing nodes [#175]
== 1.1.1 / 2011-05-26
- Made neo4j compatible with rails 3.1.0.rc1 [#170]
- Fix for neo4j-devise [#171]
- BUG: Neo4j::GraphAlgo shortest path does raise exception if two nodes are not connected [#172]
== 1.1.0 / 2011-05-13
- Support for embedding neo4j.rb by providing an already running db instance (#168)
- Neo4j::Rails::Relationships should be ActiveModel compliant (#156)
- Support for incoming relationships in Neo4j::Rails::Model (#157)
- to_json method for models no tags √ resolved (#154)
- Implement hash so that it will work with Sets (#160)
- Modified the traverser to allow iterating over paths not just over end_nodes (#161)
- Create method should take a block to initialize itself (#162)
- Upgrade to 1.3 neo4j java library (#164)
- Default `nodes' invocation for Algo path finders (#165)
- Property and index class methods modified to take arbitrary number of symbols optionally followed by options hash (#166)
- BUG: Setting property :system on Neo4j::Rails::Model should work (#163)
- BUG: update_attributes should convert values according to Type (#155)
- BUG: Neo4j::RelationshipMixin#relationship_type broken #(169)
- BUG: Relationship.load(nil) == Relationship.load(0) (#167)
- BUG: Full text search returns nil in rails model (#153)
- Complete rewrite of everything.
- Replaced the lucene module with using the java neo4j-lucene integration instead
- Lots of improvements of the API
- Better ActiveModel/Rails integration
- Fixed bug on traversing when using the RelationshipMixin (#121)
- BatchInserter and JRuby 1.6 - Fix iteration error with trying to modify in-place hash
- Fixed .gitignore - make sure that we do not include unnecessarily files like neo4j databases. Release 0.4.2 contained test data.
- Added synchronize around Index.new so that two thread can't modify the same index at the same time.
- No index on properties for the initialize method bug (#116)
- Tidy up Thread Synchronization in Lucene wrapper - lucene indexing performance improvement (#117)
- Permission bug loading neo4j jar file (#118)
- Spike: Make NodeMixin ActiveModel complient - experimental (#115)
- Migrations (#108)
- BatchInserter (#111)
- Neo4j::Relationship.new should take a hash of properties (#110)
- Upgrade to neo4j-1.0 (#114)
- Bigfix: has_one should replace old relationship (#106)
- Bugfix: custom accessors for NodeMixin#update (#113)
- Bugfix: Indexed properties problem on extented ruby classes critical "properties indexer" (#112)
- Performance improvements and Refactoring: Use and Extend Neo4j Java Classes (#97)
- Support for Index and Declaration of Properties on Relationships (#91)
- Upgrade to neo4j-1.0 rc (#100)
- All internal properties should be prefix with a '_',0.4.0 (#105)
- Generate relationship accessor methods for declared has_n and has_one relationships (#104)
- New way of creating relationship - Neo4j::Relationship.new (#103)
- Neo4j#init_node method should take one or more args (#98)
- Namespaced relationships: has_one...from using the wrong has_n...to(#92)
- Neo4j::NodeMixin and Neo4j::Node should allow a hash for initialization (#99)
- Support for a counter property on has_lists (#75)
- Support for Cascade delete. On has_n, had_one and has_list (#81)
- NodeMixin#all should work with inheritance - Child classes should have a relationship of their own. (#64)
- Support for other lucene analyzer then StandardAnalyzer (#87)
- NodeMixin initialize should accept block like docs (#82)
- Add incoming relationship should work as expected: n1.relationships.incoming(:foo) << n2 (#80)
- Delete node from a has_list relationship should work as expected (#79)
- Improve stacktraces (#94)
- Removed sideeffect of rspecs (#90)
- Add debug method on NodeMixin to print it self (#88)
- Removed to_a method (#73)
- Upgrade to neo4j-1.0b10 (#95)
- Upgrade to lucene 2.9.0 (#83)
- Refactoring: RSpecs (#74)
- Refactoring: aggregate each, renamed to property aggregator (#72)
- BugFix: neo4j gem cannot be built from the source (#86)
- BugFix: Neo4j::relationship should not raise Exception if there are no relationships (#78)
- Added support for aggregating nodes (#65)
- Wrapped Neo4j GraphAlgo AllSimplePath (#70)
- Added traversal with traversal position (#71)
- Removed DynamicAccessors mixin, replaced by [] operator (#67)
- Impl Neo4j.all_nodes (#69)
- Upgrated Neo4j jar file to 1.0-b9
- The Neo4j#relationship method now allows a filter parameter (#66)
- Neo4j.rb now can read database not created by Neo4j.rb - does not require classname property (#63)
- REST - added an "all" value for the depth traversal query parameter (#62)
- REST - Performance improvments using the Rest Mixin (#60)
- Feature, extension - find path between given pair of nodes (#58)
- Fix a messy exception on GET /nodes/UnknownClassName (#57)
- Bug - exception on GET /nodes/classname/rel if rel is a has_one relationship (#56)
- Bug: GET /nodes/classname missing out nodes with no properties (#55)
- Bug: Lucene sorting caused exception if there were no documents (#54)
- Bug: reindexer fails to connect nodes to the IndexNode (#53)
- Neo4j should track node changes
- RESTful support for lucene queries, sorting and paging
- RESTful support for Relationships
- RESTful support for Node and properties
- Experimental support for Master-Slave Replication via REST
- RESTful Node representation should contain hyperlinks to relationships
- Added some handy method like first and empty? on relationships
- Use new neo4j: neo-1.0-b8
- Add an event handler for create/delete nodes start/stop neo, update property/relationship
- The NodeMixin should behave like a hash, added [] and []= methods
- Support list topology - has_list and belongs_to_list Neo4j::NodeMixin Classmethods
- Should be possible to add relationships without declaring them (Neo4j#relationships.outgoing(:friends) << node)
- Neo4j extensions file structure, should be easy to create your own extensions
- Rename relation to relationship (Neo4j::Relations => Neo4j::Relationships, DynamicRelation => Relationship) [data incompatible change]
- Auto Transaction is now optional
- Setting Float properties fails under JRuby1.2.0
- Bug: Indexing relationships does not work
- Make the ReferenceNode include Neo4j::NodeMixin
- Added handy Neo4j class that simply includes the Neo4j::NodeMixin
- Neo4j::IndexNode now holds references to all nodes (Neo4j.ref_node -> Neo4j::IndexNode -> ...)
- Refactoring of lucene indexing of the node space (28)
- Fixed bug on Neo4j::Nodemixin#property? (#22)
- Impl. Neo4j::Node#traverse - enables traversal and filtering using TraversalPosition info (#17,#19)
- Impl. traversal to any depth (#15)
- Impl. traversal several relationships type at the same time (#16)
- Fixed a Lucene timezone bug (#20)
- Lots of refactoring of the neo4j.rb traversal code and RSpecs
- Property can now be of any type (and not only String, Fixnum, Float)
- Indexing and Query with Date and DateTime
- YARD documentation
- Properties can be removed
- A property can be set to nil (it will then be removed).
- Added method to_param and methods on the value object needed for Ruby on Rails
- Impl. update from a value object/hash for a node
- Impl. generation of value object classes/instances from a node.
- Refactoring the Transaction handling (reuse PlaceboTransaction instances if possible)
- Removed the need to start and stop neo. It will be done automatically when needed.
- Removed the configuration from the Neo4j.start method. Now exist in Neo4j::Config and Lucene::Config.
- Implemented sort_by method.
- Lazy loading of search result. Execute the query and load the nodes only if needed.
- Added support to use lucene query language, example: Person.find("name:foo AND age:42")
- All test now uses RAM based lucene indexes.
- Supports keeping lucene index in memory instead of on disk
- Added support for lucene full text search
- Fixed so neo4j runs on JRuby 1.1.5
- Implemented support for reindex all instances of a node class. This is needed if the lucene index is kept in memory or if the index is changed.
- Added ReferenceNode. All nodes now have a relationship from this reference node.
- Lots of refactoring
- Added the IMDB example. It shows how to create a neo database, lucene queries and node traversals.
- First release to rubyforge