neo4j-core 3.0.0.rc.4 → 3.0.0.rc.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +3 -0
- data/README.md +2 -1
- data/lib/neo4j-core/query.rb +20 -21
- data/lib/neo4j-core/query_clauses.rb +12 -14
- data/lib/neo4j-core/version.rb +1 -1
- data/lib/neo4j-embedded/embedded_ha_session.rb +21 -0
- data/lib/neo4j-embedded/embedded_label.rb +12 -0
- data/lib/neo4j-embedded/embedded_session.rb +8 -5
- data/lib/neo4j-embedded/property.rb +0 -2
- data/lib/neo4j-server.rb +2 -2
- data/lib/neo4j-server/cypher_label.rb +5 -1
- data/lib/neo4j-server/cypher_response.rb +9 -9
- data/lib/neo4j-server/cypher_session.rb +71 -20
- data/lib/neo4j-server/cypher_transaction.rb +13 -11
- data/lib/neo4j-server/resource.rb +15 -25
- data/lib/neo4j/session.rb +30 -4
- data/lib/neo4j/tasks/{neo4j_server.rb → neo4j_server.rake} +1 -0
- data/neo4j-core.gemspec +5 -0
- metadata +100 -58
- data/lib/neo4j-server/neo4j_server_endpoint.rb +0 -24
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: b46b6f89a49ae652827b9c2b5dd687ec3e65180b
         | 
| 4 | 
            +
              data.tar.gz: a830aa50a4fd7de437c9e3e80e5247ed0064bb9e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: a6bbd3ae59d56a28b15c19cd05fbb8ddd780bed3d90afc77c26e47d39a8a81a8e05a1823890cf4aa81caf241fa50bc6f49c9e6ce2054481c65db8c85c4d6f795
         | 
| 7 | 
            +
              data.tar.gz: a93ed3d6e72c500b130c9fb6521f130376ffa6bc5818288be6d82383fc6d365f4637b00ede8f3a5a7911c09dca7e05b234278a9802626ac2f726d40eb1ecb1a1
         | 
    
        data/Gemfile
    CHANGED
    
    | @@ -7,6 +7,9 @@ gem 'zip' | |
| 7 7 | 
             
            #gem 'neo4j-advanced',   '>= 1.8.1', '< 2.0', :require => false
         | 
| 8 8 | 
             
            #gem 'neo4j-enterprise', '>= 1.8.1', '< 2.0', :require => false
         | 
| 9 9 |  | 
| 10 | 
            +
            gem 'coveralls', require: false
         | 
| 11 | 
            +
            gem 'simplecov-html', require: false
         | 
| 12 | 
            +
             | 
| 10 13 | 
             
            group 'development' do
         | 
| 11 14 | 
             
              gem 'yard'
         | 
| 12 15 | 
             
              gem 'simplecov'
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            # Neo4j-core v3.0 [](https://codeclimate.com/github/andreasronge/neo4j-core) [](https://codeclimate.com/github/andreasronge/neo4j-core) [](https://travis-ci.org/andreasronge/neo4j-core) [](https://coveralls.io/r/neo4jrb/neo4j-core?branch=master)
         | 
| 2 2 |  | 
| 3 3 | 
             
            A simple Ruby wrapper around the Neo4j graph database that works with the server and embedded Neo4j API. This gem can be used both from JRuby and normal MRI.
         | 
| 4 4 | 
             
            It can be used standalone without the neo4j gem.
         | 
| @@ -24,6 +24,7 @@ It can be used standalone without the neo4j gem. | |
| 24 24 | 
             
            ## Contributing
         | 
