groupr 0.2.1 → 0.2.2

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.
@@ -1,6 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
- - rbx-19mode
5
- - jruby-19mode
6
- - ree
3
+ - 1.9.3
4
+ - rbx-19mode
5
+ - jruby-19mode
data/Gemfile CHANGED
@@ -11,5 +11,5 @@ group :development do
11
11
  gem "rdoc"
12
12
  gem "bundler"
13
13
  gem "jeweler", "~> 1.8.4"
14
- gem "simplecov"
14
+ # gem "simplecov"
15
15
  end
@@ -4,7 +4,7 @@
4
4
 
5
5
  Groupr provides an interface to the University of Washington Groups Service, which allows administrators to leverage a simple yet robust groups system for access control for applications campus-wide.
6
6
 
7
- Groupr strives to followly closely to the naming conventions and functions as outlined in the Groups Service documentation, but does expand certain functionality, notably adding the `group_exist?` method to verify that a group exists.
7
+ Groupr strives to followly closely to the naming conventions and functions as outlined in the Groups Service documentation, but does expand certain functionality, notably adding the <tt>group_exist?</tt> method to verify that a group exists.
8
8
 
9
9
  == Features
10
10
 
@@ -33,18 +33,23 @@ Groupr is designed to work with a very specific application API, and is likely n
33
33
 
34
34
  Once the conditions as outlined in "system requirements" are met, this gem can be utilized.
35
35
 
36
- `testr = Groupr.new
37
- testr.key = "path to key file"
38
- testr.cert = "path to certificate file"
39
- testr.group_exists?("u_nikky_awesome")
40
- testr.create_group("u_nikky_yeast-lords")`
36
+ testr = Groupr.new
37
+ testr.key = "path to key file"
38
+ testr.cert = "path to certificate file"
39
+ testr.group_exists?("u_nikky_awesome")
40
+ testr.create_group("u_nikky_yeast-lords")</tt>
41
41
 
42
42
  By default, it will look for a UWCA root file in ~/uwca.crt. You can manually change this by running:
43
43
 
44
- `testr.ua_ca_file = "path to uwca root certificate"`
44
+ testr.ua_ca_file = "path to uwca root certificate"
45
45
 
46
46
  == Version History
47
47
 
48
+ === 0.2.2
49
+
50
+ * Add Groupr#get_membership
51
+ * Add Groupr#delete_group
52
+
48
53
  === 0.2.1
49
54
 
50
55
  Initial documentation release
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.2
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "groupr"
8
- s.version = "0.2.1"
8
+ s.version = "0.2.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Nikky Southerland"]
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
28
28
  "groupr.gemspec",
29
29
  "lib/groupr.rb",
30
30
  "spec/groupr_spec.rb",
31
+ "spec/sample_responses/get_membership.html",
31
32
  "spec/sample_responses/view_group.html",
32
33
  "spec/spec_helper.rb"
33
34
  ]
@@ -46,14 +47,12 @@ Gem::Specification.new do |s|
46
47
  s.add_development_dependency(%q<rdoc>, [">= 0"])
47
48
  s.add_development_dependency(%q<bundler>, [">= 0"])
48
49
  s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
49
- s.add_development_dependency(%q<simplecov>, [">= 0"])
50
50
  else
51
51
  s.add_dependency(%q<nokogiri>, [">= 0"])
52
52
  s.add_dependency(%q<rspec>, [">= 0"])
53
53
  s.add_dependency(%q<rdoc>, [">= 0"])
54
54
  s.add_dependency(%q<bundler>, [">= 0"])
55
55
  s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
56
- s.add_dependency(%q<simplecov>, [">= 0"])
57
56
  end
58
57
  else
59
58
  s.add_dependency(%q<nokogiri>, [">= 0"])
@@ -61,7 +60,6 @@ Gem::Specification.new do |s|
61
60
  s.add_dependency(%q<rdoc>, [">= 0"])
62
61
  s.add_dependency(%q<bundler>, [">= 0"])
63
62
  s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
64
- s.add_dependency(%q<simplecov>, [">= 0"])
65
63
  end
66
64
  end
67
65
 
@@ -2,7 +2,7 @@ require 'net/http'
2
2
  require 'nokogiri'
