jgrouper 0.0.5 → 0.1.0

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/lib/jgrouper/stem.rb CHANGED
@@ -1,137 +1,84 @@
1
+ require 'csv'
2
+
1
3
  module JGrouper # :nodoc:
4
+
5
+ #
6
+ # = JGrouper::Stem - Grouper Stem
7
+ #
8
+ # == Usage
9
+ #
10
+ # require 'jgrouper'
2
11
  #
3
- # = JGrouper::Stem - A Grouper stem
12
+ # root = JGrouper::Stem.root
4
13
  #
5
14
  class Stem
6
15
 
7
- attr_accessor :display_name, :name, :uuid
8
-
9
- def initialize
10
- @grouper_stem = nil
16
+ def initialize( obj = nil )
17
+ @obj = obj
11
18
  yield self if block_given?
12
19
  self
13
20
  end
14
21
 
15
22
  #
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+.
23
+ # Find Grouper stem by name. Returns +JGrouper::Stem+ or +nil+.
64
24
  #
65
- # stem = JGrouper::Stem.find(name)
66
- #
67
25
  def self.find(name)
68
- stem = from_grouper StemFinder.findByName( GrouperSession.startRootSession, name, false ) # XXX How to handle sessions?
26
+ obj = StemFinder.find_by_name GrouperSession.start_root_session, name, false
27
+ return nil if obj.nil?
28
+ stem = self.new obj
69
29
  yield stem if block_given?
70
- stem
30
+ stem
71
31
  end
72
32
 
73
33
  #
74
- # Generate JGrouper::Stem instance from JSON by calling +JSON.parse(json_string)+
75
- #
76
- def self.json_create(json)
77
- new do |stem|
78
- stem.display_name = json['display_name']
79
- stem.name = json['name']
80
- stem.uuid = json['uuid']
34
+ # Yield child groups.
35
+ #
36
+ def groups
37
+ @obj.child_groups.collect do |child|
38
+ g = JGrouper::Group.new child
39
+ yield g if block_given?
40
+ g
81
41
  end
82
42
  end
83
43
 
44
+ #
45
+ # For passing methods on to Grouper Stem object.
46
+ #
84
47
  def method_missing(meth, *args, &block)
48
+ super if @obj.nil?
85
49
  begin
86
- block.call @grouper_stem.send(meth, *args) if block
87
- @grouper_stem.send(meth, *args)
50
+ block.call @obj.send(meth, *args) if block
51
+ @obj.send(meth, *args)
88
52
  rescue NoMethodError
89
53
  super
90
54
  end
91
55
  end
92
56
 
93
57
  #
94
- # Return root stem.
95
- #
96
- # root_stem = JGrouper::Stem.root
58
+ # Find Grouper root stem. Returns +JGrouper::Stem+ or +nil+.
97
59
  #
98
60
  def self.root
99
- stem = from_grouper StemFinder.findRootStem( GrouperSession.startRootSession ) # XXX How to handle sessions?
61
+ obj = StemFinder.find_root_stem GrouperSession.start_root_session
62
+ return nil if obj.nil?
63
+ stem = self.new obj
100
64
  yield stem if block_given?
101
65
  stem
102
66
  end
103
67
 
104
68
  #
105
- # Return JSON representation of JGrouper::Stem instance.
69
+ # Yield child stems.
106
70
  #
107
- def to_json
108
- {
109
- :json_class => self.class.name,
110
- :display_name => self.display_name,
111
- :name => self.name,
112
- :uuid => self.uuid
113
- }.to_json
71
+ def stems
72
+ @obj.child_stems.collect do |child|
73
+ s = self.new child
74
+ yield s if block_given?
75
+ s
76
+ end
114
77
  end
115
78
 
116
- #
117
- # Return String representation of JGrouper::Stem instance.
118
- #
119
79
  def to_s
