jgrouper 0.0.2 → 0.0.3
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/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
|