architect4r 0.4 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +16 -0
- data/ReleaseNotes.md +6 -0
- data/lib/architect4r.rb +13 -0
- data/lib/architect4r/core/cypher_methods.rb +9 -2
- data/lib/architect4r/model/node.rb +15 -0
- data/lib/architect4r/version.rb +1 -1
- data/spec/model/node_spec.rb +20 -0
- data/spec/spec_helper.rb +1 -2
- metadata +4 -3
data/README.md
CHANGED
@@ -68,6 +68,22 @@ Quick Start
|
|
68
68
|
Fanship.new(@user, @instrument, { :reason => 'Because I like you' })
|
69
69
|
|
70
70
|
|
71
|
+
Logging
|
72
|
+
-------
|
73
|
+
|
74
|
+
In order to log the debug output from architect4r to a logfile, just override the default
|
75
|
+
logger instance. If you are using rails, you might wanna add this to an initializer:
|
76
|
+
|
77
|
+
|
78
|
+
# Create a logger instance
|
79
|
+
file = File.open('log/output.log', File::WRONLY | File::APPEND)
|
80
|
+
logger = Logger.new(file, 'daily')
|
81
|
+
logger.level = Logger::DEBUG
|
82
|
+
|
83
|
+
# Set architect4r logger
|
84
|
+
Architect4r.logger = logger
|
85
|
+
|
86
|
+
|
71
87
|
Development
|
72
88
|
-----------
|
73
89
|
|
data/ReleaseNotes.md
CHANGED
data/lib/architect4r.rb
CHANGED
@@ -3,6 +3,11 @@
|
|
3
3
|
#
|
4
4
|
require 'architect4r/version'
|
5
5
|
|
6
|
+
#
|
7
|
+
# External libraries
|
8
|
+
#
|
9
|
+
require 'logger'
|
10
|
+
|
6
11
|
#
|
7
12
|
# Extensions
|
8
13
|
#
|
@@ -57,6 +62,14 @@ end
|
|
57
62
|
#
|
58
63
|
module Architect4r
|
59
64
|
|
65
|
+
def self.logger
|
66
|
+
@log ||= Logger.new(STDOUT)
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.logger=(logger_instance)
|
70
|
+
@log = logger_instance
|
71
|
+
end
|
72
|
+
|
60
73
|
def self.version
|
61
74
|
"Architect4r version #{Architect4r::VERSION}"
|
62
75
|
end
|
@@ -8,14 +8,19 @@ module Architect4r
|
|
8
8
|
def execute_cypher(query)
|
9
9
|
query = self.interpolate_node_model_root_references(query)
|
10
10
|
|
11
|
+
Architect4r.logger.debug("[Architect4r][execute_cypher] QUERY: #{query}")
|
12
|
+
|
11
13
|
url = prepend_base_url("/cypher")
|
12
14
|
response = Typhoeus::Request.post(url,
|
13
15
|
:headers => { 'Accept' => 'application/json', 'Content-Type' => 'application/json' },
|
14
16
|
:body => { 'query' => query }.to_json)
|
15
17
|
|
18
|
+
msg = JSON.parse(response.body)
|
19
|
+
|
20
|
+
Architect4r.logger.debug("[Architect4r][execute_cypher] CODE: #{response.code} => #{msg.inspect}")
|
21
|
+
|
16
22
|
# Check if there might be an error with the query
|
17
23
|
if response.code == 400
|
18
|
-
msg = JSON.parse(response.body)
|
19
24
|
if msg['exception'].to_s.match /org.neo4j.graphdb.NotFoundException/
|
20
25
|
nil
|
21
26
|
else
|
@@ -26,7 +31,7 @@ module Architect4r
|
|
26
31
|
elsif response.code == 204
|
27
32
|
nil
|
28
33
|
else
|
29
|
-
|
34
|
+
msg
|
30
35
|
end
|
31
36
|
end
|
32
37
|
|
@@ -34,6 +39,8 @@ module Architect4r
|
|
34
39
|
# Get data from server
|
35
40
|
data = execute_cypher(query)
|
36
41
|
|
42
|
+
Architect4r.logger.debug("[Architect4r][cypher_query] #{data.inspect}")
|
43
|
+
|
37
44
|
# Create native ruby objects
|
38
45
|
data['data'].map! do |set|
|
39
46
|
set.map { |item| convert_if_possible(item) }
|
@@ -51,11 +51,26 @@ module Architect4r
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
+
# Override to_s to make debugging easier. It now includes the id and properties
|
55
|
+
#
|
54
56
|
def to_s
|
55
57
|
prop_data = @properties_data.collect { |key, value| "#{key}='#{value}'" }.join(' ')
|
56
58
|
"#<#{self.class.name}:#{object_id} id=#{id} #{prop_data} neo4j_uri='#{@raw_data['self']}'>"
|
57
59
|
end
|
58
60
|
|
61
|
+
# Calculate hash manually in order to only include unique properties for comparison
|
62
|
+
#
|
63
|
+
def hash
|
64
|
+
[self.class, self.id].hash
|
65
|
+
end
|
66
|
+
|
67
|
+
# Override comparison of instances
|
68
|
+
#
|
69
|
+
def ==(other)
|
70
|
+
other.is_a?(self.class) && id.present? && other.id == id
|
71
|
+
end
|
72
|
+
alias :eql? :==
|
73
|
+
|
59
74
|
# Create the document. Validation is enabled by default and will return
|
60
75
|
# false if the document is not valid. If all goes well, the document will
|
61
76
|
# be returned.
|
data/lib/architect4r/version.rb
CHANGED
data/spec/model/node_spec.rb
CHANGED
@@ -30,6 +30,26 @@ describe "Model Node" do
|
|
30
30
|
|
31
31
|
end
|
32
32
|
|
33
|
+
describe "equality of two instances of the same node" do
|
34
|
+
|
35
|
+
subject { Person.create(:name => 'Alfons', :human => true) }
|
36
|
+
let(:instance_1) { Person.find_by_id(subject.id) }
|
37
|
+
let(:instance_2) { Person.find_by_id(subject.id) }
|
38
|
+
|
39
|
+
it "should have the same hash" do
|
40
|
+
instance_1.hash.should equal(instance_2.hash)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should be eql" do
|
44
|
+
instance_1.should eql(instance_2)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should be ==" do
|
48
|
+
instance_1.should == instance_2
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
33
53
|
describe "connection" do
|
34
54
|
|
35
55
|
it { should respond_to(:connection) }
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: architect4r
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 13
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 4
|
9
|
-
|
9
|
+
- 1
|
10
|
+
version: 0.4.1
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Maximilian Schulz
|
@@ -14,7 +15,7 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2012-01-
|
18
|
+
date: 2012-01-31 00:00:00 Z
|
18
19
|
dependencies:
|
19
20
|
- !ruby/object:Gem::Dependency
|
20
21
|
name: activemodel
|