coder_wally 0.1.2 → 1.0.0

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: 1ce08332a669f0fab248e145033366fab6f89a89
4
- data.tar.gz: b4cc4a66611195652695244724152dfddbfc45c8
3
+ metadata.gz: 84448d05d51d8fedf698a7bdf9163c7fdc450db6
4
+ data.tar.gz: 241c66da1f41c0c09403c4d6ef809525a28e0a2c
5
5
  SHA512:
6
- metadata.gz: 6837d0ad987b1689ec808bdea5f1a076b633d253bc72246d87fe5ef51dcdcb27ab49b174c71adc00b247c61dda9ab55dc1c12b6430758c512faa677c70527882
7
- data.tar.gz: c17ddb445161f3c4bce8b491a6f8ea7e9d46ddd1a6038ca37da31bcf5c13cb406c85239b5af35945305f0e8afd1237f43190cc68bcc9d292ba5a528e9e0ff2f6
6
+ metadata.gz: da39a27e989de4e8b652da155a028bc50e9796166ba0396496c1bc6076f0bdfe080245bbad174b3a4c663742830bbb8cef834346567f09557aa67594f500f4e2
7
+ data.tar.gz: eec5c75161b05440442b05c335e756c691b4e395badd2edce5b81261d6468f4aee0fe6815306c149c363b58abcc70368bf9da5bed0dbb2f29090f7977dd4437e
data/bin/coder_wally CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'coder_wally'
4
4
 
5
- client = CoderWally::Client.new
6
- coder_wally = client.get_everything_for ARGV[0]
5
+ client = CoderWally::Client.new ARGV[0]
7
6
 
8
- puts coder_wally.inspect
7
+ puts client.user.inspect
data/coder_wally.gemspec CHANGED
@@ -18,9 +18,9 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
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'
21
+ spec.add_development_dependency 'bundler', '~> 1.7.12'
22
+ spec.add_development_dependency 'rake', '~> 10.4.2'
23
+ spec.add_development_dependency 'webmock', '~>1.21.0'
24
+ spec.add_development_dependency 'coveralls', '~>0.8.0'
25
+ spec.add_development_dependency 'rubocop', '~>0.29.1'
26
26
  end
@@ -22,16 +22,16 @@ module CoderWally
22
22
 
23
23
  # parse user information from data
24
24
  def parse_user(data)
25
- User.new(data)
25
+ badges = parse_badges(data['badges'])
26
+ accounts = parse_accounts(data['accounts'])
27
+ User.new(data, badges, accounts)
26
28
  end
27
29
 
28
30
  # build CoderWall object from API response
29
31
  def build(response)
30
- badges = parse_badges(response['badges'])
31
- accounts = parse_accounts(response['accounts'])
32
32
  user = parse_user(response)
33
33
 
34
- CoderWall.new badges, user, accounts
34
+ CoderWall.new user
35
35
  end
36
36
  end
37
37
  end
@@ -2,34 +2,50 @@ module CoderWally
2
2
  # Client to access the API
3
3
  class Client
4
4
  # Instantiate class
5
- def initialize
5
+ def initialize(username)
6
6
  @api = API.new
7
7
  @builder = Builder.new
8
+ @coder_wall = build_coder_wall_from_response(username)
8
9
  end
9
10
 
10
11
  # 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
12
+ def get_badges_for(*username)
13
+ deprecation_message("get_badges_for(#{username})",'user.badges')
14
+ @coder_wall.user.badges
14
15
  end
15
16
 
16
17
  # 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
18
+ def get_details_for(*username)
19
+ deprecation_message("get_details_for(#{username})",'user.details')
20
+ @coder_wall.user.details
20
21
  end
21
22
 
22
23
  # Get all the information available for a given user,
23
24
  # returns a `CoderWall` object
24
- def get_everything_for(username)
25
- build_coder_wall_from_response(username)
25
+ def get_everything_for(*username)
26
+ deprecation_message("get_everything_for(#{username})",'user')
27
+ @coder_wall
26
28
  end
27
29
 
30
+ # Get all the information for a given user
31
+ # Returns a user object
32
+ def user
33
+ @coder_wall.user
34
+ end
35
+
36
+ private
37
+
28
38
  # Builds a CoderWall object
29
39
  def build_coder_wall_from_response(username)
30
40
  json_response = @api.fetch(username)
