jgrouper 0.0.5 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
-