neography 0.0.9 → 0.0.10
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/Gemfile.lock +1 -1
 - data/README.rdoc +18 -10
 - data/lib/neography/config.rb +3 -1
 - data/lib/neography/node_index.rb +9 -0
 - data/lib/neography/rest.rb +52 -12
 - data/lib/neography/version.rb +1 -1
 - data/spec/integration/authorization_spec.rb +48 -0
 - data/spec/integration/index_spec.rb +31 -0
 - data/spec/integration/rest_index_spec.rb +86 -13
 - metadata +7 -5
 - data/spec/integration/heroku_spec.rb +0 -21
 
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/README.rdoc
    CHANGED
    
    | 
         @@ -2,7 +2,7 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            Neography is a thin Ruby wrapper to the Neo4j Rest API, for more information:
         
     | 
| 
       4 
4 
     | 
    
         
             
            * {Getting Started with Neo4j Server}[http://wiki.neo4j.org/content/Getting_Started_with_Neo4j_Server]
         
     | 
| 
       5 
     | 
    
         
            -
            * {Neo4j Rest API Reference}[http://components.neo4j.org/neo4j-rest 
     | 
| 
      
 5 
     | 
    
         
            +
            * {Neo4j Rest API Reference}[http://components.neo4j.org/neo4j-server/milestone/rest.html]
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            If you want to the full power of Neo4j, you will want to use JRuby and the excellent Neo4j.rb gem at https://github.com/andreasronge/neo4j
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
         @@ -19,7 +19,7 @@ in order to access the functionality. 
     | 
|
| 
       19 
19 
     | 
    
         | 
| 
       20 
20 
     | 
    
         
             
            === Try it now!
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
            I am hosting an instance of Neo4j (1.2 
     | 
| 
      
 22 
     | 
    
         
            +
            I am hosting an instance of Neo4j (1.2) at neography.org for you to try out.
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
24 
     | 
    
         
             
            You can see the administration at: {Neo4j Web Admin}[http://neography.org]
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
         @@ -44,8 +44,6 @@ Just add gem 'neography' to your Gemfile and run bundle install 
     | 
|
| 
       44 
44 
     | 
    
         | 
| 
       45 
45 
     | 
    
         
             
            === Documentation
         
     | 
| 
       46 
46 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
            A thin ruby wrapper Neography::Rest which tries to mirror the Neo4j Rest API and returns JSON or Nil:
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
47 
     | 
    
         
             
              @neo = Neography::Rest.new({:protocol => 'http://', 
         
     | 
| 
       50 
48 
     | 
    
         
             
                                          :server => 'localhost', 
         
     | 
| 
       51 
49 
     | 
    
         
             
                                          :port => 7474, 
         
     | 
| 
         @@ -57,9 +55,14 @@ A thin ruby wrapper Neography::Rest which tries to mirror the Neo4j Rest API and 
     | 
|
| 
       57 
55 
     | 
    
         
             
                                          :log_enabled => false,
         
     | 
| 
       58 
56 
     | 
    
         
             
                                          :max_threads => 20})
         
     | 
| 
       59 
57 
     | 
    
         | 
| 
      
 58 
     | 
    
         
            +
            Quick initializer (assumes basic authorization if username is given):
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
              @neo = Neography::Rest.new("http://username:password@myserver.com:7474/mydirectory")
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
       60 
63 
     | 
    
         
             
            To Use:
         
     | 
| 
       61 
64 
     | 
    
         | 
| 
       62 
     | 
    
         
            -
              @neo = Neography::Rest.new 
         
     | 
| 
      
 65 
     | 
    
         
            +
              @neo = Neography::Rest.new                                 # Inialize using all default parameters 
         
     | 
| 
       63 
66 
     | 
    
         | 
| 
       64 
67 
     | 
    
         
             
              @neo.get_root                                              # Get the root node
         
     | 
| 
       65 
68 
     | 
    
         
             
              node1 = @neo.create_node                                   # Create an empty node
         
     | 
| 
         @@ -92,10 +95,15 @@ To Use: 
     | 
|
| 
       92 
95 
     | 
    
         
             
              @neo.remove_relationship_properties(rel1, "since")         # Remove one property of a relationship
         
     | 
| 
       93 
96 
     | 
    
         
             
              @neo.remove_relationship_properties(rel1, ["since","met"]) # Remove multiple properties of a relationship
         
     | 
| 
       94 
97 
     | 
    
         | 
| 
       95 
     | 
    
         
            -
              @neo. 
     | 
| 
       96 
     | 
    
         
            -
              @neo. 
     | 
| 
       97 
     | 
    
         
            -
              @neo. 
     | 
| 
       98 
     | 
    
         
            -
              @neo. 
     | 
| 
      
 98 
     | 
    
         
            +
              @neo.list_node_indexes                                     # gives names and query templates for all defined indices
         
     | 
| 
      
 99 
     | 
    
         
            +
              @neo.add_node_to_index(index, key, value, node1)           # adds a node to the index with the given key/value pair
         
     | 
| 
      
 100 
     | 
    
         
            +
              @neo.remove_node_from_index(index, key, value, node1)      # removes a node from the index with the given key/value pair
         
     | 
| 
      
 101 
     | 
    
         
            +
              @neo.get_node_index(index, key, value)                     # queries the index with the given key/value pair
         
     | 
| 
      
 102 
     | 
    
         
            +
              @neo.list_relationship_indexes                             # gives names and query templates for relationship indices
         
     | 
| 
      
 103 
     | 
    
         
            +
              @neo.add_relationship_to_index(index, key, value, rel1)    # adds a relationship to the index with the given key/value pair
         
     | 
| 
      
 104 
     | 
    
         
            +
              @neo.remove_relationship_from_index(index, key, value, rel1) # removes a relationship from the index with the given key/value pair
         
     | 
| 
      
 105 
     | 
    
         
            +
              @neo.get_relationship_index(index, key, value)             # queries the relationship index with the given key/value pair
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
       99 
107 
     | 
    
         | 
| 
       100 
108 
     | 
    
         
             
              @neo.get_path(node1, node2, relationships, depth=4, algorithm="shortestPath") # finds the shortest path between two nodes 
         
     | 
| 
       101 
109 
     | 
    
         
             
              @neo.get_paths(node1, node2, relationships, depth=3, algorithm="allPaths")    # finds all paths between two nodes
         
     | 
| 
         @@ -133,7 +141,7 @@ Experimental: 
     | 
|
| 
       133 
141 
     | 
    
         
             
              another_node = @neo.create_node("age" => 31, "name" => "Max")
         
     | 
| 
       134 
142 
     | 
    
         
             
              nodes = @neo.get_nodes([one_set_nodes, another_node])                     # Get four nodes
         
     | 
| 
       135 
143 
     | 
    
         | 
| 
       136 
     | 
    
         
            -
            === Phase 2 
     | 
| 
      
 144 
     | 
    
         
            +
            === Phase 2
         
     | 
| 
       137 
145 
     | 
    
         | 
| 
       138 
146 
     | 
    
         
             
            Trying to mimic the Neo4j.rb API.
         
     | 
| 
       139 
147 
     | 
    
         | 
    
        data/lib/neography/config.rb
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Neography
         
     | 
| 
       2 
2 
     | 
    
         
             
              class Config 
         
     | 
| 
       3 
     | 
    
         
            -
                class << self; attr_accessor :protocol, :server, :port, :directory, :log_file, :log_enabled, :logger, :max_threads, :authentication end
         
     | 
| 
      
 3 
     | 
    
         
            +
                class << self; attr_accessor :protocol, :server, :port, :directory, :log_file, :log_enabled, :logger, :max_threads, :authentication, :username, :password end
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
                @protocol = 'http://'
         
     | 
| 
       6 
6 
     | 
    
         
             
                @server = 'localhost'
         
     | 
| 
         @@ -11,5 +11,7 @@ module Neography 
     | 
|
| 
       11 
11 
     | 
    
         
             
                @logger = Logger.new(@log_file) if @log_enabled
         
     | 
| 
       12 
12 
     | 
    
         
             
                @max_threads = 20
         
     | 
| 
       13 
13 
     | 
    
         
             
                @authentication = {}
         
     | 
| 
      
 14 
     | 
    
         
            +
                @username = nil
         
     | 
| 
      
 15 
     | 
    
         
            +
                @password = nil
         
     | 
| 
       14 
16 
     | 
    
         
             
              end
         
     | 
| 
       15 
17 
     | 
    
         
             
            end
         
     | 
    
        data/lib/neography/rest.rb
    CHANGED
    
    | 
         @@ -5,15 +5,31 @@ module Neography 
     | 
|
| 
       5 
5 
     | 
    
         
             
                attr_accessor :protocol, :server, :port, :directory, :log_file, :log_enabled, :logger, :max_threads, :authentication, :username, :password
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                  def initialize(options={})
         
     | 
| 
       8 
     | 
    
         
            -
                    init = {:protocol 
     | 
| 
       9 
     | 
    
         
            -
                            :server 
     | 
| 
       10 
     | 
    
         
            -
                            :port 
     | 
| 
       11 
     | 
    
         
            -
                            :directory 
     | 
| 
       12 
     | 
    
         
            -
                            :log_file 
     | 
| 
       13 
     | 
    
         
            -
                            :log_enabled 
     | 
| 
       14 
     | 
    
         
            -
                            :max_threads 
     | 
| 
       15 
     | 
    
         
            -
                            :authentication => Neography::Config.authentication 
     | 
| 
      
 8 
     | 
    
         
            +
                    init = {:protocol       => Neography::Config.protocol, 
         
     | 
| 
      
 9 
     | 
    
         
            +
                            :server         => Neography::Config.server, 
         
     | 
| 
      
 10 
     | 
    
         
            +
                            :port           => Neography::Config.port, 
         
     | 
| 
      
 11 
     | 
    
         
            +
                            :directory      => Neography::Config.directory, 
         
     | 
| 
      
 12 
     | 
    
         
            +
                            :log_file       => Neography::Config.log_file, 
         
     | 
| 
      
 13 
     | 
    
         
            +
                            :log_enabled    => Neography::Config.log_enabled, 
         
     | 
| 
      
 14 
     | 
    
         
            +
                            :max_threads    => Neography::Config.max_threads,
         
     | 
| 
      
 15 
     | 
    
         
            +
                            :authentication => Neography::Config.authentication,
         
     | 
| 
      
 16 
     | 
    
         
            +
                            :username       => Neography::Config.username,
         
     | 
| 
      
 17 
     | 
    
         
            +
                            :password       => Neography::Config.password}
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    unless options.respond_to?(:each_pair)
         
     | 
| 
      
 20 
     | 
    
         
            +
                      url = URI.parse(options)
         
     | 
| 
      
 21 
     | 
    
         
            +
                      options = Hash.new
         
     | 
| 
      
 22 
     | 
    
         
            +
                      options[:protocol] = url.scheme + "://"
         
     | 
| 
      
 23 
     | 
    
         
            +
                      options[:server] = url.host
         
     | 
| 
      
 24 
     | 
    
         
            +
                      options[:port] = url.port
         
     | 
| 
      
 25 
     | 
    
         
            +
                      options[:directory] = url.path
         
     | 
| 
      
 26 
     | 
    
         
            +
                      options[:username] = url.user
         
     | 
| 
      
 27 
     | 
    
         
            +
                      options[:password] = url.password
         
     | 
| 
      
 28 
     | 
    
         
            +
                      options[:authentication] = 'basic' unless url.user.nil?
         
     | 
| 
      
 29 
     | 
    
         
            +
                    end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
       16 
31 
     | 
    
         
             
                    init.merge!(options)
         
     | 
| 
      
 32 
     | 
    
         
            +
                    puts init.inspect
         
     | 
| 
       17 
33 
     | 
    
         | 
| 
       18 
34 
     | 
    
         
             
                    @protocol       = init[:protocol]
         
     | 
| 
       19 
35 
     | 
    
         
             
                    @server         = init[:server]
         
     | 
| 
         @@ -25,6 +41,7 @@ module Neography 
     | 
|
| 
       25 
41 
     | 
    
         
             
                    @max_threads    = init[:max_threads]
         
     | 
| 
       26 
42 
     | 
    
         
             
                    @authentication = Hash.new
         
     | 
| 
       27 
43 
     | 
    
         
             
                    @authentication = {"#{init[:authentication]}_auth".to_sym => {:username => init[:username], :password => init[:password]}} unless init[:authentication].empty?
         
     | 
| 
      
 44 
     | 
    
         
            +
                    puts "Authentication: #{@authentication.inspect}"
         
     | 
| 
       28 
45 
     | 
    
         
             
                  end
         
     | 
| 
       29 
46 
     | 
    
         | 
| 
       30 
47 
     | 
    
         
             
                  def configure(protocol, server, port, directory)
         
     | 
| 
         @@ -219,25 +236,48 @@ module Neography 
     | 
|
| 
       219 
236 
     | 
    
         
             
                    delete("/node/#{get_id(id)}")
         
     | 
| 
       220 
237 
     | 
    
         
             
                  end
         
     | 
| 
       221 
238 
     | 
    
         | 
| 
       222 
     | 
    
         
            -
                  def  
     | 
| 
      
 239 
     | 
    
         
            +
                  def list_node_indexes
         
     | 
| 
       223 
240 
     | 
    
         
             
                    get("/index/node")
         
     | 
| 
       224 
241 
     | 
    
         
             
                  end
         
     | 
| 
       225 
242 
     | 
    
         | 
| 
       226 
     | 
    
         
            -
                  def  
     | 
| 
      
 243 
     | 
    
         
            +
                  def add_node_to_index(index, key, value, id)
         
     | 
| 
       227 
244 
     | 
    
         
             
                    options = { :body => (self.configuration + "/node/#{get_id(id)}").to_json, :headers => {'Content-Type' => 'application/json'} } 
         
     | 
| 
       228 
245 
     | 
    
         
             
                    post("/index/node/#{index}/#{key}/#{value}", options)
         
     | 
| 
       229 
246 
     | 
    
         
             
                  end
         
     | 
| 
       230 
247 
     | 
    
         | 
| 
       231 
     | 
    
         
            -
                  def  
     | 
| 
      
 248 
     | 
    
         
            +
                  def remove_node_from_index(index, key, value, id)
         
     | 
| 
       232 
249 
     | 
    
         
             
                    delete("/index/node/#{index}/#{key}/#{value}/#{get_id(id)}")
         
     | 
| 
       233 
250 
     | 
    
         
             
                  end
         
     | 
| 
       234 
251 
     | 
    
         | 
| 
       235 
     | 
    
         
            -
                  def  
     | 
| 
      
 252 
     | 
    
         
            +
                  def get_node_index(index, key, value)
         
     | 
| 
       236 
253 
     | 
    
         
             
                    index = get("/index/node/#{index}/#{key}/#{value}") || Array.new
         
     | 
| 
       237 
254 
     | 
    
         
             
                    return nil if index.empty?
         
     | 
| 
       238 
255 
     | 
    
         
             
                    index
         
     | 
| 
       239 
256 
     | 
    
         
             
                  end
         
     | 
| 
       240 
257 
     | 
    
         | 
| 
      
 258 
     | 
    
         
            +
                  alias_method :list_indexes, :list_node_indexes
         
     | 
| 
      
 259 
     | 
    
         
            +
                  alias_method :add_to_index, :add_node_to_index
         
     | 
| 
      
 260 
     | 
    
         
            +
                  alias_method :remove_from_index, :remove_node_from_index
         
     | 
| 
      
 261 
     | 
    
         
            +
                  alias_method :get_index, :get_node_index
         
     | 
| 
      
 262 
     | 
    
         
            +
             
     | 
| 
      
 263 
     | 
    
         
            +
                  def list_relationship_indexes
         
     | 
| 
      
 264 
     | 
    
         
            +
                    get("/index/relationship")
         
     | 
| 
      
 265 
     | 
    
         
            +
                  end
         
     | 
| 
      
 266 
     | 
    
         
            +
             
     | 
| 
      
 267 
     | 
    
         
            +
                  def add_relationship_to_index(index, key, value, id)
         
     | 
| 
      
 268 
     | 
    
         
            +
                    options = { :body => (self.configuration + "/relationship/#{get_id(id)}").to_json, :headers => {'Content-Type' => 'application/json'} } 
         
     | 
| 
      
 269 
     | 
    
         
            +
                    post("/index/relationship/#{index}/#{key}/#{value}", options)
         
     | 
| 
      
 270 
     | 
    
         
            +
                  end
         
     | 
| 
      
 271 
     | 
    
         
            +
             
     | 
| 
      
 272 
     | 
    
         
            +
                  def remove_relationship_from_index(index, key, value, id)
         
     | 
| 
      
 273 
     | 
    
         
            +
                    delete("/index/relationship/#{index}/#{key}/#{value}/#{get_id(id)}")
         
     | 
| 
      
 274 
     | 
    
         
            +
                  end
         
     | 
| 
      
 275 
     | 
    
         
            +
             
     | 
| 
      
 276 
     | 
    
         
            +
                  def get_relationship_index(index, key, value)
         
     | 
| 
      
 277 
     | 
    
         
            +
                    index = get("/index/relationship/#{index}/#{key}/#{value}") || Array.new
         
     | 
| 
      
 278 
     | 
    
         
            +
                    return nil if index.empty?
         
     | 
| 
      
 279 
     | 
    
         
            +
                    index
         
     | 
| 
      
 280 
     | 
    
         
            +
                  end
         
     | 
| 
       241 
281 
     | 
    
         
             
                  def traverse(id, return_type, description)
         
     | 
| 
       242 
282 
     | 
    
         
             
                    options = { :body => {"order" => get_order(description["order"]), 
         
     | 
| 
       243 
283 
     | 
    
         
             
                                          "uniqueness" => get_uniqueness(description["uniqueness"]), 
         
     | 
    
        data/lib/neography/version.rb
    CHANGED
    
    
| 
         @@ -0,0 +1,48 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.join(File.dirname(__FILE__), '..', 'spec_helper')
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe Neography::Rest do
         
     | 
| 
      
 4 
     | 
    
         
            +
              describe "basic authentication" do
         
     | 
| 
      
 5 
     | 
    
         
            +
                describe "get_root" do
         
     | 
| 
      
 6 
     | 
    
         
            +
                  it "can get the root node" do
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @neo = Neography::Rest.new({:server => '4c36b641.neo4j.atns.de', :port => 7474, :directory => '/9dc1fda5be8b5cde29621e21cae5adece3de0f37', :authentication => 'basic', :username => "abbe3c012", :password => "34d7b22eb"})
         
     | 
| 
      
 8 
     | 
    
         
            +
                    root_node = @neo.get_root
         
     | 
| 
      
 9 
     | 
    
         
            +
                    root_node.should have_key("reference_node")
         
     | 
| 
      
 10 
     | 
    
         
            +
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                describe "create_node" do
         
     | 
| 
      
 14 
     | 
    
         
            +
                  it "can create an empty node" do
         
     | 
| 
      
 15 
     | 
    
         
            +
                    @neo = Neography::Rest.new({:server => '4c36b641.neo4j.atns.de', :port => 7474, :directory => '/9dc1fda5be8b5cde29621e21cae5adece3de0f37', :authentication => 'basic', :username => "abbe3c012", :password => "34d7b22eb"})
         
     | 
| 
      
 16 
     | 
    
         
            +
                    new_node = @neo.create_node
         
     | 
| 
      
 17 
     | 
    
         
            +
                    new_node.should_not be_nil
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                describe "quick initalizer" do
         
     | 
| 
      
 22 
     | 
    
         
            +
                  it "can get the root node" do
         
     | 
| 
      
 23 
     | 
    
         
            +
                    @neo = Neography::Rest.new("http://abbe3c012:34d7b22eb@4c36b641.neo4j.atns.de:7474/9dc1fda5be8b5cde29621e21cae5adece3de0f37")
         
     | 
| 
      
 24 
     | 
    
         
            +
                    root_node = @neo.get_root
         
     | 
| 
      
 25 
     | 
    
         
            +
                    root_node.should have_key("reference_node")
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              describe "digest authentication" do
         
     | 
| 
      
 31 
     | 
    
         
            +
                describe "get_root" do
         
     | 
| 
      
 32 
     | 
    
         
            +
                  it "can get the root node" do
         
     | 
| 
      
 33 
     | 
    
         
            +
                    @neo = Neography::Rest.new({:server => '4c36b641.neo4j.atns.de', :port => 7474, :directory => '/9dc1fda5be8b5cde29621e21cae5adece3de0f37', :authentication => 'digest', :username => "abbe3c012", :password => "34d7b22eb"})
         
     | 
| 
      
 34 
     | 
    
         
            +
                    root_node = @neo.get_root
         
     | 
| 
      
 35 
     | 
    
         
            +
                    root_node.should have_key("reference_node")
         
     | 
| 
      
 36 
     | 
    
         
            +
                  end
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                describe "create_node" do
         
     | 
| 
      
 40 
     | 
    
         
            +
                  it "can create an empty node" do
         
     | 
| 
      
 41 
     | 
    
         
            +
                    @neo = Neography::Rest.new({:server => '4c36b641.neo4j.atns.de', :port => 7474, :directory => '/9dc1fda5be8b5cde29621e21cae5adece3de0f37', :authentication => 'digest', :username => "abbe3c012", :password => "34d7b22eb"})
         
     | 
| 
      
 42 
     | 
    
         
            +
                    new_node = @neo.create_node
         
     | 
| 
      
 43 
     | 
    
         
            +
                    new_node.should_not be_nil
         
     | 
| 
      
 44 
     | 
    
         
            +
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.join(File.dirname(__FILE__), '..', 'spec_helper')
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe Neography::Relationship, "find" do
         
     | 
| 
      
 4 
     | 
    
         
            +
              before(:each) do
         
     | 
| 
      
 5 
     | 
    
         
            +
                Neography::Relationship.index(:strength)
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              it "can index when Neography::Relationships are created" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                a            = Neography::Node.create
         
     | 
| 
      
 10 
     | 
    
         
            +
                b            = Neography::Node.create
         
     | 
| 
      
 11 
     | 
    
         
            +
                r            = Neography::Relationship.create(:friends, a, b)
         
     | 
| 
      
 12 
     | 
    
         
            +
                r[:strength] = 'strong'
         
     | 
| 
      
 13 
     | 
    
         
            +
                Neography::Relationship.find('strength: strong').first.should == r
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              it "can remove index when Neography::Relationship is deleted, just like nodes" do
         
     | 
| 
      
 17 
     | 
    
         
            +
                a            = Neography::Node.create
         
     | 
| 
      
 18 
     | 
    
         
            +
                b            = Neography::Node.create
         
     | 
| 
      
 19 
     | 
    
         
            +
                r            = Neography::Relationship.create(:friends, a, b)
         
     | 
| 
      
 20 
     | 
    
         
            +
                r[:strength] = 'weak'
         
     | 
| 
      
 21 
     | 
    
         
            +
                r2           = Neography::Relationship.find('strength: weak').first
         
     | 
| 
      
 22 
     | 
    
         
            +
                r2.should == r
         
     | 
| 
      
 23 
     | 
    
         
            +
                r2.del
         
     | 
| 
      
 24 
     | 
    
         
            +
                Neography::Relationship.find('strength: weak').should be_empty
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            describe Neography::Node, "find" do
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -6,13 +6,23 @@ describe Neography::Rest do 
     | 
|
| 
       6 
6 
     | 
    
         
             
              end
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
              describe "list indexes" do
         
     | 
| 
       9 
     | 
    
         
            -
                it "can get a listing of indexes" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                it "can get a listing of node indexes" do
         
     | 
| 
       10 
10 
     | 
    
         
             
                  new_node = @neo.create_node
         
     | 
| 
       11 
11 
     | 
    
         
             
                  key = generate_text(6)
         
     | 
| 
       12 
12 
     | 
    
         
             
                  value = generate_text
         
     | 
| 
       13 
     | 
    
         
            -
                  @neo. 
     | 
| 
      
 13 
     | 
    
         
            +
                  @neo.add_node_to_index("test_index", key, value, new_node) 
         
     | 
| 
       14 
14 
     | 
    
         
             
                  @neo.list_indexes.should_not be_nil
         
     | 
| 
       15 
15 
     | 
    
         
             
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                it "can get a listing of relationship indexes" do
         
     | 
| 
      
 18 
     | 
    
         
            +
                  new_node1 = @neo.create_node
         
     | 
| 
      
 19 
     | 
    
         
            +
                  new_node2 = @neo.create_node
         
     | 
| 
      
 20 
     | 
    
         
            +
                  new_relationship = @neo.create_relationship("friends", new_node1, new_node2)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  key = generate_text(6)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  value = generate_text
         
     | 
| 
      
 23 
     | 
    
         
            +
                  @neo.add_relationship_to_index("test_index", key, value, new_relationship) 
         
     | 
| 
      
 24 
     | 
    
         
            +
                  @neo.list_relationship_indexes.should_not be_nil
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
       16 
26 
     | 
    
         
             
              end
         
     | 
| 
       17 
27 
     | 
    
         | 
| 
       18 
28 
     | 
    
         
             
              describe "add to index" do
         
     | 
| 
         @@ -20,10 +30,22 @@ describe Neography::Rest do 
     | 
|
| 
       20 
30 
     | 
    
         
             
                  new_node = @neo.create_node
         
     | 
| 
       21 
31 
     | 
    
         
             
                  key = generate_text(6)
         
     | 
| 
       22 
32 
     | 
    
         
             
                  value = generate_text
         
     | 
| 
       23 
     | 
    
         
            -
                  @neo. 
     | 
| 
       24 
     | 
    
         
            -
                  new_index = @neo. 
     | 
| 
      
 33 
     | 
    
         
            +
                  @neo.add_node_to_index("test_index", key, value, new_node) 
         
     | 
| 
      
 34 
     | 
    
         
            +
                  new_index = @neo.get_node_index("test_index", key, value) 
         
     | 
| 
      
 35 
     | 
    
         
            +
                  new_index.should_not be_nil
         
     | 
| 
      
 36 
     | 
    
         
            +
                  @neo.remove_node_from_index("test_index", key, value, new_node) 
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
              
         
     | 
| 
      
 39 
     | 
    
         
            +
                it "can add a relationship to an index" do
         
     | 
| 
      
 40 
     | 
    
         
            +
                  new_node1 = @neo.create_node
         
     | 
| 
      
 41 
     | 
    
         
            +
                  new_node2 = @neo.create_node
         
     | 
| 
      
 42 
     | 
    
         
            +
                  new_relationship = @neo.create_relationship("friends", new_node1, new_node2)
         
     | 
| 
      
 43 
     | 
    
         
            +
                  key = generate_text(6)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  value = generate_text
         
     | 
| 
      
 45 
     | 
    
         
            +
                  @neo.add_relationship_to_index("test_index", key, value, new_relationship) 
         
     | 
| 
      
 46 
     | 
    
         
            +
                  new_index = @neo.get_relationship_index("test_index", key, value) 
         
     | 
| 
       25 
47 
     | 
    
         
             
                  new_index.should_not be_nil
         
     | 
| 
       26 
     | 
    
         
            -
                  @neo. 
     | 
| 
      
 48 
     | 
    
         
            +
                  @neo.remove_relationship_from_index("test_index", key, value, new_relationship) 
         
     | 
| 
       27 
49 
     | 
    
         
             
                end
         
     | 
| 
       28 
50 
     | 
    
         
             
              end
         
     | 
| 
       29 
51 
     | 
    
         | 
| 
         @@ -32,25 +54,76 @@ describe Neography::Rest do 
     | 
|
| 
       32 
54 
     | 
    
         
             
                  new_node = @neo.create_node
         
     | 
| 
       33 
55 
     | 
    
         
             
                  key = generate_text(6)
         
     | 
| 
       34 
56 
     | 
    
         
             
                  value = generate_text
         
     | 
| 
       35 
     | 
    
         
            -
                  @neo. 
     | 
| 
       36 
     | 
    
         
            -
                  new_index = @neo. 
     | 
| 
      
 57 
     | 
    
         
            +
                  @neo.add_node_to_index("test_index", key, value, new_node) 
         
     | 
| 
      
 58 
     | 
    
         
            +
                  new_index = @neo.get_node_index("test_index", key, value) 
         
     | 
| 
       37 
59 
     | 
    
         
             
                  new_index.should_not be_nil
         
     | 
| 
       38 
     | 
    
         
            -
                  @neo. 
     | 
| 
       39 
     | 
    
         
            -
                  new_index = @neo. 
     | 
| 
      
 60 
     | 
    
         
            +
                  @neo.remove_node_from_index("test_index", key, value, new_node) 
         
     | 
| 
      
 61 
     | 
    
         
            +
                  new_index = @neo.get_node_index("test_index", key, value) 
         
     | 
| 
      
 62 
     | 
    
         
            +
                  new_index.should be_nil
         
     | 
| 
      
 63 
     | 
    
         
            +
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                it "can remove a relationshp from an index" do
         
     | 
| 
      
 66 
     | 
    
         
            +
                  new_node1 = @neo.create_node
         
     | 
| 
      
 67 
     | 
    
         
            +
                  new_node2 = @neo.create_node
         
     | 
| 
      
 68 
     | 
    
         
            +
                  new_relationship = @neo.create_relationship("friends", new_node1, new_node2)
         
     | 
| 
      
 69 
     | 
    
         
            +
                  key = generate_text(6)
         
     | 
| 
      
 70 
     | 
    
         
            +
                  value = generate_text
         
     | 
| 
      
 71 
     | 
    
         
            +
                  @neo.add_relationship_to_index("test_index", key, value, new_relationship) 
         
     | 
| 
      
 72 
     | 
    
         
            +
                  new_index = @neo.get_relationship_index("test_index", key, value) 
         
     | 
| 
      
 73 
     | 
    
         
            +
                  new_index.should_not be_nil
         
     | 
| 
      
 74 
     | 
    
         
            +
                  @neo.remove_relationship_from_index("test_index", key, value, new_relationship) 
         
     | 
| 
      
 75 
     | 
    
         
            +
                  new_index = @neo.get_relationship_index("test_index", key, value) 
         
     | 
| 
       40 
76 
     | 
    
         
             
                  new_index.should be_nil
         
     | 
| 
       41 
77 
     | 
    
         
             
                end
         
     | 
| 
       42 
78 
     | 
    
         
             
              end
         
     | 
| 
       43 
79 
     | 
    
         | 
| 
       44 
80 
     | 
    
         
             
              describe "get index" do
         
     | 
| 
       45 
     | 
    
         
            -
                it "can get  
     | 
| 
      
 81 
     | 
    
         
            +
                it "can get a node index" do
         
     | 
| 
       46 
82 
     | 
    
         
             
                  new_node = @neo.create_node
         
     | 
| 
       47 
83 
     | 
    
         
             
                  key = generate_text(6)
         
     | 
| 
       48 
84 
     | 
    
         
             
                  value = generate_text
         
     | 
| 
       49 
     | 
    
         
            -
                  @neo. 
     | 
| 
       50 
     | 
    
         
            -
                  new_index = @neo. 
     | 
| 
      
 85 
     | 
    
         
            +
                  @neo.add_node_to_index("test_index", key, value, new_node) 
         
     | 
| 
      
 86 
     | 
    
         
            +
                  new_index = @neo.get_node_index("test_index", key, value) 
         
     | 
| 
      
 87 
     | 
    
         
            +
                  new_index.should_not be_nil
         
     | 
| 
      
 88 
     | 
    
         
            +
                  @neo.remove_node_from_index("test_index", key, value, new_node) 
         
     | 
| 
      
 89 
     | 
    
         
            +
                end
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
                it "can get a relationship index" do
         
     | 
| 
      
 92 
     | 
    
         
            +
                  new_node1 = @neo.create_node
         
     | 
| 
      
 93 
     | 
    
         
            +
                  new_node2 = @neo.create_node
         
     | 
| 
      
 94 
     | 
    
         
            +
                  new_relationship = @neo.create_relationship("friends", new_node1, new_node2)
         
     | 
| 
      
 95 
     | 
    
         
            +
                  key = generate_text(6)
         
     | 
| 
      
 96 
     | 
    
         
            +
                  value = generate_text
         
     | 
| 
      
 97 
     | 
    
         
            +
                  @neo.add_relationship_to_index("test_index", key, value, new_relationship) 
         
     | 
| 
      
 98 
     | 
    
         
            +
                  new_index = @neo.get_relationship_index("test_index", key, value) 
         
     | 
| 
       51 
99 
     | 
    
         
             
                  new_index.should_not be_nil
         
     | 
| 
       52 
     | 
    
         
            -
                  @neo. 
     | 
| 
      
 100 
     | 
    
         
            +
                  @neo.remove_relationship_from_index("test_index", key, value, new_relationship)
         
     | 
| 
       53 
101 
     | 
    
         
             
                end
         
     | 
| 
       54 
102 
     | 
    
         
             
              end
         
     | 
| 
       55 
103 
     | 
    
         | 
| 
      
 104 
     | 
    
         
            +
              describe "query index" do
         
     | 
| 
      
 105 
     | 
    
         
            +
                it "can query a node index" do
         
     | 
| 
      
 106 
     | 
    
         
            +
                  new_node = @neo.create_node
         
     | 
| 
      
 107 
     | 
    
         
            +
                  key = generate_text(6)
         
     | 
| 
      
 108 
     | 
    
         
            +
                  value = generate_text
         
     | 
| 
      
 109 
     | 
    
         
            +
                  @neo.add_node_to_index("test_index", key, value, new_node) 
         
     | 
| 
      
 110 
     | 
    
         
            +
                  new_index = @neo.get_node_index("test_index", key, value) 
         
     | 
| 
      
 111 
     | 
    
         
            +
                  new_index.first["self"].should == new_node["self"]
         
     | 
| 
      
 112 
     | 
    
         
            +
                  @neo.remove_node_from_index("test_index", key, value, new_node) 
         
     | 
| 
      
 113 
     | 
    
         
            +
                end
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
                it "can get a relationship index" do
         
     | 
| 
      
 116 
     | 
    
         
            +
                  new_node1 = @neo.create_node
         
     | 
| 
      
 117 
     | 
    
         
            +
                  new_node2 = @neo.create_node
         
     | 
| 
      
 118 
     | 
    
         
            +
                  new_relationship = @neo.create_relationship("friends", new_node1, new_node2)
         
     | 
| 
      
 119 
     | 
    
         
            +
                  key = generate_text(6)
         
     | 
| 
      
 120 
     | 
    
         
            +
                  value = generate_text
         
     | 
| 
      
 121 
     | 
    
         
            +
                  @neo.add_relationship_to_index("test_index", key, value, new_relationship) 
         
     | 
| 
      
 122 
     | 
    
         
            +
                  new_index = @neo.get_relationship_index("test_index", key, value) 
         
     | 
| 
      
 123 
     | 
    
         
            +
                  new_index.first["self"].should == new_relationship["self"]
         
     | 
| 
      
 124 
     | 
    
         
            +
                  @neo.remove_relationship_from_index("test_index", key, value, new_relationship)
         
     | 
| 
      
 125 
     | 
    
         
            +
                end
         
     | 
| 
      
 126 
     | 
    
         
            +
              end
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
       56 
129 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,13 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: neography
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              hash:  
     | 
| 
      
 4 
     | 
    
         
            +
              hash: 11
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       6 
6 
     | 
    
         
             
              segments: 
         
     | 
| 
       7 
7 
     | 
    
         
             
              - 0
         
     | 
| 
       8 
8 
     | 
    
         
             
              - 0
         
     | 
| 
       9 
     | 
    
         
            -
              -  
     | 
| 
       10 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
      
 9 
     | 
    
         
            +
              - 10
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.0.10
         
     | 
| 
       11 
11 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       12 
12 
     | 
    
         
             
            authors: 
         
     | 
| 
       13 
13 
     | 
    
         
             
            - Max De Marzi
         
     | 
| 
         @@ -15,7 +15,7 @@ autorequire: 
     | 
|
| 
       15 
15 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       16 
16 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
            date: 2011-02- 
     | 
| 
      
 18 
     | 
    
         
            +
            date: 2011-02-10 00:00:00 -08:00
         
     | 
| 
       19 
19 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       20 
20 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       21 
21 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
         @@ -124,6 +124,7 @@ files: 
     | 
|
| 
       124 
124 
     | 
    
         
             
            - lib/neography/equal.rb
         
     | 
| 
       125 
125 
     | 
    
         
             
            - lib/neography/neography.rb
         
     | 
| 
       126 
126 
     | 
    
         
             
            - lib/neography/node.rb
         
     | 
| 
      
 127 
     | 
    
         
            +
            - lib/neography/node_index.rb
         
     | 
| 
       127 
128 
     | 
    
         
             
            - lib/neography/node_path.rb
         
     | 
| 
       128 
129 
     | 
    
         
             
            - lib/neography/node_relationship.rb
         
     | 
| 
       129 
130 
     | 
    
         
             
            - lib/neography/node_traverser.rb
         
     | 
| 
         @@ -135,7 +136,8 @@ files: 
     | 
|
| 
       135 
136 
     | 
    
         
             
            - lib/neography/rest.rb
         
     | 
| 
       136 
137 
     | 
    
         
             
            - lib/neography/version.rb
         
     | 
| 
       137 
138 
     | 
    
         
             
            - neography.gemspec
         
     | 
| 
       138 
     | 
    
         
            -
            - spec/integration/ 
     | 
| 
      
 139 
     | 
    
         
            +
            - spec/integration/authorization_spec.rb
         
     | 
| 
      
 140 
     | 
    
         
            +
            - spec/integration/index_spec.rb
         
     | 
| 
       139 
141 
     | 
    
         
             
            - spec/integration/neography_spec.rb
         
     | 
| 
       140 
142 
     | 
    
         
             
            - spec/integration/node_path_spec.rb
         
     | 
| 
       141 
143 
     | 
    
         
             
            - spec/integration/node_relationship_spec.rb
         
     | 
| 
         @@ -1,21 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require File.join(File.dirname(__FILE__), '..', 'spec_helper')
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            describe Neography::Rest do
         
     | 
| 
       4 
     | 
    
         
            -
              before(:each) do
         
     | 
| 
       5 
     | 
    
         
            -
                @neo = Neography::Rest.new({:server => '4c36b641.neo4j.atns.de', :port => 7474, :directory => '/9dc1fda5be8b5cde29621e21cae5adece3de0f37', :authentication => 'basic', :username => "abbe3c012", :password => "34d7b22eb"})
         
     | 
| 
       6 
     | 
    
         
            -
              end
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
              describe "get_root" do
         
     | 
| 
       9 
     | 
    
         
            -
                it "can get the root node" do
         
     | 
| 
       10 
     | 
    
         
            -
                  root_node = @neo.get_root
         
     | 
| 
       11 
     | 
    
         
            -
                  root_node.should have_key("reference_node")
         
     | 
| 
       12 
     | 
    
         
            -
                end
         
     | 
| 
       13 
     | 
    
         
            -
              end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
              describe "create_node" do
         
     | 
| 
       16 
     | 
    
         
            -
                it "can create an empty node" do
         
     | 
| 
       17 
     | 
    
         
            -
                  new_node = @neo.create_node
         
     | 
| 
       18 
     | 
    
         
            -
                  new_node.should_not be_nil
         
     | 
| 
       19 
     | 
    
         
            -
                end
         
     | 
| 
       20 
     | 
    
         
            -
              end
         
     | 
| 
       21 
     | 
    
         
            -
            end
         
     |