3
3
  class Groupr
4
4
  attr_accessor :api_url, :certificate, :key, :uw_ca_file
5
- attr_reader :request
5
+ attr_reader :request, :status
6
6
  def initialize
7
7
  @api_url = "https://iam-ws.u.washington.edu:7443/group_sws/v2"
8
8
  @uw_ca_file = "#{ENV['HOME']}/uwca.crt"
@@ -26,7 +26,15 @@ class Groupr
26
26
 
27
27
 
28
28
  # https://wiki.cac.washington.edu/display/infra/Groups+WebService+Get+Members
29
- def get_membership
29
+ def get_membership(group)
30
+ @uri = URI.parse("#{@api_url}/group/#{group}/member")
31
+ body = make_get_request
32
+ doc = Nokogiri::HTML(body)
33
+ members = []
34
+ doc.css('li').each do |m|
35
+ members << m.text
36
+ end
37
+ members
30
38
  end
31
39
 
32
40
  # https://wiki.cac.washington.edu/display/infra/Groups+WebService+Get+Effective+Members
@@ -108,7 +116,16 @@ class Groupr
108
116
  end
109
117
 
110
118
  # https://wiki.cac.washington.edu/display/infra/Groups+WebService+Delete+Group
111
- def delete_group
119
+ def delete_group(group)
120
+ @uri = URI.parse("#{@api_url}/group/#{group}")
121
+ make_delete_request
122
+ if get_response_code == 200
123
+ @status = "Group deleted or not found"
124
+ true
125
+ else
126
+ @status = "No authorization"
127
+ false
128
+ end
112
129
  end
113
130
 
114
131
  ## Search
@@ -138,6 +155,21 @@ class Groupr
138
155
  end
139
156
  @response.body
140
157
  end
158
+ # This makes a delete request against the groups service, used for uh, deleting things
159
+ def make_delete_request
160
+ options = {
161
+ use_ssl: true,
162
+ cert: OpenSSL::X509::Certificate.new(@certificate),
163
+ key: OpenSSL::PKey::RSA.new(@key),
164
+ ca_file: @uw_ca_file,
165
+ verify_mode: OpenSSL::SSL::VERIFY_PEER
166
+ }
167
+ Net::HTTP.start(@uri.host, @uri.port, options) do |http|
168
+ request = Net::HTTP::Delete.new(@uri.request_uri)
169
+ @response = http.request(request)
170
+ end
171
+ @response.body
172
+ end
141
173
  # This makes a put request against the groups service, useful for pushing information
142
174
  def make_put_request