120
- %w( name display_name uuid ).collect { |k| "#{k}=#{ self.send(k) }" }.join(' | ')
121
- end
122
-
123
-
124
- private
125
-
126
- def self.from_grouper(grouper)
127
- return nil if grouper.nil?
128
- new do |stem|
129
- stem.instance_variable_set :@grouper_stem, grouper # XXX Is this even needed?
130
-
131
- stem.display_name = grouper.getDisplayName
132
- stem.name = grouper.getName
133
- stem.uuid = grouper.getUuid
134
- end
80
+ return nil if @obj.nil?
81
+ CSV.generate_line %w( name display_name uuid ).collect { |k| "#{k}=#{ self.send(k) }" }
135
82
  end
136
83
 
137
84
  end
@@ -1,3 +1,4 @@
1
1
  module JGrouper
2
- VERSION = '0.0.5'
2
+ VERSION = '0.1.0'
3
3
  end
4
+
data/lib/jgrouper.rb CHANGED
@@ -1,16 +1,13 @@
1
1
  require 'java'
2
- require 'json'
3
-
4
- require_relative 'jgrouper/group'
5
- require_relative 'jgrouper/group_type'
6
- require_relative 'jgrouper/stem'
7
- require_relative 'jgrouper/subject'
8
- require_relative 'jgrouper/version'
9
2
 
3
+ require 'jgrouper/group'
4
+ require 'jgrouper/member'
5
+ require 'jgrouper/stem'
6
+ require 'jgrouper/version'
10
7
 
11
8
  #
12
9
  # = JGrouper - JRuby wrapper around the Internet2 Grouper API
13
- #
10
+ #
14
11
  # == Usage
15
12
  #
16
13
  # require 'jgrouper'
@@ -18,69 +15,6 @@ require_relative 'jgrouper/version'
18
15
  # # Set path to your Grouper API installation
19
16
  # JGrouper.home '/path/to/your/grouper/api/installation/directory'
20
17
  #
21
- # === Subjects
22
- #
23
- # # Find root subject
24
- # JGrouper::Subject.root do |subject|
25
- # subject.id # Subject identifier
26
- # subject.name # Subject name
27
- # subject.source # Subject source identifier
28
- # subject.type # Subject type name
29
- # subject.getSource # Call native Subject API methods
30
- # end
31
- #
32
- # === Stems
33
- #
34
- # # Find root stem
35
- # JGrouper::Stem.root do |stem|
36
- # stem.display_name # Stem display name
37
- # stem.name # Stem name
38
- # stem.uuid # Stem UUID
39
- # stem.getChildGroups # Call native Grouper API methods
40
- # end
41
- #
42
- # # Find by name
43
- # stem = JGrouper::Stem.find(name) { |stem| ... }
44
- #
45
- # # Create stem(s)
46
- # stem = JGrouper::Stem.create 'foo:bar:baz', 'Foo:Bar:Baz'
47
- #
48
- # # Create child stem(s)
49
- # child = stem.create 'foo:bar:baz'
50
- #
51
- # === Groups
52
- #
53
- # # Find by name
54
- # group = JGrouper::Group.find(name) do |group|
55
- # group.display_name # Group display name
56
- # group.name # Group name
57
- # group.types # Array of group type names
58
- # group.uuid # Group UUID
59
- # group.add_type 'group type' # Add group type
60
- # group.delete_type 'group_type' # Delete group type
61
- # group.getParentStem # Call native Grouper API methods
62
- # end
63
- #
64
- # === Group Types
65
- #
66
- # # Create group type
67
- # JGrouper::GroupType.create(name) do |group_type|
68
- # group_type.name # Group type name
69
- # group_type.uuid # Group type uuid
70
- # group_type.getFields # Call native Grouper API methods
71
- # end
72
- #
73
- # # Find all group types
74
- # group_types = JGrouper::GroupType.all { |group_type| ... }
75
- #
76
- # # Find group type
77
- # JGrouper::GroupType.find(name)
78
- #
79
- # # Delete group type
80
- # JGrouper::GroupType.delete(name)
81
- # # ... or ...
82
- # JGrouper::GroupType.find(name).delete
83
- #
84
18
  # == Installation
85
19
  #
86
20
  # Add this line to your application's Gemfile:
