neo4j 1.0.0.beta.6 → 1.0.0.beta.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,10 +6,9 @@ require 'time'
6
6
  require 'date'
7
7
 
8
8
  require 'neo4j/jars/neo4j-kernel-1.1.1.jar'
9
- #require 'neo4j/jars/neo4j-kernel-1.2-20100916.085228-39.jar'
10
9
  require 'neo4j/jars/geronimo-jta_1.1_spec-1.1.1.jar'
11
10
  require 'neo4j/jars/lucene-core-3.0.1.jar'
12
- require 'neo4j/jars/neo4j-lucene-index-0.1-20100916.085626-67.jar'
11
+ require 'neo4j/jars/neo4j-lucene-index-0.1-20101002.153213-102.jar'
13
12
  require 'neo4j/to_java'
14
13
  require 'neo4j/version'
15
14
  require 'neo4j/equal'
@@ -39,6 +38,7 @@ require 'rails/railtie'
39
38
  require 'active_model'
40
39
  require 'neo4j/rails/transaction'
41
40
  require 'neo4j/rails/railtie'
41
+ require 'neo4j/rails/validations/uniqueness'
42
42
  require 'neo4j/rails/model'
43
43
  require 'neo4j/rails/value'
44
44
  require 'neo4j/rails/lucene_connection_closer'
@@ -12,7 +12,7 @@ module Neo4j
12
12
  module ClassMethods
13
13
  extend Forwardable
14
14
 
15
- def_delegators :@indexer, :index, :find, :index?, :index_type?, :clear_index_type, :rm_index_type, :add_index, :rm_index
15
+ def_delegators :@indexer, :index, :find, :index?, :index_type?, :clear_index_type, :rm_index_type, :add_index, :rm_index, :index_type_for
16
16
 
17
17
  # Sets which indexer should be used for the given class.
18
18
  # Returns the old one if there was an old indexer.
@@ -103,6 +103,11 @@ module Neo4j
103
103
  @field_types.include?(field.to_s)
104
104
  end
105
105
 
106
+ def index_type_for(field)
107
+ return nil unless index?(field)
108
+ @field_types[field.to_s]
109
+ end
110
+
106
111
  def index_type?(type)
107
112
  @field_types.values.include?(type)
108
113
  end
@@ -5,6 +5,11 @@ module Neo4j::Mapping
5
5
  def add(clazz, field, props, &block)
6
6
  clazz = clazz.to_s
7
7
  @rules ||= {}
8
+ # was there no ruls for this class AND is neo4j running ?
9
+ if !@rules.include?(clazz) && Neo4j.running?
10
+ # maybe Neo4j was started first and the rules was added later. Create rule nodes now
11
+ create_rule_node_for(clazz)
12
+ end
8
13
  @rules[clazz] ||= {}
9
14
  filter = block.nil? ? Proc.new { |*| true } : block
10
15
  @rules[clazz][field] = filter
@@ -38,23 +43,19 @@ module Neo4j::Mapping
38
43
  end
39
44
 
40
45
  def on_neo4j_started(*)
41
- create_rules if @rules
46
+ @rules.each_key { |clazz| create_rule_node_for(clazz) } if @rules
42
47
  end
43
48
 
44
- def create_rules
45
- @rules.each_key do |clazz|
46
- # check if rule nodes exist, if not create them
47
- if !Neo4j.ref_node.rel?(clazz)
48
- Neo4j::Transaction.run do
49
- node = Neo4j::Node.new
50
- Neo4j.ref_node.outgoing(clazz) << node
51
- node
52
- end
49
+ def create_rule_node_for(clazz)
50
+ if !Neo4j.ref_node.rel?(clazz)
51
+ Neo4j::Transaction.run do
52
+ node = Neo4j::Node.new
53
+ Neo4j.ref_node.outgoing(clazz) << node
54
+ node
53
55
  end
54
56
  end
55
57
  end
56
58
 
57
-
58
59
  def trigger?(node)
59
60
  @rules && node.property?(:_classname) && @rules.include?(node[:_classname])
60
61
  end
@@ -3,10 +3,15 @@ class Neo4j::Model
3
3
  include ActiveModel::Validations
4
4
  include ActiveModel::Dirty
5
5
  include ActiveModel::MassAssignmentSecurity
6
+
6
7
  extend ActiveModel::Naming
7
8
  extend ActiveModel::Callbacks
9
+ extend Neo4j::Validations::ClassMethods
8
10
  define_model_callbacks :create, :save, :update, :destroy
9
11
 
12
+
13
+ UniquenessValidator = Neo4j::Validations::UniquenessValidator
14
+
10
15
  class RecordInvalidError < RuntimeError
11
16
  attr_reader :record
12
17
 
@@ -0,0 +1,29 @@
1
+ module Neo4j
2
+ module Validations
3
+ class UniquenessValidator < ActiveModel::EachValidator
4
+ def initialize(options)
5
+ super(options.reverse_merge(:case_sensitive => true))
6
+ end
7
+
8
+ def validate_each(record, attribute, value)
9
+ clazz = record.class
10
+
11
+ # TODO is it possible to move this to setup instead so that we don't have to do this always ?
12
+ if clazz.index_type_for(attribute) != :exact
13
+ raise "Can't validate property #{attribute} on class #{clazz} since there is no :exact lucene index on that property"
14
+ end
15
+
16
+ query = "#{attribute}: #{value}"
17
+ if !clazz.find(query).empty?
18
+ record.errors.add(attribute, :taken, options.except(:case_sensitive, :scope).merge(:value => value))
19
+ end
20
+ end
21
+ end
22
+
23
+ module ClassMethods
24
+ def validates_uniqueness_of(*attr_names)
25
+ validates_with UniquenessValidator, _merge_attributes(attr_names)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,3 +1,3 @@
1
1
  module Neo4j
2
- VERSION = "1.0.0.beta.6"
2
+ VERSION = "1.0.0.beta.7"
3
3
  end
metadata CHANGED
@@ -7,8 +7,8 @@ version: !ruby/object:Gem::Version
7
7
  - 0
8
8
  - 0
9
9
  - beta
10
- - 6
11
- version: 1.0.0.beta.6
10
+ - 7
11
+ version: 1.0.0.beta.7
12
12
  platform: ruby
13
13
  authors:
14
14
  - Andreas Ronge
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-09-28 00:00:00 +02:00
19
+ date: 2010-10-03 00:00:00 +02:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -178,13 +178,11 @@ files:
178
178
  - lib/neo4j/rails/lucene_connection_closer.rb
179
179
  - lib/neo4j/rails/transaction.rb
180
180
  - lib/neo4j/rails/value.rb
181
- - lib/neo4j/jars/neo4j-lucene-index-0.1-20100916.085626-67.jar
182
- - lib/neo4j/jars/lucene-core-2.9.2.jar
183
- - lib/neo4j/jars/neo4j-kernel-1.1.jar
181
+ - lib/neo4j/rails/validations/uniqueness.rb
184
182
  - lib/neo4j/jars/lucene-core-3.0.1.jar
185
183
  - lib/neo4j/jars/geronimo-jta_1.1_spec-1.1.1.jar
186
184
  - lib/neo4j/jars/neo4j-kernel-1.1.1.jar
187
- - lib/neo4j/jars/neo4j-index-1.1.jar
185
+ - lib/neo4j/jars/neo4j-lucene-index-0.1-20101002.153213-102.jar
188
186
  - lib/neo4j/mapping/decl_relationship_dsl.rb
189
187
  - lib/neo4j/mapping/node_mixin.rb
190
188
  - lib/neo4j/mapping/has_n.rb