ghee 0.11.16 → 0.12.16

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d4632fb35cf000d7f6fe844d1d8672297502a29a
4
- data.tar.gz: 979de725a3fac62e7af4cc5794d1f65f7d6a0abd
3
+ metadata.gz: 2c51e8b1e6c08b70499f35de0a23cae8b63e1a6e
4
+ data.tar.gz: 049da506b9d66e381fadfe141b50bd1eccafb4ba
5
5
  SHA512:
6
- metadata.gz: f8fe541f0d64025037aa127a329fdcc165be9001fc5e918fe27e5c99e592969f42f97468bc7027922c1735ae4e7d2c5286e0f17ec2577d195d83b7e9b377c238
7
- data.tar.gz: e811288c74181163b8f67f3c9f4e62edf69e21d42af1f587aae98f292ee6aabd73ca7f33b7a733cc9fa9e7f0a2aab3d1dfb398c2d6fb87f753f479dc94c57d61
6
+ metadata.gz: c9ed847d603f4afdfb209baeae64510b42507caaf5d9a663089d3d702e66aec9f80049884e8cc54a050dd1b38df1da5617a6fb672b2ee735490cab6941771e14
7
+ data.tar.gz: 2e2204ba0e54d1c497e9f66cb03f09ba00e8b2c8c7b0bdb694b3e300ecc9e518b965ff9d754f42386d5addadbf7b46e8e10ac07b6be981c2cb3e3f684934374a
@@ -1 +1 @@
1
- 2.1.2
1
+ 2.1.5
@@ -10,6 +10,12 @@ class Ghee
10
10
  #
11
11
  module Orgs
12
12
 
13
+ module Memberships
14
+ class MembershipsProxy < ::Ghee::ResourceProxy
15
+ accept_header "application/vnd.github.moondragon+json"
16
+ end
17
+ end
18
+
13
19
  # Orgs::Teams module handles all of the Github Organization Teams
14
20
  # API endpoints
15
21
  #
@@ -41,9 +47,9 @@ class Ghee
41
47
  class Proxy < ::Ghee::ResourceProxy
42
48
  include Ghee::CUD
43
49
 
44
- def members(name=nil)
50
+ def members(name=nil, &block)
45
51
  prefix = name ? "#{path_prefix}/members/#{name}" : "#{path_prefix}/members"
46
- Ghee::API::Orgs::Teams::Members::Proxy.new(connection, prefix)
52
+ Ghee::API::Orgs::Teams::Members::Proxy.new(connection, prefix, name, &block)
47
53
  end
48
54
 
49
55
  end
@@ -59,20 +65,19 @@ class Ghee
59
65
  #
60
66
  # Returns json
61
67
  #
62
- def teams(number=nil,params={})
63
- params = number if number.is_a?Hash
68
+ def teams(number=nil, &block)
64
69
  prefix = (!number.is_a?(Hash) and number) ? "./teams/#{number}" : "#{path_prefix}/teams"
65
- Ghee::API::Orgs::Teams::Proxy.new(connection, prefix, params)
70
+ Ghee::API::Orgs::Teams::Proxy.new(connection, prefix, number, &block)
66
71
  end
67
72
 
68
73
  # Repos for a orgs
69
74
  #
70
75
  # Returns json
71
76
  #
72
- def repos(name=nil,params={})
77
+ def repos(name=nil, &block)
73
78
  params = name if name.is_a?Hash
74
79
  prefix = (!name.is_a?(Hash) and name) ? "./repos/#{self["login"]}/#{name}" : "#{path_prefix}/repos"
75
- Ghee::API::Repos::Proxy.new(connection,prefix,params)
80
+ Ghee::API::Repos::Proxy.new(connection,prefix,name, &block)
76
81
  end
77
82
 
78
83
  # User Membership for an org
@@ -82,7 +87,7 @@ class Ghee
82
87
 
83
88
  def memberships(user, &block)