143
175
  options = {
@@ -53,18 +53,41 @@ describe "Groupr" do
53
53
  @group.should_receive(:make_put_request).and_return(nil)
54
54
  end
55
55
  it "Should create a new group" do
56
- @group.should_receive(:get_response_code).and_return(200)
56
+ @group.should_receive(:get_response_code).and_return(200)
57
57
  @group.create_group("u_test_hi").should eq true
58
58
  end
59
59
  it "Should fail to create a new group if the response code is non-200" do
60
- @group.should_receive(:get_response_code).and_return(419)
61
- @group.create_group("u_test_hi").should eq false
60
+ @group.should_receive(:get_response_code).and_return(419)
61
+ @group.create_group("u_test_hi").should eq false
62
62
  end
63
+ end
63
64
 
65
+ context "#delete_group" do
66
+ before do
67
+ @group.should_receive(:make_delete_request).and_return(nil)
68
+ end
69
+ it "Should delete a currently existing group" do
70
+ @group.should_receive(:get_response_code).and_return(200)
71
+ @group.delete_group("u_test-group").should eq true
72
+ @group.status.should eq "Group deleted or not found"
73
+ end
74
+ it "Should return false upon fail" do
75
+ @group.should_receive(:get_response_code).and_return(412)
76
+ @group.delete_group("u_test_group").should eq false
77
+ @group.status.should eq "No authorization"
78
+ end
64
79
  end
80
+ end
81
+ context "member operations" do
82
+
83
+ context "#get_membership" do
84
+ before do
85
+ @group.should_receive(:make_get_request).and_return(File.open("spec/sample_responses/get_membership.html"))
86
+ end
87
+ it "Gets the members of a group" do
88
+ @group.get_membership("u_nikky_awesome").should eq ["blogs", "blogsdev", "hiigara.cac.washington.edu", "nikky", "nikky.cac.washington.edu", "solanum.cac.washington.edu", "sqltest", "u_nikky_git", "webtest"]
89
+ end
65
90
 
66
- context "#get_members" do
67
- it "Gets the members of a group"
68
91
  end
69
92
 
70
93
  context "#add_member" do
@@ -0,0 +1,40 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
2
+ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3
+
4
+
5
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
6
+ <head>
7
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
8
+ </head>
9
+ <body>
10
+
11
+
12
+
13
+
14
+ <div class="group">
15
+ Members of u_nikky_awesome
16
+ <br/>
17
+ Regid: <span class="regid">cd58f8f44e9b494bb6fc57be021e4ba2</span>
18
+ <br/>
19
+
20
+ <ul class="members">
21
+ <li><a rel="memberlink" class="member" type="uwnetid" href="/group_sws/v2/group/cd58f8f44e9b494bb6fc57be021e4ba2/member/blogs">blogs</a></li>
22
+ <li><a rel="memberlink" class="member" type="uwnetid" href="/group_sws/v2/group/cd58f8f44e9b494bb6fc57be021e4ba2/member/blogsdev">blogsdev</a></li>
23
+ <li><a rel="memberlink" class="member" type="dns" href="/group_sws/v2/group/cd58f8f44e9b494bb6fc57be021e4ba2/member/hiigara.cac.washington.edu">hiigara.cac.washington.edu</a></li>
24
+ <li><a rel="memberlink" class="member" type="uwnetid" href="/group_sws/v2/group/cd58f8f44e9b494bb6fc57be021e4ba2/member/nikky">nikky</a></li>
25
+ <li><a rel="memberlink" class="member" type="dns" href="/group_sws/v2/group/cd58f8f44e9b494bb6fc57be021e4ba2/member/nikky.cac.washington.edu">nikky.cac.washington.edu</a></li>
26
+ <li><a rel="memberlink" class="member" type="dns" href="/group_sws/v2/group/cd58f8f44e9b494bb6fc57be021e4ba2/member/solanum.cac.washington.edu">solanum.cac.washington.edu</a></li>
27
+ <li><a rel="memberlink" class="member" type="uwnetid" href="/group_sws/v2/group/cd58f8f44e9b494bb6fc57be021e4ba2/member/sqltest">sqltest</a></li>
28
+ <li><a rel="memberlink" class="member" type="group" href="/group_sws/v2/group/cd58f8f44e9b494bb6fc57be021e4ba2/member/u_nikky_git">u_nikky_git</a></li>
29
+ <li><a rel="memberlink" class="member" type="uwnetid" href="/group_sws/v2/group/cd58f8f44e9b494bb6fc57be021e4ba2/member/webtest">webtest</a></li>
30
+
31
+ </ul>
32
+
33
+ </div>
34
+
35
+ <div class="status">{status}</div>
36
+
37
+
38
+ </body>
39
+ </html>
40
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: groupr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -91,22 +91,6 @@ dependencies:
91
91
  - - ~>
92
92
  - !ruby/object:Gem::Version
93
93
  version: 1.8.4
94
- - !ruby/object:Gem::Dependency
95
- name: simplecov
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: '0'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
94
  description: Gem used to interact with University of Washington Groups Service
111
95
  email: nikky@uw.edu
112
96
  executables: []
@@ -126,6 +110,7 @@ files:
126
110
  - groupr.gemspec
127
111
  - lib/groupr.rb
128
112
  - spec/groupr_spec.rb
113
+ - spec/sample_responses/get_membership.html
129
114
  - spec/sample_responses/view_group.html
130
115
  - spec/spec_helper.rb
131
116
  homepage: http://github.com/allynfolksjr/groupr
@@ -143,7 +128,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
143
128
  version: '0'
144
129
  segments:
145
130
  - 0
146
- hash: -3689606592973473629
131
+ hash: 379539324252946890
147
132
  required_rubygems_version: !ruby/object:Gem::Requirement
148
133
  none: false
149
134
  requirements: