coder_wally 0.1.1 → 0.1.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.
- checksums.yaml +4 -4
- data/README.md +2 -1
- data/coder_wally.gemspec +11 -11
- data/lib/coder_wally/account.rb +10 -2
- data/lib/coder_wally/api.rb +15 -31
- data/lib/coder_wally/builder.rb +12 -8
- data/lib/coder_wally/exception_handler.rb +18 -0
- data/lib/coder_wally/status_code_from_error.rb +30 -0
- data/lib/coder_wally/user.rb +6 -6
- data/lib/coder_wally/version.rb +1 -1
- data/lib/coder_wally.rb +2 -0
- data/test/api_test.rb +38 -0
- metadata +14 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ce08332a669f0fab248e145033366fab6f89a89
|
4
|
+
data.tar.gz: b4cc4a66611195652695244724152dfddbfc45c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6837d0ad987b1689ec808bdea5f1a076b633d253bc72246d87fe5ef51dcdcb27ab49b174c71adc00b247c61dda9ab55dc1c12b6430758c512faa677c70527882
|
7
|
+
data.tar.gz: c17ddb445161f3c4bce8b491a6f8ea7e9d46ddd1a6038ca37da31bcf5c13cb406c85239b5af35945305f0e8afd1237f43190cc68bcc9d292ba5a528e9e0ff2f6
|
data/README.md
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
# CoderWally
|
2
2
|
|
3
|
-
[](https://circleci.com/gh/gregstewart/coder_wally)
|
3
|
+
[](https://circleci.com/gh/gregstewart/coder_wally)
|
4
4
|
|
5
5
|
[](http://badge.fury.io/rb/coder_wally)
|
6
6
|
[](https://coveralls.io/r/gregstewart/coder_wally)
|
7
7
|
[](https://codeclimate.com/github/gregstewart/coder_wally)
|
8
8
|
[](https://gemnasium.com/gregstewart/coder_wally)
|
9
9
|
[](https://inch-ci.org/github/gregstewart/coder_wally)
|
10
|
+
[](https://www.omniref.com/ruby/gems/coder_wally)
|
10
11
|
|
11
12
|
A very very simple Gem to fetch user badges from Coder Wall
|
12
13
|
|
data/coder_wally.gemspec
CHANGED
@@ -4,23 +4,23 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'coder_wally/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'coder_wally'
|
8
8
|
spec.version = CoderWally::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
9
|
+
spec.authors = ['Greg Stewart']
|
10
|
+
spec.email = ['gregs@tcias.co.uk']
|
11
11
|
spec.summary = %q{A simple gem to fetch user badges from Coder Wall}
|
12
12
|
spec.description = %q{A simple gem to fetch user badges from Coder Wall}
|
13
|
-
spec.homepage =
|
14
|
-
spec.license =
|
13
|
+
spec.homepage = 'https://github.com/gregstewart/coder_wally'
|
14
|
+
spec.license = 'MIT'
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = [
|
19
|
+
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_development_dependency
|
22
|
-
spec.add_development_dependency
|
23
|
-
spec.add_development_dependency
|
24
|
-
spec.add_development_dependency
|
25
|
-
spec.add_development_dependency
|
21
|
+
spec.add_development_dependency 'bundler', '~> 1.7'
|
22
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
23
|
+
spec.add_development_dependency 'webmock', '~>1.20.4'
|
24
|
+
spec.add_development_dependency 'coveralls', '~>0.7.9'
|
25
|
+
spec.add_development_dependency 'rubocop', '~>0.29.0'
|
26
26
|
end
|
data/lib/coder_wally/account.rb
CHANGED
@@ -5,9 +5,17 @@ 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
|
-
|
9
|
-
|
8
|
+
create_accessor account
|
9
|
+
set_accessor_value account, value
|
10
10
|
end
|
11
11
|
end
|
12
|
+
# create the attribute accessor
|
13
|
+
def create_accessor(name)
|
14
|
+
singleton_class.class_eval { attr_accessor "#{name}" }
|
15
|
+
end
|
16
|
+
# assign the value to the accessor
|
17
|
+
def set_accessor_value(name, value)
|
18
|
+
instance_variable_set("@#{name}", value)
|
19
|
+
end
|
12
20
|
end
|
13
21
|
end
|
data/lib/coder_wally/api.rb
CHANGED
@@ -4,15 +4,22 @@ require 'json'
|
|
4
4
|
module CoderWally
|
5
5
|
# API Class
|
6
6
|
class API
|
7
|
+
attr_reader :response
|
8
|
+
def initialize
|
9
|
+
@response = {}
|
10
|
+
end
|
11
|
+
|
7
12
|
# Fetch data from CoderWall
|
8
13
|
def fetch(username)
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
14
|
+
@response.fetch(username) do
|
15
|
+
uri = uri_for_user(username)
|
16
|
+
json = send_request(uri)
|
17
|
+
|
18
|
+
begin
|
19
|
+
@response[username] = JSON.parse(json.read)
|
20
|
+
rescue JSON::ParserError
|
21
|
+
raise InvalidJson, 'Received invalid json in response'
|
22
|
+
end
|
16
23
|
end
|
17
24
|
end
|
18
25
|
|
@@ -22,23 +29,7 @@ module CoderWally
|
|
22
29
|
def send_request(url)
|
23
30
|
open(url)
|
24
31
|
rescue OpenURI::HTTPError => error
|
25
|
-
|
26
|
-
handle_server_error(error)
|
27
|
-
end
|
28
|
-
|
29
|
-
# Parse status code from error
|
30
|
-
def get_status_code(error)
|
31
|
-
error.io.status[0]
|
32
|
-
end
|
33
|
-
|
34
|
-
# Raise server error
|
35
|
-
def handle_server_error(error)
|
36
|
-
fail ServerError, 'Server error' if get_status_code(error) == '500'
|
37
|
-
end
|
38
|
-
|
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'
|
32
|
+
ExceptionHandler.new(error)
|
42
33
|
end
|
43
34
|
|
44
35
|
# Build user URI from username and api url
|
@@ -55,13 +46,6 @@ module CoderWally
|
|
55
46
|
end
|
56
47
|
end
|
57
48
|
|
58
|
-
# Handles user not found exception
|
59
|
-
class UserNotFoundError < StandardError
|
60
|
-
end
|
61
|
-
|
62
|
-
# Handles server exception
|
63
|
-
class ServerError < StandardError
|
64
|
-
end
|
65
49
|
# Handles bad JSON
|
66
50
|
class InvalidJson < StandardError
|
67
51
|
end
|
data/lib/coder_wally/builder.rb
CHANGED
@@ -6,25 +6,29 @@ module CoderWally
|
|
6
6
|
end
|
7
7
|
|
8
8
|
# parse badges from data
|
9
|
-
def parse_badges(
|
10
|
-
|
9
|
+
def parse_badges(badges)
|
10
|
+
badges.map { |badge| create_new_badge(badge) } if badges
|
11
|
+
end
|
12
|
+
|
13
|
+
# create a new badge object
|
14
|
+
def create_new_badge(badge)
|
15
|
+
Badge.new(badge)
|
11
16
|
end
|
12
17
|
|
13
18
|
# parse account information from data
|
14
|
-
def parse_accounts(
|
15
|
-
Account.new(
|
19
|
+
def parse_accounts(accounts)
|
20
|
+
Account.new(accounts) if accounts
|
16
21
|
end
|
17
22
|
|
18
23
|
# parse user information from data
|
19
24
|
def parse_user(data)
|
20
|
-
User.new(data
|
21
|
-
data['location'], data['team'], data['endorsements'])
|
25
|
+
User.new(data)
|
22
26
|
end
|
23
27
|
|
24
28
|
# build CoderWall object from API response
|
25
29
|
def build(response)
|
26
|
-
badges = parse_badges(response)
|
27
|
-
accounts = parse_accounts(response)
|
30
|
+
badges = parse_badges(response['badges'])
|
31
|
+
accounts = parse_accounts(response['accounts'])
|
28
32
|
user = parse_user(response)
|
29
33
|
|
30
34
|
CoderWall.new badges, user, accounts
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module CoderWally
|
2
|
+
# Raises errors from the service request
|
3
|
+
class ExceptionHandler
|
4
|
+
# Initialize with the error object
|
5
|
+
def initialize(error)
|
6
|
+
status_code = StatusCodeFromError.new(error).status_code
|
7
|
+
fail ServerError, 'Server error' if status_code == '500'
|
8
|
+
fail UserNotFoundError, 'User not found' if status_code == '404'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
# Handles user not found exception
|
13
|
+
class UserNotFoundError < StandardError
|
14
|
+
end
|
15
|
+
|
16
|
+
# Handles server exception
|
17
|
+
class ServerError < StandardError
|
18
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# All code in the gem is namespaced under this module.
|
2
|
+
module CoderWally
|
3
|
+
# return status code from error object
|
4
|
+
class StatusCodeFromError
|
5
|
+
# Initialise object
|
6
|
+
def initialize(error)
|
7
|
+
@error = error
|
8
|
+
end
|
9
|
+
|
10
|
+
# Get the status code
|
11
|
+
def status_code
|
12
|
+
@error.io.status[0] if error? && io? && status_code?
|
13
|
+
end
|
14
|
+
|
15
|
+
# Is there an error object?
|
16
|
+
def error?
|
17
|
+
true if @error
|
18
|
+
end
|
19
|
+
|
20
|
+
# Is there an io object?
|
21
|
+
def io?
|
22
|
+
true if @error.io
|
23
|
+
end
|
24
|
+
|
25
|
+
# Is there a status?
|
26
|
+
def status_code?
|
27
|
+
true if @error.io.status
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/coder_wally/user.rb
CHANGED
@@ -6,12 +6,12 @@ module CoderWally
|
|
6
6
|
attr_reader :name, :username, :location, :team, :endorsements
|
7
7
|
|
8
8
|
# Initialise object with a hash of values
|
9
|
-
def initialize(
|
10
|
-
@name = name
|
11
|
-
@username = username
|
12
|
-
@location = location
|
13
|
-
@team = team
|
14
|
-
@endorsements = endorsements
|
9
|
+
def initialize(data)
|
10
|
+
@name = data['name']
|
11
|
+
@username = data['username']
|
12
|
+
@location = data['location']
|
13
|
+
@team = data['team']
|
14
|
+
@endorsements = data['endorsements']
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
data/lib/coder_wally/version.rb
CHANGED
data/lib/coder_wally.rb
CHANGED
@@ -4,5 +4,7 @@ require 'coder_wally/user'
|
|
4
4
|
require 'coder_wally/account'
|
5
5
|
require 'coder_wally/coder_wall'
|
6
6
|
require 'coder_wally/api'
|
7
|
+
require 'coder_wally/status_code_from_error'
|
8
|
+
require 'coder_wally/exception_handler'
|
7
9
|
require 'coder_wally/builder'
|
8
10
|
require 'coder_wally/client'
|
data/test/api_test.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'coder_wally/api'
|
3
|
+
|
4
|
+
describe 'api' do
|
5
|
+
describe 'memoize result' do
|
6
|
+
before do
|
7
|
+
@accept_encoding = 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3'
|
8
|
+
@success_fixture = File.dirname(__FILE__) + '/./fixtures/200.json'
|
9
|
+
@success_response = open(File.expand_path(@success_fixture)).read
|
10
|
+
|
11
|
+
stub_request(:get, 'https://coderwall.com/me.json')
|
12
|
+
.with(headers: { 'Accept' => '*/*',
|
13
|
+
'Accept-Encoding' => @accept_encoding,
|
14
|
+
'User-Agent' => 'Ruby' })
|
15
|
+
.to_return(status: 200, body: @success_response, headers: {})
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'calls the send_request method only the first time for any given username' do
|
19
|
+
api = CoderWally::API.new
|
20
|
+
|
21
|
+
api.fetch('me')
|
22
|
+
api.fetch('me')
|
23
|
+
|
24
|
+
api.response.count.must_equal 1
|
25
|
+
|
26
|
+
stub_request(:get, 'https://coderwall.com/foo.json')
|
27
|
+
.with(headers: { 'Accept' => '*/*',
|
28
|
+
'Accept-Encoding' => @accept_encoding,
|
29
|
+
'User-Agent' => 'Ruby' })
|
30
|
+
.to_return(status: 200, body: @success_response, headers: {})
|
31
|
+
|
32
|
+
api.fetch('foo')
|
33
|
+
api.response.count.must_equal 2
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
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.
|
4
|
+
version: 0.1.2
|
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-
|
11
|
+
date: 2015-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -56,30 +56,30 @@ dependencies:
|
|
56
56
|
name: coveralls
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 0.7.9
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 0.7.9
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rubocop
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 0.29.0
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 0.29.0
|
83
83
|
description: A simple gem to fetch user badges from Coder Wall
|
84
84
|
email:
|
85
85
|
- gregs@tcias.co.uk
|
@@ -108,9 +108,12 @@ files:
|
|
108
108
|
- lib/coder_wally/builder.rb
|
109
109
|
- lib/coder_wally/client.rb
|
110
110
|
- lib/coder_wally/coder_wall.rb
|
111
|
+
- lib/coder_wally/exception_handler.rb
|
112
|
+
- lib/coder_wally/status_code_from_error.rb
|
111
113
|
- lib/coder_wally/user.rb
|
112
114
|
- lib/coder_wally/version.rb
|
113
115
|
- test/account_test.rb
|
116
|
+
- test/api_test.rb
|
114
117
|
- test/coder_wally_test.rb
|
115
118
|
- test/fixtures/200.json
|
116
119
|
- test/fixtures/404.json
|
@@ -143,6 +146,7 @@ specification_version: 4
|
|
143
146
|
summary: A simple gem to fetch user badges from Coder Wall
|
144
147
|
test_files:
|
145
148
|
- test/account_test.rb
|
149
|
+
- test/api_test.rb
|
146
150
|
- test/coder_wally_test.rb
|
147
151
|
- test/fixtures/200.json
|
148
152
|
- test/fixtures/404.json
|