coder_wally 0.1.0 → 0.1.1

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: ec3f117479a41d224184d23682f03c5756e9c312
4
- data.tar.gz: b3902c02004878ad333b805bbbdae7022f3e451f
3
+ metadata.gz: 09158bbcb126bc9fbb9fcfd4eaff98d646017548
4
+ data.tar.gz: 7dc0e8d397038d0f315263dcd530a7ace464775d
5
5
  SHA512:
6
- metadata.gz: 24434fbdf0747f6b3ccb0173ded350e5b41649604f8d01ccf320da0c6112f9cf770328a1cce5e00c8928db4874eb61be64757e8e1d7edeaa75e1f8b62840a0fa
7
- data.tar.gz: 65372cdbe3b2eb38bea2500af500253ee1a643beda3547c050882776fcf84d30f5400d4348765eea5bfec44e74c958088af5697059d9f6a2a2c74c29aee59b72
6
+ metadata.gz: e0b7f1da6275413792bd7d23d20d430c803d191ce6643b0d00eba7c7b03ba72e06bef77a546bf06be64be0582591f1209c0eae552bd344c348cfe48eb4244e22
7
+ data.tar.gz: cf18c3a4a70e483dabb092eca36a8f5ba7005fb633db642ffd139d81c5579f5fa662044a7225d27b484cc5c98962d8bb7f91fa9442bb19390f70ce65abe4c7c0
data/.rubocop.yml ADDED
@@ -0,0 +1,6 @@
1
+ AllCops:
2
+ Exclude:
3
+ - coder_wally.gemspec
4
+ - Rakefile
5
+
6
+ inherit_from: .rubocop_todo.yml
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,11 @@
1
+ # This configuration was generated by `rubocop --auto-gen-config`
2
+ # on 2015-02-06 22:59:06 +0000 using RuboCop version 0.29.0.
3
+ # The point is for the user to remove these configuration records
4
+ # one by one as the offenses are removed from the code base.
5
+ # Note that changes in the inspected code, or installation of new
6
+ # versions of RuboCop, may require this file to be generated again.
7
+
8
+ # Offense count: 2
9
+ # Configuration parameters: AllowURI, URISchemes.
10
+ Metrics/LineLength:
11
+ Max: 111
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-2.1.5
1
+ ruby-2.1.3
data/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # CoderWally
2
2
 
