activegraph 10.0.0.pre.beta.4 → 10.0.0.pre.beta.5

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
  SHA256:
3
- metadata.gz: ef0444b21eb9130b0047fa423911cff404686bb29a7af0e63b66dd093d822f2b
4
- data.tar.gz: d359a53fbe4ecfec871b596ecd3aeae4293f9369059090cec06f78e2d8a6c77c
3
+ metadata.gz: f768ee99674bbc10fb6c1094921b8f6f7840cfdd6c2d2ae442e4cc33d243690a
4
+ data.tar.gz: 46d381583be9bd03f45d8b6f684d2bc3ae0e394ebcbd2685d57cda834f354e24
5
5
  SHA512:
6
- metadata.gz: 736e716587d1b7cb30f44263ac05108793b1819765c4e362240421022a3581b96bbbd186ca132846ade50a643f59edb422e2cb9c492c31d6c517556fb96e2c08
7
- data.tar.gz: e985e8b8223a56a02c581f50e180851fee59b3fcbad402560f59746df6e64c3bfa8d4ccbf813571235ff5e5af1585b28939c51d835e13b8fd6b516dbe121b66c
6
+ metadata.gz: fbd8b19f5894b9b5b528887aff9616f62d08818c90a03e1b9144850c1c832061f6af598a4d5ebf8a1d9e9751bfb6a1ba7bfa730df83a43070e0f95081a799347
7
+ data.tar.gz: 4c02f0e0ab88bffdafb794a892aacd46351118bb7dbe179a1fab56dc2febe9a6bee08d2d0c6850580c039b493e5eb76cc4a77b57a272c09d2f4a286f134d237b
@@ -21,8 +21,8 @@ module ActiveGraph
21
21
  # Creates a neo4j constraint on a property
22
22
  # See http://docs.neo4j.org/chunked/stable/query-constraints.html
23
23
  # @example
24
- # label = ActiveGraph::Label.create(:person, driver)
25
- # label.create_constraint(:name, {type: :unique}, driver)
24
+ # label = ActiveGraph::Label.create(:person)
25
+ # label.create_constraint(:name, {type: :unique})
26
26
  #
27
27
  def create_constraint(property, constraints)
28
28
  cypher = case constraints[:type]
@@ -41,9 +41,9 @@ module ActiveGraph
41
41
  # Drops a neo4j constraint on a property
42
42
  # See http://docs.neo4j.org/chunked/stable/query-constraints.html
43
43
  # @example
44
- # label = ActiveGraph::Label.create(:person, driver)
45
- # label.create_constraint(:name, {type: :unique}, driver)
46
- # label.drop_constraint(:name, {type: :unique}, driver)
44
+ # label = ActiveGraph::Label.create(:person)
45
+ # label.create_constraint(:name, {type: :unique})
46
+ # label.drop_constraint(:name, {type: :unique})
47
47
  #
48
48
  def drop_constraint(property, constraint)
49
49
  cypher = case constraint[:type]
@@ -97,16 +97,6 @@ module ActiveGraph
97
97
 
98
98
  private
99
99
 
100
- # Store schema threads on the driver so that we can easily wait for all
101
- # threads on a driver regardless of label
102
- def schema_threads
103
- self.class.schema_threads
104
- end
105
-
106
- def schema_threads=(array)
107
- self.class.set_schema_threads(array)
108
- end
109
-
110
100
  class << self
111
101
  def indexes
112
102
  ActiveGraph::Base.indexes
@@ -130,19 +120,6 @@ module ActiveGraph
130
120
  end
131
121
  end
132
122
  end
133
-
134
- def wait_for_schema_changes
135
- schema_threads.map(&:join)
136
- set_schema_threads(driver, [])
137
- end
138
-
139
- def schema_threads
140
- ActiveGraph::Transaction.instance_variable_get('@_schema_threads') || []
141
- end
142
-
143
- def set_schema_threads(array)
144
- ActiveGraph::Transaction.instance_variable_set('@_schema_threads', array)
145
- end
146
123
  end
147
124
 
148
125
  def schema_query(cypher)
@@ -394,7 +394,7 @@ module ActiveGraph
394
394
 
395
395
  protected
396
396
 
397
- attr_accessor :driver, :options, :_params
397
+ attr_accessor :options, :_params
398
398
 
399
399
  def add_clauses(clauses)
400
400
  @clauses += clauses
@@ -9,8 +9,8 @@ module ActiveGraph
9
9
 
10
10
  def synchronize_schema_data(schema_data, remove_missing)
11
11
  queries = []
12
- queries += drop_and_create_queries(fetch_constraint_descriptions(driver), schema_data[:constraints], remove_missing)
13
- queries += drop_and_create_queries(fetch_index_descriptions(driver), schema_data[:indexes], remove_missing)
12
+ queries += drop_and_create_queries(fetch_constraint_descriptions, schema_data[:constraints], remove_missing)
13
+ queries += drop_and_create_queries(fetch_index_descriptions, schema_data[:indexes], remove_missing)
14
14
  ActiveGraph::Base.queries do
