badges 0.0.1 → 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: 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