84
89
  prefix = "#{path_prefix}/memberships/#{user}"
85
- Proxy.new(connection, prefix, nil, &block)
90
+ Ghee::API::Orgs::Memberships::MembershipsProxy.new(connection, prefix, nil, &block)
86
91
  end
87
92
  end
88
93
 
@@ -91,7 +96,7 @@ class Ghee
91
96
  # Returns json
92
97
  #
93
98
  def team(number, params={})
94
- prefix = "/teams/#{number}"
99
+ prefix = "./teams/#{number}"
95
100
  Ghee::API::Orgs::Teams::Proxy.new(connection, prefix, params)
96
101
  end
97
102
 
@@ -102,10 +107,9 @@ class Ghee
102
107
  #
103
108
  # Returns json
104
109
  #
105
- def orgs(name=nil, params={})
106
- params = name if name.is_a?Hash
110
+ def orgs(name=nil, &block)
107
111
  prefix = (!name.is_a?(Hash) and name) ? "./orgs/#{name}" : "user/orgs"
108
- Proxy.new(connection, prefix, params)
112
+ Proxy.new(connection, prefix, name, &block)
109
113
  end
110
114
  end
111
115
  end
@@ -5,6 +5,20 @@ class Ghee
5
5
  #
6
6
  module API
7
7
 
8
+ module Membership
9
+ class MembershipProxy < ::Ghee::ResourceProxy
10
+ def admin?
11
+ self['role'] == "admin"
12
+ end
13
+ def active?
14
+ self['state'] == 'active'
15
+ end
16
+ def activate!
17
+ connection.patch(path_prefix, {state: "active"}).body
18
+ end
19
+ end
20
+ end
21
+
8
22
  # The Users module handles all of the Github User
9
23
  # API endpoints
10
24
  #
@@ -19,17 +33,17 @@ class Ghee
19
33
  # enables defining methods on the proxy object
20
34
  #
21
35
  class Proxy < ::Ghee::ResourceProxy
22
-
23
36
  #Org membership for the user
24
37
  #
25
38
  #State: string to limit scope to either active or
26
39
  #pending
27
40
  #
28
41
  #Returns json
29
- def orgs(state, &block)
30
- params = state ? {state: state} : {}
31
- connection.get("#{path_prefix}/orgs", params, &block)
42
+ def org(name, &block)
43
+ prefix = "#{path_prefix}/#{name}"
44
+ Ghee::API::Membership::MembershipProxy.new(connection, prefix, nil, &block)
32
45
  end
46
+
33
47
  end
34
48
  end
35
49
 
@@ -71,9 +85,9 @@ class Ghee
71
85
  end
72
86
 
73
87
  # Returns a Memberships Proxy
74
- def memberships
75
- prefix = "#{path_prefix}/memberships"
76
- Ghee::API::Users::Memberships::Proxy.new(connection, prefix)
88
+ def memberships(params={state: "active"}, &block)
89
+ prefix = "#{path_prefix}/memberships/orgs"
90
+ Ghee::API::Users::Memberships::Proxy.new(connection, prefix, params, &block)
77
91
  end
78
92
  end
79
93
 
@@ -81,8 +95,8 @@ class Ghee
81
95
  #
82
96
  # Returns json
83
97
  #
84
- def user
85
- Proxy.new(connection, './user')
98
+ def user(&block)
99
+ Proxy.new(connection, './user', nil, &block)
86
100
  end
87
101
 
88
102
  # Get a single user
@@ -8,7 +8,7 @@ class Ghee
8
8
  class ResourceProxy
9
9
 
10
10
  # Undefine methods that might get in the way
11
- instance_methods.each { |m| undef_method m unless m =~ /^__|instance_eval|instance_variable_get|object_id|respond_to/ }
11
+ instance_methods.each { |m| undef_method m unless m =~ /^__|instance_eval|instance_variable_get|object_id|respond_to|class/ }
12
12
 
13
13
  include Ghee::CUD
