Skip to content

Commit

Permalink
Not there yet, but slowly slowly...
Browse files Browse the repository at this point in the history
  • Loading branch information
cheerfulstoic committed Feb 5, 2016
1 parent 21c41ef commit edc80dc
Show file tree
Hide file tree
Showing 11 changed files with 67 additions and 113 deletions.
1 change: 1 addition & 0 deletions .agignore
@@ -0,0 +1 @@
*.rst
3 changes: 2 additions & 1 deletion Gemfile
Expand Up @@ -2,7 +2,8 @@ source 'http://rubygems.org'

gemspec

gem 'neo4j-core', github: 'neo4jrb/neo4j-core', branch: 'master' if ENV['CI']
# gem 'neo4j-core', github: 'neo4jrb/neo4j-core', branch: 'master' if ENV['CI']
gem 'neo4j-core', path: '../neo4j-core'

# gem 'active_attr', github: 'neo4jrb/active_attr', branch: 'performance'
# gem 'active_attr', path: '../active_attr'
Expand Down
5 changes: 4 additions & 1 deletion lib/neo4j/active_base.rb
Expand Up @@ -4,9 +4,12 @@ module Neo4j
module ActiveBase
class << self
def current_session
SessionRegistry.current_session
SessionRegistry.current_session.tap do |session|
fail 'No session defined!' if session.nil?
end
end

# Should support setting session via config options
def set_current_session(session)
SessionRegistry.current_session = session
end
Expand Down
2 changes: 2 additions & 0 deletions lib/neo4j/active_node/labels.rb
@@ -1,3 +1,5 @@
require 'neo4j/core/label'

module Neo4j
module ActiveNode
# Provides a mapping between neo4j labels and Ruby classes
Expand Down
6 changes: 2 additions & 4 deletions lib/neo4j/active_node/persistence.rb
Expand Up @@ -90,8 +90,6 @@ def labels_for_create
private

def destroy_query
require 'pry'
binding.pry
query_as(:n).optional_match('(n)-[r]-()').delete(:n, :r)
end

Expand Down Expand Up @@ -135,15 +133,15 @@ def create!(*args)
end

def merge(attributes)
neo4j_query.merge(n: {self.mapped_label_names => attributes})
new_query.merge(n: {self.mapped_label_names => attributes})
.on_create_set(n: on_create_props(attributes))
.on_match_set(n: on_match_props)
.pluck(:n).first
end

def find_or_create(find_attributes, set_attributes = {})
on_create_attributes = set_attributes.reverse_merge(on_create_props(find_attributes))
neo4j_query.merge(n: {self.mapped_label_names => find_attributes})
new_query.merge(n: {self.mapped_label_names => find_attributes})
.on_create_set(n: on_create_attributes)
.pluck(:n).first
end
Expand Down
7 changes: 4 additions & 3 deletions lib/neo4j/shared.rb
Expand Up @@ -10,8 +10,6 @@ module Shared
module ClassMethods
# TODO: Deprecate neo4j_session_name(name)

SelfDeprecation.:neo4j_session_name

def neo4j_session
Neo4j::ActiveBase.current_session
end
Expand All @@ -27,9 +25,12 @@ def neo4j_current_transaction_or_session
# This should be used everywhere. Should make it easy
# to support a session-per-model system
def neo4j_query(*args)
puts 'querying...'
neo4j_current_transaction_or_session.query(*args)
end

def new_query
Neo4j::ActiveBase.new_query
end
end

included do
Expand Down
4 changes: 0 additions & 4 deletions spec/e2e/active_model_spec.rb
@@ -1,7 +1,3 @@
# class ExtendedIceLolly < IceLolly
# property :extended_property
# end

describe 'Neo4j::ActiveNode' do
before(:each) do
clear_model_memory_caches
Expand Down
2 changes: 0 additions & 2 deletions spec/e2e/module_handling.rb
@@ -1,5 +1,3 @@
require 'spec_helper'

describe 'Module handling from config: :module_handling option' do
let(:clazz) do
Class.new do
Expand Down
18 changes: 3 additions & 15 deletions spec/e2e/query_spec.rb
@@ -1,7 +1,5 @@
require 'set'



describe 'Query API' do
before(:each) do
delete_db
Expand Down Expand Up @@ -204,19 +202,9 @@ def self.ordered_by_subject
end

describe '.merge' do
# The ActiveNode stubbing is doing some odd things with the `name` method on the defined classes,
# so please excuse this kludge.
after(:all) do
Object.send(:remove_const, :TeacherFoo)
Object.send(:remove_const, :Substitute)
end

class TeacherFoo
include Neo4j::ActiveNode
end

class Substitute < TeacherFoo
include Neo4j::ActiveNode
before(:each) do
stub_active_node_class('TeacherFoo')
stub_named_class('Substitute', TeacherFoo)
end

it 'sets all expected labels' do
Expand Down
130 changes: 49 additions & 81 deletions spec/spec_helper.rb
Expand Up @@ -62,51 +62,10 @@ def self.root
I18n.enforce_available_locales = false

module Neo4jSpecHelpers
extend ActiveSupport::Concern

def server_username
ENV['NEO4J_USERNAME'] || 'neo4j'
end

