badges 0.0.1 → 1.0.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: c93936af21bbeade438e46a117aed48ef2a9027a
4
- data.tar.gz: 756a2ddff2b56a85afdb72f48c404ae416f589c6
3
+ metadata.gz: 94ba37e390392c87e71b7e0e7c149fbf5abefcda
4
+ data.tar.gz: 713f593501a9d8413debf985c3a4429ce0fcc8d1
5
5
  SHA512:
6
- metadata.gz: 282c0be03afe7c89cd1ef4262ad63331a9ef10d9b333173606d44c18e0f97397a79968b8f8b1f1c26a7fe3b6ace5a0133fbd5852a582c5fb66410f2e8f2c4776
7
- data.tar.gz: 52d11a131b865972e4491f5a1dd7b12af82eda5a20bf11c840be440afc986304446b880dd3d2af80156a61878e3e591ff723283635a84c826fa61afc9631d283
6
+ metadata.gz: 55447da027202aa56d5650054071ef5650be9e21a6a0a0a5da7e950d6f4b6d2474ed1483defdfa270cee33967ae87be398a264102a11ff882069630dfca6b7fa
7
+ data.tar.gz: c9f49465423566edf0a80df3a4008689283dc32f21acb4e5d1dcd6266f77599cafa2914a9eb939fe1855603dfb733554f222bbc198a248ae39e36cd230b32076
data/README.md CHANGED
@@ -1,6 +1,10 @@
1
- # Badges
1
+ [![Badges Logo](badges.png)](https://github.com/keilmillerjr/badges)
2
2
 
3
- Badges is a Ruby gem that allows you to connect to different API's to retrieve your earned badges and profile information.
3
+ By [Keil Miller Jr](http://keilmiller.com)
4
+
5
+ [![Gem Version](https://badge.fury.io/rb/badges.png)](http://badge.fury.io/rb/badges)
6
+
7
+ **badges** is a Ruby gem that allows you to connect to different API's to retrieve your earned badges and profile information.
4
8
 
5
9
  ## Installation
6
10
 
@@ -19,14 +23,19 @@ Or install it yourself as:
19
23
  ## Requirements
20
24
 
21
25
  * Ruby 1.9.3 or higher
26
+ * activesupport
22
27
  * httparty
28
+ * markaby
23
29
 
24
- ## Usage
30
+ ## Class usage
25
31
 
26
32
  CodeSchool example:
27
33
 
28
34
  codeschool = Badges::CodeSchool.new('username')
29
35
 
36
+ codeschool.response
37
+ => nil # if false username
38
+
30
39
  codeschool.username
31
40
  => "username"
32
41
 
@@ -36,12 +45,12 @@ CodeSchool example:
36
45
  codeschool.avatar_url
37
46
  => "http://example.com/avatar.jpg"
38
47
 
48
+ codeschool.badges
49
+ => [{"name"=>"Badge", "badge"=>"http://example.com/badge.png", "course_url"=>"http://example.com"}]
50
+
39
51
  codeschool.courses_completed
40
52
  => [{"title"=>"Course", "url"=>"http://example.com", "badge"=>"http://example.com/badge.png"}]
41
53
 
42
- codeschool.courses_completed[0]['title']
43
- => "Course"
44
-
45
54
  codeschool.courses_in_progress
46
55
  => [{"title"=>"Course", "url"=>"http://example.com", "badge"=>"http://example.com/badge.png"}]
47
56
 
@@ -55,29 +64,87 @@ Team Treehouse example:
55
64
 
56
65
  treehouse = Badges::Treehouse.new('profile_name')
57
66
 
67
+ treehouse.response
68
+ => nil # if false username
69
+
58
70
  treehouse.profile_name
59
71
  => "profile_name"
60
72
 
61
73
  treehouse.profile_url
62
74
  => "http://teamtreehouse.com/profile_name"
63
75
 
76
+ treehouse.avatar_url
77
+ => "http://example.com/avatar.jpg"
78
+
64
79
  treehouse.badges
65
80
  => [{"id"=>49, "name"=>"Badge", "url"=>"http://example.com", "icon_url"=>"http://example.com/badge.png", "earned_date"=>"2012-09-11T18:41:13Z", "courses"=>[]}]
66
-
67
- treehouse.badges[0]['name']
68
- => "Badge"
69
-
70
- treehouse.gravatar_url
71
- => "http://example.com/avatar.jpg"
72
81
 
73
- treehouse.name
82
+ treehouse.full_name
74
83
  => "First Last"
75
84
 
76
85
  treehouse.points
77
86
  => {"total"=>1740, "html"=>447, "css"=>483, "javascript"=>0, "ruby"=>0, "ios"=>0, "business"=>0, "android"=>0, "php"=>0, "wordpress"=>0, "design"=>180, "dev tools"=>0}
78
87
 
88
+ treehouse.points_android
89
+ => 1
90
+
91
+ treehouse.points_business
92
+ => 1
93
+
94
+ treehouse.points_css
95
+ => 1
96
+
97
+ treehouse.points_design
98
+ => 1
99
+
100
+ treehouse.points_dev_tools
101
+ => 1
102
+
103
+ treehouse.points_html
104
+ => 1
105
+
106
+ treehouse.points_ios
107
+ => 1
108
+
109
+ treehouse.points_javascript
110
+ => 1
111
+
112
+ treehouse.points_php
113
+ => 1
114
+
115
+ treehouse.points_ruby
116
+ => 1
117
+
79
118
  treehouse.points_total
80
- => 1740
119
+ => 10
120
+
121
+ treehouse.points_wordpress
122
+
123
+ ## Rails helpers
124
+
125
+ Create new badge object in your controller.
126
+
127
+ class BadgesController < ApplicationController
128
+ def index
129
+ @codeschool = Badges::CodeSchool.new('keilmillerjr')
130
+ @treehouse = Badges::Treehouse.new('keilmillerjr')
131
+ end
132
+ end
133
+
134
+ Inside your view, use the class methods directly, or the list_badges helper to create a list of badges. Params left out are assumed to be false.
135
+
136
+ <h1>Badges#index</h1>
137
+ <p>Find me in app/views/badges/index.html.erb</p>
138
+
139
+ <%= image_tag @codeschool.avatar_url %>
140
+ <%= list_badges @codeschool, codeschool_badges: {image: true, link: true, text: true}, id: 'test', class: 'test' %>
141
+ <%= list_badges @codeschool, codeschool_courses_completed: {image: true, link: true, text: true}, id: 'test', class: 'test' %>
142
+ <%= list_badges @codeschool, codeschool_courses_in_progress: {image: true, link: true, text: true}, id: 'test', class: 'test' %>
143
+
144
+ <%= @treehouse.avatar_url %>
145
+ <%= list_badges @treehouse, treehouse_badges: {image: true, link: true, text: true}, id: 'test', class: 'test' %>
146
+
147
+ Tip: Use css/sass afterwards to style this list appropriately.
81
148
 
82
149
  ## Contributing
83
150
 
@@ -20,8 +20,10 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.required_ruby_version = '>= 1.9.3'
22
22
 
23
+ spec.add_dependency 'activesupport'
24
+ spec.add_dependency 'httparty'
25
+ spec.add_dependency 'markaby'
26
+
23
27
  spec.add_development_dependency 'bundler', '~> 1.3'
24
28
  spec.add_development_dependency 'rake'
25
-
26
- spec.add_development_dependency 'httparty'
27
29
  end
Binary file
@@ -1,9 +1,17 @@
1
1
  require 'badges/version'
2
+ require 'active_support/core_ext/object/blank'
2
3
  require 'httparty'
3
4
 
4
5
  module Badges
5
6
  class Badge
6
7
  include HTTParty
8
+ attr_reader :user_id, :profile_url, :response
9
+
10
+ def initialize(user_id, base_url)
11
+ @user_id = user_id
12
+ @profile_url = base_url + user_id
13
+ @response = get(profile_url + '.json')
14
+ end
7
15
 
8
16
  private
9
17
 
@@ -14,115 +22,132 @@ module Badges
14
22
  nil
15
23
  end
16
24
  end
25
+
26
+ def obtain_key(hash, key)
27
+ if hash.has_key?(key)
28
+ hash[key]
29
+ end
30
+ end
17
31
  end
18
32
 
19
33
  class CodeSchool < Badge
20
- attr_reader :profile_url, :username
21
-
22
- def initialize(username)
23
- @username = username
24
- @profile_url = 'http://www.codeschool.com/users/' + @username
34
+ def initialize(user_id)
35
+ super(user_id, 'http://www.codeschool.com/users/')
25
36
 
26
- @response = get(@profile_url + '.json')
37
+ @response = nil if obtain_key(@response, 'error')
27
38
  end
28
39
 
29
40
  def avatar_url
30
- begin
31
- @response['user']['avatar']
32
- rescue
33
- nil
34
- end
41
+ user = obtain_key @response, 'user' if @response
42
+ obtain_key user, 'avatar' if !user.blank?
35
43
  end
36
44
 
37
45
  def badges
38
- begin
39
- @response['badges']
40
- rescue
41
- nil
42
- end
46
+ obtain_key @response, 'badges' if @response
43
47
  end
44
48
 
45
49
  def courses_completed
46
- begin
47
- @response['courses']['completed']
48
- rescue
49
- nil
50
- end
50
+ courses = obtain_key @response, 'courses' if @response
51
+ obtain_key courses, 'completed' if !courses.blank?
51
52
  end
52
53
 
53
54
  def courses_in_progress
54
- begin
55
- @response['courses']['in_progress']
56
- rescue
57
- nil
58
- end
55
+ courses = obtain_key @response, 'courses' if @response
56
+ obtain_key courses, 'in_progress' if !courses.blank?
59
57
  end
60
58
 
61
59
  def member_since
62
- begin
63
- @response['user']['member_since']
64
- rescue
65
- nil
66
- end
60
+ user = obtain_key @response, 'user' if @response
61
+ obtain_key user, 'member_since' if !user.blank?
67
62
  end
68
63
 
69
64
  def total_score
70
- begin
71
- @response['user']['total_score']
72
- rescue
73
- nil
74
- end
65
+ user = obtain_key @response, 'user' if @response
66
+ obtain_key user, 'total_score' if !user.blank?
75
67
  end
76
68
  end
77
69
 
78
70
  class Treehouse < Badge
79
- attr_reader :profile_name, :profile_url
71
+ def initialize(user_id)
72
+ super(user_id, 'http://teamtreehouse.com/')
73
+ end
80
74
 
81
- def initialize(profile_name)
82
- @profile_name = profile_name
83
- @profile_url = 'http://teamtreehouse.com/' + @profile_name
84
-
85
- @response = get(@profile_url + '.json')
75
+ def avatar_url
76
+ obtain_key @response, 'gravatar_url' if @response
86
77
  end
87
78
 
88
79
  def badges
89
- begin
90
- @response['badges']
91
- rescue
92
- nil
93
- end
80
+ obtain_key @response, 'badges' if @response
94
81
  end
95
82
 
96
- def gravatar_url
97
- begin
98
- @response['gravatar_url']
99
- rescue
100
- nil
101
- end
83
+ def full_name
84
+ obtain_key @response, 'name' if @response
102
85
  end
103
86
 
104
- def name
105
- begin
106
- @response['name']
107
- rescue
108
- nil
109
- end
87
+ def points
88
+ obtain_key @response, 'points' if @response
110
89
  end
111
90
 
112
- def points
113
- begin
114
- @response['points']
115
- rescue
116
- nil
117
- end
91
+ def points_android
92
+ points = obtain_key @response, 'points' if @response
93
+ obtain_key points, 'android' if !points.blank?
94
+ end
95
+
96
+ def points_business
97
+ points = obtain_key @response, 'points' if @response
98
+ obtain_key points, 'business' if !points.blank?
99
+ end
100
+
101
+ def points_css
102
+ points = obtain_key @response, 'points' if @response
103
+ obtain_key points, 'css' if !points.blank?
104
+ end
105
+
106
+ def points_design
107
+ points = obtain_key @response, 'points' if @response
108
+ obtain_key points, 'design' if !points.blank?
109
+ end
110
+
111
+ def points_dev_tools
112
+ points = obtain_key @response, 'points' if @response
113
+ obtain_key points, 'dev tools' if !points.blank?
114
+ end
115
+
116
+ def points_html
117
+ points = obtain_key @response, 'points' if @response
118
+ obtain_key points, 'html' if !points.blank?
119
+ end
120
+
121
+ def points_ios
122
+ points = obtain_key @response, 'points' if @response
123
+ obtain_key points, 'ios' if !points.blank?
124
+ end
125
+
126
+ def points_javascript
127
+ points = obtain_key @response, 'points' if @response
128
+ obtain_key points, 'javascript' if !points.blank?
129
+ end
130
+
131
+ def points_php
132
+ points = obtain_key @response, 'points' if @response
133
+ obtain_key points, 'php' if !points.blank?
134
+ end
135
+
136
+ def points_ruby
137
+ points = obtain_key @response, 'points' if @response
138
+ obtain_key points, 'ruby' if !points.blank?
118
139
  end
119
140
 
120
141
  def points_total
121
- begin
122
- @response['points']['total']
123
- rescue
124
- nil
125
- end
142
+ points = obtain_key @response, 'points' if @response
143
+ obtain_key points, 'total' if !points.blank?
144
+ end
145
+
146
+ def points_wordpress
147
+ points = obtain_key @response, 'points' if @response
148
+ obtain_key points, 'wordpress' if !points.blank?
126
149
  end
127
150
  end
128
151
  end
152
+
153
+ require 'badges/railtie' if defined?(Rails)
@@ -0,0 +1,9 @@
1
+ require 'badges/view_helpers'
2
+
3
+ module Badges
4
+ class Railtie < Rails::Railtie
5
+ initializer 'badges.view_helpers' do
6
+ ActionView::Base.send :include, ViewHelpers
7
+ end
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module Badges
2
- VERSION = '0.0.1'
2
+ VERSION = '1.0.0'
3
3
  end
@@ -0,0 +1,105 @@
1
+ require 'markaby'
2
+
3
+ module Badges
4
+ module ViewHelpers
5
+ def list_badges(obj, options={})
6
+ return if obj.response.blank?
7
+
8
+ # Code School
9
+
10
+ # badges
11
+ if !options[:codeschool_badges].blank? && !obj.badges.blank?
12
+ html = Markaby::Builder.new
13
+
14
+ html.send :ul, ({id: options[:id]} if options[:id]), ({class: options[:class]} if options[:class]) do
15
+ obj.badges.each do |course|
16
+ li do
17
+ if options[:codeschool_badges][:link]
18
+ a href: course['course_url'] do
19
+ img src: course['badge'] if options[:codeschool_badges][:image]
20
+ span course['name'] if options[:codeschool_badges][:text]
21
+ end
22
+ else
23
+ img src: course['badge'] if options[:codeschool_badges][:image]
24
+ span course['name'] if options[:codeschool_badges][:text]
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ return html.to_s.html_safe
31
+ end
32
+
33
+ # courses completed
34
+ if !options[:codeschool_courses_completed].blank? && !obj.courses_completed.blank?
35
+ html = Markaby::Builder.new
36
+
37
+ html.send :ul, ({id: options[:id]} if options[:id]), ({class: options[:class]} if options[:class]) do
38
+ obj.courses_completed.each do |course|
39
+ li do
40
+ if options[:codeschool_courses_completed][:link]
41
+ a href: course['url'] do
42
+ img src: course['badge'] if options[:codeschool_courses_completed][:image]
43
+ span course['title'] if options[:codeschool_courses_completed][:text]
44
+ end
45
+ else
46
+ img src: course['badge'] if options[:codeschool_courses_completed][:image]
47
+ span course['title'] if options[:codeschool_courses_completed][:text]
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ return html.to_s.html_safe
54
+ end
55
+
56
+ # courses in progress
57
+ if !options[:codeschool_courses_in_progress].blank? && !obj.courses_in_progress.blank?
58
+ html = Markaby::Builder.new
59
+
60
+ html.send :ul, ({id: options[:id]} if options[:id]), ({class: options[:class]} if options[:class]) do
61
+ obj.courses_in_progress.each do |course|
62
+ li do
63
+ if options[:codeschool_courses_in_progress][:link]
64
+ a href: course['url'] do
65
+ img src: course['badge'] if options[:codeschool_courses_in_progress][:image]
66
+ span course['title'] if options[:codeschool_courses_in_progress][:text]
67
+ end
68
+ else
69
+ img src: course['badge'] if options[:codeschool_courses_in_progress][:image]
70
+ span course['title'] if options[:codeschool_courses_in_progress][:text]
71
+ end
72
+ end
73
+ end
74
+ end
75
+
76
+ return html.to_s.html_safe
77
+ end
78
+
79
+ # Treehouse
80
+
81
+ # badges
82
+ if !options[:treehouse_badges].blank? && !obj.badges.blank?
83
+ html = Markaby::Builder.new
84
+
85
+ html.send :ul, ({id: options[:id]} if options[:id]), ({class: options[:class]} if options[:class]) do
86
+ obj.badges.each do |course|
87
+ li do
88
+ if options[:treehouse_badges][:link]
89
+ a href: course['url'] do
90
+ img src: course['icon_url'] if options[:treehouse_badges][:image]
91
+ span course['name'] if options[:treehouse_badges][:text]
92
+ end
93
+ else
94
+ img src: course['icon_url'] if options[:treehouse_badges][:image]
95
+ span course['name'] if options[:treehouse_badges][:text]
96
+ end
97
+ end
98
+ end
99
+ end
100
+
101
+ return html.to_s.html_safe
102
+ end
103
+ end
104
+ end
105
+ end
metadata CHANGED
@@ -1,37 +1,37 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: badges
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keil Miller Jr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-06 00:00:00.000000000 Z
11
+ date: 2014-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
- version: '1.3'
20
- type: :development
19
+ version: '0'
20
+ type: :runtime
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.3'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: httparty
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
- type: :development
34
+ type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
@@ -39,7 +39,35 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: httparty
42
+ name: markaby
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.3'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
73
  - - '>='
@@ -66,8 +94,11 @@ files:
66
94
  - README.md
67
95
  - Rakefile
68
96
  - badges.gemspec
97
+ - badges.png
69
98
  - lib/badges.rb
99
+ - lib/badges/railtie.rb
70
100
  - lib/badges/version.rb
101
+ - lib/badges/view_helpers.rb
71
102
  homepage: https://github.com/keilmillerjr/badges
72
103
  licenses:
73
104
  - MIT