jekyll-github-metadata 1.3.0 → 1.4.0

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: efed2aebc358aaa6e7cee8d1c5e03e0eca432453
4
- data.tar.gz: 424595a71e84aa1917bfb2198b73d0e95132268c
3
+ metadata.gz: a689abbad33da0acae73946e5e8790eeb0585c71
4
+ data.tar.gz: 807013e4558fb9a3c6d2fcc60478fd3ab6ca0985
5
5
  SHA512:
6
- metadata.gz: 3253b80572e5551d4635c4d878374839be39bbc42af2e756e67b9664e82fe7967b6242501c9b4e62294eed007f7eb9946343e9848df9f2bc379f02f020c39daf
7
- data.tar.gz: e81fe89c4d4912f1a0450a3c2df85d6f3511beb0bed3ec0f8a610208aee198e2680dc5ea7d58439abd6ca15db3cf1f77be1ff553e2cc26a3f8d8158c050ce2d3
6
+ metadata.gz: 25517ea5ed48b870431aad55683740bf52ad4b98815bad34c927ee3d3835ba398cf4bc5d3123608f9c9e2d5e2c33bff7ab45024b89847d04c2e77af427551eca
7
+ data.tar.gz: e73e4b85cb22f22bcbab6aea00b97ab2507e1f11beaf97187d31c49a6283108873290e627f3e36f944ca0bd077904a34f925f85b8bc4a4a1746aa663493b46c7
@@ -1,6 +1,20 @@
1
1
  module Jekyll
2
2
  module GitHubMetadata
3
3
  class Client
4
+ InvalidMethodError = Class.new(NoMethodError)
5
+
6
+ # Whitelisted API calls.
7
+ API_CALLS = %w{
8
+ repository
9
+ organization
10
+ repository?
11
+ pages
12
+ contributors
13
+ releases
14
+ list_repos
15
+ organization_public_members
16
+ }.freeze
17
+
4
18
  def initialize(options = nil)
5
19
  @client = build_octokit_client(options)
6
20
  end
@@ -20,14 +34,25 @@ module Jekyll
20
34
  Octokit::Client.new({:auto_paginate => true}.merge(options))
21
35
  end
22
36
 
23
- def method_missing(meth, *args, &block)
24
- if @client.respond_to?(meth)
25
- instance_var_name = meth.to_s.sub('?', '_')
26
- Jekyll.logger.debug "GitHub Metadata:", "Calling @client.#{meth}(#{args.map(&:inspect).join(", ")})"
37
+ def accepts_client_method?(method_name)
38
+ API_CALLS.include?(method_name.to_s) && @client.respond_to?(method_name)
39
+ end
40
+
41
+ def respond_to?(method_name, include_private = false)
42
+ accepts_client_method?(method_name) || super
43
+ end
44
+
45
+ def method_missing(method_name, *args, &block)
46
+ method = method_name.to_s
47
+ if accepts_client_method?(method_name)
48
+ instance_var_name = method.sub('?', '_')
49
+ Jekyll.logger.debug "GitHub Metadata:", "Calling @client.#{method}(#{args.map(&:inspect).join(", ")})"
27
50
  instance_variable_get(:"@#{instance_var_name}") ||
28
- instance_variable_set(:"@#{instance_var_name}", save_from_errors { @client.send(meth, *args, &block) })
51
+ instance_variable_set(:"@#{instance_var_name}", save_from_errors { @client.public_send(method_name, *args, &block) })
52
+ elsif @client.respond_to?(method_name)
53
+ raise InvalidMethodError, "#{method_name} is not whitelisted on #{inspect}"
29
54
  else
30
- super(meth, *args, &block)
55
+ super
31
56
  end
32
57
  end
33
58
 
@@ -44,8 +69,20 @@ module Jekyll
44
69
  default
45
70
  end
46
71
 
72
+ def inspect
73
+ "#<#{self.class.name} @client=#{client_inspect}>"
74
+ end
75
+
47
76
  private
48
77
 
78
+ def client_inspect
79
+ if @client.nil?
80
+ "nil"
81
+ else
82
+ "#<#{@client.class.name} (#{"un" unless @client.access_token}authenticated)>"
83
+ end
84
+ end
85
+
49
86
  def pluck_auth_method
50
87
  if ENV['JEKYLL_GITHUB_TOKEN'] || Octokit.access_token
51
88
  { :access_token => ENV['JEKYLL_GITHUB_TOKEN'] || Octokit.access_token }
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  module GitHubMetadata
3
- VERSION = '1.3.0'
3
+ VERSION = '1.4.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-github-metadata
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Parker Moore
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-12 00:00:00.000000000 Z
11
+ date: 2016-02-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: octokit