15
15
  queries.each { |query| append query }
16
16
  end
@@ -18,11 +18,11 @@ module ActiveGraph
18
18
 
19
19
  private
20
20
 
21
- def fetch_constraint_descriptions(driver)
21
+ def fetch_constraint_descriptions
22
22
  ActiveGraph::Base.query('CALL db.constraints()').map(&:description)
23
23
  end
24
24
 
25
- def fetch_index_descriptions(driver)
25
+ def fetch_index_descriptions
26
26
  result = ActiveGraph::Base.query('CALL db.indexes()')
27
27
  if result.columns.include?(:description)
28
28
  v3_indexes(result)
@@ -441,13 +441,7 @@ module ActiveGraph::Node
441
441
  end
442
442
 
443
443
  def define_has_many_setter(name)
444
- define_method("#{name}=") do |other_nodes|
445
- association_proxy_cache.clear
446
-
447
- clear_deferred_nodes_for_association(name)
448
-
449
- ActiveGraph::Base.transaction { association_proxy(name).replace_with(other_nodes) }
450
- end
444
+ define_setter(name, "#{name}=")
451
445
  end
452
446
 
453
447
  def define_has_many_id_methods(name)
@@ -455,16 +449,26 @@ module ActiveGraph::Node
455
449
  association_proxy(name).result_ids
456
450
  end
457
451
 
458
- define_method_unless_defined("#{name.to_s.singularize}_ids=") do |ids|
459
- clear_deferred_nodes_for_association(name)
460
- association_proxy(name).replace_with(Array(ids).reject(&:blank?))
461
- end
452
+ define_setter(name, "#{name.to_s.singularize}_ids=")
462
453
 
463
454
  define_method_unless_defined("#{name.to_s.singularize}_neo_ids") do
464
455
  association_proxy(name).pluck(:neo_id)
465
456
  end
466
457
  end
467
458
 
459
+ def define_setter(name, setter_name)
460
+ define_method_unless_defined(setter_name) do |others|
461
+ association_proxy_cache.clear # TODO: Should probably just clear for this association...
462
+ clear_deferred_nodes_for_association(name)
463
+ others = Array(others).reject(&:blank?)
464
+ if persisted?
465
+ ActiveGraph::Base.transaction { association_proxy(name).replace_with(others) }
466
+ else
467
+ defer_create(name, others, clear: true)
468
+ end
469
+ end
470
+ end
471
+
468
472
  def define_method_unless_defined(method_name, &block)
469
473
  define_method(method_name, block) unless method_defined?(method_name)
470
474
  end
@@ -492,9 +496,7 @@ module ActiveGraph::Node
492
496
  association_proxy(name).result_ids.first
493
497
  end
494
498
 
495
- define_method_unless_defined("#{name}_id=") do |id|
496
- association_proxy(name).replace_with(id)
497
- end
499
+ define_setter(name, "#{name}_id=")
498
500
 
499
501
  define_method_unless_defined("#{name}_neo_id") do
500
502
  association_proxy(name).pluck(:neo_id).first
@@ -520,17 +522,7 @@ module ActiveGraph::Node
520
522
  end
521
523
 
522
524
  def define_has_one_setter(name)
523
- define_method("#{name}=") do |other_node|
524
- if persisted?
525
- other_node.save if other_node.respond_to?(:persisted?) && !other_node.persisted?
526
- association_proxy_cache.clear # TODO: Should probably just clear for this association...
527
- ActiveGraph::Base.transaction { association_proxy(name).replace_with(other_node) }
528
- # handle_non_persisted_node(other_node)
529
- else
530
- defer_create(name, other_node, clear: true)
531
- other_node
532
- end
533
- end
525
+ define_setter(name, "#{name}=")
534
526
  end
535
527
 
536
528
  def define_class_method(*args, &block)
@@ -545,8 +537,7 @@ module ActiveGraph::Node
545
537
  query_proxy = previous_query_proxy || default_association_query_proxy
