github_streak_check 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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3ad582344ff768d248778902ac303eb9128d2500
4
+ data.tar.gz: b892b48f3a5c2bb49835843e7660eeffbed5b348
5
+ SHA512:
6
+ metadata.gz: 777caa13d4a7825bee82c5f2942d7af0cbe91d01544e1273027008c415844f6eec6f4b1a4a75aca24c02b23a63314fb68035b696af80aac3ed032087a5f43c51
7
+ data.tar.gz: 3d338b36e18c921290ec0da6afa4c534c353865636edb2ddc6b2d69a5d2411aee2066a3c5692ec928359dc9a0fc94a26270c0c6708e721e546a17afc92a58c04
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in github_streak_check.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,40 @@
1
+ # github_streak_check
2
+
3
+ GitHub's user page (eg. https://github.com/yhara) shows 'Longest Streak',
4
+ how many successive days the user is keep contributing.
5
+
6
+ This RubyGem provides a command to check if you have done today's
7
+ contribution and optionally send an email if not.
8
+
9
+ ## Installation
10
+
11
+ $ gem i github_streak_check
12
+
13
+ ## Usage
14
+
15
+ $ github_streak_check GITHUB_USER_NAME
16
+
17
+ Exit with status 0 if already did contribution, with 1 otherwise.
18
+
19
+ ### Sending alert mail
20
+
21
+ $ github_streak_check foo -m foo@example.com
22
+
23
+ This will send an notification to the given mail address.
24
+ github_streak_check uses [Pony](http://github.com/benprew/pony)'s default
25
+ way to send email; use /usr/sbin/sendmail if exists, then try to send with SMTP on localhost.
26
+
27
+ ## Run test
28
+
29
+ $ bundle install
30
+ $ rspec
31
+
32
+ ## Limitations
33
+
34
+ - Private repos are not supported
35
+ - Commits to forked repo are not counted [unless it is merged to main repo](https://help.github.com/articles/why-are-my-contributions-not-showing-up-on-my-profile), but github_streak_check returns OK for them, too
36
+ - Fetches only recent 300 events, so it may fail if you make over 300 commits a day.
37
+
38
+ ## License
39
+
40
+ MIT
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+ require 'github_streak_check'
3
+ require 'optparse'
4
+
5
+ opts = {}
6
+ option = OptionParser.new{|o|
7
+ o.banner = 'usage: github_streak_check USERNAME [options]'
8
+
9
+ o.on '-m', '--mail ADDRESS', 'Mail address to send notification(optional)' do |addr|
10
+ opts[:mail_to] = addr
11
+ end
12
+ o.on '-q', '--quiet', 'Supress message' do
13
+ $stdout = nil
14
+ $stderr = nil
15
+ end
16
+ o.on '-v', '--version', 'Show version' do
17
+ puts GithubStreakCheck::VERSION
18
+ exit
19
+ end
20
+ o.on '-h', '--help', 'Show this message' do
21
+ puts o
22
+ exit
23
+ end
24
+ }
25
+ rest = option.parse(ARGV)
26
+ unless (opts[:username] = rest[0])
27
+ puts option
28
+ exit
29
+ end
30
+
31
+ GithubStreakCheck.new(opts).run
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'github_streak_check/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "github_streak_check"
8
+ spec.version = GithubStreakCheck::VERSION
9
+ spec.authors = ["Yutaka HARA"]
10
+ spec.email = ["yutaka.hara+github@gmail.com"]
11
+ spec.description = %q{Checks if you already done today's commit}
12
+ spec.summary = %q{Checks if you already done today's commit for GitHub's "Longest Streak" feature.}
13
+ spec.homepage = "https://github.com/yhara/github_streak_check"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency "pony", "~> 1.5.1"
22
+ spec.add_runtime_dependency "activesupport", "~> 4.0.1"
23
+ spec.add_development_dependency "bundler", "~> 1.3"
24
+ spec.add_development_dependency "rake"
25
+ spec.add_development_dependency "rspec", "~> 2.14"
26
+ spec.add_development_dependency "fakeweb", "~> 1.3.0"
27
+ spec.add_development_dependency "timecop", "~> 0.6.3"
28
+ end
@@ -0,0 +1,3 @@
1
+ class GithubStreakCheck
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,44 @@
1
+ require "github_streak_check/version"
2
+ require 'open-uri'
3
+ require 'json'
4
+ require 'active_support/time'
5
+ require 'pony'
6
+
7
+ class GithubStreakCheck
8
+ def initialize(opts)
9
+ @opts = opts
10
+ end
11
+
12
+ def run
13
+ if commited_today?
14
+ puts "Check OK: you've already done today(#{pst_today} PST)'s contribution."
15
+ exit 0
16
+ else
17
+ msg = "Check failed: You have not extended today(#{pst_today} PST)'s streak yet"
18
+ $stderr.puts msg
19
+ if (addr = @opts[:mail_to])
20
+ ret = Pony.mail(to: addr,
21
+ from: addr,
22
+ subject: "GithubStreakCheck",
23
+ body: msg)
24
+ puts "Sent mail: #{ret.inspect}"
25
+ end
26
+ exit 1
27
+ end
28
+ end
29
+
30
+ def commited_today?
31
+ events = JSON.parse(open("https://api.github.com/users/#{@opts[:username]}/events?per_page=300").read)
32
+ return false if events.length == 0
33
+
34
+ return events.any?{|event|
35
+ Time.parse(event["created_at"]).to_date == pst_today
36
+ }
37
+ end
38
+
39
+ private
40
+
41
+ def pst_today
42
+ @pst_today ||= ActiveSupport::TimeZone["Pacific Time (US & Canada)"].today
43
+ end
44
+ end
@@ -0,0 +1,73 @@
1
+ require 'github_streak_check'
2
+ require 'fakeweb'
3
+ require 'timecop'
4
+
5
+ FakeWeb.allow_net_connect = false
6
+
7
+ describe GithubStreakCheck do
8
+ before do
9
+ @login = "taro"
10
+ @checker = GithubStreakCheck.new(username: @login)
11
+ end
12
+
13
+ describe "#commited_today?" do
14
+ it "<no events> : false" do
15
+ FakeWeb.register_uri(:get,
16
+ "https://api.github.com/users/#{@login}/events?per_page=300",
17
+ body: "[]"
18
+ )
19
+ expect(@checker.commited_today?).to be_false
20
+ end
21
+
22
+ it "<yesterday's event> : false" do
23
+ FakeWeb.register_uri(:get,
24
+ "https://api.github.com/users/#{@login}/events?per_page=300",
25
+ body: '[{"created_at":"2013-11-04T10:47:16Z"}]'
26
+ # == "2013-11-04T02:47:16-08:00"
27
+
28
+ )
29
+ Timecop.freeze(Time.parse("2013-11-05T07:00:00-08:00")) do
30
+ expect(@checker.commited_today?).to be_false
31
+ end
32
+ end
33
+
34
+ it "<today's event> : true" do
35
+ FakeWeb.register_uri(:get,
36
+ "https://api.github.com/users/#{@login}/events?per_page=300",
37
+ body: '[{"created_at":"2013-11-04T10:47:16Z"}]'
38
+ # == "2013-11-04T02:47:16-08:00"
39
+
40
+ )
41
+ Timecop.freeze(Time.parse("2013-11-04T07:00:00-08:00")) do
42
+ expect(@checker.commited_today?).to be_true
43
+ end
44
+ end
45
+
46
+ it "<today's event> <tomorrow's event> : true" do
47
+ FakeWeb.register_uri(:get,
48
+ "https://api.github.com/users/#{@login}/events?per_page=300",
49
+ body: '[{"created_at":"2013-11-05T10:47:16Z"},' +
50
+ # == "2013-11-05T02:47:16-08:00"
51
+ '{"created_at":"2013-11-04T10:47:16Z"}]'
52
+ # == "2013-11-04T02:47:16-08:00"
53
+
54
+ )
55
+ Timecop.freeze(Time.parse("2013-11-04T07:00:00-08:00")) do
56
+ expect(@checker.commited_today?).to be_true
57
+ end
58
+ end
59
+
60
+ # Note: this happens when user is living in Tokyo, for example.
61
+ it "<tomorrow's event> : false" do
62
+ FakeWeb.register_uri(:get,
63
+ "https://api.github.com/users/#{@login}/events?per_page=300",
64
+ body: '[{"created_at":"2013-11-04T10:47:16Z"}]'
65
+ # == "2013-11-04T02:47:16-08:00"
66
+
67
+ )
68
+ Timecop.freeze(Time.parse("2013-11-03T07:00:00-08:00")) do
69
+ expect(@checker.commited_today?).to be_false
70
+ end
71
+ end
72
+ end
73
+ end
metadata ADDED
@@ -0,0 +1,153 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: github_streak_check
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Yutaka HARA
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-11-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pony
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 1.5.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 1.5.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 4.0.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 4.0.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '2.14'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '2.14'
83
+ - !ruby/object:Gem::Dependency
84
+ name: fakeweb
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 1.3.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 1.3.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: timecop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 0.6.3
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 0.6.3
111
+ description: Checks if you already done today's commit
112
+ email:
113
+ - yutaka.hara+github@gmail.com
114
+ executables:
115
+ - github_streak_check
116
+ extensions: []
117
+ extra_rdoc_files: []
118
+ files:
119
+ - .gitignore
120
+ - Gemfile
121
+ - README.md
122
+ - Rakefile
123
+ - bin/github_streak_check
124
+ - github_streak_check.gemspec
125
+ - lib/github_streak_check.rb
126
+ - lib/github_streak_check/version.rb
127
+ - spec/github_streak_check_spec.rb
128
+ homepage: https://github.com/yhara/github_streak_check
129
+ licenses:
130
+ - MIT
131
+ metadata: {}
132
+ post_install_message:
133
+ rdoc_options: []
134
+ require_paths:
135
+ - lib
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - '>='
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ required_rubygems_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ requirements: []
147
+ rubyforge_project:
148
+ rubygems_version: 2.0.3
149
+ signing_key:
150
+ specification_version: 4
151
+ summary: Checks if you already done today's commit for GitHub's "Longest Streak" feature.
152
+ test_files:
153
+ - spec/github_streak_check_spec.rb