31
41
 
32
42
  @builder.build(json_response)
33
43
  end
44
+
45
+ # displaying a warning message that the API method is deprecated
46
+ def deprecation_message(old, new)
47
+ warn "[DEPRECATION] `#{old}` is deprecated. Please use `#{new}` instead."
48
+ end
49
+
34
50
  end
35
51
  end
@@ -3,15 +3,15 @@ module CoderWally
3
3
  # Stores all CoderWall attributes
4
4
  class CoderWall
5
5
  # :badges is the collection of user badges
6
- # :user is the `User` object
6
+ # :user is the `User` object (with badges and accounts)
7
7
  # :accounts is the `Account` object
8
8
  attr_reader :badges, :user, :accounts
9
9
 
10
10
  # Instantiate the class with data
11
- def initialize(badges, user, accounts)
12
- @badges = badges
11
+ def initialize(user)
13
12
  @user = user
14
- @accounts = accounts
13
+ @badges = user.badges
14
+ @accounts = user.accounts
15
15
  end
16
16
  end
17
17
  end
@@ -3,15 +3,19 @@ module CoderWally
3
3
  # Stores user properties
4
4
  class User
5
5
  # Object properties
6
- attr_reader :name, :username, :location, :team, :endorsements
6
+ attr_reader :badges, :accounts, :details
7
7
 
8
8
  # Initialise object with a hash of values
9
- def initialize(data)
10
- @name = data['name']
11
- @username = data['username']
12
- @location = data['location']
13
- @team = data['team']
14
- @endorsements = data['endorsements']
9
+ def initialize(data, badges, accounts)
10
+ @badges = badges
11
+ @accounts = accounts
12
+ @details = {
13
+ name: data['name'],
14
+ username: data['username'],
15
+ location: data['location'],
16
+ team: data['team'],
17
+ endorsements: data['endorsements']
18
+ }
15
19
  end
16
20
  end
17
21
  end
@@ -1,5 +1,5 @@
1
1
  # All code in the gem is namespaced under this module.
2
2
  module CoderWally
3
3
  # The current version of CoderWally.
4
- VERSION = '0.1.2'
4
+ VERSION = '1.0.0'
5
5
  end
@@ -3,7 +3,6 @@ require 'coder_wally'
3
3
 
4
4
  describe 'Coder Wally' do
5
5
  before do
6
- @client = CoderWally::Client.new
7
6
  @accept_encoding = 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3'
8
7
  @success_fixture = File.dirname(__FILE__) + '/./fixtures/200.json'
9
8
  end
@@ -17,6 +16,7 @@ describe 'Coder Wally' do
17
16
  'Accept-Encoding' => @accept_encoding,
18
17
  'User-Agent' => 'Ruby' })
19
18
  .to_return(status: 200, body: success_response, headers: {})
19
+ @client = CoderWally::Client.new('me')
20
20
  end
21
21
 
22
22
  it 'returns a hash of badges' do
@@ -32,12 +32,12 @@ describe 'Coder Wally' do
32
32
 
33
33
  describe 'invalid user' do
34
34
  it 'throws an exception when no user is passed in' do
35
- err = -> { @client.get_badges_for }.must_raise ArgumentError
35
+ err = -> { CoderWally::Client.new() }.must_raise ArgumentError
36
36
  err.message.must_match(/wrong number/)
37
37
  end
38
38
 
39
39
  it 'throws an exception when empty string is passed in' do
40
- err = -> { @client.get_badges_for '' }.must_raise ArgumentError
40
+ err = -> { CoderWally::Client.new('') }.must_raise ArgumentError
41
41
  err.message.must_match(/Please provide a username/)
42
42
  end
43
43
 
@@ -53,7 +53,7 @@ describe 'Coder Wally' do
53
53
  end
54
54
 
55
55
  it 'throws a UserNotFoundError when the user is not found' do
56
- err = -> { @client.get_badges_for('me') }.must_raise UserNotFoundError
56
+ err = -> { CoderWally::Client.new('me') }.must_raise UserNotFoundError
57
57
  err.message.must_match(/User not found/)
58
58
  end
59
59
  end
@@ -71,7 +71,7 @@ describe 'Coder Wally' do
71
71
  end
72
72
 
73
73
  it 'throws a ServerError when the server response is 500' do
