neo4j 1.0.0.beta.21-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. data/CHANGELOG +141 -0
  2. data/CONTRIBUTORS +17 -0
  3. data/Gemfile +16 -0
  4. data/README.rdoc +135 -0
  5. data/lib/generators/neo4j.rb +65 -0
  6. data/lib/generators/neo4j/model/model_generator.rb +39 -0
  7. data/lib/generators/neo4j/model/templates/model.erb +7 -0
  8. data/lib/neo4j.rb +77 -0
  9. data/lib/neo4j/config.rb +153 -0
  10. data/lib/neo4j/database.rb +56 -0
  11. data/lib/neo4j/equal.rb +21 -0
  12. data/lib/neo4j/event_handler.rb +116 -0
  13. data/lib/neo4j/index/class_methods.rb +62 -0
  14. data/lib/neo4j/index/index.rb +33 -0
  15. data/lib/neo4j/index/indexer.rb +312 -0
  16. data/lib/neo4j/index/indexer_registry.rb +68 -0
  17. data/lib/neo4j/index/lucene_query.rb +191 -0
  18. data/lib/neo4j/jars/geronimo-jta_1.1_spec-1.1.1.jar +0 -0
  19. data/lib/neo4j/jars/lucene-core-3.0.2.jar +0 -0
  20. data/lib/neo4j/jars/neo4j-index-1.2-1.2.M03.jar +0 -0
  21. data/lib/neo4j/jars/neo4j-kernel-1.2-1.2.M03.jar +0 -0
  22. data/lib/neo4j/jars/neo4j-lucene-index-0.2-1.2.M03.jar +0 -0
  23. data/lib/neo4j/load.rb +21 -0
  24. data/lib/neo4j/mapping/class_methods/init_node.rb +50 -0
  25. data/lib/neo4j/mapping/class_methods/init_rel.rb +35 -0
  26. data/lib/neo4j/mapping/class_methods/list.rb +13 -0
  27. data/lib/neo4j/mapping/class_methods/property.rb +82 -0
  28. data/lib/neo4j/mapping/class_methods/relationship.rb +91 -0
  29. data/lib/neo4j/mapping/class_methods/rule.rb +295 -0
  30. data/lib/neo4j/mapping/decl_relationship_dsl.rb +214 -0
  31. data/lib/neo4j/mapping/has_list.rb +134 -0
  32. data/lib/neo4j/mapping/has_n.rb +83 -0
  33. data/lib/neo4j/mapping/node_mixin.rb +112 -0
  34. data/lib/neo4j/mapping/relationship_mixin.rb +120 -0
  35. data/lib/neo4j/model.rb +4 -0
  36. data/lib/neo4j/neo4j.rb +95 -0
  37. data/lib/neo4j/node.rb +131 -0
  38. data/lib/neo4j/node_mixin.rb +4 -0
  39. data/lib/neo4j/node_relationship.rb +149 -0
  40. data/lib/neo4j/node_traverser.rb +157 -0
  41. data/lib/neo4j/property.rb +111 -0
  42. data/lib/neo4j/rails/attributes.rb +155 -0
  43. data/lib/neo4j/rails/callbacks.rb +34 -0
  44. data/lib/neo4j/rails/finders.rb +134 -0
  45. data/lib/neo4j/rails/lucene_connection_closer.rb +19 -0
  46. data/lib/neo4j/rails/mapping/property.rb +60 -0
  47. data/lib/neo4j/rails/model.rb +105 -0
  48. data/lib/neo4j/rails/persistence.rb +260 -0
  49. data/lib/neo4j/rails/railtie.rb +21 -0
  50. data/lib/neo4j/rails/relationships/mapper.rb +96 -0
  51. data/lib/neo4j/rails/relationships/relationship.rb +30 -0
  52. data/lib/neo4j/rails/relationships/relationships.rb +60 -0
  53. data/lib/neo4j/rails/serialization.rb +25 -0
  54. data/lib/neo4j/rails/timestamps.rb +65 -0
  55. data/lib/neo4j/rails/transaction.rb +67 -0
  56. data/lib/neo4j/rails/tx_methods.rb +15 -0
  57. data/lib/neo4j/rails/validations.rb +38 -0
  58. data/lib/neo4j/rails/validations/non_nil.rb +11 -0
  59. data/lib/neo4j/rails/validations/uniqueness.rb +37 -0
  60. data/lib/neo4j/relationship.rb +169 -0
  61. data/lib/neo4j/relationship_mixin.rb +4 -0
  62. data/lib/neo4j/relationship_traverser.rb +92 -0
  63. data/lib/neo4j/to_java.rb +31 -0
  64. data/lib/neo4j/transaction.rb +68 -0
  65. data/lib/neo4j/type_converters.rb +117 -0
  66. data/lib/neo4j/version.rb +3 -0
  67. data/lib/orm_adapter/adapters/neo4j.rb +55 -0
  68. data/lib/tmp/neo4j/active_tx_log +1 -0
  69. data/lib/tmp/neo4j/index/lucene-store.db +0 -0
  70. data/lib/tmp/neo4j/index/lucene.log.active +0 -0
  71. data/lib/tmp/neo4j/lucene-fulltext/lucene-store.db +0 -0
  72. data/lib/tmp/neo4j/lucene-fulltext/lucene.log.active +0 -0
  73. data/lib/tmp/neo4j/lucene/lucene-store.db +0 -0
  74. data/lib/tmp/neo4j/lucene/lucene.log.active +0 -0
  75. data/lib/tmp/neo4j/messages.log +85 -0
  76. data/lib/tmp/neo4j/neostore +0 -0
  77. data/lib/tmp/neo4j/neostore.id +0 -0
  78. data/lib/tmp/neo4j/neostore.nodestore.db +0 -0
  79. data/lib/tmp/neo4j/neostore.nodestore.db.id +0 -0
  80. data/lib/tmp/neo4j/neostore.propertystore.db +0 -0
  81. data/lib/tmp/neo4j/neostore.propertystore.db.arrays +0 -0
  82. data/lib/tmp/neo4j/neostore.propertystore.db.arrays.id +0 -0
  83. data/lib/tmp/neo4j/neostore.propertystore.db.id +0 -0
  84. data/lib/tmp/neo4j/neostore.propertystore.db.index +0 -0
  85. data/lib/tmp/neo4j/neostore.propertystore.db.index.id +0 -0
  86. data/lib/tmp/neo4j/neostore.propertystore.db.index.keys +0 -0
  87. data/lib/tmp/neo4j/neostore.propertystore.db.index.keys.id +0 -0
  88. data/lib/tmp/neo4j/neostore.propertystore.db.strings +0 -0
  89. data/lib/tmp/neo4j/neostore.propertystore.db.strings.id +0 -0
  90. data/lib/tmp/neo4j/neostore.relationshipstore.db +0 -0
  91. data/lib/tmp/neo4j/neostore.relationshipstore.db.id +0 -0
  92. data/lib/tmp/neo4j/neostore.relationshiptypestore.db +0 -0
  93. data/lib/tmp/neo4j/neostore.relationshiptypestore.db.id +0 -0
  94. data/lib/tmp/neo4j/neostore.relationshiptypestore.db.names +0 -0
  95. data/lib/tmp/neo4j/neostore.relationshiptypestore.db.names.id +0 -0
  96. data/lib/tmp/neo4j/nioneo_logical.log.active +0 -0
  97. data/lib/tmp/neo4j/tm_tx_log.1 +0 -0
  98. data/neo4j.gemspec +31 -0
  99. metadata +216 -0