14
14
 
@@ -18,139 +18,147 @@ class Ghee
18
18
  # Expose pagination data
19
19
  attr_reader :current_page, :total, :pagination
20
20
 
21
- # Instantiates proxy with the connection
22
- # and path_prefix
23
- #
24
- # connection - Ghee::Connection object
25
- # path_prefix - String
26
- #
27
- def initialize(connection, path_prefix, params = {}, &block)
28
- params = {} if !params.is_a?Hash
29
- @connection, @path_prefix, @params = connection, URI.escape(path_prefix), params
30
- @block = block if block
31
- subject if block
21
+ def self.accept_header(header)
22
+ define_method "accept_type" do
23
+ return @_accept_type ||= "#{header}"
24
+ end
32
25
  end
33
26
 
34
- # Method_missing takes any message passed
35
- # to the ResourceProxy and sends it to the
36
- # real object
37
- #
38
- # message - Message object
39
- # args* - Arguements passed
40
- #
41
- def method_missing(message, *args, &block)
42
- subject.send(message, *args, &block)
43
- end
27
+ # Instantiates proxy with the connection
28
+ # and path_prefix
29
+ #
30
+ # connection - Ghee::Connection object
31
+ # path_prefix - String
32
+ #
33
+ def initialize(connection, path_prefix, params = {}, &block)
34
+ params = {} if !params.is_a?Hash
35
+ @connection, @path_prefix, @params = connection, URI.escape(path_prefix), params
36
+ @block = block if block
37
+ subject if block
38
+ end
44
39
 
45
- # Raw is the raw response from the faraday
46
- # Use this if you need access to status codes
47
- # or header values
48
- #
49
- def raw
50
- connection.get(path_prefix){|req| req.params.merge!params }
40
+ # Method_missing takes any message passed
41
+ # to the ResourceProxy and sends it to the
42
+ # real object
43
+ #
44
+ # message - Message object
45
+ # args* - Arguements passed
46
+ #
47
+ def method_missing(message, *args, &block)
48
+ subject.send(message, *args, &block)
49
+ end
50
+
51
+ # Raw is the raw response from the faraday
52
+ # Use this if you need access to status codes
53
+ # or header values
54
+ #
55
+ def raw
56
+ connection.get(path_prefix){|req| req.params.merge!params }
57
+ end
58
+
59
+ # Subject is the response body parsed
60
+ # as json
61
+ #
62
+ # Returns json
63
+ #
64
+ def subject
65
+ @subject ||= connection.get(path_prefix) do |req|
66
+ req.params.merge!params
67
+ req.headers["Accept"] = accept_type if self.respond_to? :accept_type
68
+ @block.call(req)if @block
69
+ end.body
70
+ end
71
+
72
+ # Paginate is a helper method to handle
73
+ # request pagination to the github api
74
+ #
75
+ # options - Hash containing pagination params
76
+ # eg;
77
+ # :per_page => 100, :page => 1
78
+ #
79
+ # Returns self
80
+ #
81
+ def paginate(options)
82
+ @current_page = options.fetch(:page) {raise ArgumentError, ":page parameter required"}
83
+ per_page = options.delete(:per_page) || 30
84
+ response = connection.get do |req|
85
+ req.url path_prefix, :per_page => per_page, :page => current_page
86
+ req.params.merge! params
51
87
  end
52
88
 
53
- # Subject is the response body parsed
54
- # as json
55
- #
56
- # Returns json
57
- #
58
- def subject
59
- @subject ||= connection.get(path_prefix) do |req|
60
- req.params.merge!params
61
- @block.call(req)if @block
62
- end.body
89
+ if @subject.nil?
90
+ @subject = response.body
91
+ else
92
+ @subject = @subject.concat response.body
63
93
  end
64
94
 