@@ -109,48 +43,41 @@ require_relative 'jgrouper/version'
109
43
  #
110
44
  # == Home Page
111
45
  #
112
- # https://github.com/blairc/jgrouper
46
+ # https://github.com/blairc/jgrouper/
113
47
  #
114
48
  # == See Also
115
49
  #
116
- # JGrouper::Shell https://github.com/blairc/jgrouper-shell, JGrouper::Server https://github.com/blairc/jgrouper-server, http://grouper.internet2.edu
50
+ # http://grouper.internet2.edu
117
51
  #
118
52
  module JGrouper
119
53
 
120
54
  #
121
- # Initialize Grouper API.
55
+ # Initialize Grouper API or raise exception if path does not exist.
122
56
  #
123
- def self.home(path)
124
- # TODO This could/should be so much better.
57
+ def self.home!(path)
58
+ raise "ERROR: path does not exist - #{path}" unless File.directory?(path)
59
+
60
+ ENV['CLASSPATH'].split(':').each { |cp| $CLASSPATH << cp }
61
+
125
62
  [ "#{path}/lib/grouper/", "#{path}/lib/jdbcSamples" ].each do |dir|
126
63
  Dir[ "#{dir}/*.jar" ].each { |jar| $CLASSPATH << jar }
127
64
  end
65
+
128
66
  $CLASSPATH << File.join( path, 'conf' )
129
67
  $CLASSPATH << File.join( path, 'dist', 'lib', 'grouper.jar' )
130
68
 
131
- # TODO Can I eliminate these if I refer to everything by full path?
132
- # Or maybe something like:
133
- # include_class 'java.lang.String' { |package, name| 'JString' }
134
- # Test the above w/ GroupType?
135
69
  %w( edu.internet2.middleware.subject.SubjectNotFoundException
136
70
  edu.internet2.middleware.grouper.GrouperSession
137
- edu.internet2.middleware.grouper.GroupFinder
138
- edu.internet2.middleware.grouper.SubjectFinder
71
+ edu.internet2.middleware.grouper.MemberFinder
139
72
  edu.internet2.middleware.grouper.StemFinder
140
- ).each { |klass| include_class klass }
141
- end
142
-
143
- #
144
- # Initialize Grouper API.
145
- #
146
- def self.home=(path)
147
- self.home path
73
+ ).each { |klass| java_import klass }
148
74
  end
149
75
 
150
76
  end
151
77
 
152
- if __FILE__ == $0
153
- JGrouper.home ENV['GROUPER_HOME']
154
- puts JGrouper::Group.find('etc:wheel')
78
+
79
+ def edu
80
+ Java::Edu
155
81
  end
156
82
 
83
+
metadata CHANGED
@@ -1,100 +1,46 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jgrouper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
5
- prerelease:
4
+ version: 0.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - blair christensen
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-11-20 00:00:00.000000000 Z
11
+ date: 2013-05-15 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: json
14
+ name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: factory_girl
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
16
  requirements:
35
17
  - - ~>
36
18
  - !ruby/object:Gem::Version
37
- version: '4.0'
19
+ version: '1.3'
38
20
  type: :development
39
21
  prerelease: false
40
22
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
23
  requirements:
43
24
  - - ~>
44
25
  - !ruby/object:Gem::Version
45
- version: '4.0'
46
- - !ruby/object:Gem::Dependency
47
- name: mocha
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '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: '0'
26
+ version: '1.3'
62
27
  - !ruby/object:Gem::Dependency
63
28
  name: rake
64
29
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
30
  requirements:
67
- - - ! '>='
31
+ - - '>='
68
32
  - !ruby/object:Gem::Version
69
33
  version: '0'
70
34
  type: :development
71
35
  prerelease: false
72
36
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
37
  requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: rdoc
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
86
- type: :development
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
38
+ - - '>='
92
39
  - !ruby/object:Gem::Version
93
40
  version: '0'
94
41
  - !ruby/object:Gem::Dependency
95
42
  name: rdoc-readme
96
43
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
44
  requirements:
99
45
  - - ~>
100
46
  - !ruby/object:Gem::Version