| 25 25 |  | 
| 26 26 | 
             
            Pull request with high test coverage and good [code climate](https://codeclimate.com/github/andreasronge/neo4j-core) values will be accepted faster.
         | 
| 27 | 
            +
            Notice, only JRuby can run all the tests (embedded and server db). To run tests with coverage: `rake coverage`.
         | 
| 27 28 |  | 
| 28 29 | 
             
            ## License
         | 
| 29 30 | 
             
            * Neo4j.rb - MIT, see the LICENSE file http://github.com/andreasronge/neo4j-core/tree/master/LICENSE.
         | 
    
        data/lib/neo4j-core/query.rb
    CHANGED
    
    | @@ -99,7 +99,7 @@ module Neo4j::Core | |
| 99 99 |  | 
| 100 100 | 
             
                METHODS = %w[with start match optional_match using where set create create_unique merge on_create_set on_match_set remove unwind delete return order skip limit]
         | 
| 101 101 |  | 
| 102 | 
            -
                CLAUSES = METHODS.map {|method| const_get(method.split('_').map {|c| c.capitalize }.join + 'Clause') }
         | 
| 102 | 
            +
                CLAUSES = METHODS.map { |method| const_get(method.split('_').map { |c| c.capitalize }.join + 'Clause') }
         | 
| 103 103 |  | 
| 104 104 | 
             
                METHODS.each_with_index do |clause, i|
         | 
| 105 105 | 
             
                  clause_class = CLAUSES[i]
         | 
| @@ -145,7 +145,7 @@ module Neo4j::Core | |
| 145 145 | 
             
                def response
         | 
| 146 146 | 
             
                  return @response if @response
         | 
| 147 147 | 
             
                  cypher = self.to_cypher
         | 
| 148 | 
            -
                  @response = ActiveSupport::Notifications.instrument('neo4j.cypher_query', context: @options[:context] || 'CYPHER', cypher: cypher, params:  | 
| 148 | 
            +
                  @response = ActiveSupport::Notifications.instrument('neo4j.cypher_query', context: @options[:context] || 'CYPHER', cypher: cypher, params: merge_params) do
         | 
| 149 149 | 
             
                    @session._query(cypher, merge_params)
         | 
| 150 150 | 
             
                  end
         | 
| 151 151 | 
             
                  if !response.respond_to?(:error?) || !response.error?
         | 
| @@ -163,7 +163,7 @@ module Neo4j::Core | |
| 163 163 | 
             
                    response.to_node_enumeration
         | 
| 164 164 | 
             
                  else
         | 
| 165 165 | 
             
                    Neo4j::Embedded::ResultWrapper.new(response, self.to_cypher)
         | 
| 166 | 
            -
                  end.each {|object| yield object }
         | 
| 166 | 
            +
                  end.each { |object| yield object }
         | 
| 167 167 | 
             
                end
         | 
| 168 168 |  | 
| 169 169 | 
             
                # @method to_a
         | 
| @@ -191,19 +191,7 @@ module Neo4j::Core | |
| 191 191 | 
             
                #    Query.new.match(n: :Person).return(p: :name}.pluck('p, DISTINCT p.name') # => Array of [node, name] pairs
         | 
| 192 192 | 
             
                #
         | 
| 193 193 | 
             
                def pluck(*columns)
         | 
| 194 | 
            -
                  query =  | 
| 195 | 
            -
                  query.remove_clause_class(ReturnClause)
         | 
| 196 | 
            -
             | 
| 197 | 
            -
                  columns = columns.map do |column_definition|
         | 
| 198 | 
            -
                    if column_definition.is_a?(Hash)
         | 
| 199 | 
            -
                      column_definition.map {|k, v| "#{k}.#{v}" }
         | 
| 200 | 
            -
                    else
         | 
| 201 | 
            -
                      column_definition
         | 
| 202 | 
            -
                    end
         | 
| 203 | 
            -
                  end.flatten.map(&:to_sym)
         | 
| 204 | 
            -
             | 
| 205 | 
            -
                  query = query.return(columns)
         | 
| 206 | 
            -
             | 
| 194 | 
            +
                  query = return_query(columns)
         | 
| 207 195 | 
             
                  columns = query.response.columns
         | 
| 208 196 |  | 
| 209 197 | 
             
                  case columns.size
         | 
| @@ -211,7 +199,7 @@ module Neo4j::Core | |
| 211 199 | 
             
                    raise ArgumentError, 'No columns specified for Query#pluck'
         | 
| 212 200 | 
             
                  when 1
         | 
| 213 201 | 
             
                    column = columns[0]
         | 
| 214 | 
            -
                    query.map {|row| row[column] }
         | 
| 202 | 
            +
                    query.map { |row| row[column] }
         | 
| 215 203 | 
             
                  else
         | 
| 216 204 | 
             
                    query.map do |row|
         | 
| 217 205 | 
             
                      columns.map do |column|
         | 
| @@ -221,6 +209,20 @@ module Neo4j::Core | |
| 221 209 | 
             
                  end
         | 
| 222 210 | 
             
                end
         | 
| 223 211 |  | 
| 212 | 
            +
                def return_query(columns)
         | 
| 213 | 
            +
                  query = self.dup
         | 
| 214 | 
            +
                  query.remove_clause_class(ReturnClause)
         | 
| 215 | 
            +
             | 
| 216 | 
            +
                  columns = columns.map do |column_definition|
         | 
| 217 | 
            +
                    if column_definition.is_a?(Hash)
         | 
| 218 | 
            +
                      column_definition.map { |k, v| "#{k}.#{v}" }
         | 
| 219 | 
            +
                    else
         | 
| 220 | 
            +
                      column_definition
         | 
| 221 | 
            +
                    end
         | 
| 222 | 
            +
                  end.flatten.map(&:to_sym)
         | 
| 223 | 
            +
             | 
| 224 | 
            +
                  query.return(columns)
         | 
| 225 | 
            +
                end
         | 
| 224 226 |  | 
| 225 227 | 
             
                # Returns a CYPHER query string from the object query representation
         | 
| 226 228 | 
             
                # @example
         | 
| @@ -310,11 +312,8 @@ module Neo4j::Core | |
| 310 312 | 
             
                end
         | 
| 311 313 |  | 
| 312 314 | 
             
                def merge_params
         | 
| 313 | 
            -
                  @clauses.compact.inject(@_params) {|params, clause| params.merge(clause.params) }
         | 
| 315 | 
            +
                  @merge_params ||= @clauses.compact.inject(@_params) { |params, clause| params.merge(clause.params) }
         | 
| 314 316 | 
             
                end
         | 
| 315 317 |  | 
| 316 318 | 
             
              end
         | 
| 317 319 | 
             
            end
         | 
| 318 | 
            -
             | 
| 319 | 
            -
             | 
| 320 | 
            -
             | 
| @@ -112,6 +112,17 @@ module Neo4j::Core | |
| 112 112 |  | 
| 113 113 | 
             
                  private
         | 
| 114 114 |  | 
| 115 | 
            +
                  def key_value_string(key, value, previous_keys = [], force_equals = false)
         | 
| 116 | 
            +
                    param = (previous_keys + [key]).join('_').gsub(/[\(\)\._]+/, '_')
         | 
| 117 | 
            +
                    @params[param.to_sym] = value
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                    if !value.is_a?(Array) || force_equals
         | 
| 120 | 
            +
                      "#{key} = {#{param}}"
         | 
| 121 | 
            +
                    else
         | 
| 122 | 
            +
                      "#{key} IN {#{param}}"
         | 
| 123 | 
            +
                    end
         | 
| 124 | 
            +
                  end
         | 
| 125 | 
            +
             | 
| 115 126 | 
             
                  def format_label(label_string)
         | 
| 116 127 | 
             
                    label_string = label_string.to_s.strip
         | 
| 117 128 | 
             
                    if !label_string.empty? && label_string[0] != ':'
         | 
| @@ -184,19 +195,6 @@ module Neo4j::Core | |
| 184 195 | 
             
                      clauses.map(&:value).join(' AND ')
         | 
| 185 196 | 
             
                    end
         | 
| 186 197 | 
             
                  end
         | 
| 187 | 
            -
             | 
| 188 | 
            -
                  private
         | 
| 189 | 
            -
             | 
| 190 | 
            -
                  def key_value_string(key, value, previous_keys = [])
         | 
| 191 | 
            -
                    param = (previous_keys + [key]).join('_').gsub(/[\(\)\._]+/, '_')
         | 
| 192 | 
            -
                    @params = @params.merge(param.to_sym => value)
         | 
| 193 | 
            -
             | 
| 194 | 
            -
                    if value.is_a?(Array)
         | 
| 195 | 
            -
                      "#{key} IN {#{param}}"
         | 
| 196 | 
            -
                    else
         | 
| 197 | 
            -
                      "#{key} = {#{param}}"
         | 
| 198 | 
            -
                    end
         | 
| 199 | 
            -
                  end
         | 
| 200 198 | 
             
                end
         | 
| 201 199 |  | 
| 202 200 |  | 
| @@ -386,7 +384,7 @@ module Neo4j::Core | |
| 386 384 | 
             
                        "#{key} = {#{attribute_string}}"
         | 
| 387 385 | 
             
                      else
         | 
| 388 386 | 
             
                        value.map do |k, v|
         | 
| 389 | 
            -
                          "#{key}.#{k}  | 
| 387 | 
            +
                          key_value_string("#{key}.#{k}", v, ['setter'], true)
         | 
| 390 388 | 
             
                        end
         | 
| 391 389 | 
             
                      end
         | 
| 392 390 | 
             
                    else
         | 
    
        data/lib/neo4j-core/version.rb
    CHANGED
    
    
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            require 'neo4j-enterprise'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Neo4j::Session.register_db(:ha_db) do |*args|
         | 
| 4 | 
            +
              Neo4j::Embedded::EmbeddedHaSession.new(*args)
         | 
| 5 | 
            +
            end
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            module Neo4j::Embedded
         | 
| 8 | 
            +
              class EmbeddedHaSession < EmbeddedSession
         | 
| 9 | 
            +
                def start
         | 
| 10 | 
            +
                  raise Error.new("Embedded HA Neo4j db is already running") if running?
         | 
| 11 | 
            +
                  puts "Start embedded HA Neo4j db at #{db_location}"
         | 
| 12 | 
            +
                  factory    = Java::OrgNeo4jGraphdbFactory::HighlyAvailableGraphDatabaseFactory.new
         | 
| 13 | 
            +
                  db_service = factory.newHighlyAvailableDatabaseBuilder(db_location)
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  raise Error.new("Need properties file for HA configuration") unless properties_file
         | 
| 16 | 
            +
                  db_service.loadPropertiesFromFile(properties_file)
         | 
| 17 | 
            +
                  @graph_db = db_service.newGraphDatabase()
         | 
| 18 | 
            +
                  Neo4j::Session._notify_listeners(:session_available, self)
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
| @@ -53,6 +53,18 @@ module Neo4j::Embedded | |
| 53 53 | 
             
                end
         | 
| 54 54 | 
             
                tx_methods :indexes
         | 
| 55 55 |  | 
| 56 | 
            +
                def uniqueness_constraints()
         | 
| 57 | 
            +
                  {
         | 
| 58 | 
            +
                      property_keys: @session.graph_db.schema.constraints(as_java).select do |index_def|
         | 
| 59 | 
            +
                        index_def.is_a?(Java::OrgNeo4jKernelImplCoreapiSchema::PropertyUniqueConstraintDefinition)
         | 
| 60 | 
            +
                      end.map do |index_def|
         | 
| 61 | 
            +
                        index_def.property_keys.map{|x| x.to_sym}
         | 
| 62 | 
            +
                      end
         | 
| 63 | 
            +
                  }
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
                tx_methods :uniqueness_constraints
         | 
| 66 | 
            +
             | 
| 67 | 
            +
             | 
| 56 68 | 
             
                def drop_index(*properties)
         | 
| 57 69 | 
             
                  @session.graph_db.schema.indexes(as_java).each do |index_def|
         | 
| 58 70 | 
             
                    # at least one match, TODO
         | 
| @@ -11,15 +11,16 @@ module Neo4j::Embedded | |
| 11 11 | 
             
                class Error < StandardError
         | 
| 12 12 | 
             
                end
         | 
| 13 13 |  | 
| 14 | 
            -
                attr_reader :graph_db, :db_location
         | 
| 14 | 
            +
                attr_reader :graph_db, :db_location, :properties_file
         | 
| 15 15 | 
             
                extend Forwardable
         | 
| 16 16 | 
             
                extend Neo4j::Core::TxMethods
         | 
| 17 17 | 
             
                def_delegator :@graph_db, :begin_tx
         | 
| 18 18 |  | 
| 19 19 |  | 
| 20 20 | 
             
                def initialize(db_location, config={})
         | 
| 21 | 
            -
                  @db_location | 
| 22 | 
            -
                  @auto_commit | 
| 21 | 
            +
                  @db_location     = db_location
         | 
| 22 | 
            +
                  @auto_commit     = !!config[:auto_commit]
         | 
| 23 | 
            +
                  @properties_file = config[:properties_file]
         | 
| 23 24 | 
             
                  Neo4j::Session.register(self)
         | 
| 24 25 | 
             
                end
         | 
| 25 26 |  | 
| @@ -34,8 +35,10 @@ module Neo4j::Embedded | |
| 34 35 | 
             
                def start
         | 
| 35 36 | 
             
                  raise Error.new("Embedded Neo4j db is already running") if running?
         | 
| 36 37 | 
             
                  puts "Start embedded Neo4j db at #{db_location}"
         | 
| 37 | 
            -
                  factory | 
| 38 | 
            -
                   | 
| 38 | 
            +
                  factory    = Java::OrgNeo4jGraphdbFactory::GraphDatabaseFactory.new
         | 
| 39 | 
            +
                  db_service = factory.newEmbeddedDatabaseBuilder(db_location)
         | 
| 40 | 
            +
                  db_service.loadPropertiesFromFile(properties_file) if properties_file
         | 
| 41 | 
            +
                  @graph_db = db_service.newGraphDatabase()
         | 
| 39 42 | 
             
                  Neo4j::Session._notify_listeners(:session_available, self)
         | 
| 40 43 | 
             
                  @engine = Java::OrgNeo4jCypherJavacompat::ExecutionEngine.new(@graph_db)
         | 
| 41 44 | 
             
                end
         | 
    
        data/lib/neo4j-server.rb
    CHANGED
    
    
| @@ -117,7 +117,7 @@ module Neo4j::Server | |
| 117 117 | 
             
                end
         | 
| 118 118 |  | 
| 119 119 | 
             
                def raise_unless_response_code(code)
         | 
| 120 | 
            -
                  raise "Response code #{response.code}, expected #{code} for #{response.request.path}, #{response.body}" unless response. | 
| 120 | 
            +
                  raise "Response code #{response.code}, expected #{code} for #{response.request.path}, #{response.body}" unless response.status == code
         | 
| 121 121 | 
             
                end
         | 
| 122 122 |  | 
| 123 123 | 
             
                def each_data_row
         | 
| @@ -155,26 +155,26 @@ module Neo4j::Server | |
| 155 155 |  | 
| 156 156 |  | 
| 157 157 | 
             
                def self.create_with_no_tx(response)
         | 
| 158 | 
            -
                  case response. | 
| 158 | 
            +
                  case response.status
         | 
| 159 159 | 
             
                    when 200
         | 
| 160 | 
            -
                      CypherResponse.new(response).set_data(response['data'], response['columns'])
         | 
| 160 | 
            +
                      CypherResponse.new(response).set_data(response.body['data'], response.body['columns'])
         | 
| 161 161 | 
             
                    when 400
         | 
| 162 | 
            -
                      CypherResponse.new(response).set_error(response['message'], response['exception'], response['fullname'])
         | 
| 162 | 
            +
                      CypherResponse.new(response).set_error(response.body['message'], response.body['exception'], response.body['fullname'])
         | 
| 163 163 | 
             
                    else
         | 
| 164 | 
            -
                      raise "Unknown response code #{response. | 
| 164 | 
            +
                      raise "Unknown response code #{response.status} for #{response.env[:url].to_s}"
         | 
| 165 165 | 
             
                  end
         | 
| 166 166 | 
             
                end
         | 
| 167 167 |  | 
| 168 168 | 
             
                def self.create_with_tx(response)
         | 
| 169 | 
            -
                  raise "Unknown response code #{response. | 
| 169 | 
            +
                  raise "Unknown response code #{response.status} for #{response.request_uri}" unless response.status == 200
         | 
| 170 170 |  | 
| 171 | 
            -
                  first_result = response['results'][0]
         | 
| 171 | 
            +
                  first_result = response.body['results'][0]
         | 
| 172 172 | 
             
                  cr = CypherResponse.new(response, true)
         | 
| 173 173 |  | 
| 174 | 
            -
                  if (response['errors'].empty?)
         | 
| 174 | 
            +
                  if (response.body['errors'].empty?)
         | 
| 175 175 | 
             
                    cr.set_data(first_result['data'], first_result['columns'])
         | 
| 176 176 | 
             
                  else
         | 
| 177 | 
            -
                    first_error = response['errors'].first
         | 
| 177 | 
            +
                    first_error = response.body['errors'].first
         | 
| 178 178 | 
             
                    cr.set_error(first_error['message'], first_error['status'], first_error['code'])
         | 
| 179 179 | 
             
                  end
         | 
| 180 180 | 
             
                  cr
         | 
| @@ -10,28 +10,46 @@ module Neo4j::Server | |
| 10 10 | 
             
                include Neo4j::Core::CypherTranslator
         | 
| 11 11 |  | 
| 12 12 | 
             
                alias_method :super_query, :query
         | 
| 13 | 
            -
             | 
| 13 | 
            +
                attr_reader :connection
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                # @param [Hash] params could be empty or contain basic authentication user and password
         | 
| 16 | 
            +
                # @return [Faraday]
         | 
| 17 | 
            +
                # @see https://github.com/lostisland/faraday
         | 
| 18 | 
            +
                def self.create_connection(params)
         | 
| 19 | 
            +
                  init_params = params[:initialize] and params.delete(:initialize)
         | 
| 20 | 
            +
                  conn = Faraday.new(init_params) do |b|
         | 
| 21 | 
            +
                    b.request :basic_auth, params[:basic_auth][:username], params[:basic_auth][:password] if params[:basic_auth]
         | 
| 22 | 
            +
                    b.request :json
         | 
| 23 | 
            +
                    #b.response :logger
         | 
| 24 | 
            +
                    b.response :json, :content_type => "application/json"
         | 
| 25 | 
            +
                    #b.use Faraday::Response::RaiseError
         | 
| 26 | 
            +
                    b.use Faraday::Adapter::NetHttpPersistent
         | 
| 27 | 
            +
                    # b.adapter  Faraday.default_adapter
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
                  conn.headers = {'Content-Type' => 'application/json'}
         | 
| 30 | 
            +
                  conn
         | 
| 31 | 
            +
                end
         | 
| 14 32 |  | 
| 15 33 | 
             
                # Opens a session to the database
         | 
| 16 34 | 
             
                # @see Neo4j::Session#open
         | 
| 17 35 | 
             
                #
         | 
| 18 36 | 
             
                # @param [String] endpoint_url - the url to the neo4j server, defaults to 'http://localhost:7474'
         | 
| 19 | 
            -
                # @param [Hash] params  | 
| 37 | 
            +
                # @param [Hash] params faraday params, see #create_connection or an already created faraday connection
         | 
| 20 38 | 
             
                def self.open(endpoint_url=nil, params = {})
         | 
| 21 | 
            -
                   | 
| 39 | 
            +
                  connection = params[:connection] || create_connection(params)
         | 
| 22 40 | 
             
                  url = endpoint_url || 'http://localhost:7474'
         | 
| 23 | 
            -
                  response =  | 
| 24 | 
            -
                  raise "Server not available on #{url} (response code #{response. | 
| 25 | 
            -
             | 
| 26 | 
            -
                  root_data =  | 
| 41 | 
            +
                  response = connection.get(url)
         | 
| 42 | 
            +
                  raise "Server not available on #{url} (response code #{response.status})" unless response.status == 200
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  root_data = response.body
         | 
| 27 45 | 
             
                  data_url = root_data['data']
         | 
| 28 46 | 
             
                  data_url << '/' unless data_url.end_with?('/')
         | 
| 29 47 |  | 
| 30 | 
            -
                  CypherSession.new(data_url,  | 
| 48 | 
            +
                  CypherSession.new(data_url, connection)
         | 
| 31 49 | 
             
                end
         | 
| 32 50 |  | 
| 33 | 
            -
                def initialize(data_url,  | 
| 34 | 
            -
                  @ | 
| 51 | 
            +
                def initialize(data_url, connection)
         | 
| 52 | 
            +
                  @connection = connection
         | 
| 35 53 | 
             
                  Neo4j::Session.register(self)
         | 
| 36 54 | 
             
                  initialize_resource(data_url)
         | 
| 37 55 | 
             
                  Neo4j::Session._notify_listeners(:session_available, self)
         | 
| @@ -54,9 +72,9 @@ module Neo4j::Server | |
| 54 72 | 
             
                end
         | 
| 55 73 |  | 
| 56 74 | 
             
                def initialize_resource(data_url)
         | 
| 57 | 
            -
                  response = @ | 
| 75 | 
            +
                  response = @connection.get(data_url)
         | 
| 58 76 | 
             
                  expect_response_code(response,200)
         | 
| 59 | 
            -
                  data_resource =  | 
| 77 | 
            +
                  data_resource = response.body
         | 
| 60 78 | 
             
                  raise "No data_resource for #{response.body}" unless data_resource
         | 
| 61 79 | 
             
                  # store the resource data
         | 
| 62 80 | 
             
                  init_resource_data(data_resource, data_url)
         | 
| @@ -72,7 +90,7 @@ module Neo4j::Server | |
| 72 90 | 
             
                    # Handle nested transaction "placebo transaction"
         | 
| 73 91 | 
             
                    Neo4j::Transaction.current.push_nested!
         | 
| 74 92 | 
             
                  else
         | 
| 75 | 
            -
                    wrap_resource(self, 'transaction', CypherTransaction,  | 
| 93 | 
            +
                    wrap_resource(self, 'transaction', CypherTransaction, :post, @connection)
         | 
| 76 94 | 
             
                  end
         | 
| 77 95 | 
             
                  Neo4j::Transaction.current
         | 
| 78 96 | 
             
                end
         | 
| @@ -111,10 +129,24 @@ module Neo4j::Server | |
| 111 129 | 
             
                  CypherLabel.new(self, name)
         | 
| 112 130 | 
             
                end
         | 
| 113 131 |  | 
| 132 | 
            +
                def uniqueness_constraints(label)
         | 
| 133 | 
            +
                  response = @connection.get("#{@resource_url}schema/constraint/#{label}/uniqueness")
         | 
| 134 | 
            +
                  expect_response_code(response, 200)
         | 
| 135 | 
            +
                  data_resource = response.body
         | 
| 136 | 
            +
             | 
| 137 | 
            +
                  property_keys = data_resource.map do |row|
         | 
| 138 | 
            +
                    row['property_keys'].map(&:to_sym)
         | 
| 139 | 
            +
                  end
         | 
| 140 | 
            +
             | 
| 141 | 
            +
                  {
         | 
| 142 | 
            +
                      property_keys: property_keys
         | 
| 143 | 
            +
                  }
         | 
| 144 | 
            +
                end
         | 
| 145 | 
            +
             | 
| 114 146 | 
             
                def indexes(label)
         | 
| 115 | 
            -
                  response = @ | 
| 147 | 
            +
                  response = @connection.get("#{@resource_url}schema/index/#{label}")
         | 
| 116 148 | 
             
                  expect_response_code(response, 200)
         | 
| 117 | 
            -
                  data_resource =  | 
| 149 | 
            +
                  data_resource = response.body
         | 
| 118 150 |  | 
| 119 151 | 
             
                  property_keys = data_resource.map do |row|
         | 
| 120 152 | 
             
                    row['property_keys'].map(&:to_sym)
         | 
| @@ -142,9 +174,11 @@ module Neo4j::Server | |
| 142 174 | 
             
                end
         | 
| 143 175 |  | 
| 144 176 | 
             
                def query(*args)
         | 
| 145 | 
            -
                  if [[String], [String,  | 
| 177 | 
            +
                  if [[String], [String, Hash]].include?(args.map(&:class))
         | 
| 146 178 | 
             
                    query, params = args[0,2]
         | 
| 147 | 
            -
                    _query(query, params) | 
| 179 | 
            +
                    response = _query(query, params)
         | 
| 180 | 
            +
                    response.raise_error if response.error?
         | 
| 181 | 
            +
                    response.to_node_enumeration(query)
         | 
| 148 182 | 
             
                  else
         | 
| 149 183 | 
             
                    options = args[0] || {}
         | 
| 150 184 | 
             
                    Neo4j::Core::Query.new(options.merge(session: self))
         | 
| @@ -175,21 +209,38 @@ module Neo4j::Server | |
| 175 209 | 
             
                    curr_tx._query(q, params)
         | 
| 176 210 | 
             
                  else
         | 
| 177 211 | 
             
                    url = resource_url('cypher')
         | 
| 178 | 
            -
                    q = params.nil? ? {query | 
| 179 | 
            -
                    response = @ | 
| 212 | 
            +
                    q = params.nil? ? { 'query' => q } : { 'query' => q, 'params' => params}
         | 
| 213 | 
            +
                    response = @connection.post(url, q)
         | 
| 180 214 | 
             
                    CypherResponse.create_with_no_tx(response)
         | 
| 181 215 | 
             
                  end
         | 
| 182 216 | 
             
                end
         | 
| 183 217 |  | 
| 184 218 | 
             
                def search_result_to_enumerable_first_column(response)
         | 
| 185 219 | 
             
                  return [] unless response.data
         | 
| 220 | 
            +
                  if Neo4j::Transaction.current
         | 
| 221 | 
            +
                    search_result_to_enumerable_first_column_with_tx(response)
         | 
| 222 | 
            +
                  else
         | 
| 223 | 
            +
                    search_result_to_enumerable_first_column_without_tx(response)
         | 
| 224 | 
            +
                  end
         | 
| 225 | 
            +
                end
         | 
| 226 | 
            +
             | 
| 227 | 
            +
                def search_result_to_enumerable_first_column_with_tx(response)
         | 
| 186 228 | 
             
                  Enumerator.new do |yielder|
         | 
| 187 229 | 
             
                    response.data.each do |data|
         | 
| 188 | 
            -
                       | 
| 230 | 
            +
                      data["row"].each do |id|
         | 
| 231 | 
            +
                        yielder << CypherNode.new(self, id).wrapper
         | 
| 232 | 
            +
                      end
         | 
| 189 233 | 
             
                    end
         | 
| 190 234 | 
             
                  end
         | 
| 191 235 | 
             
                end
         | 
| 192 236 |  | 
| 237 | 
            +
                def search_result_to_enumerable_first_column_without_tx(response)
         | 
| 238 | 
            +
                  Enumerator.new do |yielder|
         | 
| 239 | 
            +
                    response.data.each do |data|
         | 
| 240 | 
            +
                      yielder << CypherNode.new(self, data[0]).wrapper
         | 
| 241 | 
            +
                    end
         | 
| 242 | 
            +
                  end
         | 
| 243 | 
            +
              end
         | 
| 193 244 |  | 
| 194 245 | 
             
                def map_column(key, map, data)
         | 
| 195 246 | 
             
                  case map[key]
         | 
| @@ -15,11 +15,12 @@ module Neo4j::Server | |
| 15 15 | 
             
                  end
         | 
| 16 16 | 
             
                end
         | 
| 17 17 |  | 
| 18 | 
            -
                def initialize(db, response, url,  | 
| 19 | 
            -
                  @ | 
| 20 | 
            -
                  @commit_url = response['commit']
         | 
| 21 | 
            -
                  @exec_url = response.headers[' | 
| 22 | 
            -
                   | 
| 18 | 
            +
                def initialize(db, response, url, connection)
         | 
| 19 | 
            +
                  @connection = connection
         | 
| 20 | 
            +
                  @commit_url = response.body['commit']
         | 
| 21 | 
            +
                  @exec_url = response.headers['Location']
         | 
| 22 | 
            +
                  raise "NO ENDPOINT URL #{@connection} : HEAD: #{response.headers.inspect}" if !@exec_url || @exec_url.empty?
         | 
| 23 | 
            +
                  init_resource_data(response.body, url)
         | 
| 23 24 | 
             
                  expect_response_code(response,201)
         | 
| 24 25 | 
             
                  register_instance
         | 
| 25 26 | 
             
                end
         | 
| @@ -41,18 +42,18 @@ module Neo4j::Server | |
| 41 42 | 
             
                      statement[:statement].gsub!("{ #{k} }", "#{escape_value(v)}")
         | 
| 42 43 | 
             
                    end
         | 
| 43 44 | 
             
                  end
         | 
| 44 | 
            -
                  response = @ | 
| 45 | 
            +
                  response = @connection.post(@exec_url, body)
         | 
| 45 46 | 
             
                  _create_cypher_response(response)
         | 
| 46 47 | 
             
                end
         | 
| 47 48 |  | 
| 48 49 | 
             
                def _create_cypher_response(response)
         | 
| 49 | 
            -
                  first_result = response['results'][0]
         | 
| 50 | 
            +
                  first_result = response.body['results'][0]
         | 
| 50 51 | 
             
                  cr = CypherResponse.new(response, true)
         | 
| 51 52 |  | 
| 52 | 
            -
                  if (response['errors'].empty?)
         | 
| 53 | 
            +
                  if (response.body['errors'].empty?)
         | 
| 53 54 | 
             
                    cr.set_data(first_result['data'], first_result['columns'])
         | 
| 54 55 | 
             
                  else
         | 
| 55 | 
            -
                    first_error = response['errors'].first
         | 
| 56 | 
            +
                    first_error = response.body['errors'].first
         | 
| 56 57 | 
             
                    cr.set_error(first_error['message'], first_error['code'], first_error['code'])
         | 
| 57 58 | 
             
                  end
         | 
| 58 59 | 
             
                  cr
         | 
| @@ -61,13 +62,14 @@ module Neo4j::Server | |
| 61 62 |  | 
| 62 63 |  | 
| 63 64 | 
             
                def _delete_tx
         | 
| 64 | 
            -
                  response = @ | 
| 65 | 
            +
                  response = @connection.delete(@exec_url, headers: resource_headers)
         | 
| 65 66 | 
             
                  expect_response_code(response,200)
         | 
| 66 67 | 
             
                  response
         | 
| 67 68 | 
             
                end
         | 
| 68 69 |  | 
| 69 70 | 
             
                def _commit_tx
         | 
| 70 | 
            -
                  response = @ | 
| 71 | 
            +
                  response = @connection.post(@commit_url)
         | 
| 72 | 
            +
             | 
| 71 73 | 
             
                  expect_response_code(response,200)
         | 
| 72 74 | 
             
                  response
         | 
| 73 75 | 
             
                end
         | 
| @@ -8,7 +8,7 @@ module Neo4j | |
| 8 8 | 
             
                  attr_reader :resource_data, :resource_url
         | 
| 9 9 |  | 
| 10 10 | 
             
                  def init_resource_data(resource_data, resource_url)
         | 
| 11 | 
            -
                    raise "Exception #{ | 
| 11 | 
            +
                    raise "Exception #{resource_data['exception']}" if resource_data['exception']
         | 
| 12 12 | 
             
                    @resource_url = resource_url
         | 
| 13 13 | 
             
                    @resource_data = resource_data
         | 
| 14 14 | 
             
                    raise "expected @resource_data to be Hash got #{@resource_data.class}" unless @resource_data.respond_to?(:[])
         | 
| @@ -16,30 +16,29 @@ module Neo4j | |
| 16 16 | 
             
                  end
         | 
| 17 17 |  | 
| 18 18 |  | 
| 19 | 
            -
                  def wrap_resource(db, rel, resource_class,  | 
| 20 | 
            -
                    url = resource_url(rel | 
| 21 | 
            -
                    response =  | 
| 22 | 
            -
             | 
| 19 | 
            +
                  def wrap_resource(db, rel, resource_class, verb=:get, payload={}, connection)
         | 
| 20 | 
            +
                    url = resource_url(rel)
         | 
| 21 | 
            +
                    response = case verb
         | 
| 22 | 
            +
                      when :get then connection.get(url, payload)
         | 
| 23 | 
            +
                      when :post then connection.post(url, payload)
         | 
| 24 | 
            +
                      else raise "Illegal verb #{verb}"
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
                    response.status == 404 ? nil : resource_class.new(db, response, url, connection)
         | 
| 23 27 | 
             
                  end
         | 
| 24 28 |  | 
| 25 | 
            -
                  def resource_url(rel=nil | 
| 29 | 
            +
                  def resource_url(rel=nil)
         | 
| 26 30 | 
             
                    return @resource_url unless rel
         | 
| 27 31 | 
             
                    url = @resource_data[rel.to_s]
         | 
| 28 32 | 
             
                    raise "No resource rel '#{rel}', available #{@resource_data.keys.inspect}" unless url
         | 
| 29 | 
            -
                     | 
| 30 | 
            -
                    if (args.is_a?(Hash))
         | 
| 31 | 
            -
                      args.keys.inject(url){|ack, key| ack.sub("{#{key}}",args[key].to_s)}
         | 
| 32 | 
            -
                    else
         | 
| 33 | 
            -
                      "#{url}/#{args.to_s}"
         | 
| 34 | 
            -
                    end
         | 
| 33 | 
            +
                    url
         | 
| 35 34 | 
             
                  end
         | 
| 36 35 |  | 
| 37 | 
            -
                  def handle_response_error(response, msg="Error for request" | 
| 38 | 
            -
                    raise ServerException.new("#{msg} #{url}, #{response. | 
| 36 | 
            +
                  def handle_response_error(response, msg="Error for request" )
         | 
| 37 | 
            +
                    raise ServerException.new("#{msg} #{response.env && response.env[:url].to_s}, #{response.status}, #{response.status}")
         | 
| 39 38 | 
             
                  end
         | 
| 40 39 |  | 
| 41 | 
            -
                  def expect_response_code(response, expected_code, msg="Error for request" | 
| 42 | 
            -
                    handle_response_error(response, "Expected response code #{expected_code} #{msg}" | 
| 40 | 
            +
                  def expect_response_code(response, expected_code, msg="Error for request" )
         | 
| 41 | 
            +
                    handle_response_error(response, "Expected response code #{expected_code} #{msg}") unless response.status == expected_code
         | 
| 43 42 | 
             
                    response
         | 
| 44 43 | 
             
                  end
         | 
| 45 44 |  | 
| @@ -59,15 +58,6 @@ module Neo4j | |
| 59 58 | 
             
                  def convert_from_json_value(value)
         | 
| 60 59 | 
             
                    JSON.parse(value, :quirks_mode => true)
         | 
| 61 60 | 
             
                  end
         | 
| 62 | 
            -
             | 
| 63 | 
            -
                  def convert_to_json_value(value)
         | 
| 64 | 
            -
                    case value
         | 
| 65 | 
            -
                      when String
         | 
| 66 | 
            -
                        %Q["#{value}"]
         | 
| 67 | 
            -
                      else
         | 
| 68 | 
            -
                        value.to_s
         | 
| 69 | 
            -
                    end
         | 
| 70 | 
            -
                  end
         | 
| 71 61 | 
             
                end
         | 
| 72 62 | 
             
              end
         | 
| 73 63 | 
             
            end
         | 
    
        data/lib/neo4j/session.rb
    CHANGED
    
    | @@ -78,7 +78,21 @@ module Neo4j | |
| 78 78 | 
             
                end
         | 
| 79 79 |  | 
| 80 80 | 
             
                class << self
         | 
| 81 | 
            -
                  # Creates a new session to Neo4j
         | 
| 81 | 
            +
                  # Creates a new session to Neo4j.
         | 
| 82 | 
            +
                  # This will be the default session to be used unless there is already a session created (see #current and #set_current)
         | 
| 83 | 
            +
                  #
         | 
| 84 | 
            +
                  # @example A Neo4j Server session
         | 
| 85 | 
            +
                  #   Neo4j::Session.open(:server_db, 'http://localhost:7474', {basic_auth: {username: 'foo', password: 'bar'}})
         | 
| 86 | 
            +
                  #
         | 
| 87 | 
            +
                  # @example Using a user defined Faraday HTTP connection
         | 
| 88 | 
            +
                  #   connection = Faraday.new do |b|
         | 
| 89 | 
            +
                  #     # faraday config
         | 
| 90 | 
            +
                  #   end
         | 
| 91 | 
            +
                  #   Neo4j::Session.open(:server_db, 'http://localhost:7474', connection: connection)
         | 
| 92 | 
            +
                  #
         | 
| 93 | 
            +
                  # @example A embedded Neo4j session
         | 
| 94 | 
            +
                  #   Neo4j::Session.open(:embedded_db, 'path/to/db')
         | 
| 95 | 
            +
                  #
         | 
| 82 96 | 
             
                  # @see also Neo4j::Server::CypherSession#open for :server_db params
         | 
| 83 97 | 
             
                  # @param db_type the type of database, e.g. :embedded_db, or :server_db
         | 
| 84 98 | 
             
                  def open(db_type=:server_db, *params)
         | 
| @@ -90,6 +104,7 @@ module Neo4j | |
| 90 104 | 
             
                    register(create_session(db_type, params), name, default)
         | 
| 91 105 | 
             
                  end
         | 
| 92 106 |  | 
| 107 | 
            +
                  # @private
         | 
| 93 108 | 
             
                  def create_session(db_type, params = {})
         | 
| 94 109 | 
             
                    unless (@@factories[db_type])
         | 
| 95 110 | 
             
                      raise "Can't connect to database '#{db_type}', available #{@@factories.keys.join(',')}"
         | 
| @@ -97,24 +112,29 @@ module Neo4j | |
| 97 112 | 
             
                    @@factories[db_type].call(*params)
         | 
| 98 113 | 
             
                  end
         | 
| 99 114 |  | 
| 115 | 
            +
                  # @return [Neo4j::Session] the current session
         | 
| 100 116 | 
             
                  def current
         | 
| 101 117 | 
             
                    @@current_session
         | 
| 102 118 | 
             
                  end
         | 
| 103 119 |  | 
| 120 | 
            +
                  # Returns the current session or raise an exception if no session is available
         | 
| 104 121 | 
             
                  def current!
         | 
| 105 122 | 
             
                    raise "No session, please create a session first with Neo4j::Session.open(:server_db) or :embedded_db" unless current
         | 
| 106 123 | 
             
                    current
         | 
| 107 124 | 
             
                  end
         | 
| 108 125 |  | 
| 109 126 | 
             
                  # @see Neo4j::Session#query
         | 
| 110 | 
            -
                  def query( | 
| 111 | 
            -
                    current!.query( | 
| 127 | 
            +
                  def query(*args)
         | 
| 128 | 
            +
                    current!.query(*args)
         | 
| 112 129 | 
             
                  end
         | 
| 113 130 |  | 
| 131 | 
            +
                  # Returns a session with given name or else raise an exception
         | 
| 114 132 | 
             
                  def named(name)
         | 
| 115 133 | 
             
                    @@all_sessions[name] || raise("No session named #{name}.")
         | 
| 116 134 | 
             
                  end
         | 
| 117 135 |  | 
| 136 | 
            +
                  # Sets the session to be used as default
         | 
| 137 | 
            +
                  # @param [Neo4j::Session] session the session to use
         | 
| 118 138 | 
             
                  def set_current(session)
         | 
| 119 139 | 
             
                    @@current_session = session
         | 
| 120 140 | 
             
                  end
         | 
| @@ -130,19 +150,23 @@ module Neo4j | |
| 130 150 | 
             
                    end
         | 
| 131 151 | 
             
                  end
         | 
| 132 152 |  | 
| 153 | 
            +
                  # @private
         | 
| 133 154 | 
             
                  def add_listener(&listener)
         | 
| 134 155 | 
             
                    self._listeners << listener
         | 
| 135 156 | 
             
                  end
         | 
| 136 157 |  | 
| 158 | 
            +
                  # @private
         | 
| 137 159 | 
             
                  def _listeners
         | 
| 138 160 | 
             
                    @@listeners ||= []
         | 
| 139 161 | 
             
                    @@listeners
         | 
| 140 162 | 
             
                  end
         | 
| 141 163 |  | 
| 164 | 
            +
                  # @private
         | 
| 142 165 | 
             
                  def _notify_listeners(event, data)
         | 
| 143 166 | 
             
                    _listeners.each {|li| li.call(event, data)}
         | 
| 144 167 | 
             
                  end
         | 
| 145 168 |  | 
| 169 | 
            +
                  # @private
         | 
| 146 170 | 
             
                  def register(session, name = nil, default = nil)
         | 
| 147 171 | 
             
                    if default == true
         | 
| 148 172 | 
             
                      set_current(session)
         | 
| @@ -150,9 +174,10 @@ module Neo4j | |
| 150 174 | 
             
                      set_current(session) unless @@current_session
         | 
| 151 175 | 
             
                    end
         | 
| 152 176 | 
             
                    @@all_sessions[name] = session if name
         | 
| 153 | 
            -
                     | 
| 177 | 
            +
                    session
         | 
| 154 178 | 
             
                  end
         | 
| 155 179 |  | 
| 180 | 
            +
                  # @private
         | 
| 156 181 | 
             
                  def unregister(session)
         | 
| 157 182 | 
             
                    @@current_session = nil if @@current_session == session
         | 
| 158 183 | 
             
                  end
         | 
| @@ -161,6 +186,7 @@ module Neo4j | |
| 161 186 | 
             
                     "Neo4j::Session available: #{@@factories && @@factories.keys}"
         | 
| 162 187 | 
             
                  end
         | 
| 163 188 |  | 
| 189 | 
            +
                  # @private
         | 
| 164 190 | 
             
                  def register_db(db, &session_factory)
         | 
| 165 191 | 
             
                    puts "replace factory for #{db}" if @@factories[db]
         | 
| 166 192 | 
             
                    @@factories[db] = session_factory
         | 
    
        data/neo4j-core.gemspec
    CHANGED
    
    | @@ -30,6 +30,10 @@ It comes included with the Apache Lucene document database. | |
| 30 30 |  | 
| 31 31 | 
             
              # Not released yet
         | 
| 32 32 | 
             
              s.add_dependency("httparty")
         | 
| 33 | 
            +
              s.add_dependency("faraday", '~> 0.9.0')
         | 
| 34 | 
            +
              s.add_dependency('net-http-persistent')
         | 
| 35 | 
            +
              s.add_dependency('httpclient')
         | 
| 36 | 
            +
              s.add_dependency('faraday_middleware', '~> 0.9.1')
         | 
| 33 37 | 
             
              s.add_dependency("json")
         | 
| 34 38 | 
             
              s.add_dependency("os")  # for Rake task
         | 
| 35 39 | 
             
              s.add_dependency("zip") # for Rake task
         | 
| @@ -37,5 +41,6 @@ It comes included with the Apache Lucene document database. | |
| 37 41 |  | 
| 38 42 | 
             
              if RUBY_PLATFORM == 'java'
         | 
| 39 43 | 
             
                s.add_dependency("neo4j-community", '~> 2.1.1')
         | 
| 44 | 
            +
                s.add_development_dependency 'ruby-debug'
         | 
| 40 45 | 
             
              end
         | 
| 41 46 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,99 +1,141 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: neo4j-core
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 3.0.0.rc. | 
| 4 | 
            +
              version: 3.0.0.rc.5
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Andreas Ronge
         | 
| 8 | 
            -
            autorequire:
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2014- | 
| 11 | 
            +
            date: 2014-09-23 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: httparty
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - ">="
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: '0'
         | 
| 20 | 
            +
              type: :runtime
         | 
| 21 | 
            +
              prerelease: false
         | 
| 15 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 16 23 | 
             
                requirements:
         | 
| 17 | 
            -
                - -  | 
| 24 | 
            +
                - - ">="
         | 
| 18 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 26 | 
             
                    version: '0'
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: faraday
         | 
| 20 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 21 30 | 
             
                requirements:
         | 
| 22 | 
            -
                - -  | 
| 31 | 
            +
                - - "~>"
         | 
| 23 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 24 | 
            -
                    version:  | 
| 25 | 
            -
              prerelease: false
         | 
| 33 | 
            +
                    version: 0.9.0
         | 
| 26 34 | 
             
              type: :runtime
         | 
| 27 | 
            -
             | 
| 28 | 
            -
              name: json
         | 
| 35 | 
            +
              prerelease: false
         | 
| 29 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 30 37 | 
             
                requirements:
         | 
| 31 | 
            -
                - -  | 
| 38 | 
            +
                - - "~>"
         | 
| 32 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version:  | 
| 40 | 
            +
                    version: 0.9.0
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: net-http-persistent
         | 
| 34 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 35 44 | 
             
                requirements:
         | 
| 36 | 
            -
                - -  | 
| 45 | 
            +
                - - ">="
         | 
| 37 46 | 
             
                  - !ruby/object:Gem::Version
         | 
| 38 47 | 
             
                    version: '0'
         | 
| 39 | 
            -
              prerelease: false
         | 
| 40 48 | 
             
              type: :runtime
         | 
| 41 | 
            -
             | 
| 42 | 
            -
              name: os
         | 
| 49 | 
            +
              prerelease: false
         | 
| 43 50 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 44 51 | 
             
                requirements:
         | 
| 45 | 
            -
                - -  | 
| 52 | 
            +
                - - ">="
         | 
| 46 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 47 54 | 
             
                    version: '0'
         | 
| 55 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            +
              name: httpclient
         | 
| 48 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 49 58 | 
             
                requirements:
         | 
| 50 | 
            -
                - -  | 
| 59 | 
            +
                - - ">="
         | 
| 51 60 | 
             
                  - !ruby/object:Gem::Version
         | 
| 52 61 | 
             
                    version: '0'
         | 
| 62 | 
            +
              type: :runtime
         | 
| 53 63 | 
             
              prerelease: false
         | 
| 64 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                requirements:
         | 
| 66 | 
            +
                - - ">="
         | 
| 67 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                    version: '0'
         | 
| 69 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            +
              name: faraday_middleware
         | 
| 71 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 | 
            +
                requirements:
         | 
| 73 | 
            +
                - - "~>"
         | 
| 74 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            +
                    version: 0.9.1
         | 
| 54 76 | 
             
              type: :runtime
         | 
| 77 | 
            +
              prerelease: false
         | 
| 78 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 | 
            +
                requirements:
         | 
| 80 | 
            +
                - - "~>"
         | 
| 81 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            +
                    version: 0.9.1
         | 
| 55 83 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            -
              name:  | 
| 84 | 
            +
              name: json
         | 
| 85 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 | 
            +
                requirements:
         | 
| 87 | 
            +
                - - ">="
         | 
| 88 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            +
                    version: '0'
         | 
| 90 | 
            +
              type: :runtime
         | 
| 91 | 
            +
              prerelease: false
         | 
| 57 92 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 58 93 | 
             
                requirements:
         | 
| 59 | 
            -
                - -  | 
| 94 | 
            +
                - - ">="
         | 
| 60 95 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 96 | 
             
                    version: '0'
         | 
| 97 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 98 | 
            +
              name: os
         | 
| 62 99 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 63 100 | 
             
                requirements:
         | 
| 64 | 
            -
                - -  | 
| 101 | 
            +
                - - ">="
         | 
| 65 102 | 
             
                  - !ruby/object:Gem::Version
         | 
| 66 103 | 
             
                    version: '0'
         | 
| 67 | 
            -
              prerelease: false
         | 
| 68 104 | 
             
              type: :runtime
         | 
| 69 | 
            -
             | 
| 70 | 
            -
              name: activesupport
         | 
| 105 | 
            +
              prerelease: false
         | 
| 71 106 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 72 107 | 
             
                requirements:
         | 
| 73 | 
            -
                - -  | 
| 108 | 
            +
                - - ">="
         | 
| 74 109 | 
             
                  - !ruby/object:Gem::Version
         | 
| 75 110 | 
             
                    version: '0'
         | 
| 111 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 112 | 
            +
              name: zip
         | 
| 76 113 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 77 114 | 
             
                requirements:
         | 
| 78 | 
            -
                - -  | 
| 115 | 
            +
                - - ">="
         | 
| 79 116 | 
             
                  - !ruby/object:Gem::Version
         | 
| 80 117 | 
             
                    version: '0'
         | 
| 81 | 
            -
              prerelease: false
         | 
| 82 118 | 
             
              type: :runtime
         | 
| 83 | 
            -
             | 
| 84 | 
            -
              name: neo4j-community
         | 
| 119 | 
            +
              prerelease: false
         | 
| 85 120 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 86 121 | 
             
                requirements:
         | 
| 87 | 
            -
                - -  | 
| 122 | 
            +
                - - ">="
         | 
| 88 123 | 
             
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            -
                    version:  | 
| 124 | 
            +
                    version: '0'
         | 
| 125 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 126 | 
            +
              name: activesupport
         | 
| 90 127 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 91 128 | 
             
                requirements:
         | 
| 92 | 
            -
                - -  | 
| 129 | 
            +
                - - ">="
         | 
| 93 130 | 
             
                  - !ruby/object:Gem::Version
         | 
| 94 | 
            -
                    version:  | 
| 95 | 
            -
              prerelease: false
         | 
| 131 | 
            +
                    version: '0'
         | 
| 96 132 | 
             
              type: :runtime
         | 
| 133 | 
            +
              prerelease: false
         | 
| 134 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 135 | 
            +
                requirements:
         | 
| 136 | 
            +
                - - ">="
         | 
| 137 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 138 | 
            +
                    version: '0'
         | 
| 97 139 | 
             
            description: |
         | 
| 98 140 | 
             
              You can think of Neo4j as a high-performance graph engine with all the features of a mature and robust database.
         | 
| 99 141 | 
             
              The programmer works with an object-oriented, flexible network structure rather than with strict and static tables
         | 
| @@ -105,19 +147,9 @@ extensions: [] | |
| 105 147 | 
             
            extra_rdoc_files:
         | 
| 106 148 | 
             
            - README.md
         | 
| 107 149 | 
             
            files:
         | 
| 150 | 
            +
            - Gemfile
         | 
| 151 | 
            +
            - README.md
         | 
| 108 152 | 
             
            - lib/neo4j-core.rb
         | 
| 109 | 
            -
            - lib/neo4j-embedded.rb
         | 
| 110 | 
            -
            - lib/neo4j-server.rb
         | 
| 111 | 
            -
            - lib/neo4j/entity_equality.rb
         | 
| 112 | 
            -
            - lib/neo4j/label.rb
         | 
| 113 | 
            -
            - lib/neo4j/node.rb
         | 
| 114 | 
            -
            - lib/neo4j/property_container.rb
         | 
| 115 | 
            -
            - lib/neo4j/property_validator.rb
         | 
| 116 | 
            -
            - lib/neo4j/relationship.rb
         | 
| 117 | 
            -
            - lib/neo4j/session.rb
         | 
| 118 | 
            -
            - lib/neo4j/transaction.rb
         | 
| 119 | 
            -
            - lib/neo4j/tasks/config_server.rb
         | 
| 120 | 
            -
            - lib/neo4j/tasks/neo4j_server.rb
         | 
| 121 153 | 
             
            - lib/neo4j-core/active_entity.rb
         | 
| 122 154 | 
             
            - lib/neo4j-core/cypher_translator.rb
         | 
| 123 155 | 
             
            - lib/neo4j-core/hash_with_indifferent_access.rb
         | 
| @@ -126,8 +158,10 @@ files: | |
| 126 158 | 
             
            - lib/neo4j-core/query.rb
         | 
| 127 159 | 
             
            - lib/neo4j-core/query_clauses.rb
         | 
| 128 160 | 
             
            - lib/neo4j-core/version.rb
         | 
| 161 | 
            +
            - lib/neo4j-embedded.rb
         | 
| 129 162 | 
             
            - lib/neo4j-embedded/cypher_response.rb
         | 
| 130 163 | 
             
            - lib/neo4j-embedded/embedded_database.rb
         | 
| 164 | 
            +
            - lib/neo4j-embedded/embedded_ha_session.rb
         | 
| 131 165 | 
             
            - lib/neo4j-embedded/embedded_impermanent_session.rb
         | 
| 132 166 | 
             
            - lib/neo4j-embedded/embedded_label.rb
         | 
| 133 167 | 
             
            - lib/neo4j-embedded/embedded_node.rb
         | 
| @@ -136,6 +170,7 @@ files: | |
| 136 170 | 
             
            - lib/neo4j-embedded/embedded_transaction.rb
         | 
| 137 171 | 
             
            - lib/neo4j-embedded/property.rb
         | 
| 138 172 | 
             
            - lib/neo4j-embedded/to_java.rb
         | 
| 173 | 
            +
            - lib/neo4j-server.rb
         | 
| 139 174 | 
             
            - lib/neo4j-server/cypher_label.rb
         | 
| 140 175 | 
             
            - lib/neo4j-server/cypher_node.rb
         | 
| 141 176 | 
             
            - lib/neo4j-server/cypher_node_uncommited.rb
         | 
| @@ -143,40 +178,47 @@ files: | |
| 143 178 | 
             
            - lib/neo4j-server/cypher_response.rb
         | 
| 144 179 | 
             
            - lib/neo4j-server/cypher_session.rb
         | 
| 145 180 | 
             
            - lib/neo4j-server/cypher_transaction.rb
         | 
| 146 | 
            -
            - lib/neo4j-server/neo4j_server_endpoint.rb
         | 
| 147 181 | 
             
            - lib/neo4j-server/resource.rb
         | 
| 148 | 
            -
            -  | 
| 149 | 
            -
            -  | 
| 182 | 
            +
            - lib/neo4j/entity_equality.rb
         | 
| 183 | 
            +
            - lib/neo4j/label.rb
         | 
| 184 | 
            +
            - lib/neo4j/node.rb
         | 
| 185 | 
            +
            - lib/neo4j/property_container.rb
         | 
| 186 | 
            +
            - lib/neo4j/property_validator.rb
         | 
| 187 | 
            +
            - lib/neo4j/relationship.rb
         | 
| 188 | 
            +
            - lib/neo4j/session.rb
         | 
| 189 | 
            +
            - lib/neo4j/tasks/config_server.rb
         | 
| 190 | 
            +
            - lib/neo4j/tasks/neo4j_server.rake
         | 
| 191 | 
            +
            - lib/neo4j/transaction.rb
         | 
| 150 192 | 
             
            - neo4j-core.gemspec
         | 
| 151 193 | 
             
            homepage: http://github.com/andreasronge/neo4j-core/tree
         | 
| 152 194 | 
             
            licenses:
         | 
| 153 195 | 
             
            - MIT
         | 
| 154 196 | 
             
            metadata: {}
         | 
| 155 | 
            -
            post_install_message:
         | 
| 197 | 
            +
            post_install_message: 
         | 
| 156 198 | 
             
            rdoc_options:
         | 
| 157 | 
            -
            - --quiet
         | 
| 158 | 
            -
            - --title
         | 
| 199 | 
            +
            - "--quiet"
         | 
| 200 | 
            +
            - "--title"
         | 
| 159 201 | 
             
            - Neo4j::Core
         | 
| 160 | 
            -
            - --line-numbers
         | 
| 161 | 
            -
            - --main
         | 
| 202 | 
            +
            - "--line-numbers"
         | 
| 203 | 
            +
            - "--main"
         | 
| 162 204 | 
             
            - README.rdoc
         | 
| 163 | 
            -
            - --inline-source
         | 
| 205 | 
            +
            - "--inline-source"
         | 
| 164 206 | 
             
            require_paths:
         | 
| 165 207 | 
             
            - lib
         | 
| 166 208 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 167 209 | 
             
              requirements:
         | 
| 168 | 
            -
              - -  | 
| 210 | 
            +
              - - ">="
         | 
| 169 211 | 
             
                - !ruby/object:Gem::Version
         | 
| 170 212 | 
             
                  version: 1.8.7
         | 
| 171 213 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 172 214 | 
             
              requirements:
         | 
| 173 | 
            -
              - -  | 
| 215 | 
            +
              - - ">"
         | 
| 174 216 | 
             
                - !ruby/object:Gem::Version
         | 
| 175 217 | 
             
                  version: 1.3.1
         | 
| 176 218 | 
             
            requirements: []
         | 
| 177 219 | 
             
            rubyforge_project: neo4j-core
         | 
| 178 | 
            -
            rubygems_version: 2. | 
| 179 | 
            -
            signing_key:
         | 
| 220 | 
            +
            rubygems_version: 2.2.2
         | 
| 221 | 
            +
            signing_key: 
         | 
| 180 222 | 
             
            specification_version: 4
         | 
| 181 223 | 
             
            summary: A graph database for Ruby
         | 
| 182 224 | 
             
            test_files: []
         | 
| @@ -1,24 +0,0 @@ | |
| 1 | 
            -
            module Neo4j::Server
         | 
| 2 | 
            -
              class Neo4jServerEndpoint
         | 
| 3 | 
            -
                def initialize(params = {})
         | 
| 4 | 
            -
                  @params = params
         | 
| 5 | 
            -
                end
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                def merged_options(options)
         | 
| 8 | 
            -
                  options.merge!(@params)
         | 
| 9 | 
            -
                end
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                def get(url, options={})
         | 
| 12 | 
            -
                  HTTParty.get(url, merged_options(options))
         | 
| 13 | 
            -
                end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                def post(url, options={})
         | 
| 16 | 
            -
                  HTTParty.post(url, merged_options(options))
         | 
| 17 | 
            -
                end
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                def delete(url, options={})
         | 
| 20 | 
            -
                  HTTParty.delete(url, merged_options(options))
         | 
| 21 | 
            -
                end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
              end
         | 
| 24 | 
            -
            end
         |