3
+ [![Build Status](https://circleci.com/gh/gregstewart/coder_wally.svg?style=badge)](https://circleci.com/gh/gregstewart/coder_wally)
4
+
3
5
  [![Gem Version](https://badge.fury.io/rb/coder_wally.svg)](http://badge.fury.io/rb/coder_wally)
4
- [![Build Status](https://travis-ci.org/gregstewart/coder_wally.svg?branch=master)](https://travis-ci.org/gregstewart/coder_wally)
5
6
  [![Coverage Status](https://coveralls.io/repos/gregstewart/coder_wally/badge.svg)](https://coveralls.io/r/gregstewart/coder_wally)
6
7
  [![Code Climate](https://codeclimate.com/github/gregstewart/coder_wally/badges/gpa.svg)](https://codeclimate.com/github/gregstewart/coder_wally)
7
8
  [![Dependency Status](https://gemnasium.com/gregstewart/coder_wally.svg)](https://gemnasium.com/gregstewart/coder_wally)
data/bin/coder_wally CHANGED
@@ -5,4 +5,4 @@ require 'coder_wally'
5
5
  client = CoderWally::Client.new
6
6
  coder_wally = client.get_everything_for ARGV[0]
7
7
 
8
- puts coder_wally.inspect
8
+ puts coder_wally.inspect
data/circle.yml ADDED
@@ -0,0 +1,6 @@
1
+ machine:
2
+ ruby:
3
+ version: 2.1.3
4
+ dependencies:
5
+ pre:
6
+ - gem install bundler --version "=1.7"
data/coder_wally.gemspec CHANGED
@@ -22,4 +22,5 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
23
  spec.add_development_dependency "webmock", "~>1.20.4"
24
24
  spec.add_development_dependency "coveralls"
25
+ spec.add_development_dependency "rubocop"
25
26
  end
@@ -5,9 +5,9 @@ module CoderWally
5
5
  # Dynamically create account properties
6
6
  def initialize(collection_of_accounts)
7
7
  collection_of_accounts.each do |account, value|
8
- singleton_class.class_eval do; attr_accessor "#{account}"; end
9
- self.instance_variable_set("@#{account}", value)
8
+ singleton_class.class_eval { attr_accessor "#{account}" }
9
+ instance_variable_set("@#{account}", value)
10
10
  end
11
11
  end
12
12
  end
13
- end
13
+ end
@@ -11,50 +11,50 @@ module CoderWally
11
11
 
12
12
  begin
13
13
  JSON.parse(json.read)
14
- rescue JSON::ParserError => error
14
+ rescue JSON::ParserError
15
15
  raise InvalidJson, 'Received invalid json in response'
16
16
  end
17
17
  end
18
18
 
19
19
  private
20
- # Dispatch the request
21
- def send_request(url)
22
- begin
23
- open(url)
24
- rescue OpenURI::HTTPError => error
25
- handle_user_not_found_error(error)
26
- handle_server_error(error)
27
- end
28
- end
29
20
 
30
- # Parse status code from error
31
- def get_status_code(error)
32
- error.io.status[0]
33
- end
21
+ # Dispatch the request
22
+ def send_request(url)
23
+ open(url)
24
+ rescue OpenURI::HTTPError => error
25
+ handle_user_not_found_error(error)
26
+ handle_server_error(error)
27
+ end
34
28
 
35
- # Raise server error
36
- def handle_server_error(error)
37
- raise ServerError, 'Server error' if get_status_code(error) == '500'
38
- end
29
+ # Parse status code from error
30
+ def get_status_code(error)
31
+ error.io.status[0]
32
+ end
39
33
 
40
- # Raise user not found error
41
- def handle_user_not_found_error(error)
42
- raise UserNotFoundError, 'User not found' if get_status_code(error) == '404'
43
- end
34
+ # Raise server error
35
+ def handle_server_error(error)
36
+ fail ServerError, 'Server error' if get_status_code(error) == '500'
37
+ end
44
38
 
45
- # Build user URI from username and api url
46
- def uri_for_user(username)
47
- raise(ArgumentError, 'Please provide a username') if username.empty?
39
+ # Raise user not found error
40
+ def handle_user_not_found_error(error)
41
+ fail UserNotFoundError, 'User not found' if get_status_code(error) == '404'
42
+ end
48
43
 
49
- URI.parse(api_url % username)
50
- end
44
+ # Build user URI from username and api url
45
+ def uri_for_user(username)
46
+ fail ArgumentError, 'Please provide a username' if username.empty?
51
47
 
52
- # The URL of the API we'll use.
53
- def api_url
54
- 'https://coderwall.com/%s.json'
55
- end
48
+ URI.parse(api_url % username)
49
+ end
50
+
51
+ # The URL of the API we'll use.
52
+ def api_url
53
+ 'https://coderwall.com/%s.json'
54
+ end
56
55
  end
57
56
  end
57
+
58
58
  # Handles user not found exception
59
59
  class UserNotFoundError < StandardError
60
60
  end
@@ -64,4 +64,4 @@ class ServerError < StandardError
64
64
  end
65
65
  # Handles bad JSON
66
66
  class InvalidJson < StandardError
67
- end
67
+ end
@@ -1,16 +1,16 @@
1
1
  # All code in the gem is namespaced under this module.
2
2
  module CoderWally
3
- # Stores Badge properties
4
- class Badge
5
- # Object properties
6
- attr_reader :name, :badge, :description, :created
7
-
8
- # Initialise object with a hash of values
9
- def initialize(hashed_badge)
10
- @name = hashed_badge.fetch('name')
11
- @badge = hashed_badge.fetch('badge')
12
- @description = hashed_badge.fetch('description')
13
- @created = hashed_badge.fetch('created')
14
- end
3
+ # Stores Badge properties
4
+ class Badge
5
+ # Object properties
6
+ attr_reader :name, :badge, :description, :created
7
+
8
+ # Initialise object with a hash of values
9
+ def initialize(hashed_badge)
10
+ @name = hashed_badge.fetch('name')
11
+ @badge = hashed_badge.fetch('badge')
12
+ @description = hashed_badge.fetch('description')
13
+ @created = hashed_badge.fetch('created')
15
14
  end
16
- end
15
+ end
16
+ end
@@ -22,7 +22,7 @@ module CoderWally
22
22
  end
23
23
 
24
24
  # build CoderWall object from API response
25
- def build response
25
+ def build(response)
26
26
  badges = parse_badges(response)
27
27
  accounts = parse_accounts(response)
28
28
  user = parse_user(response)
@@ -1,34 +1,35 @@
1
1
  module CoderWally
2
- # Client to access the API
3
- class Client
4
- # Instantiate class
5
- def initialize
6
- @api = API.new
7
- @builder = Builder.new
8
- end
2
+ # Client to access the API
3
+ class Client
4
+ # Instantiate class
5
+ def initialize
6
+ @api = API.new
7
+ @builder = Builder.new
8
+ end
9
9
 
10
- # Get badges for given user and return has collection of `Badge`s
11
- def get_badges_for username
12
- coder_wall = build_coder_wall_from_response(username)
13
- coder_wall.badges
14
- end
15
-
16
- # Get user details for given user and return a `User` object
17
- def get_details_for username
18
- coder_wall = build_coder_wall_from_response(username)
19
- coder_wall.user
20
- end
10
+ # Get badges for given user and return has collection of `Badge`s
11
+ def get_badges_for(username)
12
+ coder_wall = build_coder_wall_from_response(username)
13
+ coder_wall.badges
14
+ end
21
15
 
22
- # Get all the information available for a given user, returns a `CoderWall` object
23
- def get_everything_for username
24
- build_coder_wall_from_response(username)
25
- end
16
+ # Get user details for given user and return a `User` object
17
+ def get_details_for(username)
18
+ coder_wall = build_coder_wall_from_response(username)
19
+ coder_wall.user
20
+ end
21
+
22
+ # Get all the information available for a given user,
23
+ # returns a `CoderWall` object
24
+ def get_everything_for(username)
25
+ build_coder_wall_from_response(username)
26
+ end
26
27
 
27
- # Builds a CoderWall object
28
- def build_coder_wall_from_response(username)
29
- json_response = @api.fetch(username)
28
+ # Builds a CoderWall object
29
+ def build_coder_wall_from_response(username)
30
+ json_response = @api.fetch(username)
30
31
 
31
- @builder.build(json_response)
32
- end
32
+ @builder.build(json_response)
33
33
  end
34
+ end
34
35
  end
@@ -1,17 +1,17 @@
1
1
  # All code in the gem is namespaced under this module.
2
2
  module CoderWally
3
- # Stores all CoderWall attributes
4
- class CoderWall
5
- # :badges is the collection of user badges
6
- # :user is the `User` object
7
- # :accounts is the `Account` object
8
- attr_reader :badges, :user, :accounts
3
+ # Stores all CoderWall attributes
4
+ class CoderWall
5
+ # :badges is the collection of user badges
6
+ # :user is the `User` object
7
+ # :accounts is the `Account` object
8
+ attr_reader :badges, :user, :accounts
9
9
 
10
- # Instantiate the class with data
11
- def initialize(badges, user, accounts)
12
- @badges = badges
13
- @user = user
14
- @accounts = accounts
15
- end
10
+ # Instantiate the class with data
11
+ def initialize(badges, user, accounts)
12
+ @badges = badges
13
+ @user = user
14
+ @accounts = accounts
16
15
  end
17
- end
16
+ end
17
+ end
@@ -1,17 +1,17 @@
1
1
  # All code in the gem is namespaced under this module.
2
2
  module CoderWally
3
- # Stores user properties
4
- class User
5
- # Object properties
6
- attr_reader :name, :username, :location, :team, :endorsements
7
-
8
- # Initialise object with a hash of values
9
- def initialize(name, username, location, team, endorsements)
10
- @name = name
11
- @username = username
12
- @location = location
13
- @team = team
14
- @endorsements = endorsements
15
- end
3
+ # Stores user properties
4
+ class User
5
+ # Object properties
6
+ attr_reader :name, :username, :location, :team, :endorsements
7
+
8
+ # Initialise object with a hash of values
9
+ def initialize(name, username, location, team, endorsements)
10
+ @name = name
11
+ @username = username
12
+ @location = location
13
+ @team = team
14
+ @endorsements = endorsements
16
15
  end
17
- end
16
+ end
17
+ end
@@ -1,4 +1,5 @@
1
+ # All code in the gem is namespaced under this module.
1
2
  module CoderWally
2
3
  # The current version of CoderWally.
3
- VERSION = '0.1.0'
4
+ VERSION = '0.1.1'
4
5
  end
data/lib/coder_wally.rb CHANGED
@@ -6,4 +6,3 @@ require 'coder_wally/coder_wall'
6
6
  require 'coder_wally/api'
7
7
  require 'coder_wally/builder'
8
8
  require 'coder_wally/client'
9
-
data/test/account_test.rb CHANGED
@@ -3,11 +3,11 @@ require 'coder_wally/account'
3
3
 
4
4
  describe 'Account' do
5
5
  it 'creates an account object with dynamic attributes' do
6
- json_parsed = {'github' => 'gregstewart', 'twitter' => '_greg_stewart_'}
6
+ json_parsed = { 'github' => 'gregstewart', 'twitter' => '_greg_stewart_' }
7
7
 
8
8
  account = CoderWally::Account.new(json_parsed)
9
9
 
10
10
  account.github.must_equal 'gregstewart'
11
11
  account.twitter.must_equal '_greg_stewart_'
12
12
  end
13
- end
13
+ end
@@ -4,15 +4,19 @@ require 'coder_wally'
4
4
  describe 'Coder Wally' do
5
5
  before do
6
6
  @client = CoderWally::Client.new
7
+ @accept_encoding = 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3'
8
+ @success_fixture = File.dirname(__FILE__) + '/./fixtures/200.json'
7
9
  end
8
10
 
9
11
  describe 'user badges' do
10
12
  describe 'valid user' do
11
13
  before do
12
- success_response = open(File.expand_path(File.dirname(__FILE__) + '/./fixtures/200.json')).read
13
- stub_request(:get, 'https://coderwall.com/me.json').
14
- with(:headers => {'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent' => 'Ruby'}).
15
- to_return(:status => 200, :body => success_response, :headers => {})
14
+ success_response = open(File.expand_path(@success_fixture)).read
15
+ stub_request(:get, 'https://coderwall.com/me.json')
16
+ .with(headers: { 'Accept' => '*/*',
17
+ 'Accept-Encoding' => @accept_encoding,
18
+ 'User-Agent' => 'Ruby' })
19
+ .to_return(status: 200, body: success_response, headers: {})
16
20
  end
17
21
 
18
22
  it 'returns a hash of badges' do
@@ -29,64 +33,75 @@ describe 'Coder Wally' do
29
33
  describe 'invalid user' do
30
34
  it 'throws an exception when no user is passed in' do
31
35
  err = -> { @client.get_badges_for }.must_raise ArgumentError
32
- err.message.must_match /wrong number/
36
+ err.message.must_match(/wrong number/)
33
37
  end
34
38
 
35
39
  it 'throws an exception when empty string is passed in' do
36
40
  err = -> { @client.get_badges_for '' }.must_raise ArgumentError
37
- err.message.must_match /Please provide a username/
41
+ err.message.must_match(/Please provide a username/)
38
42
  end
39
43
 
40
44
  describe 'not found' do
41
45
  before do
42
- not_found_response = open(File.expand_path(File.dirname(__FILE__) + '/./fixtures/404.json')).read
43
- stub_request(:get, 'https://coderwall.com/me.json').
44
- with(:headers => {'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent' => 'Ruby'}).
45
- to_return(:status => 404, :body => not_found_response, :headers => {})
46
+ not_found_fixture = File.dirname(__FILE__) + '/./fixtures/404.json'
47
+ not_found_response = open(File.expand_path(not_found_fixture)).read
48
+ stub_request(:get, 'https://coderwall.com/me.json')
49
+ .with(headers: { 'Accept' => '*/*',
50
+ 'Accept-Encoding' => @accept_encoding,
51
+ 'User-Agent' => 'Ruby' })
52
+ .to_return(status: 404, body: not_found_response, headers: {})
46
53
  end
47
54
 
48
55
  it 'throws a UserNotFoundError when the user is not found' do
49
56
  err = -> { @client.get_badges_for('me') }.must_raise UserNotFoundError
50
- err.message.must_match /User not found/
57
+ err.message.must_match(/User not found/)
51
58
  end
52
59
  end
53
60
  end
54
61
 
55
62
  describe 'service throws an error' do
56
63
  before do
57
- server_error = open(File.expand_path(File.dirname(__FILE__) + '/./fixtures/empty.json')).read
58
- stub_request(:get, 'https://coderwall.com/me.json').
59
- with(:headers => {'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent' => 'Ruby'}).
60
- to_return(:status => 500, :body => server_error, :headers => {})
64
+ empty_fixture = File.dirname(__FILE__) + '/./fixtures/empty.json'
65
+ server_error = open(File.expand_path(empty_fixture)).read
66
+ stub_request(:get, 'https://coderwall.com/me.json')
67
+ .with(headers: { 'Accept' => '*/*',
68
+ 'Accept-Encoding' => @accept_encoding,
69
+ 'User-Agent' => 'Ruby' })
70
+ .to_return(status: 500, body: server_error, headers: {})
61
71
  end
62
72
 
63
73
  it 'throws a ServerError when the server response is 500' do
64
74
  err = -> { @client.get_badges_for('me') }.must_raise ServerError
65
- err.message.must_match /Server error/
75
+ err.message.must_match(/Server error/)
66
76
  end
67
77
  end
68
78
 
69
79
  describe 'bad data' do
70
80
  before do
71
- bad_data = open(File.expand_path(File.dirname(__FILE__) + '/./fixtures/bad.json')).read
72
- stub_request(:get, 'https://coderwall.com/me.json').
73
- with(:headers => {'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent' => 'Ruby'}).
74
- to_return(:status => 200, :body => bad_data, :headers => {})
81
+ bad_json_fixture = File.dirname(__FILE__) + '/./fixtures/bad.json'
82
+ bad_data = open(File.expand_path(bad_json_fixture)).read
83
+ stub_request(:get, 'https://coderwall.com/me.json')
84
+ .with(headers: { 'Accept' => '*/*',
85
+ 'Accept-Encoding' => @accept_encoding,
86
+ 'User-Agent' => 'Ruby' })
87
+ .to_return(status: 200, body: bad_data, headers: {})
75
88
  end
76
89
 
77
90
  it 'throws a InvalidJson exception when bad JSON is returned' do
78
91
  err = -> { @client.get_badges_for('me') }.must_raise InvalidJson
79
- err.message.must_match /invalid json/
92
+ err.message.must_match(/invalid json/)
80
93
  end
81
94
  end
82
95
  end
83
96
 
84
97
  describe 'user details' do
85
98
  before do
86
- success_response = open(File.expand_path(File.dirname(__FILE__) + '/./fixtures/200.json')).read
87
- stub_request(:get, 'https://coderwall.com/me.json').
88
- with(:headers => {'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent' => 'Ruby'}).
89
- to_return(:status => 200, :body => success_response, :headers => {})
99
+ success_response = open(File.expand_path(@success_fixture)).read
100
+ stub_request(:get, 'https://coderwall.com/me.json')
101
+ .with(headers: { 'Accept' => '*/*',
102
+ 'Accept-Encoding' => @accept_encoding,
103
+ 'User-Agent' => 'Ruby' })
104
+ .to_return(status: 200, body: success_response, headers: {})
90
105
  end
91
106
 
92
107
  it 'returns a user' do
@@ -102,10 +117,12 @@ describe 'Coder Wally' do
102
117
 
103
118
  describe 'everything' do
104
119
  before do
105
- success_response = open(File.expand_path(File.dirname(__FILE__) + '/./fixtures/200.json')).read
106
- stub_request(:get, 'https://coderwall.com/me.json').
107
- with(:headers => {'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent' => 'Ruby'}).
108
- to_return(:status => 200, :body => success_response, :headers => {})
120
+ success_response = open(File.expand_path(@success_fixture)).read
121
+ stub_request(:get, 'https://coderwall.com/me.json')
122
+ .with(headers: { 'Accept' => '*/*',
123
+ 'Accept-Encoding' => @accept_encoding,
124
+ 'User-Agent' => 'Ruby' })
125
+ .to_return(status: 200, body: success_response, headers: {})
109
126
 
110
127
  @coder_wall = @client.get_everything_for('me')
111
128
  end
@@ -127,5 +144,4 @@ describe 'Coder Wally' do
127
144
  @coder_wall.accounts.must_be_instance_of CoderWally::Account
128
145
  end
129
146
  end
130
-
131
- end
147
+ end
data/test/test_helper.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  require 'webmock/minitest'
2
2
  require 'coveralls'
3
- Coveralls.wear!
3
+ Coveralls.wear!
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coder_wally
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Greg Stewart
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-03 00:00:00.000000000 Z
11
+ date: 2015-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  description: A simple gem to fetch user badges from Coder Wall
70
84
  email:
71
85
  - gregs@tcias.co.uk
@@ -76,6 +90,8 @@ extra_rdoc_files: []
76
90
  files:
77
91
  - ".coveralls.yml"
78
92
  - ".gitignore"
93
+ - ".rubocop.yml"
94
+ - ".rubocop_todo.yml"
79
95
  - ".ruby-version"
80
96
  - ".travis.yml"
81
97
  - Gemfile
@@ -83,6 +99,7 @@ files:
83
99
  - README.md
84
100
  - Rakefile
85
101
  - bin/coder_wally
102
+ - circle.yml
86
103
  - coder_wally.gemspec
87
104
  - lib/coder_wally.rb
88
105
  - lib/coder_wally/account.rb
@@ -120,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
137
  version: '0'
121
138
  requirements: []
122
139
  rubyforge_project:
123
- rubygems_version: 2.4.3
140
+ rubygems_version: 2.2.2
124
141
  signing_key:
125
142
  specification_version: 4
126
143
  summary: A simple gem to fetch user badges from Coder Wall