data/CHANGELOG ADDED
@@ -0,0 +1,141 @@
1
+ == 0.4.4 / 2010-08-01
2
+ * Fixed bug on traversing when using the RelationshipMixin (#121)
3
+ * BatchInserter and JRuby 1.6 - Fix iteration error with trying to modify in-place hash
4
+
5
+ == 0.4.3 / 2010-04-10
6
+ * Fixed .gitignore - make sure that we do not include unnecessarily files like neo4j databases. Release 0.4.2 contained test data.
7
+ * Added synchronize around Index.new so that two thread can't modify the same index at the same time.
8
+
9
+ == 0.4.2 / 2010-04-08
10
+ * No index on properties for the initialize method bug (#116)
11
+ * Tidy up Thread Synchronization in Lucene wrapper - lucene indexing performance improvement (#117)
12
+ * Permission bug loading neo4j jar file (#118)
13
+ * Spike: Make NodeMixin ActiveModel complient - experimental (#115)
14
+
15
+ == 0.4.1 / 2010-03-11
16
+ * Migrations (#108)
17
+ * BatchInserter (#111)
18
+ * Neo4j::Relationship.new should take a hash of properties (#110)
19
+ * Upgrade to neo4j-1.0 (#114)
20
+ * Bigfix: has_one should replace old relationship (#106)
21
+ * Bugfix: custom accessors for NodeMixin#update (#113)
22
+ * Bugfix: Indexed properties problem on extented ruby classes critical "properties indexer" (#112)
23
+
24
+ == 0.4.0 / 2010-02-06
25
+ * Performance improvements and Refactoring: Use and Extend Neo4j Java Classes (#97)
26
+ * Support for Index and Declaration of Properties on Relationships (#91)
27
+ * Upgrade to neo4j-1.0 rc (#100)
28
+ * All internal properties should be prefix with a '_',0.4.0 (#105)
29
+ * Generate relationship accessor methods for declared has_n and has_one relationships (#104)
30
+ * New way of creating relationship - Neo4j::Relationship.new (#103)
31
+ * Neo4j#init_node method should take one or more args (#98)
32
+ * Namespaced relationships: has_one...from using the wrong has_n...to(#92)
33
+ * Neo4j::NodeMixin and Neo4j::Node should allow a hash for initialization (#99)
34
+
35
+ == 0.3.3 / 2009-11-25
36
+ * Support for a counter property on has_lists (#75)
37
+ * Support for Cascade delete. On has_n, had_one and has_list (#81)
38
+ * NodeMixin#all should work with inheritance - Child classes should have a relationship of their own. (#64)
39
+ * Support for other lucene analyzer then StandardAnalyzer (#87)
40
+ * NodeMixin initialize should accept block like docs (#82)
41
+ * Add incoming relationship should work as expected: n1.relationships.incoming(:foo) << n2 (#80)
42
+ * Delete node from a has_list relationship should work as expected (#79)
43
+ * Improve stacktraces (#94)
44
+ * Removed sideeffect of rspecs (#90)
45
+ * Add debug method on NodeMixin to print it self (#88)
46
+ * Removed to_a method (#73)
47
+ * Upgrade to neo4j-1.0b10 (#95)
48
+ * Upgrade to lucene 2.9.0 (#83)
49
+ * Refactoring: RSpecs (#74)
50
+ * Refactoring: aggregate each, renamed to property aggregator (#72)
51
+ * BugFix: neo4j gem cannot be built from the source (#86)
52
+ * BugFix: Neo4j::relationship should not raise Exception if there are no relationships (#78)
53
+
54
+ == 0.3.2 / 2009-09-17
55
+ * Added support for aggregating nodes (#65)
56
+ * Wrapped Neo4j GraphAlgo AllSimplePath (#70)
57
+ * Added traversal with traversal position (#71)
58
+ * Removed DynamicAccessors mixin, replaced by [] operator (#67)
59
+ * Impl Neo4j.all_nodes (#69)
60
+ * Upgrated Neo4j jar file to 1.0-b9
61
+ * The Neo4j#relationship method now allows a filter parameter (#66)
62
+ * Neo4j.rb now can read database not created by Neo4j.rb - does not require classname property (#63)
63
+ * REST - added an "all" value for the depth traversal query parameter (#62)
64
+ * REST - Performance improvments using the Rest Mixin (#60)
65
+
66
+ == 0.3.1 / 2009-07-25
67
+ * Feature, extension - find path between given pair of nodes (#58)
68
+ * Fix a messy exception on GET /nodes/UnknownClassName (#57)
69
+ * Bug - exception on GET /nodes/classname/rel if rel is a has_one relationship (#56)
70
+ * Bug: GET /nodes/classname missing out nodes with no properties (#55)
71
+ * Bug: Lucene sorting caused exception if there were no documents (#54)
72
+ * Bug: reindexer fails to connect nodes to the IndexNode (#53)
73
+
74
+ == 0.3.0 / 2009-06-25
75
+ * Neo4j should track node changes
76
+ * RESTful support for lucene queries, sorting and paging
77
+ * RESTful support for Relationships
78
+ * RESTful support for Node and properties
79
+ * Experimental support for Master-Slave Replication via REST
80
+ * RESTful Node representation should contain hyperlinks to relationships
81
+ * Added some handy method like first and empty? on relationships
82
+ * Use new neo4j: neo-1.0-b8
83
+ * Add an event handler for create/delete nodes start/stop neo, update property/relationship
84
+ * The NodeMixin should behave like a hash, added [] and []= methods
85
+ * Support list topology - has_list and belongs_to_list Neo4j::NodeMixin Classmethods
86
+ * Should be possible to add relationships without declaring them (Neo4j#relationships.outgoing(:friends) << node)
87
+ * Neo4j extensions file structure, should be easy to create your own extensions
88
+ * Rename relation to relationship (Neo4j::Relations => Neo4j::Relationships, DynamicRelation => Relationship) [data incompatible change]
89
+ * Auto Transaction is now optional
90
+ * Setting Float properties fails under JRuby1.2.0
91
+ * Bug: Indexing relationships does not work
92
+ * Make the ReferenceNode include Neo4j::NodeMixin
93
+ * Added handy Neo4j class that simply includes the Neo4j::NodeMixin
94
+ * Neo4j::IndexNode now holds references to all nodes (Neo4j.ref_node -> Neo4j::IndexNode -> ...)
95
+
96
+
97
+ == 0.2.1 / 2009-03-15
98
+ * Refactoring of lucene indexing of the node space (28)
99
+ * Fixed bug on Neo4j::Nodemixin#property? (#22)
100
+
101
+
102
+ == 0.2.0 / 2009-01-20
103
+ * Impl. Neo4j::Node#traverse - enables traversal and filtering using TraversalPosition info (#17,#19)
104
+ * Impl. traversal to any depth (#15)
105
+ * Impl. traversal several relationships type at the same time (#16)
106
+ * Fixed a Lucene timezone bug (#20)
107
+ * Lots of refactoring of the neo4j.rb traversal code and RSpecs
108
+
109
+ == 0.1.0 / 2008-12-18
110
+ * Property can now be of any type (and not only String, Fixnum, Float)
111
+ * Indexing and Query with Date and DateTime
112
+ * YARD documentation
113
+ * Properties can be removed
114
+ * A property can be set to nil (it will then be removed).
115
+
116
+ == 0.0.7 / 2008-12-10
117
+ * Added method to_param and methods on the value object needed for Ruby on Rails
118
+ * Impl. update from a value object/hash for a node
119
+ * Impl. generation of value object classes/instances from a node.
120
+ * Refactoring the Transaction handling (reuse PlaceboTransaction instances if possible)
121
+ * Removed the need to start and stop neo. It will be done automatically when needed.
122
+
123
+
124
+ == 0.0.6 / 2008-12-03
125
+ * Removed the configuration from the Neo4j.start method. Now exist in Neo4j::Config and Lucene::Config.
126
+ * Implemented sort_by method.
127
+ * Lazy loading of search result. Execute the query and load the nodes only if needed.
128
+ * Added support to use lucene query language, example: Person.find("name:foo AND age:42")
129
+ * All test now uses RAM based lucene indexes.
130
+
131
+ == 0.0.5 / 2008-11-17
132
+ * Supports keeping lucene index in memory instead of on disk
133
+ * Added support for lucene full text search
134
+ * Fixed so neo4j runs on JRuby 1.1.5
135
+ * 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.
136
+ * Added ReferenceNode. All nodes now have a relationship from this reference node.
137
+ * Lots of refactoring
138
+ * Added the IMDB example. It shows how to create a neo database, lucene queries and node traversals.
139
+
140
+ == 0.0.4 / 2008-10-23
141
+ * First release to rubyforge
data/CONTRIBUTORS ADDED
@@ -0,0 +1,17 @@
1
+ Maintainer:
2
+ Andreas Ronge <andreas dot ronge at gmail dot com>
3
+
4
+ Contributors:
5
+ * Ben Jackson
6
+ * Dwight van Tuyl
7
+ * Martin Kleppmann
8
+ * Peter Neubauer
9
+ * Jan-Felix Wittmann
10
+ * Marius Mårnes Mathiesen
11
+ * Bert Fitié
12
+ * Jan Berkel
13
+ * David Beckwith
14
+ * Johny Ho
15
+ * Carlo Cabanilla
16
+ * Anders Janmyr
17
+ * Nick Sieger
data/Gemfile ADDED
@@ -0,0 +1,16 @@
1
+ source :gemcutter
2
+
3
+ gemspec
4
+
5
+ group 'test' do
6
+ gem "rake", ">= 0.8.7"
7
+ gem "rdoc", ">= 2.5.10"
8
+ gem "horo", ">= 1.0.2"
9
+ gem "rspec", ">= 2.0.0"
10
+ gem "rspec-rails-matchers", ">= 0.2.1"
11
+ gem "test-unit"
12
+ end
13
+
14
+ #gem 'ruby-debug-base19' if RUBY_VERSION.include? "1.9"
15
+ #gem 'ruby-debug-base' if RUBY_VERSION.include? "1.8"
16
+ #gem "ruby-debug-ide"
data/README.rdoc ADDED
@@ -0,0 +1,135 @@
1
+ == Welcome to Neo4j.rb
2
+
3
+ Neo4j.rb is a graph database for JRuby.
4
+
5
+ You can think of \Neo4j as a high-performance graph engine with all the features of a mature and robust database.
6
+ The programmer works with an object-oriented, flexible network structure rather than with strict and static tables — yet enjoys all the benefits of a fully transactional, enterprise-strength database.
7
+
8
+ It uses two powerful and mature Java libraries:
9
+ * {Neo4J}[http://www.neo4j.org] - for persistence and traversal of the graph
10
+ * {Lucene}[http://lucene.apache.org/java/docs/index.html] for querying and indexing.
11
+
12
+ === Why Neo4j.rb or a Graph Database ?
13
+
14
+ Here are some of the major benefits of Neo4j.rb
15
+
16
+ * Domain Modeling - use the language of a graph (nodes/relationship/properties) to express your domain !
17
+ * Schema Less and Efficient storage of Semi Structured Information
18
+ * No {O/R mismatch}[http://en.wikipedia.org/wiki/Object-relational_impedance_mismatch] - very natural to map a graph to an \Object Oriented language like Ruby.
19
+ * {Performance}[http://www.oscon.com/oscon2009/public/schedule/detail/8364]
20
+ * Embedded Database - no database tier, easier to install, test, deploy and configure. It is run in the same process as your application.
21
+ * Express Queries as Traversals
22
+ * Fast deep traversal instead of slow SQL queries that span many table joins.
23
+ * Very natural to express graph related problem with traversals (recommendation engine, find shortest parth etc..)
24
+ * Seamless integration with Ruby on \Rails.
25
+ * ACID Transaction with rollbacks support.
26
+
27
+ === Documentation
28
+
29
+ * {API Documentation}[http://neo4j.rubyforge.org]
30
+ * {Documentation and Getting Started with Neo4j}[http://neo4j.rubyforge.org/guides/index.html]
31
+
32
+ === Some Examples
33
+
34
+ ==== Neo4j::Node
35
+
36
+ Example of creating a Neo4j::Node
37
+
38
+ require "rubygems"
39
+ require 'neo4j'
40
+
41
+ Neo4j::Transaction.run do
42
+ node = Neo4j::Node.new (:name => 'andreas')
43
+ node.outgoing(:friends) << Neo4j::Node.new (:name => 'peter')
44
+ node.outgoing(:friends).each {|node| puts "name #{node[:name]}"}
45
+ end
46
+
47
+ ==== Neo4j::Mapping::NodeMixin
48
+
49
+ Example of mapping a ruby class to a node and delaring properties and relationships and lucene index.
50
+
51
+ class Person
52
+ include Neo4j::NodeMixin
53
+ property :name
54
+ property :city
55
+
56
+ has_n :friends
57
+ has_one :address
58
+ index :name
59
+ end
60
+
61
+ # assume we have an transaction already running
62
+ andreas = Person.new (:name => 'andreas')
63
+ andreas.friends << Person.new (:name => 'peter')
64
+ andreas.friends.each {|person| puts "name #{person.name}" }
65
+ Person.find("name: andreas").first.name # => 'andreas'
66
+
67
+ ==== Neo4j::Rails::Model
68
+
69
+ Example of using Neo4j with Rails 3 (ActiveModel)
70
+
71
+ class User < Neo4j::Model
72
+ attr_accessor :password
73
+ attr_accessible :email, :password, :password_confirmation, :pending_account
74
+
75
+ after_save :encrypt_password
76
+
77
+ email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
78
+
79
+ property :email
80
+ index :email
81
+
82
+ has_one(:avatar).to(Avator)
83
+
84
+ validates :email, :presence => true,:format => { :with => email_regex }
85
+ validates :email, :uniqueness => true, :unless => :pending_account?
86
+ accepts_nested_attributes_for :avatar, :allow_destroy => true
87
+
88
+ ...
89
+ end
90
+
91
+ ==== Generate a Rails Application
92
+
93
+ Example of creating an Neo4j Application from scratch:
94
+
95
+ gem install rails
96
+ rails new myapp -m http://andreasronge.github.com/rails3.rb
97
+ cd myapp
98
+ bundle
99
+ rails generate scaffold User name:string email:string
100
+ rails s
101
+ open a webbrowser: http://localhost:3000/users
102
+
103
+ You may get an error message "ERROR IOError: Connection reset by peer"
104
+ using WEBrick (it still works). This error message is not shown when running
105
+ the application with {Tomcat/Trinidad}[https://github.com/calavera/trinidad]
106
+
107
+ To run it with Tomcat
108
+
109
+ gem install trinidad
110
+ trinidad
111
+
112
+
113
+ === Presentation Materials and other URLs
114
+ * {Intoduction to Neo4j.rb}[http://www.slideshare.net/andreasronge/neo4jrb]
115
+ * {Nordic Ruby 2010 May 21-23}[http://nordicruby.org/speakers#user_29]
116
+ * {Neo4j wiki, check the guidelines and domain modeling gallery pages}[http://wiki.neo4j.org/content/Main_Page]
117
+
118
+ === Project information
119
+ * {GitHub}[http://github.com/andreasronge/neo4j/tree/master]
120
+ * {Lighthouse Issue Tracking}[http://neo4j.lighthouseapp.com]
121
+ * {Twitter}[http://twitter.com/ronge]
122
+ * IRC - #neo4j @ irc.freenode.net
123
+ * {Mailing list, neo4jrb@googlegroups.com}[http://groups.google.com/group/neo4jrb]
124
+
125
+ === Contributing
126
+
127
+ Have you found a bug, need help or have a patch ?
128
+ Just clone neo4j.rb and send me a pull request or email me.
129
+ Do you need help - send me an email (andreas.ronge at gmail dot com).
130
+ Please also check/add issues at lighthouse, http://neo4j.lighthouseapp.com
131
+
132
+ === License
133
+ * Neo4j.rb - MIT, see the LICENSE file http://github.com/andreasronge/neo4j/tree/master/LICENSE.
134
+ * Lucene - Apache, see http://lucene.apache.org/java/docs/features.html
135
+ * \Neo4j - Dual free software/commercial license, see http://neo4j.org/
@@ -0,0 +1,65 @@
1
+ require 'rails/generators/named_base'
2
+ require 'rails/generators/active_model'
3
+
4
+ module Neo4j
5
+ module Generators
6
+ end
7
+ end
8
+
9
+ class Neo4j::Generators::Base < Rails::Generators::NamedBase #:nodoc:
10
+ def self.source_root
11
+ @_neo4j_source_root ||= File.expand_path(File.join(File.dirname(__FILE__),
12
+ 'neo4j', generator_name, 'templates'))
13
+ end
14
+ end
15
+
16
+ class Neo4j::Generators::ActiveModel < Rails::Generators::ActiveModel #:nodoc:
17
+ def self.all(klass)
18
+ "#{klass}.all"
19
+ end
20
+
21
+ def self.find(klass, params=nil)
22
+ "#{klass}.find(#{params})"
23
+ end
24
+
25
+ def self.build(klass, params=nil)
26
+ if params
27
+ "#{klass}.new(#{params})"
28
+ else
29
+ "#{klass}.new"
30
+ end
31
+ end
32
+
33
+ def save
34
+ "#{name}.save"
35
+ end
36
+
37
+ def update_attributes(params=nil)
38
+ "#{name}.update_attributes(#{params})"
39
+ end
40
+
41
+ def errors
42
+ "#{name}.errors"
43
+ end
44
+
45
+ def destroy
46
+ "#{name}.destroy"
47
+ end
48
+ end
49
+
50
+ module Rails
51
+ module Generators
52
+ class GeneratedAttribute #:nodoc:
53
+ def type_class
54
+ case type.to_s.downcase
55
+ when 'datetime' then 'DateTime'
56
+ when 'date' then 'Date'
57
+ when 'text' then 'String'
58
+ when 'integer', 'number', 'fixnum' then 'Fixnum'
59
+ when 'float' then 'Float'
60
+ else 'String'
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,39 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', 'neo4j.rb')
2
+
3
+ class Neo4j::Generators::ModelGenerator < Neo4j::Generators::Base
4
+ argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
5
+
6
+ check_class_collision
7
+
8
+ class_option :timestamps, :type => :boolean
9
+ class_option :parent, :type => :string, :desc => "The parent class for the generated model"
10
+
11
+ def create_model_file
12
+ template "model.erb", File.join('app/models', "#{singular_name}.rb")
13
+ end
14
+
15
+ protected
16
+ def migration?
17
+ false
18
+ end
19
+
20
+ def timestamps?
21
+ options[:timestamps]
22
+ end
23
+
24
+ def parent?
25
+ options[:parent]
26
+ end
27
+
28
+ def timestamp_statements
29
+ %q{
30
+ property :created_at, DateTime
31
+ # property :created_on, Date
32
+
33
+ property :updated_at, DateTime
34
+ # property :updated_on, Date
35
+ }
36
+ end
37
+
38
+ hook_for :test_framework
39
+ end
@@ -0,0 +1,7 @@
1
+ class <%= class_name %> < <%= parent? ? options[:parent].classify : "Neo4j::Rails::Model" %>
2
+ <% attributes.each do |attribute| -%>
3
+ property :<%= attribute.name %><%= ", :type => #{attribute.type_class}" %>
4
+ <% end -%>
5
+
6
+ <%= timestamp_statements if timestamps? -%>
7
+ end
data/lib/neo4j.rb ADDED
@@ -0,0 +1,77 @@
1
+ include Java
2
+
3
+ require 'enumerator'
4
+ require 'forwardable'
5
+ require 'time'
6
+ require 'date'
7
+
8
+ require 'neo4j/jars/neo4j-index-1.2-1.2.M03.jar'
9
+ require 'neo4j/jars/neo4j-kernel-1.2-1.2.M03.jar'
10
+ require 'neo4j/jars/neo4j-lucene-index-0.2-1.2.M03.jar'
11
+ require 'neo4j/jars/geronimo-jta_1.1_spec-1.1.1.jar'
12
+ require 'neo4j/jars/lucene-core-3.0.2.jar'
13
+ require 'neo4j/to_java'
14
+ require 'neo4j/version'
15
+ require 'neo4j/equal'
16
+
17
+ require 'neo4j/event_handler'
18
+ require 'neo4j/database'
19
+ require 'neo4j/neo4j'
20
+
21
+ require 'neo4j/index/index'
22
+ require 'neo4j/index/class_methods'
23
+ require 'neo4j/index/indexer_registry'
24
+ require 'neo4j/index/indexer'
25
+ require 'neo4j/index/lucene_query'
26
+ require 'neo4j/relationship_traverser'
27
+ require 'neo4j/node_traverser'
28
+ require 'neo4j/property'
29
+ require 'neo4j/transaction'
30
+ require 'neo4j/node_relationship'
31
+ require 'neo4j/load'
32
+ require 'neo4j/relationship'
33
+ require 'neo4j/node'
34
+ require 'neo4j/config'
35
+ require 'neo4j/type_converters'
36
+ require 'neo4j/mapping/class_methods/init_node'
37
+ require 'neo4j/mapping/class_methods/init_rel'
38
+ require 'neo4j/mapping/class_methods/property'
39
+ require 'neo4j/mapping/class_methods/relationship'
40
+ require 'neo4j/mapping/class_methods/list'
41
+ require 'neo4j/mapping/decl_relationship_dsl'
42
+ require 'neo4j/mapping/has_n'
43
+ require 'neo4j/mapping/has_list'
44
+ require 'neo4j/mapping/node_mixin'
45
+ require 'neo4j/mapping/relationship_mixin'
46
+ require 'neo4j/node_mixin'
47
+ require 'neo4j/relationship_mixin'
48
+ require 'neo4j/mapping/class_methods/rule'
49
+
50
+ # rails
51
+ require 'rails/railtie'
52
+ require 'active_model'
53
+ require 'neo4j/rails/tx_methods'
54
+ require 'neo4j/rails/transaction'
55
+ require 'neo4j/rails/railtie'
56
+ require 'neo4j/rails/validations/uniqueness'
57
+ require 'neo4j/rails/validations/non_nil'
58
+ require 'neo4j/rails/finders'
59
+ require 'neo4j/rails/mapping/property'
60
+ require 'neo4j/rails/validations'
61
+ require 'neo4j/rails/callbacks'
62
+ require 'neo4j/rails/timestamps'
63
+ require 'neo4j/rails/serialization'
64
+ require 'neo4j/rails/attributes'
65
+ require 'neo4j/rails/persistence'
66
+ require 'neo4j/rails/relationships/mapper'
67
+ require 'neo4j/rails/relationships/relationship'
68
+ require 'neo4j/rails/relationships/relationships'
69
+ require 'neo4j/rails/model'
70
+ require 'neo4j/rails/lucene_connection_closer'
71
+
72
+ require 'neo4j/model'
73
+ require 'orm_adapter/adapters/neo4j'
74
+
75
+ # hmm, looks like Enumerator have been moved in some ruby versions
76
+ Enumerator = Enumerable::Enumerator unless defined? Enumerator
77
+