def server_password
ENV['NEO4J_PASSWORD'] || 'neo4jrb rules, ok?'
end

def basic_auth_hash
{
username: server_username,
password: server_password
}
end

def server_url
ENV['NEO4J_URL'] || 'http://localhost:7474'
end

def session_mode
RUBY_PLATFORM == 'java' ? :embedded : :http
end

def create_session(options = {})
@current_session = Neo4j::Core::CypherSession.new(session_adaptor(options.merge(wrap_level: :proc)))
Neo4j::ActiveBase.set_current_session(@current_session)
end

def new_query
Neo4j::Core::Query.new
end

def session_adaptor(options = {})
case session_mode
when :embedded
Neo4j::Core::CypherSession::Adaptors::Embedded.new(EMBEDDED_DB_PATH, {impermanent: true, auto_commit: true}.merge(options))
when :http
Neo4j::Core::CypherSession::Adaptors::HTTP.new(server_url, {basic_auth: basic_auth_hash}.merge(options))
else
fail "Invalid session_mode: #{session_mode.inspect}"
end
end

def session
@current_session
end
Expand All @@ -121,18 +80,16 @@ def log_queries!
Neo4j::Core::CypherSession::Adaptors::Embedded.subscribe_to_transaction(&method(:puts))
end

class_methods do
def let_config(var_name)
before do
@neo4j_config_vars ||= ActiveSupport::HashWithIndifferentAccess.new
@neo4j_config_vars[var_name] = Neo4j::Config[var_name]
Neo4j::Config[var_name] = yield
end
def self.let_config(var_name)
before do
@neo4j_config_vars ||= ActiveSupport::HashWithIndifferentAccess.new
@neo4j_config_vars[var_name] = Neo4j::Config[var_name]
Neo4j::Config[var_name] = yield
end

after do
Neo4j::Config[var_name] = @neo4j_config_vars[var_name]
@neo4j_config_vars.delete(var_name)
end
after do
Neo4j::Config[var_name] = @neo4j_config_vars[var_name]
@neo4j_config_vars.delete(var_name)
end
end

Expand All @@ -158,9 +115,9 @@ def clear_model_memory_caches
Neo4j::ActiveNode::Labels.clear_wrapped_models
end

def delete_db(session = current_session)
def delete_db
# clear_model_memory_caches
session.query('MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r')
Neo4j::ActiveBase.current_session.query('MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r')
end

Dir[File.dirname(__FILE__) + '/support/**/*.rb'].each { |f| require f }
Expand Down Expand Up @@ -210,43 +167,54 @@ def to_s
end
end

def before_session
@current_session.close if @current_session && @current_session.respond_to?(:close)
yield
create_session
end
RSpec.configure do |config|
config.include Neo4jSpecHelpers
config.include ActiveNodeRelStubHelpers

def current_transaction
Neo4j::Transaction.current_for(@current_session)
end
# Setup the current session
config.before(:suite) do
puts 'before suite'
session_mode = RUBY_PLATFORM == 'java' ? :embedded : :http

RSpec.configure do |c|
c.include Neo4jSpecHelpers
session_adaptor = case session_mode
when :embedded
Neo4j::Core::CypherSession::Adaptors::Embedded.new(EMBEDDED_DB_PATH, impermanent: true, auto_commit: true, wrap_level: :proc)
when :http
server_url = ENV['NEO4J_URL'] || 'http://localhost:7474'
server_username = ENV['NEO4J_USERNAME'] || 'neo4j'
server_password = ENV['NEO4J_PASSWORD'] || 'neo4jrb rules, ok?'

c.before(:all) do
@current_session.close if @current_session
create_session
end
basic_auth_hash = {username: server_username, password: server_password}

Neo4j::Core::CypherSession::Adaptors::HTTP.new(server_url, basic_auth: basic_auth_hash, wrap_level: :proc)
end

c.before(:each) do
# TODO: What to do about this?
Neo4j::Session._listeners.clear
@current_session || create_session
Neo4j::ActiveBase.set_current_session(Neo4j::Core::CypherSession.new(session_adaptor))
end

c.after(:each) do
if current_transaction
puts 'WARNING forgot to close transaction'
Neo4j::ActiveBase.wait_for_schema_changes
current_transaction.close
end
config.after(:suite) do
# Ability to close?
end

c.exclusion_filter = {
# config.before(:each) do
# puts 'before each'
# # TODO: What to do about this?
# Neo4j::Session._listeners.clear
# @current_session || create_session
# end

# config.after(:each) do
# puts 'after each'
# if current_transaction
# puts 'WARNING forgot to close transaction'
# Neo4j::ActiveBase.wait_for_schema_changes
# current_transaction.close
# end
# end

config.exclusion_filter = {
api: lambda do |ed|
RUBY_PLATFORM == 'java' && ed == :server
end
}

c.include ActiveNodeRelStubHelpers
end
2 changes: 0 additions & 2 deletions spec/unit/active_rel/persistence_spec_bad.rb
@@ -1,5 +1,3 @@
require 'spec_helper'

describe Neo4j::ActiveRel::Persistence do
let(:session) { double('Session') }
let(:node1) { double('first persisted node') }
Expand Down

0 comments on commit edc80dc

Please sign in to comment.