@@ -102,87 +48,59 @@ dependencies:
102
48
  type: :development
103
49
  prerelease: false
104
50
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
51
  requirements:
107
52
  - - ~>
108
53
  - !ruby/object:Gem::Version
109
54
  version: 0.1.2
110
- - !ruby/object:Gem::Dependency
111
- name: simplecov
112
- requirement: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ! '>='
124
- - !ruby/object:Gem::Version
125
- version: '0'
126
55
  description: JRuby wrapper around the Internet2 Grouper API
127
56
  email:
128
57
  - blair.christensen@gmail.com
129
- executables: []
58
+ executables:
59
+ - jgrouper-audit-archiver
60
+ - jgrouper-export
130
61
  extensions: []
131
62
  extra_rdoc_files: []
132
63
  files:
64
+ - .autotest
133
65
  - .gitignore
134
66
  - Gemfile
135
67
  - HISTORY.md
136
- - LICENSE
68
+ - LICENSE.txt
137
69
  - README.rdoc
138
70
  - Rakefile
139
71
  - TODO.md
72
+ - bin/jgrouper-audit-archiver
73
+ - bin/jgrouper-export
140
74
  - jgrouper.gemspec
141
75
  - lib/jgrouper.rb
76
+ - lib/jgrouper/audit_archiver.rb
77
+ - lib/jgrouper/exporter.rb
142
78
  - lib/jgrouper/group.rb
143
- - lib/jgrouper/group/test_case.rb
144
- - lib/jgrouper/group_type.rb
145
- - lib/jgrouper/group_type/test_case.rb
79
+ - lib/jgrouper/member.rb
146
80
  - lib/jgrouper/stem.rb
147
- - lib/jgrouper/stem/test_case.rb
148
- - lib/jgrouper/subject.rb
149
- - lib/jgrouper/subject/test_case.rb
150
81
  - lib/jgrouper/version.rb
151
- - test/factories.rb
152
- - test/helper.rb
153
- - test/test_group.rb
154
- - test/test_group_type.rb
155
- - test/test_stem.rb
156
- - test/test_subject.rb
157
- homepage: https://github.com/blairc/jgrouper
158
- licenses: []
82
+ homepage: https://github.com/blairc/jgrouper/
83
+ licenses:
84
+ - MIT
85
+ metadata: {}
159
86
  post_install_message:
160
87
  rdoc_options: []
161
88
  require_paths:
162
89
  - lib
163
90
  required_ruby_version: !ruby/object:Gem::Requirement
164
- none: false
165
91
  requirements:
166
- - - ! '>='
92
+ - - '>='
167
93
  - !ruby/object:Gem::Version
168
94
  version: '0'
169
95
  required_rubygems_version: !ruby/object:Gem::Requirement
170
- none: false
171
96
  requirements:
172
- - - ! '>='
97
+ - - '>='
173
98
  - !ruby/object:Gem::Version
174
99
  version: '0'
175
100
  requirements: []
176
101
  rubyforge_project:
177
- rubygems_version: 1.8.23
102
+ rubygems_version: 2.0.0
178
103
  signing_key:
179
- specification_version: 3
104
+ specification_version: 4
180
105
  summary: JRuby wrapper around the Internet2 Grouper API
181
- test_files:
182
- - test/factories.rb
183
- - test/helper.rb
184
- - test/test_group.rb
185
- - test/test_group_type.rb
186
- - test/test_stem.rb
187
- - test/test_subject.rb
188
- has_rdoc:
106
+ test_files: []
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'test/unit'
4
- require 'factory_girl'
5
-
6
-
7
- class JGrouper::Group::TestCase < Test::Unit::TestCase
8
-
9
- def grouper_wheel_group
10
- FactoryGirl.build :grouper_wheel_group
11
- end
12
-
13
- def wheel_group_as_json
14
- FactoryGirl.attributes_for(:wheel_group).to_json
15
- end
16
-
17
- end
18
-
@@ -1,23 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'test/unit'
4
- require 'factory_girl'
5
-
6
-
7
- class 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
-