jgrouper 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY.md +30 -0
- data/README.rdoc +14 -3
- data/TODO.md +25 -33
- data/bin/jgrouper +9 -0
- data/jgrouper.gemspec +2 -0
- data/lib/jgrouper/group_type/test_case.rb +23 -0
- data/lib/jgrouper/group_type.rb +19 -0
- data/lib/jgrouper/shell.rb +75 -0
- data/lib/jgrouper/stem/test_case.rb +33 -0
- data/lib/jgrouper/stem.rb +61 -2
- data/lib/jgrouper/subject/test_case.rb +23 -0
- data/lib/jgrouper/subject.rb +2 -2
- data/lib/jgrouper/version.rb +1 -1
- data/lib/jgrouper.rb +14 -11
- data/test/factories.rb +64 -0
- data/test/helper.rb +1 -0
- data/test/test_group_type.rb +38 -24
- data/test/test_stem.rb +60 -19
- data/test/test_subject.rb +6 -21
- metadata +44 -3
data/HISTORY.md
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
JGrouper History
|
2
|
+
================
|
3
|
+
|
4
|
+
JGrouper v0.0.3
|
5
|
+
---------------
|
6
|
+
* Add *JGrouper::Shell*
|
7
|
+
* Add *bin/jgrouper* interactive shell
|
8
|
+
* Rename *JGrouper::Stem#root_stem* to *JGrouper::Stem#root*
|
9
|
+
* Rename *JGrouper::Subject#root_subject* to *JGrouper::Subject#root*
|
10
|
+
* Add *JGrouper::GroupType.delete(name)*
|
11
|
+
* Add *JGrouper::Stem.create( name, display_name = nil )*
|
12
|
+
* Add *JGrouper::Stem#add_stem( name, display_name = nil )*
|
13
|
+
* Add *JGrouper::Stem.find(name)*
|
14
|
+
* Add *JGrouper::Subject::TestCase*
|
15
|
+
* Add *JGrouper::GroupType::TestCase*
|
16
|
+
* Add *JGrouper::Stem::TestCase*
|
17
|
+
|
18
|
+
|
19
|
+
2012-08-10 JGrouper v0.0.2
|
20
|
+
--------------------------
|
21
|
+
* Add *JGrouper::GroupType*
|
22
|
+
* Add *JGrouper::Stem#to_json*
|
23
|
+
* Add *JGrouper::Subject#to_json*
|
24
|
+
|
25
|
+
|
26
|
+
2012-08-10 JGrouper v0.0.1
|
27
|
+
--------------------------
|
28
|
+
* Add *JGrouper::Stem.root_stem*
|
29
|
+
* Add *JGrouper::Subject.root_subject*
|
30
|
+
|
data/README.rdoc
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
=== Subjects
|
11
11
|
|
12
12
|
# Find root subject
|
13
|
-
JGrouper::Subject.
|
13
|
+
JGrouper::Subject.root do |subject|
|
14
14
|
subject.id # Subject identifier
|
15
15
|
subject.name # Subject name
|
16
16
|
subject.source # Subject source identifier
|
@@ -20,12 +20,21 @@
|
|
20
20
|
=== Stems
|
21
21
|
|
22
22
|
# Find root stem
|
23
|
-
JGrouper::Stem.
|
23
|
+
JGrouper::Stem.root do |stem|
|
24
24
|
stem.display_name # Stem display name
|
25
25
|
stem.name # Stem name
|
26
26
|
stem.uuid # Stem UUID
|
27
27
|
end
|
28
28
|
|
29
|
+
# Find by name
|
30
|
+
stem = JGrouper::Stem.find(name) { |stem| ... }
|
31
|
+
|
32
|
+
# Create stem(s)
|
33
|
+
stem = JGrouper::Stem.create 'foo:bar:baz', 'Foo:Bar:Baz'
|
34
|
+
|
35
|
+
# Create child stem(s)
|
36
|
+
child = stem.create 'foo:bar:baz'
|
37
|
+
|
29
38
|
=== Group Types
|
30
39
|
|
31
40
|
# Create group type
|
@@ -43,6 +52,8 @@
|
|
43
52
|
JGrouper::GroupType.find(name)
|
44
53
|
|
45
54
|
# Delete group type
|
55
|
+
JGrouper::GroupType.delete(name)
|
56
|
+
# ... or ...
|
46
57
|
JGrouper::GroupType.find(name).delete
|
47
58
|
|
48
59
|
== Installation
|
@@ -77,5 +88,5 @@ https://github.com/blairc/jgrouper
|
|
77
88
|
|
78
89
|
== See Also
|
79
90
|
|
80
|
-
https://github.com/blairc/jgrouper-server, http://grouper.internet2.edu
|
91
|
+
JGrouper::Shell, https://github.com/blairc/jgrouper-server, http://grouper.internet2.edu
|
81
92
|
|
data/TODO.md
CHANGED
@@ -1,61 +1,53 @@
|
|
1
1
|
JGrouper To Do
|
2
2
|
==============
|
3
3
|
|
4
|
-
JGrouper v0.0.
|
4
|
+
JGrouper v0.0.4
|
5
5
|
---------------
|
6
|
+
* Add *JGrouper::Group*
|
7
|
+
* Add *JGrouper::Group.find(name)*
|
8
|
+
* Add *JGrouper::Stem#add_group( name, display_name = nil )*
|
9
|
+
* Add *JGrouper::Group.create( name, display_name = nil )*
|
10
|
+
* Add *JGrouper::Group#types*
|
11
|
+
* Add *JGrouper::Group#add_type*
|
12
|
+
* Add *JGrouper::Group#members*
|
13
|
+
* Add *JGrouper::Group#add_member(?)*
|
14
|
+
|
15
|
+
|
16
|
+
Future
|
17
|
+
------
|
18
|
+
* Add *JGrouper::Stem#delete( recurse = false )*
|
19
|
+
* Add *JGrouper::Stem.delete( name, recurse = false )*
|
20
|
+
* Add *JGrouper::Stem.find(uuid)*
|
21
|
+
* Add *JGrouper::Stem.exists?(name)*
|
22
|
+
* Add *JGrouper::Group.exists?(name)*
|
23
|
+
* Add *JGrouper::Stem#root?(name)*
|
24
|
+
* Add *JGrouper::Group*
|
25
|
+
* Add *JGrouper::Group.find(name)*
|
6
26
|
* Implement *JGrouper::Subject.sources* (using *edu.internet2.middleware.subject.provider.SourceManager*)
|
7
27
|
* Implement *JGrouper::Subject.source(id)* (using *edu.internet2.middleware.subject.provider.SourceManager*)
|
8
28
|
* Implement *JGrouper::Subject::Source#to_json* (for "jgrouper-server")
|
9
|
-
|
10
|
-
|
11
|
-
JJGrouper v0.0.4
|
12
|
-
---------------
|
13
29
|
* Add child stem
|
14
30
|
* Get child stems
|
15
31
|
* Delete child stem
|
16
|
-
* Update *JGrouper::Stem#to_json* as appropriate
|
17
|
-
|
18
|
-
|
19
|
-
JGrouper v0.0.5
|
20
|
-
---------------
|
21
32
|
* Add child group
|
22
33
|
* Get child groups
|
23
34
|
* Delete child group
|
24
|
-
* Update *JGrouper::Group#to_json* as appropriate
|
25
|
-
|
26
|
-
|
27
|
-
JGrouper v0.0.6
|
28
|
-
---------------
|
29
35
|
* Add group member
|
30
36
|
* Get group members
|
31
37
|
* Remove group member
|
32
|
-
* Update *JGrouper::Group#to_json* as appropriate
|
33
|
-
|
34
|
-
|
35
|
-
JGrouper v0.0.7
|
36
|
-
---------------
|
37
38
|
* Grant stem privileges
|
38
39
|
* Get stem privileges
|
39
40
|
* Revoke stem privileges
|
40
|
-
* Update *JGrouper::Stem#to_json* as appropriate
|
41
|
-
|
42
|
-
|
43
|
-
JGrouper v0.0.8
|
44
|
-
---------------
|
45
41
|
* Grant group privileges
|
46
42
|
* Get group privileges
|
47
43
|
* Revoke group privileges
|
48
|
-
* Update *JGrouper::Group#to_json* as appropriate
|
49
|
-
|
50
|
-
|
51
|
-
Future
|
52
|
-
------
|
53
|
-
* Create command line executable (and remove embedded code from *lib/jgrouper.rb*)
|
54
44
|
* Add privilege to stem and all children
|
55
45
|
* Add privilege to all groups beneath a stem
|
56
46
|
* JGrouper::TestCase
|
57
47
|
* JGrouper::Subject::TestCase
|
58
48
|
* JGrouper::Subject::TestCase
|
59
|
-
|
60
|
-
|
49
|
+
* Make *JGrouper::Shell* startup less chatty
|
50
|
+
* Extract *JGrouper::Shell* to own gem?
|
51
|
+
* Add *gsh* compatibility commands to *JGrouper::Shell*?
|
52
|
+
* Should *JGrouper::Shell* be able to run scripts?
|
61
53
|
|
data/bin/jgrouper
ADDED
data/jgrouper.gemspec
CHANGED
@@ -16,7 +16,9 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.version = JGrouper::VERSION
|
17
17
|
|
18
18
|
gem.add_dependency 'json'
|
19
|
+
gem.add_dependency 'pry'
|
19
20
|
|
21
|
+
gem.add_development_dependency 'factory_girl', "~> 4.0"
|
20
22
|
gem.add_development_dependency 'mocha'
|
21
23
|
gem.add_development_dependency 'rake'
|
22
24
|
gem.add_development_dependency 'rdoc'
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'factory_girl'
|
5
|
+
|
6
|
+
|
7
|
+
module JGrouper #: :nodoc:
|
8
|
+
#
|
9
|
+
# = JGrouper::GroupType::TestCase - For testing JGrouper::GroupType
|
10
|
+
#
|
11
|
+
class GroupType::TestCase < Test::Unit::TestCase
|
12
|
+
|
13
|
+
def grouper_type
|
14
|
+
FactoryBuild :jgrouper_grouper_tyype
|
15
|
+
end
|
16
|
+
|
17
|
+
def jgrouper_type_as_json
|
18
|
+
FactoryGirl.attributes_for(:jgrouper_type).to_json
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
data/lib/jgrouper/group_type.rb
CHANGED
@@ -16,6 +16,10 @@ module JGrouper # :nodoc:
|
|
16
16
|
#
|
17
17
|
# Find all group types.
|
18
18
|
#
|
19
|
+
# group_types = JGrouper::GroupType.all do |group_type|
|
20
|
+
# ...
|
21
|
+
# end
|
22
|
+
#
|
19
23
|
def self.all
|
20
24
|
group_types = Java::EduInternet2MiddlewareGrouper::GroupTypeFinder.findAll.collect { |gt| from_grouper gt }
|
21
25
|
group_types.each { |_| yield _ } if block_given?
|
@@ -33,9 +37,22 @@ module JGrouper # :nodoc:
|
|
33
37
|
group_type
|
34
38
|
end
|
35
39
|
|
40
|
+
#
|
41
|
+
# Delete group type. Returns +false+ on failure.
|
42
|
+
#
|
43
|
+
# JGrouper::GroupType.delete(name)
|
44
|
+
#
|
45
|
+
def self.delete(name)
|
46
|
+
group_type = find(name)
|
47
|
+
return false if group_type.nil?
|
48
|
+
group_type.delete
|
49
|
+
end
|
50
|
+
|
36
51
|
#
|
37
52
|
# Delete group type. Sets +error+ and returns +false+ on failure.
|
38
53
|
#
|
54
|
+
# group_type.delete
|
55
|
+
#
|
39
56
|
def delete
|
40
57
|
begin
|
41
58
|
@grouper_group_type.delete GrouperSession.startRootSession # XXX How to handle sessions?
|
@@ -49,6 +66,8 @@ module JGrouper # :nodoc:
|
|
49
66
|
#
|
50
67
|
# Find a group type by name.
|
51
68
|
#
|
69
|
+
# group_type = JGrouper::GroupType.find(name)
|
70
|
+
#
|
52
71
|
def self.find(name)
|
53
72
|
group_type = from_grouper Java::EduInternet2MiddlewareGrouper::GroupTypeFinder.find(name, false)
|
54
73
|
yield group_type if block_given?
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require_relative '../jgrouper'
|
2
|
+
|
3
|
+
require 'pry'
|
4
|
+
|
5
|
+
module JGrouper # :nodoc:
|
6
|
+
#
|
7
|
+
# = JGrouper::Shell - JGrouper interactive shell
|
8
|
+
#
|
9
|
+
# == Usage
|
10
|
+
#
|
11
|
+
# # Launch
|
12
|
+
# % jgrouper
|
13
|
+
#
|
14
|
+
# === Group Types
|
15
|
+
#
|
16
|
+
# Any JGrouper::GroupType methods, such as:
|
17
|
+
#
|
18
|
+
# JGrouper::Shell:0> group_type.all
|
19
|
+
#
|
20
|
+
# === Stems
|
21
|
+
#
|
22
|
+
# Any JGrouper::Stem methods, such as:
|
23
|
+
#
|
24
|
+
# JGrouper::Shell:0> stem.root_stem
|
25
|
+
#
|
26
|
+
# === Subjects
|
27
|
+
#
|
28
|
+
# Any JGrouper::Subject methods, such as:
|
29
|
+
#
|
30
|
+
# JGrouper::Shell:0> subject.root_subject
|
31
|
+
#
|
32
|
+
class Shell
|
33
|
+
|
34
|
+
def initialize
|
35
|
+
yield self if block_given?
|
36
|
+
self
|
37
|
+
end
|
38
|
+
|
39
|
+
#
|
40
|
+
# Access JGrouper::GroupType commands
|
41
|
+
#
|
42
|
+
def group_type
|
43
|
+
JGrouper::GroupType
|
44
|
+
end
|
45
|
+
|
46
|
+
#
|
47
|
+
# Start JGrouper shell
|
48
|
+
#
|
49
|
+
def self.run!
|
50
|
+
JGrouper.home ENV['GROUPER_HOME'] if ENV['GROUPER_HOME']
|
51
|
+
shell = new do |shell|
|
52
|
+
Pry.start shell,
|
53
|
+
:prompt => [ proc { |obj, nest_level| "#{obj.class.name}:#{nest_level}> " },
|
54
|
+
proc { "> " }
|
55
|
+
]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
#
|
60
|
+
# Access JGrouper::Stem commands
|
61
|
+
#
|
62
|
+
def stem
|
63
|
+
JGrouper::Stem
|
64
|
+
end
|
65
|
+
|
66
|
+
#
|
67
|
+
# Access JGrouper::Subject commands
|
68
|
+
#
|
69
|
+
def subject
|
70
|
+
JGrouper::Subject
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'factory_girl'
|
5
|
+
|
6
|
+
|
7
|
+
module JGrouper #: :nodoc:
|
8
|
+
#
|
9
|
+
# = JGrouper::Stem::TestCase - For testing JGrouper::Stem
|
10
|
+
#
|
11
|
+
class Stem::TestCase < Test::Unit::TestCase
|
12
|
+
|
13
|
+
def grouper_root_stem
|
14
|
+
FactoryGirl.build :grouper_root_stem
|
15
|
+
end
|
16
|
+
|
17
|
+
def grouper_stem(name)
|
18
|
+
case name.to_sym
|
19
|
+
when :foo
|
20
|
+
FactoryGirl.build :grouper_stem_foo
|
21
|
+
when :"foo:bar"
|
22
|
+
FactoryGirl.build :grouper_stem_foo_bar
|
23
|
+
end
|
24
|
+
raise ArgumentError, "invalid name: #{name}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def root_stem_as_json
|
28
|
+
FactoryGirl.attributes_for(:root_stem).to_json
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
data/lib/jgrouper/stem.rb
CHANGED
@@ -12,6 +12,64 @@ module JGrouper # :nodoc:
|
|
12
12
|
self
|
13
13
|
end
|
14
14
|
|
15
|
+
#
|
16
|
+
# Create child stem (along with missing intermediaries).
|
17
|
+
#
|
18
|
+
# # Create child stem 'foo'
|
19
|
+
# child = stem.add_stem 'foo'
|
20
|
+
#
|
21
|
+
# # Create child stem 'foo' with display name of 'Foo'
|
22
|
+
# child = stem.add_stem 'foo', 'Foo'
|
23
|
+
#
|
24
|
+
# # Create child stem 'foo:bar:baz' along with any missing intermediaries
|
25
|
+
# child = stem.add_stem 'foo:bar:baz'
|
26
|
+
#
|
27
|
+
#
|
28
|
+
def add_stem( name, display_name = nil )
|
29
|
+
# TODO What if names.size != display_names.size?
|
30
|
+
names = name.split ':'
|
31
|
+
display_names = display_name.nil? ? names.clone.split : display_name.split(':')
|
32
|
+
|
33
|
+
name, display_name = names.shift, display_names.shift
|
34
|
+
|
35
|
+
child = JGrouper::Stem.find self.name.empty? ? name : [ self.name, name ].join(':') # TODO Yuck
|
36
|
+
child = JGrouper::Stem.from_grouper @grouper_stem.addChildStem(name, display_name) if child.nil?
|
37
|
+
|
38
|
+
# TODO What if child can't be created?
|
39
|
+
child = child.add_stem( names.join(':'), display_names.join(':') ) unless names.empty?
|
40
|
+
yield child if block_given?
|
41
|
+
child
|
42
|
+
end
|
43
|
+
|
44
|
+
#
|
45
|
+
# Create stem (along with missing intermediaries).
|
46
|
+
#
|
47
|
+
# # Create top-level 'foo' stem
|
48
|
+
# stem = JGrouper::Stem.create 'foo'
|
49
|
+
#
|
50
|
+
# # Create top-level 'foo' stem with display name of 'Foo'
|
51
|
+
# stem = JGrouper::Stem.create 'foo', 'Foo'
|
52
|
+
#
|
53
|
+
# # Create 'foo:bar:baz' stem, along with any missing intermediaries
|
54
|
+
# stem = JGrouper::Stem.create 'foo:bar:baz'
|
55
|
+
#
|
56
|
+
def self.create( name, display_name = nil )
|
57
|
+
stem = root.add_stem name, display_name
|
58
|
+
yield stem if block_given?
|
59
|
+
stem
|
60
|
+
end
|
61
|
+
|
62
|
+
#
|
63
|
+
# Find stem by name or returns +nil+.
|
64
|
+
#
|
65
|
+
# stem = JGrouper::Stem.find(name)
|
66
|
+
#
|
67
|
+
def self.find(name)
|
68
|
+
stem = from_grouper StemFinder.findByName( GrouperSession.startRootSession, name, false ) # XXX How to handle sessions?
|
69
|
+
yield stem if block_given?
|
70
|
+
stem
|
71
|
+
end
|
72
|
+
|
15
73
|
#
|
16
74
|
# Generate JGrouper::Stem instance from JSON by calling +JSON.parse(json_string)+
|
17
75
|
#
|
@@ -26,9 +84,9 @@ module JGrouper # :nodoc:
|
|
26
84
|
#
|
27
85
|
# Return root stem.
|
28
86
|
#
|
29
|
-
# root_stem = JGrouper::Stem.
|
87
|
+
# root_stem = JGrouper::Stem.root
|
30
88
|
#
|
31
|
-
def self.
|
89
|
+
def self.root
|
32
90
|
stem = from_grouper StemFinder.findRootStem( GrouperSession.startRootSession ) # XXX How to handle sessions?
|
33
91
|
yield stem if block_given?
|
34
92
|
stem
|
@@ -57,6 +115,7 @@ module JGrouper # :nodoc:
|
|
57
115
|
private
|
58
116
|
|
59
117
|
def self.from_grouper(grouper)
|
118
|
+
return nil if grouper.nil?
|
60
119
|
new do |stem|
|
61
120
|
stem.instance_variable_set :@grouper_stem, grouper # XXX Is this even needed?
|
62
121
|
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'factory_girl'
|
5
|
+
|
6
|
+
|
7
|
+
module JGrouper #: :nodoc:
|
8
|
+
#
|
9
|
+
# = JGrouper::Subject::TestCase - For testing JGrouper::Subject
|
10
|
+
#
|
11
|
+
class Subject::TestCase < Test::Unit::TestCase
|
12
|
+
|
13
|
+
def grouper_root_subject
|
14
|
+
FactoryGirl.build :grouper_root_subject
|
15
|
+
end
|
16
|
+
|
17
|
+
def root_subject_as_json
|
18
|
+
FactoryGirl.attributes_for(:root_subject).to_json
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
data/lib/jgrouper/subject.rb
CHANGED
@@ -27,9 +27,9 @@ module JGrouper #: :nodoc:
|
|
27
27
|
#
|
28
28
|
# Return root subject.
|
29
29
|
#
|
30
|
-
# root_subject = JGrouper::Subject.
|
30
|
+
# root_subject = JGrouper::Subject.root
|
31
31
|
#
|
32
|
-
def self.
|
32
|
+
def self.root
|
33
33
|
subject = from_grouper SubjectFinder.findRootSubject
|
34
34
|
yield subject if block_given?
|
35
35
|
subject
|
data/lib/jgrouper/version.rb
CHANGED
data/lib/jgrouper.rb
CHANGED
@@ -20,7 +20,7 @@ require_relative 'jgrouper/version'
|
|
20
20
|
# === Subjects
|
21
21
|
#
|
22
22
|
# # Find root subject
|
23
|
-
# JGrouper::Subject.
|
23
|
+
# JGrouper::Subject.root do |subject|
|
24
24
|
# subject.id # Subject identifier
|
25
25
|
# subject.name # Subject name
|
26
26
|
# subject.source # Subject source identifier
|
@@ -30,12 +30,21 @@ require_relative 'jgrouper/version'
|
|
30
30
|
# === Stems
|
31
31
|
#
|
32
32
|
# # Find root stem
|
33
|
-
# JGrouper::Stem.
|
33
|
+
# JGrouper::Stem.root do |stem|
|
34
34
|
# stem.display_name # Stem display name
|
35
35
|
# stem.name # Stem name
|
36
36
|
# stem.uuid # Stem UUID
|
37
37
|
# end
|
38
38
|
#
|
39
|
+
# # Find by name
|
40
|
+
# stem = JGrouper::Stem.find(name) { |stem| ... }
|
41
|
+
#
|
42
|
+
# # Create stem(s)
|
43
|
+
# stem = JGrouper::Stem.create 'foo:bar:baz', 'Foo:Bar:Baz'
|
44
|
+
#
|
45
|
+
# # Create child stem(s)
|
46
|
+
# child = stem.create 'foo:bar:baz'
|
47
|
+
#
|
39
48
|
# === Group Types
|
40
49
|
#
|
41
50
|
# # Create group type
|
@@ -53,6 +62,8 @@ require_relative 'jgrouper/version'
|
|
53
62
|
# JGrouper::GroupType.find(name)
|
54
63
|
#
|
55
64
|
# # Delete group type
|
65
|
+
# JGrouper::GroupType.delete(name)
|
66
|
+
# # ... or ...
|
56
67
|
# JGrouper::GroupType.find(name).delete
|
57
68
|
#
|
58
69
|
# == Installation
|
@@ -87,7 +98,7 @@ require_relative 'jgrouper/version'
|
|
87
98
|
#
|
88
99
|
# == See Also
|
89
100
|
#
|
90
|
-
# https://github.com/blairc/jgrouper-server, http://grouper.internet2.edu
|
101
|
+
# JGrouper::Shell, https://github.com/blairc/jgrouper-server, http://grouper.internet2.edu
|
91
102
|
#
|
92
103
|
module JGrouper
|
93
104
|
|
@@ -115,11 +126,3 @@ module JGrouper
|
|
115
126
|
|
116
127
|
end
|
117
128
|
|
118
|
-
|
119
|
-
# XXX Extract! Remove! Whatever!
|
120
|
-
if __FILE__ == $0
|
121
|
-
JGrouper.home ENV['GROUPER_HOME'] if ENV['GROUPER_HOME']
|
122
|
-
JGrouper::Subject.root_subject { |subject| puts "root_subject => #{subject}" }
|
123
|
-
JGrouper::Stem.root_stem { |stem| puts "root_stem => #{stem}" }
|
124
|
-
end
|
125
|
-
|
data/test/factories.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'factory_girl'
|
4
|
+
|
5
|
+
|
6
|
+
FactoryGirl.define do
|
7
|
+
# Group Types
|
8
|
+
factory :jgrouper_type, class: OpenStruct do
|
9
|
+
json_class JGrouper::GroupType
|
10
|
+
name 'jgrouper'
|
11
|
+
uuid 'some-fake-uuid'
|
12
|
+
end
|
13
|
+
|
14
|
+
factory :jgrouper_grouper_type, class: OpenStruct do
|
15
|
+
getName 'jgrouper'
|
16
|
+
getUuid 'some-fake-uuid'
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
# Stems
|
21
|
+
factory :grouper_root_stem, class: OpenStruct do
|
22
|
+
getDisplayName ''
|
23
|
+
getName ''
|
24
|
+
getUuid 'some-fake-uuid'
|
25
|
+
end
|
26
|
+
|
27
|
+
factory :grouper_stem_foo, class: OpenStruct do
|
28
|
+
getDisplayName 'foo'
|
29
|
+
getName 'foo'
|
30
|
+
getUuid 'stem-foo'
|
31
|
+
end
|
32
|
+
|
33
|
+
factory :grouper_stem_foo_bar, class: OpenStruct do
|
34
|
+
getDisplayName 'foo:Bar'
|
35
|
+
getName 'foo:bar'
|
36
|
+
getUuid 'stem-foo-bar'
|
37
|
+
end
|
38
|
+
|
39
|
+
factory :root_stem, class: OpenStruct do
|
40
|
+
json_class JGrouper::Stem
|
41
|
+
display_name ''
|
42
|
+
name ''
|
43
|
+
uuid 'some-fake-uuid'
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
# Subjects
|
48
|
+
factory :grouper_root_subject, class: OpenStruct do
|
49
|
+
getId 'GrouperSystem'
|
50
|
+
getName 'GrouperSysAdmin'
|
51
|
+
sourceId 'g:isa'
|
52
|
+
typeName 'application'
|
53
|
+
end
|
54
|
+
|
55
|
+
factory :root_subject, class: OpenStruct do
|
56
|
+
json_class JGrouper::Subject
|
57
|
+
id 'GrouperSystem'
|
58
|
+
name 'GrouperSysAdmin'
|
59
|
+
source 'g:isa'
|
60
|
+
type 'application'
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
data/test/helper.rb
CHANGED
data/test/test_group_type.rb
CHANGED
@@ -3,22 +3,11 @@
|
|
3
3
|
require_relative 'helper'
|
4
4
|
|
5
5
|
|
6
|
-
|
7
|
-
class TestGroupType < Test::Unit::TestCase
|
8
|
-
|
9
|
-
def setup
|
10
|
-
@json = { 'json_class' => JGrouper::GroupType,
|
11
|
-
'name' => 'jgrouper',
|
12
|
-
'uuid' => 'some-fake-uuid'
|
13
|
-
}.to_json
|
14
|
-
@type = OpenStruct.new :getName => 'jgrouper',
|
15
|
-
:getUuid => 'some-fake-uuid'
|
16
|
-
end
|
17
|
-
|
6
|
+
class JGrouper::GroupType::TestCase
|
18
7
|
|
19
8
|
def test_mocked_create_group_type
|
20
9
|
Java::EduInternet2MiddlewareGrouper::GrouperSession.expects(:startRootSession).returns true
|
21
|
-
Java::EduInternet2MiddlewareGrouper::GroupType.expects(:createType).returns
|
10
|
+
Java::EduInternet2MiddlewareGrouper::GroupType.expects(:createType).returns grouper_type
|
22
11
|
JGrouper::GroupType.create('jgrouper') do |group_type|
|
23
12
|
assert_not_nil group_type
|
24
13
|
assert group_type.kind_of? JGrouper::GroupType
|
@@ -29,12 +18,12 @@ class TestGroupType < Test::Unit::TestCase
|
|
29
18
|
|
30
19
|
def test_mocked_group_type_to_json
|
31
20
|
Java::EduInternet2MiddlewareGrouper::GrouperSession.expects(:startRootSession).returns true
|
32
|
-
Java::EduInternet2MiddlewareGrouper::GroupType.expects(:createType).returns
|
33
|
-
assert_equal
|
21
|
+
Java::EduInternet2MiddlewareGrouper::GroupType.expects(:createType).returns grouper_type
|
22
|
+
assert_equal jgrouper_type_as_json, JGrouper::GroupType.create('jgrouper').to_json
|
34
23
|
end
|
35
24
|
|
36
25
|
def test_group_type_from_json
|
37
|
-
group_type = JSON.parse
|
26
|
+
group_type = JSON.parse jgrouper_type_as_json
|
38
27
|
assert_not_nil group_type
|
39
28
|
assert group_type.kind_of? JGrouper::GroupType
|
40
29
|
assert_equal 'jgrouper', group_type.name
|
@@ -42,7 +31,7 @@ class TestGroupType < Test::Unit::TestCase
|
|
42
31
|
end
|
43
32
|
|
44
33
|
def test_mocked_find_all
|
45
|
-
Java::EduInternet2MiddlewareGrouper::GroupTypeFinder.expects(:findAll).returns [
|
34
|
+
Java::EduInternet2MiddlewareGrouper::GroupTypeFinder.expects(:findAll).returns [ grouper_type ]
|
46
35
|
group_types = JGrouper::GroupType.all do |group_type|
|
47
36
|
assert_not_nil group_type
|
48
37
|
assert group_type.kind_of? JGrouper::GroupType
|
@@ -57,7 +46,7 @@ class TestGroupType < Test::Unit::TestCase
|
|
57
46
|
end
|
58
47
|
|
59
48
|
def test_mocked_find_by_name
|
60
|
-
Java::EduInternet2MiddlewareGrouper::GroupTypeFinder.expects(:find).returns
|
49
|
+
Java::EduInternet2MiddlewareGrouper::GroupTypeFinder.expects(:find).returns grouper_type
|
61
50
|
JGrouper::GroupType.find('base') do |group_type|
|
62
51
|
assert_not_nil group_type
|
63
52
|
assert group_type.kind_of? JGrouper::GroupType
|
@@ -71,22 +60,47 @@ class TestGroupType < Test::Unit::TestCase
|
|
71
60
|
assert_nil JGrouper::GroupType.find('jgrouper')
|
72
61
|
end
|
73
62
|
|
74
|
-
def
|
63
|
+
def test_mocked_instance_delete
|
64
|
+
type = grouper_type
|
65
|
+
|
75
66
|
Java::EduInternet2MiddlewareGrouper::GrouperSession.expects(:startRootSession).returns true
|
76
|
-
Java::EduInternet2MiddlewareGrouper::GroupTypeFinder.expects(:find).returns
|
77
|
-
|
67
|
+
Java::EduInternet2MiddlewareGrouper::GroupTypeFinder.expects(:find).returns type
|
68
|
+
type.expects(:delete).returns(nil)
|
69
|
+
|
78
70
|
assert JGrouper::GroupType.find('jgrouper').delete
|
79
71
|
end
|
80
72
|
|
81
|
-
def
|
73
|
+
def test_mocked_instance_delete_failure
|
74
|
+
type = grouper_type
|
75
|
+
|
82
76
|
Java::EduInternet2MiddlewareGrouper::GrouperSession.expects(:startRootSession).returns true
|
83
|
-
Java::EduInternet2MiddlewareGrouper::GroupTypeFinder.expects(:find).returns
|
84
|
-
|
77
|
+
Java::EduInternet2MiddlewareGrouper::GroupTypeFinder.expects(:find).returns type
|
78
|
+
type.expects(:delete).raises(Exception, 'Mocked Exception')
|
85
79
|
|
86
80
|
group_type = JGrouper::GroupType.find('jgrouper')
|
87
81
|
assert_equal false, group_type.delete
|
88
82
|
assert_equal 'Mocked Exception', group_type.error.to_s
|
89
83
|
end
|
90
84
|
|
85
|
+
def test_mocked_class_delete
|
86
|
+
type = grouper_type
|
87
|
+
|
88
|
+
Java::EduInternet2MiddlewareGrouper::GrouperSession.expects(:startRootSession).returns true
|
89
|
+
Java::EduInternet2MiddlewareGrouper::GroupTypeFinder.expects(:find).returns type
|
90
|
+
type.expects(:delete).returns(nil)
|
91
|
+
|
92
|
+
assert JGrouper::GroupType.delete('jgrouper')
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_mocked_class_delete_failure
|
96
|
+
type = grouper_type
|
97
|
+
|
98
|
+
Java::EduInternet2MiddlewareGrouper::GrouperSession.expects(:startRootSession).returns true
|
99
|
+
Java::EduInternet2MiddlewareGrouper::GroupTypeFinder.expects(:find).returns type
|
100
|
+
type.expects(:delete).raises(Exception, 'Mocked Exception')
|
101
|
+
|
102
|
+
assert_equal false, JGrouper::GroupType.delete('jgrouper')
|
103
|
+
end
|
104
|
+
|
91
105
|
end
|
92
106
|
|
data/test/test_stem.rb
CHANGED
@@ -3,25 +3,13 @@
|
|
3
3
|
require_relative 'helper'
|
4
4
|
|
5
5
|
|
6
|
-
|
7
|
-
class TestStem < Test::Unit::TestCase
|
8
|
-
|
9
|
-
def setup
|
10
|
-
@json = { 'json_class' => JGrouper::Stem,
|
11
|
-
'display_name' => '',
|
12
|
-
'name' => '',
|
13
|
-
'uuid' => 'some-fake-uuid'
|
14
|
-
}.to_json
|
15
|
-
@root = OpenStruct.new :getDisplayName => '',
|
16
|
-
:getName => '',
|
17
|
-
:getUuid => 'some-fake-uuid'
|
18
|
-
end
|
19
|
-
|
6
|
+
class JGrouper::Stem::TestCase
|
20
7
|
|
21
8
|
def test_mocked_find_root_stem
|
22
9
|
Java::EduInternet2MiddlewareGrouper::GrouperSession.expects(:startRootSession).returns true
|
23
|
-
Java::EduInternet2MiddlewareGrouper::StemFinder.expects(:findRootStem).returns
|
24
|
-
|
10
|
+
Java::EduInternet2MiddlewareGrouper::StemFinder.expects(:findRootStem).returns grouper_root_stem
|
11
|
+
|
12
|
+
JGrouper::Stem.root do |stem|
|
25
13
|
assert_not_nil stem
|
26
14
|
assert stem.kind_of? JGrouper::Stem
|
27
15
|
assert_equal '', stem.display_name
|
@@ -32,12 +20,13 @@ class TestStem < Test::Unit::TestCase
|
|
32
20
|
|
33
21
|
def test_mocked_stem_to_json
|
34
22
|
Java::EduInternet2MiddlewareGrouper::GrouperSession.expects(:startRootSession).returns true
|
35
|
-
Java::EduInternet2MiddlewareGrouper::StemFinder.expects(:findRootStem).returns
|
36
|
-
|
23
|
+
Java::EduInternet2MiddlewareGrouper::StemFinder.expects(:findRootStem).returns grouper_root_stem
|
24
|
+
|
25
|
+
assert_equal root_stem_as_json, JGrouper::Stem.root.to_json
|
37
26
|
end
|
38
27
|
|
39
28
|
def test_stem_from_json
|
40
|
-
stem = JSON.parse
|
29
|
+
stem = JSON.parse root_stem_as_json
|
41
30
|
assert_not_nil stem
|
42
31
|
assert stem.kind_of? JGrouper::Stem
|
43
32
|
assert_equal '', stem.display_name
|
@@ -45,5 +34,57 @@ class TestStem < Test::Unit::TestCase
|
|
45
34
|
assert_equal 'some-fake-uuid', stem.uuid
|
46
35
|
end
|
47
36
|
|
37
|
+
def test_mocked_find_by_name
|
38
|
+
Java::EduInternet2MiddlewareGrouper::GrouperSession.expects(:startRootSession).returns true
|
39
|
+
Java::EduInternet2MiddlewareGrouper::StemFinder.expects(:findByName).returns grouper_stem('foo:bar')
|
40
|
+
|
41
|
+
JGrouper::Stem.find('foo:bar') do |stem|
|
42
|
+
assert_not_nil stem
|
43
|
+
assert stem.kind_of? JGrouper::Stem
|
44
|
+
assert_equal 'foo', stem.display_name
|
45
|
+
assert_equal 'foo', stem.name
|
46
|
+
assert_equal 'stem-foo', stem.uuid
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_mocked_find_by_name_failure
|
51
|
+
Java::EduInternet2MiddlewareGrouper::GrouperSession.expects(:startRootSession).returns true
|
52
|
+
Java::EduInternet2MiddlewareGrouper::StemFinder.expects(:findByName).returns nil
|
53
|
+
|
54
|
+
assert_nil JGrouper::Stem.find('foo:bar')
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_mocked_create_stem_without_display_name_and_without_intermediaries
|
58
|
+
root_stem = grouper_root_stem
|
59
|
+
|
60
|
+
JGrouper::Stem.expects(:root).returns root_stem
|
61
|
+
root_stem.expects(:add_stem).returns JGrouper::Stem.send( :from_grouper, grouper_stem(:foo) )
|
62
|
+
|
63
|
+
JGrouper::Stem.create('foo') do |stem|
|
64
|
+
assert_not_nil stem
|
65
|
+
assert stem.kind_of? JGrouper::Stem
|
66
|
+
assert_equal 'foo', stem.display_name
|
67
|
+
assert_equal 'foo', stem.name
|
68
|
+
assert_not_nil stem.uuid
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_mocked_create_stem_with_display_name_and_with_intermediaries
|
73
|
+
root_stem = grouper_root_stem
|
74
|
+
stem_foo = grouper_stem :foo
|
75
|
+
|
76
|
+
JGrouper::Stem.expects(:root).returns root_stem
|
77
|
+
root_stem.expects(:add_stem).returns stem
|
78
|
+
stem.expects(:add_stem).returns JGrouper::Stem.send( :from_grouper, grouper_stem('foo:bar') )
|
79
|
+
|
80
|
+
JGrouper::Stem.create('foo:bar', 'foo:Bar') do |stem|
|
81
|
+
assert_not_nil stem
|
82
|
+
assert stem.kind_of? JGrouper::Stem
|
83
|
+
assert_equal 'foo:Bar', stem.display_name
|
84
|
+
assert_equal 'foo:bar', stem.name
|
85
|
+
assert_not_nil stem.uuid
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
48
89
|
end
|
49
90
|
|
data/test/test_subject.rb
CHANGED
@@ -3,26 +3,11 @@
|
|
3
3
|
require_relative 'helper'
|
4
4
|
|
5
5
|
|
6
|
-
|
7
|
-
class TestSubject < Test::Unit::TestCase
|
8
|
-
|
9
|
-
def setup
|
10
|
-
@json = { 'json_class' => JGrouper::Subject,
|
11
|
-
'id' => 'GrouperSystem',
|
12
|
-
'name' => 'GrouperSysAdmin',
|
13
|
-
'source' => 'g:isa',
|
14
|
-
'type' => 'application'
|
15
|
-
}.to_json
|
16
|
-
@root = OpenStruct.new :getId => 'GrouperSystem',
|
17
|
-
:getName => 'GrouperSysAdmin',
|
18
|
-
:sourceId => 'g:isa',
|
19
|
-
:typeName => 'application'
|
20
|
-
end
|
21
|
-
|
6
|
+
class JGrouper::Subject::TestCase
|
22
7
|
|
23
8
|
def test_mocked_find_root_subject
|
24
|
-
Java::EduInternet2MiddlewareGrouper::SubjectFinder.expects(:findRootSubject).returns
|
25
|
-
JGrouper::Subject.
|
9
|
+
Java::EduInternet2MiddlewareGrouper::SubjectFinder.expects(:findRootSubject).returns grouper_root_subject
|
10
|
+
JGrouper::Subject.root do |subject|
|
26
11
|
assert_not_nil subject
|
27
12
|
assert subject.kind_of? JGrouper::Subject
|
28
13
|
assert_equal 'GrouperSystem', subject.id
|
@@ -33,12 +18,12 @@ class TestSubject < Test::Unit::TestCase
|
|
33
18
|
end
|
34
19
|
|
35
20
|
def test_mocked_subject_to_json
|
36
|
-
Java::EduInternet2MiddlewareGrouper::SubjectFinder.expects(:findRootSubject).returns
|
37
|
-
assert_equal
|
21
|
+
Java::EduInternet2MiddlewareGrouper::SubjectFinder.expects(:findRootSubject).returns grouper_root_subject
|
22
|
+
assert_equal root_subject_as_json, JGrouper::Subject.root.to_json
|
38
23
|
end
|
39
24
|
|
40
25
|
def test_subject_from_json
|
41
|
-
subject = JSON.parse
|
26
|
+
subject = JSON.parse root_subject_as_json
|
42
27
|
assert_not_nil subject
|
43
28
|
assert subject.kind_of? JGrouper::Subject
|
44
29
|
assert_equal 'GrouperSystem', subject.id
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jgrouper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -27,6 +27,38 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: pry
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: factory_girl
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '4.0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '4.0'
|
30
62
|
- !ruby/object:Gem::Dependency
|
31
63
|
name: mocha
|
32
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -110,22 +142,30 @@ dependencies:
|
|
110
142
|
description: JRuby wrapper around the Internet2 Grouper API
|
111
143
|
email:
|
112
144
|
- blair.christensen@gmail.com
|
113
|
-
executables:
|
145
|
+
executables:
|
146
|
+
- jgrouper
|
114
147
|
extensions: []
|
115
148
|
extra_rdoc_files: []
|
116
149
|
files:
|
117
150
|
- .gitignore
|
118
151
|
- Gemfile
|
152
|
+
- HISTORY.md
|
119
153
|
- LICENSE
|
120
154
|
- README.rdoc
|
121
155
|
- Rakefile
|
122
156
|
- TODO.md
|
157
|
+
- bin/jgrouper
|
123
158
|
- jgrouper.gemspec
|
124
159
|
- lib/jgrouper.rb
|
125
160
|
- lib/jgrouper/group_type.rb
|
161
|
+
- lib/jgrouper/group_type/test_case.rb
|
162
|
+
- lib/jgrouper/shell.rb
|
126
163
|
- lib/jgrouper/stem.rb
|
164
|
+
- lib/jgrouper/stem/test_case.rb
|
127
165
|
- lib/jgrouper/subject.rb
|
166
|
+
- lib/jgrouper/subject/test_case.rb
|
128
167
|
- lib/jgrouper/version.rb
|
168
|
+
- test/factories.rb
|
129
169
|
- test/helper.rb
|
130
170
|
- test/test_group_type.rb
|
131
171
|
- test/test_stem.rb
|
@@ -155,6 +195,7 @@ signing_key:
|
|
155
195
|
specification_version: 3
|
156
196
|
summary: JRuby wrapper around the Internet2 Grouper API
|
157
197
|
test_files:
|
198
|
+
- test/factories.rb
|
158
199
|
- test/helper.rb
|
159
200
|
- test/test_group_type.rb
|
160
201
|
- test/test_stem.rb
|