neo4j-core 0.0.3-java → 0.0.4-java
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.
- data/README.rdoc +3 -3
- data/lib/neo4j-core.rb +0 -2
- data/lib/neo4j-core/index/class_methods.rb +5 -2
- data/lib/neo4j-core/index/index.rb +1 -2
- data/lib/neo4j-core/index/index_config.rb +15 -15
- data/lib/neo4j-core/index/lucene_query.rb +41 -42
- data/lib/neo4j-core/rels/rels.rb +3 -3
- data/lib/neo4j-core/version.rb +1 -1
- metadata +2 -3
- data/lib/neo4j/type_converters/type_converters.rb +0 -287
    
        data/README.rdoc
    CHANGED
    
    | @@ -1,11 +1,11 @@ | |
| 1 1 | 
             
            == Neo4j-core {<img src="https://secure.travis-ci.org/andreasronge/neo4j-core.png" />}[http://travis-ci.org/andreasronge/neo4j-core]
         | 
| 2 2 |  | 
| 3 3 | 
             
            This gem only contains the JRuby mapping of the Neo4j graph database.
         | 
| 4 | 
            -
            The neo4j.rb gem will be split up into  | 
| 4 | 
            +
            The neo4j.rb gem will be split up into three gems, neo4j-core, {neo4j-wrapper}[http://github.com/andreasronge/neo4j-wrapper] and {neo4j}[http://github.com/andreasronge/neo4j].
         | 
| 5 5 | 
             
            This gem will be included by neo4j 2.0.0 gem.
         | 
| 6 6 |  | 
| 7 7 | 
             
            This gem contains two modules: Neo4j and Neo4j::Core
         | 
| 8 | 
            -
            The Neo4j module is public and the Neo4j::Core(::*) are  | 
| 8 | 
            +
            The Neo4j module is public and the Neo4j::Core(::*) are internal modules.
         | 
| 9 9 |  | 
| 10 10 | 
             
            == Documentation
         | 
| 11 11 |  | 
| @@ -23,7 +23,7 @@ The Neo4j module is public and the Neo4j::Core(::*) are private modules. | |
| 23 23 |  | 
| 24 24 | 
             
            == Custom Index
         | 
| 25 25 |  | 
| 26 | 
            -
            You can create your own indexer
         | 
| 26 | 
            +
            You can create your own indexer.
         | 
| 27 27 |  | 
| 28 28 | 
             
              class MyIndex
         | 
| 29 29 | 
             
                extend Neo4j::Core::Index::ClassMethods
         | 
    
        data/lib/neo4j-core.rb
    CHANGED
    
    | @@ -50,8 +50,6 @@ require 'neo4j-core/node/class_methods' | |
| 50 50 |  | 
| 51 51 | 
             
            require 'neo4j/transaction'
         | 
| 52 52 |  | 
| 53 | 
            -
            require 'neo4j/type_converters/type_converters'
         | 
| 54 | 
            -
             | 
| 55 53 | 
             
            require 'neo4j-core/traversal/evaluator'
         | 
| 56 54 | 
             
            require 'neo4j-core/traversal/filter_predicate'
         | 
| 57 55 | 
             
            require 'neo4j-core/traversal/prune_evaluator'
         | 
| @@ -41,7 +41,7 @@ module Neo4j | |
| 41 41 | 
             
                    # @return [Neo4j::Core::Index::Indexer] The indexer that should be used to index the given class
         | 
| 42 42 | 
             
                    # @see Neo4j::Core::Index::IndexConfig for possible configuration values in the +config_dsl+ block
         | 
| 43 43 | 
             
                    # @yield evaluated in the a Neo4j::Core::Index::IndexConfig object to configure it.
         | 
| 44 | 
            -
                    def node_indexer(config = IndexConfig.new(:node), &config_dsl)
         | 
| 44 | 
            +
                    def node_indexer(config = _config || IndexConfig.new(:node), &config_dsl)
         | 
| 45 45 | 
             
                      config.instance_eval(&config_dsl)
         | 
| 46 46 | 
             
                      indexer(config)
         | 
| 47 47 | 
             
                    end
         | 
| @@ -51,11 +51,14 @@ module Neo4j | |
| 51 51 | 
             
                    #
         | 
| 52 52 | 
             
                    # @param (see #node_indexer)
         | 
| 53 53 | 
             
                    # @return (see #node_indexer)
         | 
| 54 | 
            -
                    def rel_indexer(config = IndexConfig.new(:rel), &config_dsl)
         | 
| 54 | 
            +
                    def rel_indexer(config = _config || IndexConfig.new(:rel), &config_dsl)
         | 
| 55 55 | 
             
                      config.instance_eval(&config_dsl)
         | 
| 56 56 | 
             
                      indexer(config)
         | 
| 57 57 | 
             
                    end
         | 
| 58 58 |  | 
| 59 | 
            +
                    def _config
         | 
| 60 | 
            +
                      @_indexer && @_indexer.config
         | 
| 61 | 
            +
                    end
         | 
| 59 62 |  | 
| 60 63 | 
             
                    def indexer(index_config)
         | 
| 61 64 | 
             
                      @_indexer ||= IndexerRegistry.instance.register(Indexer.new(index_config))
         | 
| @@ -16,8 +16,7 @@ module Neo4j | |
| 16 16 | 
             
                  # @see Neo4j::Core::Index::ClassMethods#add_index
         | 
| 17 17 | 
             
                  #
         | 
| 18 18 | 
             
                  def add_index(field, value=self[field])
         | 
| 19 | 
            -
                     | 
| 20 | 
            -
                    self.class.add_index(wrapped_entity, field.to_s, converted_value)
         | 
| 19 | 
            +
                    self.class.add_index(wrapped_entity, field.to_s, value)
         | 
| 21 20 | 
             
                  end
         | 
| 22 21 |  | 
| 23 22 | 
             
                  # Removes an index on the given property.
         | 
| @@ -5,23 +5,25 @@ module Neo4j | |
| 5 5 | 
             
                  # Responsible for holding the configuration for one index
         | 
| 6 6 | 
             
                  # Is used in a DSL to configure the index.
         | 
| 7 7 | 
             
                  class IndexConfig
         | 
| 8 | 
            -
                    attr_reader :_trigger_on, :_index_names, :entity_type, :_index_type, : | 
| 8 | 
            +
                    attr_reader :_trigger_on, :_index_names, :entity_type, :_index_type, :_field_types
         | 
| 9 9 |  | 
| 10 10 | 
             
                    # @param [:rel, :node] entity_type the type of index
         | 
| 11 11 | 
             
                    def initialize(entity_type)
         | 
| 12 12 | 
             
                      @entity_type = entity_type
         | 
| 13 13 | 
             
                      @_index_type = {}
         | 
| 14 | 
            -
                      @ | 
| 14 | 
            +
                      @_field_types = {}
         | 
| 15 15 | 
             
                      @_trigger_on = {}
         | 
| 16 | 
            -
             | 
| 16 | 
            +
                    end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                    def to_s
         | 
| 19 | 
            +
                      "IndexConfig [#@entity_type, _index_type: #{@_index_type.inspect}, _field_types: #{@_field_types.inspect}, _trigger_on: #{@_trigger_on.inspect}]"
         | 
| 17 20 | 
             
                    end
         | 
| 18 21 |  | 
| 19 22 | 
             
                    def inherit_from(clazz)
         | 
| 20 23 | 
             
                      c = clazz._indexer.config
         | 
| 21 24 | 
             
                      raise "Can't inherit from different index type #{@entity_type} != #{c.entity_type}" if @entity_type != c.entity_type
         | 
| 22 25 | 
             
                      @_index_type.merge!(c._index_type)
         | 
| 23 | 
            -
                      @ | 
| 24 | 
            -
                      @_decl_type.merge!(c._decl_type)
         | 
| 26 | 
            +
                      @_field_types.merge!(c._field_types)
         | 
| 25 27 | 
             
                    end
         | 
| 26 28 |  | 
| 27 29 | 
             
                    # Specifies which property and values the index should be triggered on.
         | 
| @@ -31,11 +33,8 @@ module Neo4j | |
| 31 33 | 
             
                      merge_and_to_string(@_trigger_on, hash)
         | 
| 32 34 | 
             
                    end
         | 
| 33 35 |  | 
| 34 | 
            -
                     | 
| 35 | 
            -
             | 
| 36 | 
            -
                    # @see Neo4j::Core::Index::ClassMethods#node_indexer
         | 
| 37 | 
            -
                    def decl_type(prop_and_type_hash)
         | 
| 38 | 
            -
                      merge_and_to_string(@_decl_type, prop_and_type_hash)
         | 
| 36 | 
            +
                    def field_type(key)
         | 
| 37 | 
            +
                      @_field_types[key.to_s]
         | 
| 39 38 | 
             
                    end
         | 
| 40 39 |  | 
| 41 40 | 
             
                    # Specifies an index with configuration
         | 
| @@ -47,14 +46,14 @@ module Neo4j | |
| 47 46 |  | 
| 48 47 | 
             
                      args.uniq.each do |field|
         | 
| 49 48 | 
             
                        @_index_type[field.to_s] = conf[:type] || :exact
         | 
| 50 | 
            -
                        @ | 
| 49 | 
            +
                        @_field_types[field.to_s] = conf[:field_type] || String
         | 
| 51 50 | 
             
                      end
         | 
| 52 51 | 
             
                    end
         | 
| 53 52 |  | 
| 54 | 
            -
                    # @return [Class] the specified type of the property or  | 
| 53 | 
            +
                    # @return [Class,nil] the specified type of the property or nil
         | 
| 55 54 | 
             
                    # @see #decl_type
         | 
| 56 55 | 
             
                    def decl_type_on(prop)
         | 
| 57 | 
            -
                      @ | 
| 56 | 
            +
                      @_field_types[prop]
         | 
| 58 57 | 
             
                    end
         | 
| 59 58 |  | 
| 60 59 | 
             
                    # @return [true, false] if the props can/should trigger an index operation
         | 
| @@ -83,7 +82,7 @@ module Neo4j | |
| 83 82 |  | 
| 84 83 | 
             
                    def rm_index_config
         | 
| 85 84 | 
             
                      @_index_type = {}
         | 
| 86 | 
            -
                      @ | 
| 85 | 
            +
                      @_field_types = {}
         | 
| 87 86 | 
             
                    end
         | 
| 88 87 |  | 
| 89 88 | 
             
                    def index_type(field)
         | 
| @@ -103,7 +102,8 @@ module Neo4j | |
| 103 102 | 
             
                    end
         | 
| 104 103 |  | 
| 105 104 | 
             
                    def numeric?(field)
         | 
| 106 | 
            -
                       | 
| 105 | 
            +
                      raise "No index on #{field.inspect}, has fields: #{@field_types.inspect}" unless @_field_types[field]
         | 
| 106 | 
            +
                      @_field_types[field] != String
         | 
| 107 107 | 
             
                    end
         | 
| 108 108 |  | 
| 109 109 | 
             
                    private
         | 
| @@ -39,11 +39,7 @@ module Neo4j | |
| 39 39 | 
             
                      @query = query
         | 
| 40 40 | 
             
                      @index_config = index_config
         | 
| 41 41 | 
             
                      @params = params
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                      if params.include?(:sort)
         | 
| 44 | 
            -
                        @order = {}
         | 
| 45 | 
            -
                        params[:sort].each_pair { |k, v| @order[k] = (v == :desc) }
         | 
| 46 | 
            -
                      end
         | 
| 42 | 
            +
                      @order = params[:sort] if params.include?(:sort)
         | 
| 47 43 | 
             
                    end
         | 
| 48 44 |  | 
| 49 45 | 
             
                    # Implements the Ruby +Enumerable+ interface
         | 
| @@ -85,30 +81,26 @@ module Neo4j | |
| 85 81 | 
             
                    # Performs a range query
         | 
| 86 82 | 
             
                    # Notice that if you don't specify a type when declaring a property a String range query will be performed.
         | 
| 87 83 | 
             
                    #
         | 
| 88 | 
            -
                    def between(lower, upper,  | 
| 84 | 
            +
                    def between(lower, upper, lower_inclusive=false, upper_inclusive=false)
         | 
| 89 85 | 
             
                      raise "Expected a symbol. Syntax for range queries example: index(:weight).between(a,b)" unless Symbol === @query
         | 
| 90 | 
            -
             | 
| 91 | 
            -
                      # check that we perform a range query on the same values as we have declared with the property :key, :type => ...
         | 
| 92 | 
            -
                      type = @index_config.decl_type_on(@query)
         | 
| 93 | 
            -
                      raise "find(#{@query}).between(#{lower}, #{upper}): #{lower} not a #{type}" if type && !type === lower.class
         | 
| 94 | 
            -
                      raise "find(#{@query}).between(#{lower}, #{upper}): #{upper} not a #{type}" if type && !type === upper.class
         | 
| 95 | 
            -
             | 
| 96 | 
            -
                      # Make it possible to convert those values
         | 
| 97 | 
            -
                      @query = range_query(@query, lower, upper, lower_incusive, upper_inclusive)
         | 
| 86 | 
            +
                      @query = range_query(@query, lower, upper, lower_inclusive, upper_inclusive)
         | 
| 98 87 | 
             
                      self
         | 
| 99 88 | 
             
                    end
         | 
| 100 89 |  | 
| 101 | 
            -
                    def range_query(field, lower, upper,  | 
| 102 | 
            -
                       | 
| 103 | 
            -
                       | 
| 90 | 
            +
                    def range_query(field, lower, upper, lower_inclusive, upper_inclusive)
         | 
| 91 | 
            +
                      type = @index_config.field_type(field)
         | 
| 92 | 
            +
                      raise "no index on field #{field}" unless type
         | 
| 93 | 
            +
                      # check that we perform a range query on the same values as we have declared with the property :key, :type => ...
         | 
| 94 | 
            +
                      raise "find(#{field}).between(#{lower}, #{upper}): #{lower} not a #{type}" unless type == lower.class
         | 
| 95 | 
            +
                      raise "find(#{field}).between(#{lower}, #{upper}): #{upper} not a #{type}" unless type == upper.class
         | 
| 104 96 |  | 
| 105 97 | 
             
                      case lower
         | 
| 106 98 | 
             
                        when Fixnum
         | 
| 107 | 
            -
                          Java::OrgApacheLuceneSearch::NumericRangeQuery.new_long_range(field.to_s, lower, upper,  | 
| 99 | 
            +
                          Java::OrgApacheLuceneSearch::NumericRangeQuery.new_long_range(field.to_s, lower, upper, lower_inclusive, upper_inclusive)
         | 
| 108 100 | 
             
                        when Float
         | 
| 109 | 
            -
                          Java::OrgApacheLuceneSearch::NumericRangeQuery.new_double_range(field.to_s, lower, upper,  | 
| 101 | 
            +
                          Java::OrgApacheLuceneSearch::NumericRangeQuery.new_double_range(field.to_s, lower, upper, lower_inclusive, upper_inclusive)
         | 
| 110 102 | 
             
                        else
         | 
| 111 | 
            -
                          Java::OrgApacheLuceneSearch::TermRangeQuery.new(field.to_s, lower, upper,  | 
| 103 | 
            +
                          Java::OrgApacheLuceneSearch::TermRangeQuery.new(field.to_s, lower, upper, lower_inclusive, upper_inclusive)
         | 
| 112 104 | 
             
                      end
         | 
| 113 105 | 
             
                    end
         | 
| 114 106 |  | 
| @@ -156,19 +148,28 @@ module Neo4j | |
| 156 148 | 
             
                    # Sort descending the given fields.
         | 
| 157 149 | 
             
                    # @param [Symbol] fields it should sort
         | 
| 158 150 | 
             
                    def desc(*fields)
         | 
| 159 | 
            -
                      @order  | 
| 151 | 
            +
                      @order ||= []
         | 
| 152 | 
            +
                      @order += fields.map { |f| [f, :desc] }
         | 
| 160 153 | 
             
                      self
         | 
| 161 154 | 
             
                    end
         | 
| 162 155 |  | 
| 163 156 | 
             
                    # Sort ascending the given fields.
         | 
| 164 157 | 
             
                    # @param [Symbol] fields it should sort
         | 
| 165 158 | 
             
                    def asc(*fields)
         | 
| 166 | 
            -
                      @order  | 
| 159 | 
            +
                      @order ||= []
         | 
| 160 | 
            +
                      @order += fields.map { |f| [f, :asc] }
         | 
| 167 161 | 
             
                      self
         | 
| 168 162 | 
             
                    end
         | 
| 169 163 |  | 
| 170 164 | 
             
                    protected
         | 
| 171 165 |  | 
| 166 | 
            +
                    def parse_query(query)
         | 
| 167 | 
            +
                      version = Java::OrgApacheLuceneUtil::Version::LUCENE_30
         | 
| 168 | 
            +
                      analyzer = Java::OrgApacheLuceneAnalysisStandard::StandardAnalyzer.new(version)
         | 
| 169 | 
            +
                      parser = Java::org.apache.lucene.queryParser.QueryParser.new(version, 'name', analyzer)
         | 
| 170 | 
            +
                      parser.parse(query)
         | 
| 171 | 
            +
                    end
         | 
| 172 | 
            +
             | 
| 172 173 | 
             
                    def build_and_query(query)
         | 
| 173 174 | 
             
                      build_composite_query(@left_and_query.build_query, query, Java::OrgApacheLuceneSearch::BooleanClause::Occur::MUST)
         | 
| 174 175 | 
             
                    end
         | 
| @@ -179,6 +180,9 @@ module Neo4j | |
| 179 180 |  | 
| 180 181 | 
             
                    def build_not_query(query)
         | 
| 181 182 | 
             
                      right_query = @right_not_query.build_query
         | 
| 183 | 
            +
                      query = parse_query(query) if query.is_a?(String)
         | 
| 184 | 
            +
                      right_query = parse_query(right_query) if right_query.is_a?(String)
         | 
| 185 | 
            +
             | 
| 182 186 | 
             
                      composite_query = Java::OrgApacheLuceneSearch::BooleanQuery.new
         | 
| 183 187 | 
             
                      composite_query.add(query, Java::OrgApacheLuceneSearch::BooleanClause::Occur::MUST_NOT)
         | 
| 184 188 | 
             
                      composite_query.add(right_query, Java::OrgApacheLuceneSearch::BooleanClause::Occur::MUST)
         | 
| @@ -186,31 +190,27 @@ module Neo4j | |
| 186 190 | 
             
                    end
         | 
| 187 191 |  | 
| 188 192 | 
             
                    def build_composite_query(left_query, right_query, operator) #:nodoc:
         | 
| 193 | 
            +
                      left_query = parse_query(left_query) if left_query.is_a?(String)
         | 
| 194 | 
            +
                      right_query = parse_query(right_query) if right_query.is_a?(String)
         | 
| 189 195 | 
             
                      composite_query = Java::OrgApacheLuceneSearch::BooleanQuery.new
         | 
| 190 | 
            -
                      version = Java::OrgApacheLuceneUtil::Version::LUCENE_35
         | 
| 191 | 
            -
                      analyzer = org.apache.lucene.analysis.standard::StandardAnalyzer.new(version)
         | 
| 192 | 
            -
                      parser = Java::org.apache.lucene.queryParser.QueryParser.new(version,'name', analyzer )
         | 
| 193 | 
            -
             | 
| 194 | 
            -
                      left_query = parser.parse(left_query) if left_query.is_a?(String)
         | 
| 195 | 
            -
                      right_query = parser.parse(right_query) if right_query.is_a?(String)
         | 
| 196 | 
            -
             | 
| 197 196 | 
             
                      composite_query.add(left_query, operator)
         | 
| 198 197 | 
             
                      composite_query.add(right_query, operator)
         | 
| 199 198 | 
             
                      composite_query
         | 
| 200 199 | 
             
                    end
         | 
| 201 200 |  | 
| 202 201 | 
             
                    def build_sort_query(query) #:nodoc:
         | 
| 203 | 
            -
                      java_sort_fields = @order. | 
| 204 | 
            -
                         | 
| 202 | 
            +
                      java_sort_fields = @order.inject([]) do |memo, val|
         | 
| 203 | 
            +
                        field = val[0]
         | 
| 204 | 
            +
                        field_type = @index_config.field_type(field)
         | 
| 205 205 | 
             
                        type = case
         | 
| 206 | 
            -
                                 when Float ==  | 
| 206 | 
            +
                                 when Float == field_type
         | 
| 207 207 | 
             
                                   Java::OrgApacheLuceneSearch::SortField::DOUBLE
         | 
| 208 | 
            -
                                 when Fixnum ==  | 
| 208 | 
            +
                                 when Fixnum == field_type
         | 
| 209 209 | 
             
                                   Java::OrgApacheLuceneSearch::SortField::LONG
         | 
| 210 210 | 
             
                                 else
         | 
| 211 211 | 
             
                                   Java::OrgApacheLuceneSearch::SortField::STRING
         | 
| 212 212 | 
             
                               end
         | 
| 213 | 
            -
                        memo << Java::OrgApacheLuceneSearch::SortField.new(field.to_s, type,  | 
| 213 | 
            +
                        memo << Java::OrgApacheLuceneSearch::SortField.new(field.to_s, type, val[1] == :desc)
         | 
| 214 214 | 
             
                      end
         | 
| 215 215 | 
             
                      sort = Java::OrgApacheLuceneSearch::Sort.new(*java_sort_fields)
         | 
| 216 216 | 
             
                      Java::OrgNeo4jIndexLucene::QueryContext.new(query).sort(sort)
         | 
| @@ -220,18 +220,17 @@ module Neo4j | |
| 220 220 | 
             
                      and_query = Java::OrgApacheLuceneSearch::BooleanQuery.new
         | 
| 221 221 |  | 
| 222 222 | 
             
                      query.each_pair do |key, value|
         | 
| 223 | 
            -
                        type = @index_config | 
| 224 | 
            -
                        if  | 
| 223 | 
            +
                        type = @index_config.field_type(key)
         | 
| 224 | 
            +
                        if type != String
         | 
| 225 225 | 
             
                          if Range === value
         | 
| 226 | 
            -
                            and_query.add(range_query(key, value.first, value.last, true, !value.exclude_end?), Java:: | 
| 226 | 
            +
                            and_query.add(range_query(key, value.first, value.last, true, !value.exclude_end?), Java::OrgApacheLuceneSearch::BooleanClause::Occur::MUST)
         | 
| 227 227 | 
             
                          else
         | 
| 228 | 
            -
                            and_query.add(range_query(key, value, value, true, true), Java:: | 
| 228 | 
            +
                            and_query.add(range_query(key, value, value, true, true), Java::OrgApacheLuceneSearch::BooleanClause::Occur::MUST)
         | 
| 229 229 | 
             
                          end
         | 
| 230 230 | 
             
                        else
         | 
| 231 | 
            -
                           | 
| 232 | 
            -
                           | 
| 233 | 
            -
                          term_query  | 
| 234 | 
            -
                          and_query.add(term_query, Java::OrgApacheLuceneIndex::BooleanClause::Occur::MUST)
         | 
| 231 | 
            +
                          term = Java::OrgApacheLuceneIndex::Term.new(key.to_s, value.to_s)
         | 
| 232 | 
            +
                          term_query = Java::OrgApacheLuceneSearch::TermQuery.new(term)
         | 
| 233 | 
            +
                          and_query.add(term_query, Java::OrgApacheLuceneSearch::BooleanClause::Occur::MUST)
         | 
| 235 234 | 
             
                        end
         | 
| 236 235 | 
             
                      end
         | 
| 237 236 | 
             
                      and_query
         | 
    
        data/lib/neo4j-core/rels/rels.rb
    CHANGED
    
    | @@ -116,11 +116,11 @@ module Neo4j | |
| 116 116 | 
             
                  # @return [Enumerable] of Neo4j::Relationship objects
         | 
| 117 117 | 
             
                  def _rels(dir=:both, *types)
         | 
| 118 118 | 
             
                    if types.size > 1
         | 
| 119 | 
            -
                      get_relationships(ToJava.dir_to_java(dir), ToJava.types_to_java(types))
         | 
| 119 | 
            +
                      get_relationships(ToJava.dir_to_java(dir), ToJava.types_to_java(types)).iterator
         | 
| 120 120 | 
             
                    elsif types.size == 1
         | 
| 121 | 
            -
                      get_relationships(ToJava.type_to_java(types[0]), ToJava.dir_to_java(dir))
         | 
| 121 | 
            +
                      get_relationships(ToJava.type_to_java(types[0]), ToJava.dir_to_java(dir)).iterator
         | 
| 122 122 | 
             
                    else
         | 
| 123 | 
            -
                      get_relationships(ToJava.dir_to_java(dir))
         | 
| 123 | 
            +
                      get_relationships(ToJava.dir_to_java(dir)).iterator
         | 
| 124 124 | 
             
                    end
         | 
| 125 125 | 
             
                  end
         | 
| 126 126 |  | 
    
        data/lib/neo4j-core/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -2,7 +2,7 @@ | |
| 2 2 | 
             
            name: neo4j-core
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 4 | 
             
              prerelease: 
         | 
| 5 | 
            -
              version: 0.0. | 
| 5 | 
            +
              version: 0.0.4
         | 
| 6 6 | 
             
            platform: java
         | 
| 7 7 | 
             
            authors: 
         | 
| 8 8 | 
             
              - Andreas Ronge
         | 
| @@ -10,7 +10,7 @@ autorequire: | |
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 12 |  | 
| 13 | 
            -
            date: 2012-03- | 
| 13 | 
            +
            date: 2012-03-26 00:00:00 Z
         | 
| 14 14 | 
             
            dependencies: 
         | 
| 15 15 | 
             
              - !ruby/object:Gem::Dependency 
         | 
| 16 16 | 
             
                name: neo4j-community
         | 
| @@ -45,7 +45,6 @@ files: | |
| 45 45 | 
             
              - lib/neo4j/neo4j.rb~
         | 
| 46 46 | 
             
              - lib/neo4j/node.rb
         | 
| 47 47 | 
             
              - lib/neo4j/relationship.rb
         | 
| 48 | 
            -
              - lib/neo4j/type_converters/type_converters.rb
         | 
| 49 48 | 
             
              - lib/neo4j-core/event_handler.rb
         | 
| 50 49 | 
             
              - lib/neo4j-core/lazy_map.rb
         | 
| 51 50 | 
             
              - lib/neo4j-core/database.rb
         | 
| @@ -1,287 +0,0 @@ | |
| 1 | 
            -
            module Neo4j
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              # Responsible for converting values from and to Java Neo4j and Lucene.
         | 
| 4 | 
            -
              # You can implement your own converter by implementing the method <tt>convert?</tt>
         | 
| 5 | 
            -
              # <tt>to_java</tt> and <tt>to_ruby</tt> in this module.
         | 
| 6 | 
            -
              #
         | 
| 7 | 
            -
              # There are currently three default converters that are triggered when a Time, Date or a DateTime is read or written
         | 
| 8 | 
            -
              # if there is a type declared for the property.
         | 
| 9 | 
            -
              #
         | 
| 10 | 
            -
              # ==== Example
         | 
| 11 | 
            -
              #
         | 
| 12 | 
            -
              # Example of writing your own marshalling converter:
         | 
| 13 | 
            -
              #
         | 
| 14 | 
            -
              #  class Foo
         | 
| 15 | 
            -
              #     include Neo4j::NodeMixin
         | 
| 16 | 
            -
              #     property :thing, :type => MyType
         | 
| 17 | 
            -
              #  end
         | 
| 18 | 
            -
              #
         | 
| 19 | 
            -
              #  module Neo4j::TypeConverters
         | 
| 20 | 
            -
              #    class MyTypeConverter
         | 
| 21 | 
            -
              #      class << self
         | 
| 22 | 
            -
              #        def convert?(type)
         | 
| 23 | 
            -
              #          type == MyType
         | 
| 24 | 
            -
              #        end
         | 
| 25 | 
            -
              #
         | 
| 26 | 
            -
              #        def to_java(val)
         | 
| 27 | 
            -
              #          "silly:#{val}"
         | 
| 28 | 
            -
              #        end
         | 
| 29 | 
            -
              #
         | 
| 30 | 
            -
              #        def to_ruby(val)
         | 
| 31 | 
            -
              #          val.sub(/silly:/, '')
         | 
| 32 | 
            -
              #        end
         | 
| 33 | 
            -
              #      end
         | 
| 34 | 
            -
              #    end
         | 
| 35 | 
            -
              #  end
         | 
| 36 | 
            -
              #
         | 
| 37 | 
            -
              module TypeConverters
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                # The default converter to use if there isn't a specific converter for the type
         | 
| 40 | 
            -
                class DefaultConverter
         | 
| 41 | 
            -
                  class << self
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                    def to_java(value)
         | 
| 44 | 
            -
                      value
         | 
| 45 | 
            -
                    end
         | 
| 46 | 
            -
             | 
| 47 | 
            -
                    def to_ruby(value)
         | 
| 48 | 
            -
                      value
         | 
| 49 | 
            -
                    end
         | 
| 50 | 
            -
                  end
         | 
| 51 | 
            -
                end
         | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
                class BooleanConverter
         | 
| 55 | 
            -
                  class << self
         | 
| 56 | 
            -
             | 
| 57 | 
            -
                    def convert?(class_or_symbol)
         | 
| 58 | 
            -
                      :boolean == class_or_symbol
         | 
| 59 | 
            -
                    end
         | 
| 60 | 
            -
             | 
| 61 | 
            -
                    def to_java(value)
         | 
| 62 | 
            -
                      return nil if value.nil?
         | 
| 63 | 
            -
                      !!value && value != '0'
         | 
| 64 | 
            -
                    end
         | 
| 65 | 
            -
             | 
| 66 | 
            -
                    def to_ruby(value)
         | 
| 67 | 
            -
                      return nil if value.nil?
         | 
| 68 | 
            -
                      !!value && value != '0'
         | 
| 69 | 
            -
                    end
         | 
| 70 | 
            -
                  end
         | 
| 71 | 
            -
                end
         | 
| 72 | 
            -
             | 
| 73 | 
            -
                class SymbolConverter
         | 
| 74 | 
            -
                  class << self
         | 
| 75 | 
            -
             | 
| 76 | 
            -
                    def convert?(class_or_symbol)
         | 
| 77 | 
            -
                      :symbol == class_or_symbol || Symbol == class_or_symbol
         | 
| 78 | 
            -
                    end
         | 
| 79 | 
            -
             | 
| 80 | 
            -
                    def to_java(value)
         | 
| 81 | 
            -
                      return nil if value.nil?
         | 
| 82 | 
            -
                      value.to_s
         | 
| 83 | 
            -
                    end
         | 
| 84 | 
            -
             | 
| 85 | 
            -
                    def to_ruby(value)
         | 
| 86 | 
            -
                      return nil if value.nil?
         | 
| 87 | 
            -
                      value.to_sym
         | 
| 88 | 
            -
                    end
         | 
| 89 | 
            -
                  end
         | 
| 90 | 
            -
                end
         | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
                class StringConverter
         | 
| 94 | 
            -
                  class << self
         | 
| 95 | 
            -
             | 
| 96 | 
            -
                    def convert?(class_or_symbol)
         | 
| 97 | 
            -
                      [String, :string, :text].include? class_or_symbol
         | 
| 98 | 
            -
                    end
         | 
| 99 | 
            -
             | 
| 100 | 
            -
                    def to_java(value)
         | 
| 101 | 
            -
                      return nil if value.nil?
         | 
| 102 | 
            -
                      value.to_s
         | 
| 103 | 
            -
                    end
         | 
| 104 | 
            -
             | 
| 105 | 
            -
                    def to_ruby(value)
         | 
| 106 | 
            -
                      return nil if value.nil?
         | 
| 107 | 
            -
                      value.to_s
         | 
| 108 | 
            -
                    end
         | 
| 109 | 
            -
                  end
         | 
| 110 | 
            -
                end
         | 
| 111 | 
            -
             | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 114 | 
            -
                class FixnumConverter
         | 
| 115 | 
            -
                  class << self
         | 
| 116 | 
            -
             | 
| 117 | 
            -
                    def convert?(class_or_symbol)
         | 
| 118 | 
            -
                      Fixnum == class_or_symbol || :fixnum == class_or_symbol || :numeric == class_or_symbol
         | 
| 119 | 
            -
                    end
         | 
| 120 | 
            -
             | 
| 121 | 
            -
                    def to_java(value)
         | 
| 122 | 
            -
                      return nil if value.nil?
         | 
| 123 | 
            -
                      value.to_i
         | 
| 124 | 
            -
                    end
         | 
| 125 | 
            -
             | 
| 126 | 
            -
                    def to_ruby(value)
         | 
| 127 | 
            -
                      return nil if value.nil?
         | 
| 128 | 
            -
                      value.to_i
         | 
| 129 | 
            -
                    end
         | 
| 130 | 
            -
                  end
         | 
| 131 | 
            -
                end
         | 
| 132 | 
            -
             | 
| 133 | 
            -
                class FloatConverter
         | 
| 134 | 
            -
                  class << self
         | 
| 135 | 
            -
             | 
| 136 | 
            -
                    def convert?(clazz_or_symbol)
         | 
| 137 | 
            -
                      Float == clazz_or_symbol || :float == clazz_or_symbol
         | 
| 138 | 
            -
                    end
         | 
| 139 | 
            -
             | 
| 140 | 
            -
                    def to_java(value)
         | 
| 141 | 
            -
                      return nil if value.nil?
         | 
| 142 | 
            -
                      value.to_f
         | 
| 143 | 
            -
                    end
         | 
| 144 | 
            -
             | 
| 145 | 
            -
                    def to_ruby(value)
         | 
| 146 | 
            -
                      return nil if value.nil?
         | 
| 147 | 
            -
                      value.to_f
         | 
| 148 | 
            -
                    end
         | 
| 149 | 
            -
                  end
         | 
| 150 | 
            -
                end
         | 
| 151 | 
            -
             | 
| 152 | 
            -
                # Converts Date objects to Java long types. Must be timezone UTC.
         | 
| 153 | 
            -
                class DateConverter
         | 
| 154 | 
            -
                  class << self
         | 
| 155 | 
            -
             | 
| 156 | 
            -
                    def convert?(clazz_or_symbol)
         | 
| 157 | 
            -
                      Date == clazz_or_symbol || :date == clazz_or_symbol
         | 
| 158 | 
            -
                    end
         | 
| 159 | 
            -
             | 
| 160 | 
            -
                    def to_java(value)
         | 
| 161 | 
            -
                      return nil if value.nil?
         | 
| 162 | 
            -
                      Time.utc(value.year, value.month, value.day).to_i
         | 
| 163 | 
            -
                    end
         | 
| 164 | 
            -
             | 
| 165 | 
            -
                    def to_ruby(value)
         | 
| 166 | 
            -
                      return nil if value.nil?
         | 
| 167 | 
            -
                      Time.at(value).utc.to_date
         | 
| 168 | 
            -
                    end
         | 
| 169 | 
            -
                  end
         | 
| 170 | 
            -
                end
         | 
| 171 | 
            -
             | 
| 172 | 
            -
                # Converts DateTime objects to and from Java long types. Must be timezone UTC.
         | 
| 173 | 
            -
                class DateTimeConverter
         | 
| 174 | 
            -
                  class << self
         | 
| 175 | 
            -
             | 
| 176 | 
            -
                    def convert?(clazz_or_symbol)
         | 
| 177 | 
            -
                      DateTime == clazz_or_symbol || :datetime == clazz_or_symbol
         | 
| 178 | 
            -
                    end
         | 
| 179 | 
            -
             | 
| 180 | 
            -
                    # Converts the given DateTime (UTC) value to an Fixnum.
         | 
| 181 | 
            -
                    # Only utc times are supported !
         | 
| 182 | 
            -
                    def to_java(value)
         | 
| 183 | 
            -
                      return nil if value.nil?
         | 
| 184 | 
            -
                      if value.class == Date
         | 
| 185 | 
            -
                        Time.utc(value.year, value.month, value.day, 0, 0, 0).to_i
         | 
| 186 | 
            -
                      else
         | 
| 187 | 
            -
                        Time.utc(value.year, value.month, value.day, value.hour, value.min, value.sec).to_i
         | 
| 188 | 
            -
                      end
         | 
| 189 | 
            -
                    end
         | 
| 190 | 
            -
             | 
| 191 | 
            -
                    def to_ruby(value)
         | 
| 192 | 
            -
                      return nil if value.nil?
         | 
| 193 | 
            -
                      t = Time.at(value).utc
         | 
| 194 | 
            -
                      DateTime.civil(t.year, t.month, t.day, t.hour, t.min, t.sec)
         | 
| 195 | 
            -
                    end
         | 
| 196 | 
            -
                  end
         | 
| 197 | 
            -
                end
         | 
| 198 | 
            -
             | 
| 199 | 
            -
                class TimeConverter
         | 
| 200 | 
            -
                  class << self
         | 
| 201 | 
            -
             | 
| 202 | 
            -
                    def convert?(clazz_or_symbol)
         | 
| 203 | 
            -
                      Time == clazz_or_symbol || :time == clazz_or_symbol
         | 
| 204 | 
            -
                    end
         | 
| 205 | 
            -
             | 
| 206 | 
            -
                    # Converts the given DateTime (UTC) value to an Fixnum.
         | 
| 207 | 
            -
                    # Only utc times are supported !
         | 
| 208 | 
            -
                    def to_java(value)
         | 
| 209 | 
            -
                      return nil if value.nil?
         | 
| 210 | 
            -
                      if value.class == Date
         | 
| 211 | 
            -
                        Time.utc(value.year, value.month, value.day, 0, 0, 0).to_i
         | 
| 212 | 
            -
                      else
         | 
| 213 | 
            -
                        value.utc.to_i
         | 
| 214 | 
            -
                      end
         | 
| 215 | 
            -
                    end
         | 
| 216 | 
            -
             | 
| 217 | 
            -
                    def to_ruby(value)
         | 
| 218 | 
            -
                      return nil if value.nil?
         | 
| 219 | 
            -
                      Time.at(value).utc
         | 
| 220 | 
            -
                    end
         | 
| 221 | 
            -
                  end
         | 
| 222 | 
            -
                end
         | 
| 223 | 
            -
             | 
| 224 | 
            -
                class << self
         | 
| 225 | 
            -
             | 
| 226 | 
            -
                  # Mostly for testing purpose, You can use this method in order to
         | 
| 227 | 
            -
                  # add a converter while the neo4j has already started.
         | 
| 228 | 
            -
                  def converters=(converters)
         | 
| 229 | 
            -
                    @converters = converters
         | 
| 230 | 
            -
                  end
         | 
| 231 | 
            -
                  
         | 
| 232 | 
            -
                  # Always returns a converter that handles to_ruby or to_java
         | 
| 233 | 
            -
                  # if +enforce_type+ is set to false then it will raise in case of unknown type
         | 
| 234 | 
            -
                  # otherwise it will return the DefaultConverter.
         | 
| 235 | 
            -
                  def converter(type = nil, enforce_type = true)
         | 
| 236 | 
            -
                    return DefaultConverter unless type
         | 
| 237 | 
            -
                    @converters ||= begin
         | 
| 238 | 
            -
                      Neo4j::TypeConverters.constants.find_all do |c|
         | 
| 239 | 
            -
                        Neo4j::TypeConverters.const_get(c).respond_to?(:convert?)
         | 
| 240 | 
            -
                      end.map do  |c|
         | 
| 241 | 
            -
                        Neo4j::TypeConverters.const_get(c)
         | 
| 242 | 
            -
                      end
         | 
| 243 | 
            -
                    end
         | 
| 244 | 
            -
                    found = @converters.find {|c| c.convert?(type) }
         | 
| 245 | 
            -
                    raise "The type #{type.inspect} is unknown. Use one of #{@converters.map{|c| c.name }.join(", ")} or create a custom type converter." if !found && enforce_type
         | 
| 246 | 
            -
                    found or DefaultConverter
         | 
| 247 | 
            -
                  end
         | 
| 248 | 
            -
             | 
| 249 | 
            -
                  # Converts the given value to a Java type by using the registered converters.
         | 
| 250 | 
            -
                  # It just looks at the class of the given value unless an attribute name is given.
         | 
| 251 | 
            -
                  def convert(value, attribute = nil, klass = nil, enforce_type = true)
         | 
| 252 | 
            -
                    converter(attribute_type(value, attribute, klass), enforce_type).to_java(value)
         | 
| 253 | 
            -
                  end
         | 
| 254 | 
            -
             | 
| 255 | 
            -
                  # Converts the given property (key, value) to Java if there is a type converter for given type.
         | 
| 256 | 
            -
                  # The type must also be declared using Neo4j::NodeMixin#property property_name, :type => clazz
         | 
| 257 | 
            -
                  # If no Converter is defined for this value then it simply returns the given value.
         | 
| 258 | 
            -
                  def to_java(clazz, key, value)
         | 
| 259 | 
            -
                    type = clazz._decl_props[key.to_sym] && clazz._decl_props[key.to_sym][:type]
         | 
| 260 | 
            -
                    converter(type).to_java(value)
         | 
| 261 | 
            -
                  end
         | 
| 262 | 
            -
             | 
| 263 | 
            -
                  # Converts the given property (key, value) to Ruby if there is a type converter for given type.
         | 
| 264 | 
            -
                  # If no Converter is defined for this value then it simply returns the given value.
         | 
| 265 | 
            -
                  def to_ruby(clazz, key, value)
         | 
| 266 | 
            -
                    type = clazz._decl_props[key.to_sym] && clazz._decl_props[key.to_sym][:type]
         | 
| 267 | 
            -
                    converter(type).to_ruby(value)
         | 
| 268 | 
            -
                  end
         | 
| 269 | 
            -
             | 
| 270 | 
            -
                  private
         | 
| 271 | 
            -
                  def attribute_type(value, attribute = nil, klass = nil)
         | 
| 272 | 
            -
                    type = (attribute && klass) ? attribute_type_from_attribute_and_klass(value, attribute, klass) : nil
         | 
| 273 | 
            -
                    type || attribute_type_from_value(value)
         | 
| 274 | 
            -
                  end
         | 
| 275 | 
            -
             | 
| 276 | 
            -
                  def attribute_type_from_attribute_and_klass(value, attribute, klass)
         | 
| 277 | 
            -
                    if klass.respond_to?(:_decl_props)
         | 
| 278 | 
            -
                      (klass._decl_props.has_key?(attribute) && klass._decl_props[attribute][:type]) ? klass._decl_props[attribute][:type] : nil
         | 
| 279 | 
            -
                    end
         | 
| 280 | 
            -
                  end
         | 
| 281 | 
            -
             | 
| 282 | 
            -
                  def attribute_type_from_value(value)
         | 
| 283 | 
            -
                    value.class
         | 
| 284 | 
            -
                  end
         | 
| 285 | 
            -
                end
         | 
| 286 | 
            -
              end
         | 
| 287 | 
            -
            end
         |