coderbits 0.0.3 → 0.1.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 +4 -4
- data/README.md +1 -1
- data/coderbits.gemspec +3 -1
- data/lib/coderbits.rb +13 -14
- data/lib/coderbits/client.rb +33 -13
- data/lib/coderbits/defaults.rb +7 -0
- data/lib/coderbits/glue.rb +26 -17
- data/lib/coderbits/object.rb +5 -0
- data/lib/coderbits/version.rb +1 -1
- data/spec/coderbits/client_spec.rb +26 -4
- data/spec/coderbits/glue_spec.rb +2 -20
- data/spec/coderbits_spec.rb +2 -8
- data/spec/spec_helper.rb +0 -3
- metadata +34 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f3f89f4d80c71f4f30ccec6aeb3e3e4537d99b7
|
4
|
+
data.tar.gz: 4f4ec14200e32a65f7a2006c49771fa0a9df8183
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d14bfbc1f15991c35d29f491e3ca034c491d001f0aab185a4734c5173869b5b3428d32a199364612236b112bc397cfd695719c0b69f64767988a2c1f485b1ca7
|
7
|
+
data.tar.gz: 494a6e187229d9de9f030c540a4b4157abf6a495b1a00e39550553711c115a31fc5b7bd36ab875e3cf729f6a422013e4bf613a061b73475153df0debb2c8a96f
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# coderbits
|
2
2
|
|
3
3
|
[](https://rubygems.org/gems/coderbits)
|
4
|
-
[]
|
4
|
+
[](https://travis-ci.org/artemeff/coderbits)
|
5
5
|
[](https://codeclimate.com/github/artemeff/coderbits)
|
6
6
|
[](https://gemnasium.com/artemeff/coderbits)
|
7
7
|
|
data/coderbits.gemspec
CHANGED
@@ -19,7 +19,9 @@ Gem::Specification.new do |s|
|
|
19
19
|
|
20
20
|
s.add_development_dependency 'bundler', '~> 1.0'
|
21
21
|
s.add_dependency 'faraday', '~> 0.8'
|
22
|
-
s.add_dependency '
|
22
|
+
s.add_dependency 'faraday_middleware', '~> 0.8'
|
23
|
+
s.add_dependency 'multi_json', '~> 1.7'
|
23
24
|
s.add_dependency 'sprite-factory', '~> 1.5'
|
24
25
|
s.add_dependency 'chunky_png', '~> 1.2'
|
26
|
+
s.add_dependency 'hashie', '~> 2.0'
|
25
27
|
end
|
data/lib/coderbits.rb
CHANGED
@@ -1,27 +1,26 @@
|
|
1
|
+
require 'sprite_factory'
|
2
|
+
require 'multi_json'
|
3
|
+
require 'hashie'
|
4
|
+
require 'faraday'
|
5
|
+
require 'faraday_middleware'
|
6
|
+
|
7
|
+
require 'coderbits/defaults'
|
1
8
|
require 'coderbits/client'
|
9
|
+
require 'coderbits/object'
|
2
10
|
require 'coderbits/glue'
|
3
11
|
|
4
12
|
module Coderbits
|
5
13
|
class << self
|
6
|
-
# Alias for Coderbits::Client.new
|
7
|
-
#
|
8
|
-
# @return [Coderbits::Client]
|
14
|
+
# Alias for Coderbits::Client.new.get
|
9
15
|
def new username, options = {}
|
10
|
-
Coderbits::Client.new
|
11
|
-
end
|
12
|
-
|
13
|
-
# Alias for Coderbits::Client.new(...).get
|
14
|
-
#
|
15
|
-
# @return [Hash]
|
16
|
-
def get username
|
17
|
-
Coderbits::Client.new.get username
|
16
|
+
Coderbits::Client.new.get username, options
|
18
17
|
end
|
18
|
+
|
19
|
+
alias_method :get, :new
|
19
20
|
|
20
21
|
# Alias for Coderbits::Glue.new(...)
|
21
|
-
#
|
22
|
-
# @return
|
23
22
|
def glue username, options = {}
|
24
23
|
Coderbits::Glue.new username, options
|
25
24
|
end
|
26
25
|
end
|
27
|
-
end
|
26
|
+
end
|
data/lib/coderbits/client.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
require 'multi_json'
|
3
|
-
|
4
1
|
module Coderbits
|
5
2
|
class Client
|
6
3
|
# valid options
|
@@ -10,25 +7,48 @@ module Coderbits
|
|
10
7
|
attr_reader :connection
|
11
8
|
|
12
9
|
# Coderbits::Client.new
|
13
|
-
#
|
14
|
-
|
15
|
-
|
16
|
-
|
10
|
+
# establish faraday connection
|
11
|
+
def initialize options = {}
|
12
|
+
options[:url] ||= Coderbits::Defaults::BASE_URL
|
13
|
+
options[:headers] ||= Coderbits::Defaults::HEADERS
|
14
|
+
options[:ssl] ||= Coderbits::Defaults::SSL
|
15
|
+
|
16
|
+
@connection = Faraday.new(options)
|
17
17
|
end
|
18
18
|
|
19
19
|
# Coderbits::Client.new.get username: 'artemeff'
|
20
|
+
# gets user data
|
20
21
|
def get username, options = {}
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
response.
|
25
|
-
|
26
|
-
|
22
|
+
begin
|
23
|
+
response = @connection.get "/#{username}.json", safe(options)
|
24
|
+
|
25
|
+
status = response.status
|
26
|
+
error = false
|
27
|
+
rescue Exception => e
|
28
|
+
status = -1
|
29
|
+
error = "Connection error: #{e}"
|
27
30
|
end
|
31
|
+
|
32
|
+
# return string if options has callback
|
33
|
+
return response.body if options[:callback]
|
34
|
+
|
35
|
+
# parse json
|
36
|
+
user_data = MultiJson.load response.body, symbolize_keys: true
|
37
|
+
|
38
|
+
# set error if loaded json is empty
|
39
|
+
error = "User not found" if user_data.empty?
|
40
|
+
|
41
|
+
# set status and error message to returned data
|
42
|
+
user_data[:status] = status
|
43
|
+
user_data[:error] = error
|
44
|
+
|
45
|
+
# hashie
|
46
|
+
Coderbits::Object.new user_data
|
28
47
|
end
|
29
48
|
|
30
49
|
private
|
31
50
|
|
51
|
+
# safety option
|
32
52
|
def safe options
|
33
53
|
options.select { |k, v| OPTIONS.include? k }
|
34
54
|
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
module Coderbits
|
2
|
+
module Defaults
|
3
|
+
BASE_URL = 'https://coderbits.com' unless defined? Coderbits::Defaults::BASE_URL
|
4
|
+
HEADERS = { accept: 'application/json' } unless defined? Coderbits::Defaults::HEADERS
|
5
|
+
SSL = { verify: false } unless defined? Coderbits::Defaults::SSL
|
6
|
+
end
|
7
|
+
end
|
data/lib/coderbits/glue.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
require 'sprite_factory'
|
2
|
-
require 'faraday'
|
3
|
-
|
4
1
|
module Coderbits
|
5
2
|
class Glue
|
6
3
|
# valid options
|
@@ -15,10 +12,11 @@ module Coderbits
|
|
15
12
|
@username = username
|
16
13
|
end
|
17
14
|
|
15
|
+
# launching all rockets
|
18
16
|
def run!
|
19
17
|
imgs = download_images
|
20
18
|
css = merge_images
|
21
|
-
html = generate_html
|
19
|
+
html = generate_html imgs
|
22
20
|
|
23
21
|
{
|
24
22
|
images: imgs,
|
@@ -32,36 +30,47 @@ module Coderbits
|
|
32
30
|
data = Coderbits::Client.new.get @username
|
33
31
|
|
34
32
|
# collect images
|
35
|
-
images = data
|
36
|
-
|
37
|
-
# get connection
|
38
|
-
connection = Coderbits::Client.new.connection
|
33
|
+
images = data.badges.select { |b| b.earned }.map { |b| b.image_link.match(/(.*)\/(.*)/)[2] }.uniq
|
39
34
|
|
40
|
-
# create
|
35
|
+
# create directories
|
41
36
|
Dir.mkdir @options[:save_to] unless Dir.exists? @options[:save_to]
|
42
37
|
Dir.mkdir "#{@options[:save_to]}/badges" unless Dir.exists? "#{@options[:save_to]}/badges"
|
43
38
|
|
39
|
+
# connection for download images
|
40
|
+
connection = Coderbits::Client.new(headers: { accept: 'image/png' }).connection
|
41
|
+
|
44
42
|
# download images
|
45
43
|
images.each do |img|
|
46
44
|
# specify badge size
|
47
45
|
img = change_size img unless @options[:badge_size] == 64
|
48
46
|
|
49
47
|
# download image
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
48
|
+
begin
|
49
|
+
response = connection.get "/images/badges/#{img}"
|
50
|
+
|
51
|
+
# save to disk
|
52
|
+
if response.headers["content-type"] == "image/png"
|
53
|
+
File.open("#{@options[:save_to]}/badges/#{img.downcase}", 'wb') { |f| f.write response.body }
|
54
|
+
end
|
55
|
+
rescue Exception => e
|
56
|
+
# TODO logging
|
55
57
|
end
|
56
58
|
end
|
57
59
|
end
|
58
60
|
|
61
|
+
# merge and generate css by SpriteFactory
|
59
62
|
def merge_images
|
60
63
|
SpriteFactory.run! "#{@options[:save_to]}/badges", @options
|
61
64
|
end
|
62
65
|
|
63
|
-
def generate_html
|
64
|
-
|
66
|
+
def generate_html images
|
67
|
+
html_tags = []
|
68
|
+
|
69
|
+
images.each do |name|
|
70
|
+
html_tags << "<img src='#{@options[:output_image]}' class='#{@options[:selector][1..-1]}#{name.downcase.gsub(/.png/,'')}'>"
|
71
|
+
end
|
72
|
+
|
73
|
+
html_tags.join "\n"
|
65
74
|
end
|
66
75
|
|
67
76
|
def safe options
|
@@ -70,7 +79,7 @@ module Coderbits
|
|
70
79
|
|
71
80
|
dflt = {
|
72
81
|
badge_size: 64, # badges size for download
|
73
|
-
save_to: '
|
82
|
+
save_to: '.', # path for files
|
74
83
|
|
75
84
|
layout: 'horizontal', # horizontal, vertical or packed
|
76
85
|
style: 'css', # css, scss or sass
|
data/lib/coderbits/version.rb
CHANGED
@@ -15,8 +15,16 @@ describe Coderbits::Client do
|
|
15
15
|
@data = Coderbits::Client.new.get 'artemeff'
|
16
16
|
end
|
17
17
|
|
18
|
-
it "should
|
19
|
-
expect(@data).to be_a
|
18
|
+
it "should be a Coderbits::Object instance" do
|
19
|
+
expect(@data).to be_a Coderbits::Object
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should return status eq 200" do
|
23
|
+
@data.status.should be 200
|
24
|
+
end
|
25
|
+
|
26
|
+
it "shouldn't have error" do
|
27
|
+
@data.error.should be false
|
20
28
|
end
|
21
29
|
|
22
30
|
it "should have username" do
|
@@ -31,10 +39,24 @@ describe Coderbits::Client do
|
|
31
39
|
data.should be_an_instance_of String
|
32
40
|
end
|
33
41
|
|
34
|
-
it "should be a
|
42
|
+
it "should be a Coderbits::Object with account option" do
|
35
43
|
data = Coderbits::Client.new.get 'artemeff', account: 'github'
|
36
44
|
|
37
|
-
data.should be_an_instance_of
|
45
|
+
data.should be_an_instance_of Coderbits::Object
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "with nonexistent user" do
|
50
|
+
before do
|
51
|
+
@data = Coderbits::Client.new.get "prettyuserthatdoesntexist#{rand(10)}"
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should have 200 status" do
|
55
|
+
@data.status.should be 200
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should have error" do
|
59
|
+
@data.error.should match "User not found"
|
38
60
|
end
|
39
61
|
end
|
40
62
|
end
|
data/spec/coderbits/glue_spec.rb
CHANGED
@@ -17,33 +17,15 @@ describe Coderbits::Glue do
|
|
17
17
|
FileUtils.rm_rf './temp/'
|
18
18
|
end
|
19
19
|
|
20
|
-
it "should
|
20
|
+
it "should work" do
|
21
21
|
Coderbits.glue('artemeff', save_to: './temp/').run!
|
22
22
|
end
|
23
23
|
|
24
|
-
it "should
|
24
|
+
it "should work with custom badge size" do
|
25
25
|
Coderbits.glue('artemeff', badge_size: 32, save_to: './temp/').run!
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
describe ".download_images" do
|
30
|
-
it "..." do
|
31
|
-
pending "Write tests"
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
describe ".merge_images" do
|
36
|
-
it "..." do
|
37
|
-
pending "Write tests"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe ".generate_html" do
|
42
|
-
it "..." do
|
43
|
-
pending "Write tests"
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
29
|
describe "#safe" do
|
48
30
|
before do
|
49
31
|
@glue = Coderbits::Glue.new 'artemeff'
|
data/spec/coderbits_spec.rb
CHANGED
@@ -2,15 +2,9 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Coderbits do
|
4
4
|
|
5
|
-
describe ".new" do
|
5
|
+
describe ".new and .get" do
|
6
6
|
it "is a Coderbits::Client" do
|
7
|
-
expect(Coderbits.new('artemeff')).to be_a
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
describe ".get" do
|
12
|
-
it "is a Coderbits::Client" do
|
13
|
-
expect(Coderbits.get('artemeff')).to be_a Hash
|
7
|
+
expect(Coderbits.new('artemeff')).to be_a Hash
|
14
8
|
end
|
15
9
|
end
|
16
10
|
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coderbits
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuri Artemev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,20 +38,34 @@ dependencies:
|
|
38
38
|
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0.8'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: faraday_middleware
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.8'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.8'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: multi_json
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - ~>
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1.
|
61
|
+
version: '1.7'
|
48
62
|
type: :runtime
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - ~>
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version: '1.
|
68
|
+
version: '1.7'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: sprite-factory
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +94,20 @@ dependencies:
|
|
80
94
|
- - ~>
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '1.2'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: hashie
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ~>
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '2.0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '2.0'
|
83
111
|
description: Simple wrapper for the Coderbits API
|
84
112
|
email:
|
85
113
|
- i@artemeff.com
|
@@ -93,7 +121,9 @@ files:
|
|
93
121
|
- Rakefile
|
94
122
|
- coderbits.gemspec
|
95
123
|
- lib/coderbits/client.rb
|
124
|
+
- lib/coderbits/defaults.rb
|
96
125
|
- lib/coderbits/glue.rb
|
126
|
+
- lib/coderbits/object.rb
|
97
127
|
- lib/coderbits/version.rb
|
98
128
|
- lib/coderbits.rb
|
99
129
|
- spec/coderbits/client_spec.rb
|