74
- err = -> { @client.get_badges_for('me') }.must_raise ServerError
74
+ err = -> { CoderWally::Client.new('me') }.must_raise ServerError
75
75
  err.message.must_match(/Server error/)
76
76
  end
77
77
  end
@@ -88,7 +88,7 @@ describe 'Coder Wally' do
88
88
  end
89
89
 
90
90
  it 'throws a InvalidJson exception when bad JSON is returned' do
91
- err = -> { @client.get_badges_for('me') }.must_raise InvalidJson
91
+ err = -> { CoderWally::Client.new('me') }.must_raise InvalidJson
92
92
  err.message.must_match(/invalid json/)
93
93
  end
94
94
  end
@@ -102,16 +102,16 @@ describe 'Coder Wally' do
102
102
  'Accept-Encoding' => @accept_encoding,
103
103
  'User-Agent' => 'Ruby' })
104
104
  .to_return(status: 200, body: success_response, headers: {})
105
+ @client = CoderWally::Client.new('me')
105
106
  end
106
107
 
107
108
  it 'returns a user' do
108
109
  user = @client.get_details_for('me')
109
-
110
- user.name.must_equal 'Greg Stewart'
111
- user.username.must_equal 'gregstewart'
112
- user.location.must_equal 'London, UK'
113
- user.team.must_be_nil
114
- user.endorsements.must_be_kind_of Integer
110
+ user[:name].must_equal 'Greg Stewart'
111
+ user[:username].must_equal 'gregstewart'
112
+ user[:location].must_equal 'London, UK'
113
+ user[:team].must_be_nil
114
+ user[:endorsements].must_be_kind_of Integer
115
115
  end
116
116
  end
117
117
 
@@ -124,6 +124,7 @@ describe 'Coder Wally' do
124
124
  'User-Agent' => 'Ruby' })
125
125
  .to_return(status: 200, body: success_response, headers: {})
126
126
 
127
+ @client = CoderWally::Client.new('me')
127
128
  @coder_wall = @client.get_everything_for('me')
128
129
  end
129
130
 
@@ -144,4 +145,42 @@ describe 'Coder Wally' do
144
145
  @coder_wall.accounts.must_be_instance_of CoderWally::Account
145
146
  end
146
147
  end
148
+
149
+ describe 'client' do
150
+ before do
151
+ success_response = open(File.expand_path(@success_fixture)).read
152
+ stub_request(:get, 'https://coderwall.com/me.json')
153
+ .with(headers: { 'Accept' => '*/*',
154
+ 'Accept-Encoding' => @accept_encoding,
155
+ 'User-Agent' => 'Ruby' })
156
+ .to_return(status: 200, body: success_response, headers: {})
157
+
158
+ @client = CoderWally::Client.new('me')
159
+ end
160
+
161
+ it 'exposes a user object' do
162
+ @client.user.must_be_instance_of CoderWally::User
163
+ end
164
+
165
+ describe 'user' do
166
+ it 'has a badges collection' do
167
+ @client.user.badges.count.must_equal 11
168
+ @client.user.badges.first.must_be_instance_of CoderWally::Badge
169
+ end
170
+
171
+ it 'has an accounts property' do
172
+ @client.user.accounts.must_be_instance_of CoderWally::Account
173
+ end
174
+
175
+ it 'returns a users details' do
176
+ details = @client.user.details
177
+
178
+ details[:name].must_equal 'Greg Stewart'
179
+ details[:username].must_equal 'gregstewart'
180
+ details[:location].must_equal 'London, UK'
181
+ details[:team].must_be_nil
182
+ details[:endorsements].must_be_kind_of Integer
183
+ end
184
+ end
185
+ end
147
186
  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.2
4
+ version: 1.0.0
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-03-11 00:00:00.000000000 Z
11
+ date: 2015-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,70 +16,70 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: 1.7.12
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.7'
26
+ version: 1.7.12
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: 10.4.2
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: 10.4.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: webmock
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.20.4
47
+ version: 1.21.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.20.4
54
+ version: 1.21.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: coveralls
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.7.9
61
+ version: 0.8.0
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: 0.7.9
68
+ version: 0.8.0
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: 0.29.0
75
+ version: 0.29.1
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: 0.29.0
82
+ version: 0.29.1
83
83
  description: A simple gem to fetch user badges from Coder Wall
84
84
  email:
85
85
  - gregs@tcias.co.uk