546
538
  ActiveGraph::Node::Query::QueryProxy.new(association_target_class(name),
547
539
  associations[name],
548
- {driver: neo4j_driver,
549
- query_proxy: query_proxy,
540
+ {query_proxy: query_proxy,
550
541
  context: "#{query_proxy.context || self.name}##{name}",
551
542
  optional: query_proxy.optional?,
552
543
  association_labels: options[:labels],
@@ -578,7 +569,7 @@ module ActiveGraph::Node
578
569
 
579
570
  def default_association_query_proxy
580
571
  ActiveGraph::Node::Query::QueryProxy.new("::#{self.name}".constantize, nil,
581
- driver: neo4j_driver, query_proxy: nil, context: self.name.to_s)
572
+ query_proxy: nil, context: self.name.to_s)
582
573
  end
583
574
 
584
575
  def build_association(macro, direction, name, options)
@@ -33,7 +33,6 @@ module ActiveGraph
33
33
  # @option options [String, Symbol] :rel_var Same as above but pertaining to a relationship identifier
34
34
  # @option options [Range, Integer, Symbol, Hash] :rel_length A Range, a Integer, a Hash or a Symbol to indicate the variable-length/fixed-length
35
35
  # qualifier of the relationship. See http://neo4jrb.readthedocs.org/en/latest/Querying.html#variable-length-relationships.
36
- # @option options [Neo4j::Driver] :driver The driver to be used for this query
37
36
  # @option options [ActiveGraph::Node] :source_object The node instance at the start of the QueryProxy chain
38
37
  # @option options [QueryProxy] :query_proxy An existing QueryProxy chain upon which this new object should be built
39
38
  #
@@ -317,12 +316,6 @@ module ActiveGraph
317
316
  "result_#{(association || model).try(:name)}#{index}".downcase.tr(':', '').to_sym
318
317
  end
319
318
 
320
- def _driver
321
- (@driver || (@model && @model.neo4j_driver)).tap do |driver|
322
- fail 'No driver found!' if driver.nil?
323
- end
324
- end
325
-
326
319
  def _association_arrow(properties = {}, create = false)
327
320
  @association && @association.arrow_cypher(@rel_var, properties, create, false, @rel_length)
328
321
  end
@@ -357,9 +350,9 @@ module ActiveGraph
357
350
  private
358
351
 
359
352
  def instance_vars_from_options!(options)
360
- @node_var, @driver, @source_object, @starting_query, @optional,
353
+ @node_var, @source_object, @starting_query, @optional,
361
354
  @start_object, @query_proxy, @chain_level, @association_labels,
362
- @rel_length = options.values_at(:node, :driver, :source_object, :starting_query, :optional,
355
+ @rel_length = options.values_at(:node, :source_object, :starting_query, :optional,
363
356
  :start_object, :query_proxy, :chain_level, :association_labels, :rel_length)
364
357
  end
365
358
 
@@ -10,7 +10,7 @@ module ActiveGraph
10
10
  def defer_create(association_name, object, options = {})
11
11
  clear_deferred_nodes_for_association(association_name) if options[:clear]
12
12
 
13
- deferred_nodes_for_association(association_name) << object
13
+ deferred_nodes_for_association(association_name).concat(Array(object))
14
14
  end
15
15
 
16
16
  def deferred_nodes_for_association(association_name)
@@ -7,16 +7,14 @@ module ActiveGraph::Relationship
7
7
  module ClassMethods
8
8
  # Returns the object with the specified neo4j id.
9
9
  # @param [String,Integer] id of node to find
10
- # @param [Neo4j::Driver] driver optional
11
- def find(id, driver = self.neo4j_driver)
10
+ def find(id)
12
11
  fail "Unknown argument #{id.class} in find method (expected String or Integer)" if !(id.is_a?(String) || id.is_a?(Integer))
13
- find_by_id(id, driver)
12
+ find_by_id(id)
14
13
  end
15
14
 
16
15
  # Loads the relationship using its neo_id.
17
- def find_by_id(key, driver = nil)
18
- options = driver ? {driver: driver} : {}
19
- query ||= ActiveGraph::Base.new_query(options)
16
+ def find_by_id(key)
17
+ query = ActiveGraph::Base.new_query
20
18
  result = query.match('()-[r]-()').where('ID(r)' => key.to_i).limit(1).return(:r).first
21
19
  fail RecordNotFound.new("Couldn't find #{name} with 'id'=#{key.inspect}", name, key) if result.blank?
22
20
  result.r
@@ -10,18 +10,6 @@ module ActiveGraph
10
10
  include ActiveModel::Serializers::JSON
11
11
 
12
12
  module ClassMethods
13
- # TODO: Deprecate neo4j_driver_name(name)
14
-
15
- # remove?
16
- def neo4j_driver
17
- ActiveGraph::Base.driver
18
- end
19
-
20
- # remove?
21
- def current_transaction
22
- ActiveGraph::Base.current_transaction
23
- end
24
-
25
13
  # This should be used everywhere. Should make it easy
26
14
  # to support a driver-per-model system
27
15
  def neo4j_query(*args)
@@ -1,3 +1,3 @@
1
1
  module ActiveGraph
2
- VERSION = '10.0.0-beta.4'
2
+ VERSION = '10.0.0-beta.5'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activegraph
3
3
  version: !ruby/object:Gem::Version
4
- version: 10.0.0.pre.beta.4
4
+ version: 10.0.0.pre.beta.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Ronge, Brian Underwood, Chris Grigg, Heinrich Klobuczek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-02 00:00:00.000000000 Z
11
+ date: 2020-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel