neo4j 8.0.0.alpha.12 → 8.0.0.rc.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9e910e891ebaa4b95b7b70e638b57facd5ab0abe
4
- data.tar.gz: a9570dd8812d110e508dd1b86c2b72e6c4c8385a
3
+ metadata.gz: e2f958f5ab64ca55f0c33a3bcd9680773a604c54
4
+ data.tar.gz: 6d61a3310ec123a99703b1958072d97a57c279be
5
5
  SHA512:
6
- metadata.gz: 8252603ec9eb5d9cca34ca4c8b35882eeeeeff8c2a9f48fce7e00eebd0b0b3a22291cb401234deb95a0680be7c02f4c93b03c838be84bca39a03366772e22f90
7
- data.tar.gz: cb0505ab1461d56b0dc33258c7a7723ea43992f39c625f1f7db43b1efd8596767be5d701a1c64624d9adf5bc4740b9ea0b6a924c52f8445a65a3bfd0d0cbd175
6
+ metadata.gz: 946355cd23bf4c589dbaa651d73896ebc7a87fb9717d8827a4f3f4c0e801fb67ba2299875f2f3c5edc970bd3f1183e52c8573cce5eb2405d73c2b8d87760625c
7
+ data.tar.gz: f9e7e33a203f1f32e85f4ff3eab979e216b2a8b09b8901c7be9378e8f2d5cadc2f8385abe7d648f90dd898e52870305047083d65378ad5d73c00b07c4a95c218
@@ -3,7 +3,15 @@ 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
- ## [Unreleased]
6
+ ## [8.0.0.rc.1] 2016-10-04
7
+
8
+ ### Changed
9
+
10
+ - Pending migrations check, now using a Rack Middleware instead of failing on startup (thanks @ProGM / see #1300)
11
+
12
+ ### Added
13
+
14
+ - Add support for undeclared properties on specific models (see #1294 / thanks @klobuczek)
7
15
 
8
16
  ## [8.0.0.alpha.12] 2016-09-29
9
17
 
@@ -22,7 +30,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
22
30
  - `update` was not rolling-back association changes when validations fail
23
31
  - Broken Rails `neo4j:migrate_v8` generator
24
32
 
25
- # Changed
33
+ ### Changed
26
34
  - `count` method in associations, now always fire the database like AR does
27
35
  - Neo4j now passes all association validations specs, taken from AR (thanks @klobuczek)
28
36
 
@@ -26,6 +26,7 @@ require 'neo4j/paginated'
26
26
  require 'neo4j/schema/operation'
27
27
 
28
28
  require 'neo4j/timestamps'
29
+ require 'neo4j/undeclared_properties'
29
30
 
30
31
  require 'neo4j/shared/callbacks'
31
32
  require 'neo4j/shared/filtered_hash'
@@ -6,6 +6,7 @@ module Neo4j
6
6
  autoload :Base
7
7
  autoload :Runner
8
8
  autoload :SchemaMigration
9
+ autoload :CheckPending
9
10
 
10
11
  class << self
11
12
  def check_for_pending_migrations!
@@ -0,0 +1,19 @@
1
+ module Neo4j
2
+ module Migrations
3
+ class CheckPending
4
+ def initialize(app)
5
+ @app = app
6
+ @last_check = 0
7
+ end
8
+
9
+ def call(env)
10
+ mtime = Neo4j::Migrations::Runner.latest_migration.version.to_i
11
+ if @last_check < mtime
12
+ Neo4j::Migrations.check_for_pending_migrations!
13
+ @last_check = mtime
14
+ end
15
+ @app.call(env)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -141,31 +141,41 @@ MSG
141
141
  end
142
142
 
143
143
  def all_migrations
144
- @up_versions + files_versions
145
- end
146
-
147
- def files_versions
148
- migration_files.map(&:version)
149
- end
150
-
151
- def migration_files
152
- files.map { |file_path| MigrationFile.new(file_path) }
144
+ @up_versions + migration_files_versions
153
145
  end
154
146
 
155
147
  def incomplete_states
156
148
  @incomplete_states ||= SortedSet.new(@schema_migrations.select(&:incomplete?))
157
149
  end
158
150
 
159
- def files
160
- Dir[files_path].sort
161
- end
151
+ delegate :migration_files, :migration_files_versions, to: :class
162
152
 
163
- def files_path
164
- app_root.join('db', 'neo4j', 'migrate', '*.rb')
165
- end
153
+ class <<self
154
+ def migration_files_versions
155
+ migration_files.map!(&:version)
156
+ end
157
+
158
+ def migration_files
159
+ files.map! { |file_path| MigrationFile.new(file_path) }
160
+ end
166
161
 
167
- def app_root
168
- defined?(Rails) ? Rails.root : Pathname.new('.')
162
+ def latest_migration
163
+ migration_files.last
164
+ end
165
+
166
+ def files
167
+ Dir[files_path].sort
168
+ end
169
+
170
+ private
171
+
172
+ def files_path
173
+ app_root.join('db', 'neo4j', 'migrate', '*.rb')
174
+ end
175
+
176
+ def app_root
177
+ defined?(Rails) ? Rails.root : Pathname.new('.')
178
+ end
169
179
  end
170
180
  end
171
181
  end
@@ -56,8 +56,8 @@ module Neo4j
56
56
 
57
57
  Neo4j::Config[:logger] ||= Rails.logger
58
58
 
59
- if Rails.env.development? && !Neo4j::Migrations.currently_running_migrations && Neo4j::Config.fail_on_pending_migrations
60
- Neo4j::Migrations.check_for_pending_migrations!
59
+ if Neo4j::Config.fail_on_pending_migrations
60
+ config.app_middleware.insert_after ::ActionDispatch::Callbacks, Neo4j::Migrations::CheckPending
61
61
  end
62
62
  end
63
63
 
@@ -26,10 +26,16 @@ module Neo4j::Shared
26
26
  return unless new_attributes.present?
27
27
  new_attributes.each do |name, value|
28
28
  writer = :"#{name}="
29
- send(writer, value) if respond_to?(writer)
29
+ if respond_to?(writer)
30
+ send(writer, value)
31
+ else
32
+ add_undeclared_property(name, value)
33
+ end
30
34
  end
31
35
  end
32
36
 
37
+ def add_undeclared_property(_, _); end
38
+
33
39
  # Mass update a model's attributes
34
40
  #
35
41
  # @example Assigning a hash
@@ -10,11 +10,17 @@ module Neo4j::Shared
10
10
  end
11
11
 
12
12
  def update_model
13
- return if !changed_attributes || changed_attributes.empty?
14
- neo4j_query(query_as(:n).set(n: props_for_update))
13
+ return if skip_update?
14
+ props = props_for_update
15
+ neo4j_query(query_as(:n).set(n: props))
16
+ _persisted_obj.props.merge!(props)
15
17
  changed_attributes.clear
16
18
  end
17
19
 
20
+ def skip_update?
21
+ changed_attributes.blank?
22
+ end
23
+
18
24
  # Returns a hash containing:
19
25
  # * All properties and values for insertion in the database
20
26
  # * A `uuid` (or equivalent) key and value
@@ -66,7 +72,7 @@ module Neo4j::Shared
66
72
  # @param [Symbol, String] attribute of the attribute to update
67
73
  # @param [Object] value to set
68
74
  def update_attribute(attribute, value)
69
- send("#{attribute}=", value)
75
+ write_attribute(attribute, value)
70
76
  self.save
71
77
  end
72
78
 
@@ -74,7 +80,7 @@ module Neo4j::Shared
74
80
  # @param [Symbol, String] attribute of the attribute to update
75
81
  # @param [Object] value to set
76
82
  def update_attribute!(attribute, value)
77
- send("#{attribute}=", value)
83
+ write_attribute(attribute, value)
78
84
  self.save!
79
85
  end
80
86
 
@@ -26,9 +26,12 @@ module Neo4j::Shared
26
26
  validate_attributes!(modded_attributes)
27
27
  writer_method_props = extract_writer_methods!(modded_attributes)
28
28
  send_props(writer_method_props)
29
+ self.undeclared_properties = attributes
29
30
  @_persisted_obj = nil
30
31
  end
31
32
 
33
+ def undeclared_properties=(_); end
34
+
32
35
  def inject_defaults!(starting_props)
33
36
  return starting_props if self.class.declared_properties.declared_property_defaults.empty?
34
37
  self.class.declared_properties.inject_defaults!(self, starting_props || {})
@@ -1,7 +1,7 @@
1
1
  require 'active_support/concern'
2
2
  require 'neo4j/migration'
3
3
 
4
- unless Rake::Task.task_defined?('environment')
4
+ if !defined?(Rails) && !Rake::Task.task_defined?('environment')
5
5
  desc 'Run a script against the database to perform system-wide changes'
6
6
  task :environment do
7
7
  require 'neo4j/session_manager'
@@ -84,7 +84,7 @@ namespace :neo4j do
84
84
  end
85
85
 
86
86
  desc 'Rollbacks migrations given a STEP number'
87
- task :rollback, [:allow_migrations, :environment] do
87
+ task rollback: [:allow_migrations, :environment] do
88
88
  steps = (ENV['STEP'] || 1).to_i
89
89
  runner = Neo4j::Migrations::Runner.new
90
90
  runner.rollback(steps)
@@ -0,0 +1,53 @@
1
+ module Neo4j
2
+ # This mixin allows storage and update of undeclared properties in the included class
3
+ module UndeclaredProperties
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ attr_accessor :undeclared_properties
8
+ end
9
+
10
+ def validate_attributes!(_)
11
+ end
12
+
13
+ def read_attribute(name)
14
+ respond_to?(name) ? super(name) : read_undeclared_property(name.to_sym)
15
+ end
16
+ alias [] read_attribute
17
+
18
+ def read_undeclared_property(name)
19
+ _persisted_obj ? _persisted_obj.props[name] : (undeclared_properties && undeclared_properties[name])
20
+ end
21
+
22
+ def write_attribute(name, value)
23
+ if respond_to? "#{name}="
24
+ super(name, value)
25
+ else
26
+ add_undeclared_property(name, value)
27
+ end
28
+ end
29
+ alias []= write_attribute
30
+
31
+ def skip_update?
32
+ super && undeclared_properties.blank?
33
+ end
34
+
35
+ def props_for_create
36
+ super.merge(undeclared_properties!)
37
+ end
38
+
39
+ def props_for_update
40
+ super.merge(undeclared_properties!)
41
+ end
42
+
43
+ def undeclared_properties!
44
+ undeclared_properties || {}
45
+ ensure
46
+ self.undeclared_properties = nil
47
+ end
48
+
49
+ def add_undeclared_property(name, value)
50
+ (self.undeclared_properties ||= {})[name] = value
51
+ end
52
+ end
53
+ end
@@ -1,3 +1,3 @@
1
1
  module Neo4j
2
- VERSION = '8.0.0.alpha.12'
2
+ VERSION = '8.0.0.rc.1'
3
3
  end
@@ -30,7 +30,7 @@ A Neo4j OGM (Object-Graph-Mapper) for use in Ruby on Rails and Rack frameworks h
30
30
  s.add_dependency('orm_adapter', '~> 0.5.0')
31
31
  s.add_dependency('activemodel', '>= 4.0', '< 5.1')
32
32
  s.add_dependency('activesupport', '>= 4.0', '< 5.1')
33
- s.add_dependency('neo4j-core', '>= 7.0.0.alpha.1')
33
+ s.add_dependency('neo4j-core', '>= 7.0.0.rc.1')
34
34
  s.add_dependency('neo4j-community', '~> 2.0') if RUBY_PLATFORM =~ /java/
35
35
  s.add_development_dependency('railties', '>= 4.0', '< 5.1')
36
36
  s.add_development_dependency('pry')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: neo4j
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.0.alpha.12
4
+ version: 8.0.0.rc.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Ronge, Brian Underwood, Chris Grigg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-29 00:00:00.000000000 Z
11
+ date: 2016-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: orm_adapter
@@ -70,14 +70,14 @@ dependencies:
70
70
  requirements:
71
71
  - - ">="
72
72
  - !ruby/object:Gem::Version
73
- version: 7.0.0.alpha.1
73
+ version: 7.0.0.rc.1
74
74
  type: :runtime
75
75
  prerelease: false
76
76
  version_requirements: !ruby/object:Gem::Requirement
77
77
  requirements:
78
78
  - - ">="
79
79
  - !ruby/object:Gem::Version
80
- version: 7.0.0.alpha.1
80
+ version: 7.0.0.rc.1
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: railties
83
83
  requirement: !ruby/object:Gem::Requirement
@@ -287,6 +287,7 @@ files:
287
287
  - lib/neo4j/migration.rb
288
288
  - lib/neo4j/migrations.rb
289
289
  - lib/neo4j/migrations/base.rb
290
+ - lib/neo4j/migrations/check_pending.rb
290
291
  - lib/neo4j/migrations/helpers.rb
291
292
  - lib/neo4j/migrations/helpers/id_property.rb
292
293
  - lib/neo4j/migrations/helpers/relationships.rb
@@ -327,6 +328,7 @@ files:
327
328
  - lib/neo4j/timestamps/created.rb
328
329
  - lib/neo4j/timestamps/updated.rb
329
330
  - lib/neo4j/type_converters.rb
331
+ - lib/neo4j/undeclared_properties.rb
330
332
  - lib/neo4j/version.rb
331
333
  - lib/neo4j/wrapper.rb
332
334
  - lib/rails/generators/neo4j/migration/migration_generator.rb