65
- # Paginate is a helper method to handle
66
- # request pagination to the github api
67
- #
68
- # options - Hash containing pagination params
69
- # eg;
70
- # :per_page => 100, :page => 1
71
- #
72
- # Returns self
73
- #
74
- def paginate(options)
75
- @current_page = options.fetch(:page) {raise ArgumentError, ":page parameter required"}
76
- per_page = options.delete(:per_page) || 30
77
- response = connection.get do |req|
78
- req.url path_prefix, :per_page => per_page, :page => current_page
79
- req.params.merge! params
80
- end
95
+ parse_link_header response.headers.delete("link")
81
96
 
82
- if @subject.nil?
83
- @subject = response.body
84
- else
85
- @subject = @subject.concat response.body
86
- end
87
-
88
- parse_link_header response.headers.delete("link")
97
+ return self
98
+ end
89
99
 
90
- return self
91
- end
100
+ def all
101
+ return self if pagination && next_page.nil?
92
102
 
93
- def all
94
- return self if pagination && next_page.nil?
103
+ self.paginate :per_page => 100, :page => next_page || 1
95
104
 
96
- self.paginate :per_page => 100, :page => next_page || 1
105
+ self.all
106
+ end
97
107
 
98
- self.all
108
+ def all_parallel
109
+ connection = @connection.parallel_connection
110
+ headers = connection.head(path_prefix) do |req|
111
+ req.params.merge! params.merge(:per_page => 100)
99
112
  end
100
-
101
- def all_parallel
102
- connection = @connection.parallel_connection
103
- headers = connection.head(path_prefix) do |req|
104
- req.params.merge! params.merge(:per_page => 100)
105
- end
106
- pages = pagination_data headers.headers.delete("link")
107
- requests = []
108
- connection.in_parallel do
109
- pages[:pages].to_i.times do |i|
110
- requests << connection.get(path_prefix) do |req|
111
- req.params.merge! params.merge(:per_page => 100, :page => i + 1)
112
- end
113
+ pages = pagination_data headers.headers.delete("link")
114
+ requests = []
115
+ connection.in_parallel do
116
+ pages[:pages].to_i.times do |i|
117
+ requests << connection.get(path_prefix) do |req|
118
+ req.params.merge! params.merge(:per_page => 100, :page => i + 1)
113
119
  end
114
120
  end
115
- requests.inject([]) do |results, page|
116
- results.concat(page.body)
117
- end
118
121
  end
122
+ requests.inject([]) do |results, page|
123
+ results.concat(page.body)
124
+ end
125
+ end
119
126
 
120
- # Generate first_page, last_page, next_page, prev_page convienence methods
121
- %w{ next prev first last }.each do |term|
122
- define_method "#{term}_page" do
123
- pagination ? pagination[term.to_sym] ? pagination[term.to_sym][:page] : nil : nil
124
- end
127
+ # Generate first_page, last_page, next_page, prev_page convienence methods
128
+ %w{ next prev first last }.each do |term|
129
+ define_method "#{term}_page" do
130
+ pagination ? pagination[term.to_sym] ? pagination[term.to_sym][:page] : nil : nil
125
131
  end
132
+ end
126
133
 
127
- private
134
+ def build_prefix(first_argument, endpoint)
135
+ (!first_argument.is_a?(Hash) && !first_argument.nil?) ?
136
+ File.join(path_prefix, "/#{endpoint}/#{first_argument}") : File.join(path_prefix, "/#{endpoint}")
137
+ end
128
138
 
129
- def pagination_data(header)
130
- parse_link_header header
131
- { pages: @pagination[:last][:page] }
132
- end
139
+ private
133
140
 
134
- def build_prefix(first_argument, endpoint)
135
- (!first_argument.is_a?(Hash) and first_argument) ?
136
- "#{path_prefix}/#{endpoint}/#{first_argument}" : "#{path_prefix}/#{endpoint}"
137
- end
141
+ def pagination_data(header)
142
+ parse_link_header header
143
+ { pages: @pagination[:last][:page] }
144
+ end
138
145
 
