safety-pin 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
data/lib/safety_pin.rb ADDED
@@ -0,0 +1,11 @@
1
+ $: << File.dirname(__FILE__)
2
+
3
+ require 'java'
4
+ require 'safety_pin/jcr'
5
+ require 'safety_pin/node'
6
+ require 'safety_pin/node_blueprint'
7
+ require 'safety_pin/query'
8
+ require 'safety_pin/query/where_condition'
9
+
10
+ module SafetyPin
11
+ end
@@ -0,0 +1,17 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/safety_pin/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Jordan Raine"]
6
+ gem.email = ["jnraine@gmail.com"]
7
+ gem.description = %q{An easy-to-use JCR connector for JRuby}
8
+ gem.summary = %q{JCR connector for JRuby}
9
+ gem.homepage = ""
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "safety-pin"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = SafetyPin::VERSION
17
+ end
data/spec/jcr_spec.rb ADDED
@@ -0,0 +1,31 @@
1
+ require 'spec_helper.rb'
2
+
3
+ describe SafetyPin::JCR do
4
+ before(:all) do
5
+ SafetyPin::JCR.logout
6
+ end
7
+
8
+ after(:all) do
9
+ SafetyPin::JCR.dev_login
10
+ end
11
+
12
+ it "should login to a remote JCR" do
13
+ SafetyPin::JCR.login(:hostname => "http://localhost:4502", :username => "admin", :password => "admin")
14
+ SafetyPin::JCR.session.should be_a(Java::JavaxJcr::Session)
15
+ SafetyPin::JCR.should be_logged_in
16
+ SafetyPin::JCR.logout
17
+ end
18
+
19
+ it "should logout of a remote SafetyPin::JCR" do
20
+ SafetyPin::JCR.login(:hostname => "http://localhost:4502", :username => "admin", :password => "admin")
21
+ SafetyPin::JCR.logout
22
+ SafetyPin::JCR.should be_logged_out
23
+ end
24
+
25
+ context ".parse_hostname" do
26
+ it "ensures the hostname ends with /crx/server" do
27
+ hostname = SafetyPin::JCR.parse_hostname("http://localhost:4502")
28
+ hostname.end_with?("/crx/server").should be_true
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,81 @@
1
+ require 'spec_helper.rb'
2
+
3
+ describe "JCR-SQL2 example queries" do
4
+ before do
5
+ @node = SafetyPin::Node.create("/content/foo")
6
+ @node.properties = {"bar" => "baz", "qux" => "qax"}
7
+ @node.save
8
+ end
9
+
10
+ after { @node.destroy }
11
+
12
+ it "can lookup a node based on property presence" do
13
+ nodes = SafetyPin::Query.execute("SELECT * FROM [nt:base] WHERE [nt:base].bar IS NOT NULL")
14
+ nodes.first["bar"].should_not be_nil
15
+ end
16
+
17
+ it "can lookup a node based on a property's value" do
18
+ nodes = SafetyPin::Query.execute("SELECT * FROM [nt:base] WHERE bar = 'baz'")
19
+ values = nodes.map {|e| e["bar"] }.uniq
20
+ values.length.should eql(1)
21
+ values.first.should eql("baz")
22
+ end
23
+
24
+ it "can lookup a node based on multiple property values" do
25
+ nodes = SafetyPin::Query.execute("SELECT * FROM [nt:base] WHERE bar = 'baz' AND qux = 'qax'")
26
+ bar_values = nodes.map {|e| e["bar"] }.uniq
27
+ qux_values = nodes.map {|e| e["qux"] }.uniq
28
+ bar_values.length.should eql(1)
29
+ qux_values.length.should eql(1)
30
+ bar_values.first.should eql("baz")
31
+ qux_values.first.should eql("qax")
32
+ end
33
+
34
+ it "can lookup a node based on node name" do
35
+ nodes = SafetyPin::Query.execute("SELECT * FROM [nt:base] WHERE NAME([nt:base]) = 'foo'")
36
+ names = nodes.map(&:name).uniq
37
+ names.length.should eql(1)
38
+ names.first.should eql("foo")
39
+ end
40
+
41
+ it "can lookup a node based on a path" do
42
+ pending "can't do this yet"
43
+ nodes = SafetyPin::Query.execute("SELECT * FROM [nt:base] AS base WHERE base.[jcr:path] LIKE '/content/%'")
44
+ nodes.length.should be > 0
45
+ nodes.map(&:path).each {|name| name.starts_with?("/content").should be_true }
46
+ end
47
+
48
+ it "can lookup a node based on node type" do
49
+ nodes = SafetyPin::Query.execute("SELECT * FROM [cq:Page]")
50
+ nodes.first.primary_type.should eql("cq:Page")
51
+ end
52
+
53
+ it "can lookup a node based on its node super type" do
54
+ nodes = SafetyPin::Query.execute("SELECT * FROM [rep:Authorizable]")
55
+ primary_types = nodes.map(&:primary_type)
56
+ primary_types.should include("rep:User")
57
+ end
58
+
59
+ # context "given some nodes and child nodes" do
60
+ # before do
61
+ # @parent2 = SafetyPin::Node.create("/content/foo2")
62
+ # @child1 = SafetyPin::Node.create("/content/foo2/child")
63
+ # @child1.properties = {"bar" => "baz", "qux" => "qax", "child" => "yes"}
64
+ # @child1.save
65
+ # @child2 = SafetyPin::Node.create("/content/foo/child")
66
+ # @child2.properties = {"bar" => "baz", "qux" => "qax", "child" => "yes"}
67
+ # @child2.save
68
+ # end
69
+ #
70
+ # after do
71
+ # @parent2.destroy
72
+ # end
73
+ #
74
+ # it "can lookup a node based on nested WHERE conditions" do
75
+ # sql_statement = "SELECT * FROM [nt:base]
76
+ # WHERE [jcr:path] LIKE '/content/foo%'"
77
+ # nodes = SafetyPin::Query.execute(sql_statement)
78
+ # nodes.map(&:path).sort.should eql(["/content/foo/child", "/content/foo2/child"])
79
+ # end
80
+ # end
81
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe SafetyPin::NodeBlueprint do
4
+ let(:node_blueprint) { SafetyPin::NodeBlueprint.new(:path => "/content/foo/bar", :primary_type => "nt:folder", :properties => {"foo" => "bar"}) }
5
+
6
+ describe "#primary_type" do
7
+ it "has a primary type" do
8
+ node_blueprint.primary_type.should == "nt:folder"
9
+ end
10
+
11
+ it "has a default primary type" do
12
+ SafetyPin::NodeBlueprint.new(:path => "/something").primary_type.should == "nt:unstructured"
13
+ end
14
+ end
15
+
16
+ describe "#properties" do
17
+ it "has properties" do
18
+ node_blueprint.properties.should == {"foo" => "bar"}
19
+ end
20
+
21
+ it "defaults to an empty hash" do
22
+ SafetyPin::NodeBlueprint.new(:path => "/something").properties.should == {}
23
+ end
24
+ end
25
+
26
+ describe "#path" do
27
+ it "requires a path" do
28
+ expect { SafetyPin::NodeBlueprint.new({}).path }.to raise_error(SafetyPin::NodeBlueprintError)
29
+ end
30
+
31
+ it "has a path" do
32
+ node_blueprint.path.should == "/content/foo/bar"
33
+ end
34
+ end
35
+ end