boston-ruby 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/Gemfile +5 -0
- data/NOTES +14 -0
- data/README.md +91 -0
- data/Rakefile +6 -0
- data/bin/boston-ruby +33 -0
- data/boston-ruby.gemspec +28 -0
- data/lib/boston-ruby.rb +32 -0
- data/lib/boston-ruby/blogs.rb +40 -0
- data/lib/boston-ruby/github.rb +42 -0
- data/lib/boston-ruby/mailing_list.rb +55 -0
- data/lib/boston-ruby/twitter.rb +35 -0
- metadata +90 -0
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Gemfile.lock
|
data/Gemfile
ADDED
data/NOTES
ADDED
data/README.md
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
# boston-ruby
|
2
|
+
|
3
|
+
This tool lets you look up recent activity by BostonRB members from the command
|
4
|
+
line.
|
5
|
+
|
6
|
+
Usage: boston-ruby [command]
|
7
|
+
|
8
|
+
Commands:
|
9
|
+
m Show recent BostonRB mailing list posts
|
10
|
+
t Show recent tweets by BostonRB members
|
11
|
+
g Show recent github activity by BostonRB members
|
12
|
+
|
13
|
+
|
14
|
+
## Sample output
|
15
|
+
|
16
|
+
|
17
|
+
BostonRB mailing list activity:
|
18
|
+
|
19
|
+
$ boston-ruby m
|
20
|
+
|
21
|
+
Re: [boston.rb] tethering/hotspot/mifi suggestions
|
22
|
+
--------------------------------------------------
|
23
|
+
http://groups.google.com/group/boston-rubygroup/browse_thread/thread/59bb3867e9924ac6
|
24
|
+
|
25
|
+
John Norman : Just out of curiosity: Did putting this:
|
26
|
+
07:49PM 03/14 : ServerAliveInterval 60 (or a smaller interval.) in your
|
27
|
+
: .ssh/config help at all? (E.g.:
|
28
|
+
: [http://www.kehlet.cx/articles/129.html])
|
29
|
+
|
30
|
+
Daniel Choi : No I haven't. I didn't even know about that option. Thanks,
|
31
|
+
07:50PM 03/14 : I'll try it!
|
32
|
+
|
33
|
+
Dan Pickett : If you have an android device, I highly recommend PDANet -
|
34
|
+
07:52PM 03/14 : it has made this surburbanite's ride on the commuter rail
|
35
|
+
: very efficient!
|
36
|
+
[...]
|
37
|
+
|
38
|
+
|
39
|
+
BostonRB member tweets:
|
40
|
+
|
41
|
+
$ boston-ruby t
|
42
|
+
|
43
|
+
jayroh : Another beautiful site from the friendly people at : 04:09PM 03/20
|
44
|
+
: @the47th - http://t.co/HA1qqIQx :
|
45
|
+
kbedell : The latest Browser market shares: http://t.co/Uu5cTGyQ : 04:57PM 03/20
|
46
|
+
kbedell : Found an annoying javascript bug that only occurs in : 04:58PM 03/20
|
47
|
+
: Firefox 3.6. Crap. Who's still supporting that version? :
|
48
|
+
im_a_muppet : You know you have been pairing a little too much when tmux : 05:05PM 03/20
|
49
|
+
: makes it into a pun! #ALittleTooMux :
|
50
|
+
wpeterson : From my amazing coworkers: The Devops Dark Knight - : 05:08PM 03/20
|
51
|
+
: http://t.co/awWxeEbi #in :
|
52
|
+
dwhsix : @WorkBarBoston so you're "torqued", but are you still : 05:09PM 03/20
|
53
|
+
: hosting @sqoot 's event? :
|
54
|
+
bcardarella : @jayroh btw we haven't gotten a drink in a while. We : 06:00PM 03/20
|
55
|
+
: should fix that :
|
56
|
+
jayroh : @bcardarella no shit dude. Been a while! : 06:05PM 03/20
|
57
|
+
wpeterson : @teflonted can't do it in Gemfile. Bundle config. : 06:55PM 03/20
|
58
|
+
dwhsix : Ha, never looked at headers in a Facebook email: : 07:13PM 03/20
|
59
|
+
: X-Facebook: from zuckmail ([MTI3LjAuMC4x]) by :
|
60
|
+
: http://t.co/xFrkqvTy with HTTP (ZuckMail); :
|
61
|
+
doctorzaius : Lots of new movies that I want to see, but someone might : 07:23PM 03/20
|
62
|
+
: call me a "sheeple" so I better not. :
|
63
|
+
[...]
|
64
|
+
|
65
|
+
BostonRB member github activity:
|
66
|
+
|
67
|
+
$ boston-ruby g
|
68
|
+
|
69
|
+
cldwalker : cldwalker pushed to master at cldwalker/bacon : 05:49PM 03/20
|
70
|
+
berkmancenter : berkmancenter created repository brkmn : 05:53PM 03/20
|
71
|
+
sbisker : sbisker started watching Kicksend/mailcheck : 05:55PM 03/20
|
72
|
+
techiferous : techiferous pushed to master at techiferous/tabulous : 05:58PM 03/20
|
73
|
+
techiferous : techiferous created tag v1.3.0 at techiferous/tabulous : 05:58PM 03/20
|
74
|
+
techiferous : techiferous commented on pull request 14 on : 06:02PM 03/20
|
75
|
+
: techiferous/tabulous :
|
76
|
+
techiferous : techiferous commented on issue 13 on techiferous/tabulous : 06:04PM 03/20
|
77
|
+
techiferous : techiferous closed issue 13 on techiferous/tabulous : 06:04PM 03/20
|
78
|
+
robbfitzsimmons : robbfitzsimmons pushed to master at : 06:08PM 03/20
|
79
|
+
: robbfitzsimmons/sample_app :
|
80
|
+
cldwalker : cldwalker created branch fix_change_tests at : 06:10PM 03/20
|
81
|
+
: cldwalker/bacon :
|
82
|
+
cldwalker : cldwalker pushed to fix_change_tests at cldwalker/bacon : 06:19PM 03/20
|
83
|
+
cldwalker : cldwalker opened pull request 11 on chneukirchen/bacon : 06:25PM 03/20
|
84
|
+
cldwalker : cldwalker commented on pull request 10 on : 06:26PM 03/20
|
85
|
+
: chneukirchen/bacon :
|
86
|
+
croaky : croaky opened issue 9 on copycopter/style-guide : 06:37PM 03/20
|
87
|
+
jferris : jferris created repository jferris.github.com : 06:38PM 03/20
|
88
|
+
jferris : jferris created branch master at : 06:39PM 03/20
|
89
|
+
: jferris/jferris.github.com :
|
90
|
+
jferris : jferris pushed to master at jferris/jferris.github.com : 06:44PM 03/20
|
91
|
+
[...]
|
data/Rakefile
ADDED
data/bin/boston-ruby
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'boston-ruby'
|
3
|
+
|
4
|
+
command = ARGV.shift
|
5
|
+
|
6
|
+
case command
|
7
|
+
when /^m/
|
8
|
+
require 'boston-ruby/mailing_list'
|
9
|
+
when /^t/
|
10
|
+
require 'boston-ruby/twitter'
|
11
|
+
when /^b/
|
12
|
+
require 'boston-ruby/blogs'
|
13
|
+
when /^g/
|
14
|
+
require 'boston-ruby/github'
|
15
|
+
else
|
16
|
+
puts <<HELP
|
17
|
+
boston-ruby #{BostonRuby::VERSION}
|
18
|
+
|
19
|
+
Usage: boston-ruby [command]
|
20
|
+
|
21
|
+
Commands:
|
22
|
+
m Show recent BostonRB mailing list posts
|
23
|
+
t Show recent tweets by BostonRB members
|
24
|
+
g Show recent github activity by BostonRB members
|
25
|
+
|
26
|
+
Project homepage: http://github.com/danchoi/boston-ruby
|
27
|
+
Author: Daniel Choi <dhchoi@gmail.com>
|
28
|
+
|
29
|
+
|
30
|
+
HELP
|
31
|
+
exit 1
|
32
|
+
end
|
33
|
+
|
data/boston-ruby.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
|
4
|
+
require 'boston-ruby'
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "boston-ruby"
|
8
|
+
s.version = BostonRuby::VERSION
|
9
|
+
s.platform = Gem::Platform::RUBY
|
10
|
+
s.required_ruby_version = '>= 1.9.0'
|
11
|
+
|
12
|
+
s.authors = ["Daniel Choi"]
|
13
|
+
s.email = ["dhchoi@gmail.com"]
|
14
|
+
s.homepage = "http://github.com/danchoi/boston-ruby"
|
15
|
+
summary = %q{Track BostonRB group and member activity}
|
16
|
+
s.summary = summary
|
17
|
+
s.description = summary
|
18
|
+
|
19
|
+
s.rubyforge_project = "boston-ruby"
|
20
|
+
|
21
|
+
s.files = `git ls-files`.split("\n")
|
22
|
+
s.test_files = []
|
23
|
+
s.executables = ['boston-ruby']
|
24
|
+
s.require_paths = ["lib"]
|
25
|
+
|
26
|
+
s.add_dependency 'nokogiri'
|
27
|
+
s.add_dependency 'htmlentities'
|
28
|
+
end
|
data/lib/boston-ruby.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'htmlentities'
|
2
|
+
|
3
|
+
module BostonRuby
|
4
|
+
|
5
|
+
VERSION = '0.0.1'
|
6
|
+
|
7
|
+
MAX_WIDTH = 90
|
8
|
+
CODER = HTMLEntities.new
|
9
|
+
|
10
|
+
def self.format_item(longest_name_length, author, text, time, time_on_left=false)
|
11
|
+
timestamp = time.strftime("%I:%M%p %m/%d")
|
12
|
+
body_width = MAX_WIDTH - timestamp.length - longest_name_length - 4
|
13
|
+
wrapped_body_lines = CODER.decode(text).gsub(/\n/, " ").gsub(/.{1,#{body_width}}(?:\s|\Z)/){$&+"\n"}.split(/\n/)
|
14
|
+
|
15
|
+
out = []
|
16
|
+
if time_on_left
|
17
|
+
longest_name_length = [longest_name_length, timestamp.length].max
|
18
|
+
out << "%#{longest_name_length}s : %-#{body_width + 1}s" % [author, wrapped_body_lines.shift]
|
19
|
+
out << "%#{longest_name_length}s : %-#{body_width + 1}s" % [timestamp, wrapped_body_lines.shift]
|
20
|
+
wrapped_body_lines.each do |line|
|
21
|
+
out << "%#{longest_name_length}s : %-#{body_width + 1}s" % [" ", line]
|
22
|
+
end
|
23
|
+
else
|
24
|
+
out << "%#{longest_name_length}s : %-#{body_width + 1}s : %s" % [author, wrapped_body_lines.shift, timestamp]
|
25
|
+
wrapped_body_lines.each do |line|
|
26
|
+
out << "%#{longest_name_length}s : %-#{body_width + 1}s :" % [" ", line]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
out.join("\n")
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
require 'json'
|
3
|
+
require 'date'
|
4
|
+
require 'boston-ruby'
|
5
|
+
require 'yaml'
|
6
|
+
|
7
|
+
posts = JSON.parse(open("http://ruby.bostonstuff.org/blog_posts").read)
|
8
|
+
|
9
|
+
puts "(Most recent post is last.)"
|
10
|
+
puts
|
11
|
+
longest_name_length = posts.reduce(0) {|max, post| [max, post['blog'].length].max}
|
12
|
+
|
13
|
+
posts.map {|post| post.merge(parsed_time: DateTime.parse(post['date']))}.
|
14
|
+
sort_by {|p| p[:parsed_time]}.each do |post|
|
15
|
+
text = [post['title'], post['summary'], post['href']].join("\n\n")
|
16
|
+
time = post[:parsed_time]
|
17
|
+
|
18
|
+
puts post['blog']
|
19
|
+
puts post['date_string']
|
20
|
+
puts post['title']
|
21
|
+
puts post["href"]
|
22
|
+
puts '-' * 3
|
23
|
+
end
|
24
|
+
|
25
|
+
__END__
|
26
|
+
|
27
|
+
Each blog:
|
28
|
+
|
29
|
+
- blog: ActBlueTechBlog
|
30
|
+
href: http://blog.actbluetech.com/2011/07/come-work-with-us.html
|
31
|
+
title: Come Work With Us
|
32
|
+
author: Bill Kirtley
|
33
|
+
date: '2011-07-29 15:22:05 -0400'
|
34
|
+
summary: ActBlue is the leading source of online funds for the Democratic Party
|
35
|
+
and an innovator in the field of grassroots politics. We build tools that are
|
36
|
+
used by hundreds of thousands of people to change the country everyday. We're
|
37
|
+
an established player (eight years strong!) gearing up to make a huge impact on
|
38
|
+
the 2012 election season....and we need you...
|
39
|
+
feed_url: http://blog.actbluetech.com/atom.xml
|
40
|
+
date_string: Jul 29 03:22 PM
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
require 'json'
|
3
|
+
require 'date'
|
4
|
+
require 'boston-ruby'
|
5
|
+
require 'yaml'
|
6
|
+
|
7
|
+
updates = JSON.parse(open("http://ruby.bostonstuff.org/updates").read)
|
8
|
+
|
9
|
+
puts "(Most recent update is last.)"
|
10
|
+
puts
|
11
|
+
|
12
|
+
longest_name_length = updates.reduce(0) {|max, x| [max, x['author'].length].max}
|
13
|
+
|
14
|
+
updates.reverse.each do |update|
|
15
|
+
author = update['author']
|
16
|
+
#text = [update['title'], update['content']].join("\n\n")
|
17
|
+
text = update['title']
|
18
|
+
time = DateTime.parse update['date']
|
19
|
+
puts BostonRuby.format_item(longest_name_length, author, text, time)
|
20
|
+
end
|
21
|
+
|
22
|
+
__END__
|
23
|
+
|
24
|
+
- update_id: tag:github.com,2008:PushEvent/1532252526
|
25
|
+
author: trevorrjohn
|
26
|
+
date: '2012-03-20 16:37:45 -0400'
|
27
|
+
title: trevorrjohn pushed to master at trevorrjohn/vim-config
|
28
|
+
content: ! " <span class=\"mini-icon push\"></span>\n \n <div class=\"title\">\n
|
29
|
+
\ <a href=\"https://github.com/trevorrjohn\">trevorrjohn</a> <span>pushed</span>
|
30
|
+
to master at <a href=\"https://github.com/trevorrjohn/vim-config\">trevorrjohn/vim-config</a>\n
|
31
|
+
\ <time class=\"js-relative-date\" datetime=\"2012-03-20T20:37:45Z\" title=\"2012-03-20
|
32
|
+
20:37:45\"></time>\n </div>\n <div class=\"details\">\n \n \n
|
33
|
+
\ <div class=\"commits\">\n <ul>\n <li>\n <a
|
34
|
+
href=\"https://github.com/trevorrjohn\" class=\"committer\">trevorrjohn</a> committed
|
35
|
+
<a href=\"https://github.com/trevorrjohn/vim-config/commit/bac294aef9ef746ca8110656962e6c10955d2e8e\">bac294a</a>\n
|
36
|
+
\ \n <div class=\"message\">\n <blockquote>updated
|
37
|
+
command-t install instructions</blockquote>\n </div>\n </li>\n
|
38
|
+
\ </ul>\n </div>\n </div>\n"
|
39
|
+
media: https://secure.gravatar.com/avatar/78a67425fcb9730d29ab6a59710fe35e?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png
|
40
|
+
date_string: Mar 20 04:37 PM
|
41
|
+
|
42
|
+
|
@@ -0,0 +1,55 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'nokogiri'
|
3
|
+
require 'date'
|
4
|
+
require 'boston-ruby'
|
5
|
+
|
6
|
+
xml = `curl -A "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3" -s http://groups.google.com/group/boston-rubygroup/feed/atom_v1_0_msgs.xml?num=50`
|
7
|
+
doc = Nokogiri::XML.parse xml
|
8
|
+
|
9
|
+
threads = Hash.new
|
10
|
+
|
11
|
+
doc.search('entry').reverse.each {|entry|
|
12
|
+
title = entry.at('title').inner_text
|
13
|
+
thread_link = entry.at('link')[:href].sub(/\/[^\/]*$/, '')
|
14
|
+
data = {
|
15
|
+
author: entry.at('author/name/text()').to_s,
|
16
|
+
updated: DateTime.parse(entry.at('updated/text()').to_s),
|
17
|
+
link_id: entry.at('link')[:href][/\/([^\/]*)\?/, 1],
|
18
|
+
summary: entry.at('summary').inner_text.gsub("<br>", " ").gsub(/\s{2,}/, ' ').strip,
|
19
|
+
}
|
20
|
+
thread_uid = thread_link[/[^\/]+$/, 0]
|
21
|
+
threads[thread_uid] ||= ({title: nil, posts: []})
|
22
|
+
threads[thread_uid][:title] ||= title
|
23
|
+
threads[thread_uid][:link] ||= thread_link
|
24
|
+
threads[thread_uid][:posts] << data
|
25
|
+
}
|
26
|
+
|
27
|
+
puts "(Most recently updated thread is last.)"
|
28
|
+
puts
|
29
|
+
threads.each do |uid, thread|
|
30
|
+
puts thread[:title]
|
31
|
+
puts '-' * thread[:title].size
|
32
|
+
puts thread[:link]
|
33
|
+
puts
|
34
|
+
|
35
|
+
longest_name_length = thread[:posts].reduce(0) {|max, post| [max, post[:author].length].max}
|
36
|
+
|
37
|
+
thread[:posts].each do |post|
|
38
|
+
|
39
|
+
# turn links into markdown-esque text
|
40
|
+
html = Nokogiri::HTML(post[:summary])
|
41
|
+
html.search('a').each do |a|
|
42
|
+
a.swap("[#{a[:href]}]")
|
43
|
+
end
|
44
|
+
coder = HTMLEntities.new
|
45
|
+
text = coder.decode html.inner_text
|
46
|
+
time = post[:updated]
|
47
|
+
author = post[:author]
|
48
|
+
|
49
|
+
puts BostonRuby.format_item(longest_name_length, author, text, time, true)
|
50
|
+
puts
|
51
|
+
|
52
|
+
end
|
53
|
+
puts
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
require 'json'
|
3
|
+
require 'date'
|
4
|
+
require 'boston-ruby'
|
5
|
+
|
6
|
+
tweets = JSON.parse(open("http://ruby.bostonstuff.org/tweets?raw=true").read)
|
7
|
+
|
8
|
+
longest_name_length = tweets.reduce(0) {|max, post| [max, post['user_screen_name'].length].max}
|
9
|
+
|
10
|
+
puts "(Most recent tweet is last.)"
|
11
|
+
puts
|
12
|
+
|
13
|
+
tweets.map {|post| post.merge(parsed_time: DateTime.parse(post['created_at']))}.
|
14
|
+
sort_by {|p| p[:parsed_time]}.each do |post|
|
15
|
+
author = post['user_screen_name']
|
16
|
+
text = post['text']
|
17
|
+
time = post[:parsed_time]
|
18
|
+
puts BostonRuby.format_item(longest_name_length, author, text, time)
|
19
|
+
end
|
20
|
+
|
21
|
+
__END__
|
22
|
+
|
23
|
+
Each tweet:
|
24
|
+
|
25
|
+
|
26
|
+
---
|
27
|
+
- id: 182473702477283329
|
28
|
+
created_at: '2012-03-21 10:28:15 -0400'
|
29
|
+
user_screen_name: patricksroberts
|
30
|
+
user_profile_image_url: http://a0.twimg.com/profile_images/1807338004/small_avatar_normal.jpg
|
31
|
+
user_description: Software Developer @ Iora Health, Co-organizer of BostonRB
|
32
|
+
user_location: Cambridge, MA
|
33
|
+
user_followers_count: 145
|
34
|
+
text: Converting JS to coffee. SO GOOD.
|
35
|
+
retweet_count: 0
|
metadata
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: boston-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Daniel Choi
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-03-21 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: nokogiri
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: htmlentities
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
description: Track BostonRB group and member activity
|
47
|
+
email:
|
48
|
+
- dhchoi@gmail.com
|
49
|
+
executables:
|
50
|
+
- boston-ruby
|
51
|
+
extensions: []
|
52
|
+
extra_rdoc_files: []
|
53
|
+
files:
|
54
|
+
- .gitignore
|
55
|
+
- Gemfile
|
56
|
+
- NOTES
|
57
|
+
- README.md
|
58
|
+
- Rakefile
|
59
|
+
- bin/boston-ruby
|
60
|
+
- boston-ruby.gemspec
|
61
|
+
- lib/boston-ruby.rb
|
62
|
+
- lib/boston-ruby/blogs.rb
|
63
|
+
- lib/boston-ruby/github.rb
|
64
|
+
- lib/boston-ruby/mailing_list.rb
|
65
|
+
- lib/boston-ruby/twitter.rb
|
66
|
+
homepage: http://github.com/danchoi/boston-ruby
|
67
|
+
licenses: []
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options: []
|
70
|
+
require_paths:
|
71
|
+
- lib
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.9.0
|
78
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
+
none: false
|
80
|
+
requirements:
|
81
|
+
- - ! '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
requirements: []
|
85
|
+
rubyforge_project: boston-ruby
|
86
|
+
rubygems_version: 1.8.19
|
87
|
+
signing_key:
|
88
|
+
specification_version: 3
|
89
|
+
summary: Track BostonRB group and member activity
|
90
|
+
test_files: []
|