139
- def parse_link_header(header)
140
- return @total = subject.size, @pagination = {} if header.nil?
141
- require 'cgi'
142
- pattern = /<(.*)>;\s+rel="(.*)"/
143
- matches = {}
144
- header.split(',').each do |m|
145
- match = pattern.match m
146
- uri = URI.parse(match[1])
147
- uri_params = CGI.parse(uri.query)
148
- page = uri_params["page"].first.to_i
149
- per_page = uri_params["per_page"] ? uri_params["per_page"].first.to_i : 30
150
- matches[match[2].to_sym] = {:link => match[1], :page => page, :per_page => per_page}
151
- end
152
- @pagination = matches
153
- end
154
146
 
147
+ def parse_link_header(header)
148
+ return @total = subject.size, @pagination = {} if header.nil?
149
+ require 'cgi'
150
+ pattern = /<(.*)>;\s+rel="(.*)"/
151
+ matches = {}
152
+ header.split(',').each do |m|
153
+ match = pattern.match m
154
+ uri = URI.parse(match[1])
155
+ uri_params = CGI.parse(uri.query)
156
+ page = uri_params["page"].first.to_i
157
+ per_page = uri_params["per_page"] ? uri_params["per_page"].first.to_i : 30
158
+ matches[match[2].to_sym] = {:link => match[1], :page => page, :per_page => per_page}
159
+ end
160
+ @pagination = matches
155
161
  end
162
+
163
+ end
156
164
  end
@@ -1,4 +1,4 @@
1
1
  # encoding: UTF-8
2
2
  class Ghee
3
- VERSION = "0.11.16"
3
+ VERSION = "0.12.16"
4
4
  end
@@ -29,6 +29,15 @@ describe Ghee::API::Orgs do
29
29
  end
30
30
  end
31
31
 
32
+ describe "#memberships" do
33
+ it "should return a membership" do
34
+ VCR.use_cassette "orgs(login).memberships(user)" do
35
+ membership = subject.orgs(GH_ORG).memberships(GH_USER)
36
+ membership["state"].should == "active"
37
+ end
38
+ end
39
+ end
40
+
32
41
  describe "#repos" do
33
42
  it "should return a list of repos" do
34
43
  VCR.use_cassette "orgs(login).repos" do
@@ -3,6 +3,23 @@ require 'spec_helper'
3
3
  describe Ghee::API::Users do
4
4
  subject { Ghee.new(GH_AUTH) }
5
5
 
6
+ describe "#memberships" do
7
+ it "should return a list of memberships" do
8
+ VCR.use_cassette('user.memberships') do
9
+ memberships = subject.user.memberships
10
+ memberships.size.should > 0
11
+ end
12
+ end
13
+ it "should return a single membership" do
14
+ VCR.use_cassette('user.memberships.org(org)') do
15
+ memberships = subject.user.memberships.org(GH_ORG)
16
+ memberships['state'].should == 'active'
17
+ memberships.active?.should be_true
18
+ memberships.admin?.should be_true
19
+ end
20
+ end
21
+ end
22
+
6
23
  describe "#user" do
7
24
  it "should return authenticated user" do
8
25
  VCR.use_cassette('user') do
@@ -199,6 +199,15 @@ describe Ghee::ResourceProxy do
199
199
  end
200
200
  end
201
201
 
202
+ describe "#build_prefix" do
203
+ it 'should not append the prefix if hash' do
204
+ subject.build_prefix({}, "bar").should == "/foo/bar"
205
+ end
206
+ it 'should append the prefix if param is not a hash' do
207
+ subject.build_prefix("baz", "bar").should == "/foo/bar/baz"
208
+ end
209
+ end
210
+
202
211
  describe "#method_missing" do
203
212
  it "should pass message and args to target" do
204
213
  subject.upcase.should == "BAR!"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ghee
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.16
4
+ version: 0.12.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Rauh
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-02-14 00:00:00.000000000 Z
12
+ date: 2015-03-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday