neo4j 3.0.0.alpha.3 → 3.0.0.alpha.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7f3c1c35ef38235d2f240757530f1fec08473cc8
4
- data.tar.gz: a0e24982bc743984f10a702d8933be694c9c2adf
3
+ metadata.gz: d529b0a277c85beffcb02008e9a16911edd26e0b
4
+ data.tar.gz: 34d8210e6ca0f7808051743e7177dec65a20e92e
5
5
  SHA512:
6
- metadata.gz: ee0818fd0db7f265ab529f0bf8792c862cec09daa137aa340f3b0f009d419e664c53c21541775be7c883dc66e29b016a360949a45eadffefce7966d54a9153d0
7
- data.tar.gz: f37ed9996c2d068663e574887bf29828a29d9b9250144006701d14e4bc17b64259be36bf96c0ec4ca6046a52ed81d577b2300bdfc7f46629e73825bfec28af1b
6
+ metadata.gz: 1b3347a88211c4555f69bcbd2471fb41ac7353b5e831487546d7b42f3b3d79fbb75b7626ce683ef931bf9d8d0946a64ec0fe2a817f1cb3d5798cc00545ea31a5
7
+ data.tar.gz: c9c875a7c36e75f9cddcc204cc0fc83114319105dfca22f8f4e76cacd45b905081f6bbaca765e143e457aba888a594323ef42b886cdb8ba483599bb1d39e5449
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ == 3.0.0.alpha.4
2
+ * Implemented validates_uniqueness_of (#311)
3
+ * Using neo4j-core version 3.0.0.alpha.11
4
+
1
5
  == 3.0.0.alpha.3
2
6
  * Support for rails scaffolds
3
7
  * Support for created_at and updated_at (#305)
data/README.md CHANGED
@@ -1,21 +1,21 @@
1
1
  # Welcome to Neo4j.rb [![Build Status](https://secure.travis-ci.org/andreasronge/neo4j.png?branch=master)](http://travis-ci.org/andreasronge/neo4j) [![Coverage Status](https://coveralls.io/repos/andreasronge/neo4j/badge.png)](https://coveralls.io/r/andreasronge/neo4j) [![Code Climate](https://codeclimate.com/github/andreasronge/neo4j.png)](https://codeclimate.com/github/andreasronge/neo4j)
2
2
 
3
- Neo4j.rb is a graph database for Ruby (and JRuby)
3
+ Neo4j.rb is an Active Model compliant Ruby/JRuby wrapper for [the Neo4j graph database](http://www.neo4j.org/). It uses the [neo4j-core](https://github.com/andreasronge/neo4j-core) and [active_attr](https://github.com/cgriego/active_attr) gems.
4
4
 
5
- ## Version 3.0
5
+ ## Version 3.0.0.alpha.X
6
6
 
7
7
  Unstable !
8
8
 
9
- * Wiki: https://github.com/andreasronge/neo4j/wiki/Neo4j-v3
10
- * Example: https://github.com/andreasronge/neo4j/tree/3.0/example/blog
9
+ * [Wiki](https://github.com/andreasronge/neo4j/wiki/Neo4j-v3)
10
+ * [Basic Rails 4 Example](https://github.com/andreasronge/neo4j/blob/master/example/blog/README.md)
11
11
 
12
12
  ## Version 2.x
13
13
 
14
- This is the stable version, see https://github.com/andreasronge/neo4j/tree/2.x
14
+ For the stable 2.x version, see [here](https://github.com/andreasronge/neo4j/tree/2.x)
15
15
 
16
16
  ## Contributing
17
17
 
18
- * Have you found a bug, need help or have a patch ?
18
+ * Have you found a bug, need help, or have a patch ?
19
19
  * Just clone neo4j.rb and send me a pull request or email me.
20
20
  * Do you need help - send me an email (andreas.ronge at gmail dot com).
21
21
 
@@ -23,6 +23,6 @@ This is the stable version, see https://github.com/andreasronge/neo4j/tree/2.x
23
23
 
24
24
  * Neo4j.rb - MIT, see the [LICENSE](http://github.com/andreasronge/neo4j/tree/master/LICENSE).
25
25
  * Lucene - Apache, see the [Lucene Documentation](http://lucene.apache.org/java/docs/features.html).
26
- * Neo4j - Dual free software/commercial license, see [Lisencing Guide](http://www.neo4j.org/learn/licensing).
26
+ * Neo4j - Dual free software/commercial license, see [Licensing Guide](http://www.neo4j.org/learn/licensing).
27
27
 
28
- **Notice:** there are different license for the `neo4j-community`, `neo4j-advanced`, and `neo4j-enterprise` jar gems. Only the `neo4j-community` gem is by default required.
28
+ **Notice:** There are different licenses for the `neo4j-community`, `neo4j-advanced`, and `neo4j-enterprise` jar gems. Only the `neo4j-community` gem is required by default.
@@ -55,7 +55,7 @@ module Neo4j
55
55
 
56
56
  # Creates a relationship instance between this and the other node.
57
57
  # Returns the relationship object
58
- def create(other, relationship_props)
58
+ def create(other, relationship_props = {})
59
59
  @decl_rel.create_relationship_to(@node, other, relationship_props)
60
60
  end
61
61
 
@@ -6,6 +6,11 @@ module Neo4j
6
6
 
7
7
  include ActiveModel::Validations
8
8
 
9
+ module ClassMethods
10
+ def validates_uniqueness_of(*attr_names)
11
+ validates_with UniquenessValidator, _merge_attributes(attr_names)
12
+ end
13
+ end
9
14
 
10
15
  # Implements the ActiveModel::Validation hook method.
11
16
  # @see http://rubydoc.info/docs/rails/ActiveModel/Validations:read_attribute_for_validation
@@ -33,6 +38,48 @@ module Neo4j
33
38
  errors.empty?
34
39
  end
35
40
 
41
+ class UniquenessValidator < ::ActiveModel::EachValidator
42
+ def initialize(options)
43
+ super(options.reverse_merge(:case_sensitive => true))
44
+ end
45
+
46
+ def setup(klass)
47
+ @klass = klass
48
+ end
49
+
50
+ def validate_each(record, attribute, value)
51
+ conditions = scope_conditions(record)
52
+
53
+ # TODO: Added as find(:name => nil) throws error
54
+ value = "" if value == nil
55
+
56
+ if options[:case_sensitive]
57
+ conditions[attribute] = value
58
+ else
59
+ conditions[attribute] = /^#{Regexp.escape(value.to_s)}$/i
60
+ end
61
+
62
+ # prevent that same object is returned
63
+ # TODO: add negative condtion to not return current record
64
+ found = @klass.all(conditions).to_a
65
+ found.delete(record)
66
+
67
+ if found.count > 0
68
+ record.errors.add(attribute, :taken, options.except(:case_sensitive, :scope).merge(:value => value))
69
+ end
70
+ end
71
+
72
+ def message(instance)
73
+ super || "has already been taken"
74
+ end
75
+
76
+ def scope_conditions(instance)
77
+ Array(options[:scope] || []).inject({}) do |conditions, key|
78
+ conditions.merge(key => instance[key])
79
+ end
80
+ end
81
+ end
82
+
36
83
  private
37
84
  def perform_validations(options={})
38
85
  perform_validation = case options
data/lib/neo4j/railtie.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Neo4j
2
- class Railtie < ::Rails::Railtie
2
+ class Railtie < ::Rails::Railtie
3
3
  config.neo4j = ActiveSupport::OrderedOptions.new
4
4
 
5
5
  # Add ActiveModel translations to the I18n load_path
@@ -7,46 +7,58 @@ module Neo4j
7
7
  config.i18n.load_path += Dir[File.join(File.dirname(__FILE__), '..', '..', '..', 'config', 'locales', '*.{rb,yml}')]
8
8
  end
9
9
 
10
- # Starting Neo after :load_config_initializers allows apps to
11
- # register migrations in config/initializers
12
- initializer "neo4j.start", :after => :load_config_initializers do |app|
13
- cfg = app.config.neo4j
14
- # Set Rails specific defaults
10
+ class << self
11
+ def java_platform?
12
+ RUBY_PLATFORM =~ /java/
13
+ end
15
14
 
16
- cfg.session_type ||= :server_db
17
- cfg.session_path ||= "http://localhost:7474"
18
- cfg.sessions ||= []
15
+ def set_default_session(cfg)
16
+ cfg.session_type ||= :server_db
17
+ cfg.session_path ||= "http://localhost:7474"
18
+ cfg.sessions ||= []
19
19
 
20
- if cfg.sessions.empty?
21
- cfg.sessions << {type: cfg.session_type, path: cfg.session_path}
20
+ if cfg.sessions.empty?
21
+ cfg.sessions << {type: cfg.session_type, path: cfg.session_path}
22
+ end
22
23
  end
23
24
 
24
- cfg.sessions.each do |session_opts|
25
- if !(RUBY_PLATFORM =~ /java/) && session_opts[:type] == :embedded_db
25
+
26
+ def start_embedded_session(session)
27
+ # See https://github.com/jruby/jruby/wiki/UnlimitedStrengthCrypto
28
+ security_class = java.lang.Class.for_name('javax.crypto.JceSecurity')
29
+ restricted_field = security_class.get_declared_field('isRestricted')
30
+ restricted_field.accessible = true
31
+ restricted_field.set nil, false
32
+ session.start
33
+ end
34
+
35
+ def open_neo4j_session(session_opts)
36
+ if !java_platform? && session_opts[:type] == :embedded_db
26
37
  raise "Tried to start embedded Neo4j db without using JRuby (got #{RUBY_PLATFORM}), please run `rvm jruby`"
27
38
  end
28
39
 
29
- puts "Create Neo4j Session #{session_opts[:type]}, path: #{session_opts[:path]}"
30
40
  if (session_opts.key? :name)
31
41
  session = Neo4j::Session.open_named(session_opts[:type], session_opts[:name], session_opts[:default], session_opts[:path])
32
42
  else
33
43
  session = Neo4j::Session.open(session_opts[:type], session_opts[:path])
34
44
  end
35
45
 
36
- if session_opts[:type] == :embedded_db
46
+ start_embedded_session(session) if session_opts[:type] == :embedded_db
47
+ end
37
48
 
38
- # See https://github.com/jruby/jruby/wiki/UnlimitedStrengthCrypto
39
- security_class = java.lang.Class.for_name('javax.crypto.JceSecurity')
40
- restricted_field = security_class.get_declared_field('isRestricted')
41
- restricted_field.accessible = true
42
- restricted_field.set nil, false
49
+ end
43
50
 
44
- session.start
45
- end
46
- end
47
51
 
48
- #cfg.storage_path = "#{app.config.root}/db/neo4j-#{::Rails.env}" unless cfg.storage_path
49
- #Neo4j::Config.setup.merge!(cfg.to_hash)
52
+ # Starting Neo after :load_config_initializers allows apps to
53
+ # register migrations in config/initializers
54
+ initializer "neo4j.start", :after => :load_config_initializers do |app|
55
+ cfg = app.config.neo4j
56
+ # Set Rails specific defaults
57
+ Neo4j::Railtie.set_default_session(cfg)
58
+
59
+ cfg.sessions.each do |session_opts|
60
+ Neo4j::Railtie.open_neo4j_session(session_opts)
61
+ end
50
62
  end
51
63
  end
52
64
  end
data/lib/neo4j/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Neo4j
2
- VERSION = "3.0.0.alpha.3"
2
+ VERSION = "3.0.0.alpha.4"
3
3
  end
@@ -31,8 +31,7 @@ class Neo4j::Generators::ModelGenerator < Neo4j::Generators::Base #:nodoc:
31
31
  def has_n_statements
32
32
  txt = ""
33
33
  options[:has_n].each do |key|
34
- to, from = key.split(':')
35
- txt << (from ? "\n has_n(:#{to}).from(:#{from})\n" : "\n has_n :#{to}")
34
+ txt << has_x('has_n', key)
36
35
  end
37
36
  txt
38
37
  end
@@ -41,11 +40,15 @@ class Neo4j::Generators::ModelGenerator < Neo4j::Generators::Base #:nodoc:
41
40
  options[:has_one]
42
41
  end
43
42
 
43
+ def has_x(method, key)
44
+ to, from = key.split(':')
45
+ (from ? "\n #{method}(:#{to}).from(:#{from})\n" : "\n #{method} :#{to}")
46
+ end
47
+
44
48
  def has_one_statements
45
49
  txt = ""
46
50
  options[:has_one].each do |key|
47
- to, from = key.split(':')
48
- txt << (from ? "\n has_one(:#{to}).from(:#{from})\n" : "\n has_one :#{to}")
51
+ txt << has_x('has_one', key)
49
52
  end
50
53
  txt
51
54
  end
data/neo4j.gemspec CHANGED
@@ -14,6 +14,7 @@ Gem::Specification.new do |s|
14
14
  s.homepage = "http://github.com/andreasronge/neo4j/tree"
15
15
  s.rubyforge_project = 'neo4j'
16
16
  s.summary = "A graph database for Ruby"
17
+ s.license = 'MIT'
17
18
  s.description = <<-EOF
18
19
  You can think of Neo4j as a high-performance graph engine with all the features of a mature and robust database.
19
20
  The programmer works with an object-oriented, flexible network structure rather than with strict and static tables
@@ -32,7 +33,7 @@ It comes included with the Apache Lucene document database.
32
33
  s.add_dependency("activemodel", "~> 4.0.0")
33
34
  s.add_dependency("railties", "~> 4.0.0")
34
35
  s.add_dependency('active_attr', "~> 0.8")
35
- s.add_dependency("neo4j-core", "= 3.0.0.alpha.8")
36
+ s.add_dependency("neo4j-core", "= 3.0.0.alpha.11")
36
37
 
37
38
  if RUBY_PLATFORM =~ /java/
38
39
  s.add_dependency("neo4j-community", '~> 2.0.0')
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: neo4j
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.alpha.3
4
+ version: 3.0.0.alpha.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Ronge
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-26 00:00:00.000000000 Z
11
+ date: 2014-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: orm_adapter
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: 0.4.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.4.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activemodel
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: 4.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 4.0.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: railties
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: 4.0.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 4.0.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: active_attr
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0.8'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0.8'
69
69
  - !ruby/object:Gem::Dependency
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 3.0.0.alpha.8
75
+ version: 3.0.0.alpha.11
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 3.0.0.alpha.8
82
+ version: 3.0.0.alpha.11
83
83
  description: "You can think of Neo4j as a high-performance graph engine with all the
84
84
  features of a mature and robust database.\nThe programmer works with an object-oriented,
85
85
  flexible network structure rather than with strict and static tables \nyet enjoys
@@ -92,11 +92,19 @@ extensions: []
92
92
  extra_rdoc_files:
93
93
  - README.md
94
94
  files:
95
+ - CHANGELOG
96
+ - CONTRIBUTORS
97
+ - Gemfile
98
+ - README.md
95
99
  - bin/neo4j-jars
100
+ - config/locales/en.yml
101
+ - config/neo4j/config.yml
102
+ - lib/neo4j.rb
103
+ - lib/neo4j/active_node.rb
96
104
  - lib/neo4j/active_node/callbacks.rb
105
+ - lib/neo4j/active_node/has_n.rb
97
106
  - lib/neo4j/active_node/has_n/decl_rel.rb
98
107
  - lib/neo4j/active_node/has_n/nodes.rb
99
- - lib/neo4j/active_node/has_n.rb
100
108
  - lib/neo4j/active_node/identity.rb
101
109
  - lib/neo4j/active_node/initialize.rb
102
110
  - lib/neo4j/active_node/labels.rb
@@ -104,50 +112,42 @@ files:
104
112
  - lib/neo4j/active_node/property.rb
105
113
  - lib/neo4j/active_node/rels.rb
106
114
  - lib/neo4j/active_node/validations.rb
107
- - lib/neo4j/active_node.rb
108
115
  - lib/neo4j/railtie.rb
109
116
  - lib/neo4j/type_converters.rb
110
117
  - lib/neo4j/version.rb
111
118
  - lib/neo4j/wrapper.rb
112
- - lib/neo4j.rb
113
119
  - lib/rails/generators/neo4j/model/model_generator.rb
114
120
  - lib/rails/generators/neo4j/model/templates/model.erb
115
121
  - lib/rails/generators/neo4j_generator.rb
116
- - lib/test.rb
117
- - config/locales/en.yml
118
- - config/neo4j/config.yml
119
- - README.md
120
- - CHANGELOG
121
- - CONTRIBUTORS
122
- - Gemfile
123
122
  - neo4j.gemspec
124
123
  homepage: http://github.com/andreasronge/neo4j/tree
125
- licenses: []
124
+ licenses:
125
+ - MIT
126
126
  metadata: {}
127
127
  post_install_message:
128
128
  rdoc_options:
129
- - --quiet
130
- - --title
129
+ - "--quiet"
130
+ - "--title"
131
131
  - Neo4j.rb
132
- - --line-numbers
133
- - --main
132
+ - "--line-numbers"
133
+ - "--main"
134
134
  - README.rdoc
135
- - --inline-source
135
+ - "--inline-source"
136
136
  require_paths:
137
137
  - lib
138
138
  required_ruby_version: !ruby/object:Gem::Requirement
139
139
  requirements:
140
- - - '>='
140
+ - - ">="
141
141
  - !ruby/object:Gem::Version
142
142
  version: 1.9.1
143
143
  required_rubygems_version: !ruby/object:Gem::Requirement
144
144
  requirements:
145
- - - '>'
145
+ - - ">"
146
146
  - !ruby/object:Gem::Version
147
147
  version: 1.3.1
148
148
  requirements: []
149
149
  rubyforge_project: neo4j
150
- rubygems_version: 2.1.5
150
+ rubygems_version: 2.2.2
151
151
  signing_key:
152
152
  specification_version: 4
153
153
  summary: A graph database for Ruby
data/lib/test.rb DELETED
@@ -1,16 +0,0 @@
1
- require 'neo4j'
2
-
3
- class Person
4
- include Neo4j::ActiveNode
5
- property :born, type: Date
6
- property :since
7
-
8
- end
9
-
10
- #Neo4j::Session.open(:server_db, 'http://localhost:7474')
11
-
12
- puts "Type #{Person._attribute_type(:born)}, class #{Person._attribute_type(:born).class}"
13
- puts "Type since #{Person._attribute_type(:since)}"
14
- p = Person.new(born: Date.today)
15
- #p.save
16
- puts "BORN #{p.born} type: #{p.born.class}"