ghee 0.11.16 → 0.12.16

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.
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