lolcommits 0.3.1 → 0.3.2.pre1
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +9 -2
- data/CHANGELOG +3 -0
- data/CONTRIBUTING +11 -0
- data/README.md +8 -20
- data/bin/lolcommits +2 -2
- data/features/bugs.feature +36 -15
- data/features/lolcommits.feature +37 -50
- data/features/plugins.feature +2 -2
- data/features/step_definitions/lolcommits_steps.rb +41 -2
- data/features/support/env.rb +10 -18
- data/lib/lolcommits/capture_mac.rb +1 -1
- data/lib/lolcommits/capture_windows.rb +1 -1
- data/lib/lolcommits/configuration.rb +14 -9
- data/lib/lolcommits/plugins/lol_twitter.rb +99 -0
- data/lib/lolcommits/plugins/loltext.rb +1 -1
- data/lib/lolcommits/runner.rb +1 -0
- data/lib/lolcommits/version.rb +1 -1
- data/lib/lolcommits.rb +1 -0
- data/lolcommits.gemspec +4 -1
- data/test/test_lolcommits.rb +2 -2
- data/{ext → vendor/ext}/CommandCam/COPYING +0 -0
- data/{ext → vendor/ext}/CommandCam/CommandCam.exe +0 -0
- data/{ext → vendor/ext}/CommandCam/LICENSE +0 -0
- data/{ext → vendor/ext}/imagesnap/ReadMeOrDont.rtf +0 -0
- data/{ext → vendor/ext}/imagesnap/imagesnap +0 -0
- data/{fonts → vendor/fonts}/Impact.ttf +0 -0
- metadata +62 -18
data/.travis.yml
CHANGED
@@ -4,12 +4,19 @@ rvm:
|
|
4
4
|
- 1.9.2
|
5
5
|
- 1.9.3
|
6
6
|
- ruby-head
|
7
|
+
- jruby
|
7
8
|
|
8
9
|
before_install:
|
9
|
-
- sudo apt-
|
10
|
-
- sudo apt-get -qq
|
10
|
+
# - sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 16126D3A3E5C1192
|
11
|
+
- sudo apt-get update -qq
|
12
|
+
- sudo apt-get install -qq -y mplayer imagemagick libmagickwand-dev
|
11
13
|
|
12
14
|
#test against ruby-head as well so we know what's coming down the pipe
|
13
15
|
matrix:
|
14
16
|
allow_failures:
|
15
17
|
- rvm: ruby-head
|
18
|
+
- rvm: jruby
|
19
|
+
|
20
|
+
branches:
|
21
|
+
except:
|
22
|
+
- gh-pages
|
data/CHANGELOG
CHANGED
data/CONTRIBUTING
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
GUIDELINES FOR CONTRIBUTING
|
2
|
+
|
3
|
+
1. Fork it
|
4
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
5
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
6
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
7
|
+
5. Create new Pull Request
|
8
|
+
|
9
|
+
You can run the existing test-suite via `rake`. Ensure nothing is broken, but since the test since is far from complete, it'd be awesome if you manually tested for regressions as well.
|
10
|
+
|
11
|
+
Please, if at all possible, write a passing test for the functionality you added.
|
data/README.md
CHANGED
@@ -31,31 +31,29 @@ Install dependencies using your package manager of choice, for example in Ubuntu
|
|
31
31
|
|
32
32
|
sudo apt-get install mplayer imagemagick libmagickwand-dev
|
33
33
|
|
34
|
-
On Fedora, enable the rpmfusion repository (for mplayer) and run:
|
35
|
-
|
36
|
-
sudo yum install ImageMagick ImageMagick-devel mplayer
|
37
|
-
|
38
34
|
Then install the lolcommits gem:
|
39
35
|
|
40
36
|
gem install lolcommits
|
41
37
|
|
42
38
|
Then you can `lolcommits --enable` in any git repo as above.
|
43
39
|
|
40
|
+
For more details, see [Installing on Linux](https://github.com/mroth/lolcommits/wiki/Installing-on-Linux).
|
41
|
+
|
44
42
|
## Installation (Windows)
|
45
43
|
See the wiki page for [Installing on Windows](https://github.com/mroth/lolcommits/wiki/Installing-on-Windows).
|
46
44
|
|
47
45
|
## Sample images
|
48
|
-
<img width='320' height='240' src="https://github.com/mroth/lolcommits/raw/gh-pages/sample2.jpg" />
|
46
|
+
<img width='320' height='240' src="https://github.com/mroth/lolcommits/raw/gh-pages/assets/img/sample_old/sample2.jpg" />
|
49
47
|
|
50
|
-
<img width='320' height='240' src="https://github.com/mroth/lolcommits/raw/gh-pages/sample5.jpg" />
|
48
|
+
<img width='320' height='240' src="https://github.com/mroth/lolcommits/raw/gh-pages/assets/img/sample_old/sample5.jpg" />
|
51
49
|
<br/>
|
52
|
-
<img width='320' height='240' src="https://github.com/mroth/lolcommits/raw/gh-pages/sample4.jpg" />
|
50
|
+
<img width='320' height='240' src="https://github.com/mroth/lolcommits/raw/gh-pages/assets/img/sample_old/sample4.jpg" />
|
53
51
|
|
54
|
-
<img width='320' height='240' src="https://github.com/mroth/lolcommits/raw/gh-pages/sample6.jpg" />
|
52
|
+
<img width='320' height='240' src="https://github.com/mroth/lolcommits/raw/gh-pages/assets/img/sample_old/sample6.jpg" />
|
55
53
|
<br/>
|
56
|
-
<img width='320' height='240' src="https://github.com/mroth/lolcommits/raw/gh-pages/sample7.jpg" />
|
54
|
+
<img width='320' height='240' src="https://github.com/mroth/lolcommits/raw/gh-pages/assets/img/sample_old/sample7.jpg" />
|
57
55
|
|
58
|
-
<img width='320' height='240' src="https://github.com/mroth/lolcommits/raw/gh-pages/sample8.jpg" />
|
56
|
+
<img width='320' height='240' src="https://github.com/mroth/lolcommits/raw/gh-pages/assets/img/sample_old/sample8.jpg" />
|
59
57
|
<br/>
|
60
58
|
<a href="http://github.com/sfsekaran/"><img width='320' height='240' src="http://cl.ly/252S0o1J3x3n1b1k251N/d5f80e4f88a.jpg" /></a>
|
61
59
|
|
@@ -80,15 +78,5 @@ environment variables.
|
|
80
78
|
* TRANZLATE YOAR COMMIT_MSG TO LOLSPEKK - do
|
81
79
|
`lolcommits --config -p tranzlate` and set enabled to `true`.
|
82
80
|
|
83
|
-
## Contributing
|
84
|
-
|
85
|
-
1. Fork it
|
86
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
87
|
-
3. Commit your changes (`git commit -am 'Added some feature'`)
|
88
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
89
|
-
5. Create new Pull Request
|
90
|
-
|
91
|
-
Please, if at all possible, write a passing test for the functionality you added.
|
92
|
-
|
93
81
|
## Troubles?
|
94
82
|
Started a [FAQ](https://github.com/mroth/lolcommits/wiki/FAQ).
|
data/bin/lolcommits
CHANGED
@@ -22,7 +22,7 @@ def command?(name)
|
|
22
22
|
end
|
23
23
|
|
24
24
|
if Configuration.is_mac?
|
25
|
-
unless File.executable? File.join(Configuration::LOLCOMMITS_ROOT, "ext", "imagesnap", "imagesnap")
|
25
|
+
unless File.executable? File.join(Configuration::LOLCOMMITS_ROOT, "vendor", "ext", "imagesnap", "imagesnap")
|
26
26
|
puts "Couldn't properly execute imagesnap for some reason, please file a bug?!"
|
27
27
|
exit 1
|
28
28
|
end
|
@@ -32,7 +32,7 @@ elsif Configuration.is_linux?
|
|
32
32
|
exit 1
|
33
33
|
end
|
34
34
|
end
|
35
|
-
unless File.readable? File.join(Configuration::LOLCOMMITS_ROOT, "fonts", "Impact.ttf")
|
35
|
+
unless File.readable? File.join(Configuration::LOLCOMMITS_ROOT, "vendor", "fonts", "Impact.ttf")
|
36
36
|
puts "Couldn't properly read Impact font from gem package, please file a bug?!"
|
37
37
|
exit 1
|
38
38
|
end
|
data/features/bugs.feature
CHANGED
@@ -7,24 +7,45 @@ Feature: Bug regression testing
|
|
7
7
|
# issue #58, https://github.com/mroth/lolcommits/issues/58
|
8
8
|
#
|
9
9
|
Scenario: handle git repos with spaces in directory name
|
10
|
-
Given a git repository named "test lolol"
|
11
|
-
And
|
12
|
-
|
13
|
-
When I cd to "test lolol"
|
14
|
-
And I successfully run `lolcommits --enable`
|
15
|
-
And I successfully run `git add .`
|
16
|
-
And I successfully run `git commit -m 'can haz commit'`
|
10
|
+
Given I am in a git repository named "test lolol" with lolcommits enabled
|
11
|
+
And I successfully run `git commit --allow-empty -m 'can haz commit'`
|
17
12
|
Then the output should contain "*** Preserving this moment in history."
|
18
13
|
And a directory named "../.lolcommits/test-lolol" should exist
|
19
14
|
|
20
|
-
|
21
15
|
#
|
22
|
-
# issue #
|
16
|
+
# issue #68, https://github.com/mroth/lolcommits/issues/68
|
23
17
|
#
|
24
|
-
#@
|
25
|
-
#Scenario:
|
26
|
-
# Given "
|
27
|
-
#
|
28
|
-
#
|
29
|
-
#
|
18
|
+
#@focus
|
19
|
+
#Scenario: Don't trigger capture during a git rebase
|
20
|
+
# Given I am in a git repository named "yuh8history" with lolcommits enabled
|
21
|
+
# And I do a git commit
|
22
|
+
# And I successfully run `git tag 'vA'`
|
23
|
+
# And I do a git commit
|
24
|
+
# And I successfully run `git tag 'vB'`
|
25
|
+
# And I do a git commit
|
26
|
+
# And I successfully run `git tag 'vC'`
|
27
|
+
# And I do a git commit
|
28
|
+
# And I successfully run `git tag 'vD'`
|
29
|
+
# And I do a git commit
|
30
|
+
# And I successfully run `git tag 'vE'`
|
31
|
+
# And I do a git commit
|
32
|
+
# And I successfully run `git tag 'vF'`
|
33
|
+
# And I successfully run `git checkout vB`
|
34
|
+
# And I successfully run `git reset --soft master`
|
35
|
+
# And I successfully run `git merge --squash vD`
|
36
|
+
# When I successfully run `git rebase --onto $(cat .git/HEAD) vE vF`
|
37
|
+
# # When I successfully run `git rebase placeholder`
|
38
|
+
# Then there should be 4 commit entries in the git log
|
39
|
+
# # But there should be exactly 5 jpgs in "../.lolcommits/yuh8history"
|
40
|
+
|
41
|
+
# Given I am in a git repository named "yuh8history" with lolcommits enabled
|
42
|
+
# And I do 2 git commits
|
43
|
+
# And I successfully run `git branch middle`
|
44
|
+
# And I do 2 git commits
|
45
|
+
# And I successfully run `git branch placeholder`
|
46
|
+
# And I successfully run `git checkout middle`
|
47
|
+
# And I do 2 git commits
|
48
|
+
# When I successfully run `git rebase placeholder`
|
49
|
+
# Then there should be 6 commit entries in the git log
|
50
|
+
# But there should be exactly 6 jpgs in "../.lolcommits/yuh8history"
|
30
51
|
|
data/features/lolcommits.feature
CHANGED
@@ -10,50 +10,41 @@ Feature: Basic UI functionality
|
|
10
10
|
When I cd to "loltest"
|
11
11
|
And I successfully run `lolcommits --enable`
|
12
12
|
Then the output should contain "installed lolcommmit hook as:"
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
And the output should contain "(to remove later, you can use: lolcommits --disable)"
|
14
|
+
And a file named ".git/hooks/post-commit" should exist
|
15
|
+
And the exit status should be 0
|
16
16
|
|
17
17
|
Scenario: Disable in a enabled git repository
|
18
|
-
Given a git repository named "lolenabled" with
|
19
|
-
When I
|
20
|
-
And I successfully run `lolcommits --disable`
|
18
|
+
Given I am in a git repository named "lolenabled" with lolcommits enabled
|
19
|
+
When I successfully run `lolcommits --disable`
|
21
20
|
Then the output should contain "removed"
|
22
|
-
|
23
|
-
|
21
|
+
And a file named ".git/hooks/post-commit" should not exist
|
22
|
+
And the exit status should be 0
|
24
23
|
|
25
24
|
Scenario: Trying to enable while not in a git repo fails
|
26
|
-
Given a directory named "svnrulez"
|
27
|
-
When I
|
28
|
-
And I run `lolcommits --enable`
|
25
|
+
Given I am in a directory named "svnrulez"
|
26
|
+
When I run `lolcommits --enable`
|
29
27
|
Then the output should contain "You don't appear to be in the base directory of a git project."
|
30
|
-
|
28
|
+
And the exit status should be 1
|
31
29
|
|
32
30
|
Scenario: Commiting in an enabled repo triggers successful capture
|
33
|
-
Given a git repository named "testcapture"
|
34
|
-
|
35
|
-
When I cd to "testcapture"
|
36
|
-
And I successfully run `lolcommits --enable`
|
37
|
-
And I successfully run `git add .`
|
38
|
-
And I successfully run `git commit -m 'can haz commit'`
|
31
|
+
Given I am in a git repository named "testcapture" with lolcommits enabled
|
32
|
+
When I do a git commit
|
39
33
|
Then the output should contain "*** Preserving this moment in history."
|
40
|
-
|
41
|
-
|
42
|
-
|
34
|
+
And a directory named "../.lolcommits/testcapture" should exist
|
35
|
+
And a file named "../.lolcommits/testcapture/tmp_snapshot.jpg" should not exist
|
36
|
+
And there should be exactly 1 jpg in "../.lolcommits/testcapture"
|
43
37
|
|
44
38
|
Scenario: Commiting in an enabled repo subdirectory triggers successful capture of parent repo
|
45
|
-
Given a git repository named "testcapture"
|
46
|
-
|
47
|
-
|
48
|
-
When I cd to "
|
49
|
-
|
50
|
-
Then I cd to "subdir/"
|
51
|
-
And I successfully run `git add .`
|
52
|
-
And I successfully run `git commit -m 'can haz commit'`
|
39
|
+
Given I am in a git repository named "testcapture" with lolcommits enabled
|
40
|
+
And a directory named "subdir"
|
41
|
+
And an empty file named "subdir/FOOBAR"
|
42
|
+
When I cd to "subdir/"
|
43
|
+
And I do a git commit
|
53
44
|
Then the output should contain "*** Preserving this moment in history."
|
54
|
-
|
55
|
-
|
56
|
-
|
45
|
+
And a directory named "../../.lolcommits/testcapture" should exist
|
46
|
+
And a directory named "../../.lolcommits/subdir" should not exist
|
47
|
+
And there should be exactly 1 jpg in "../../.lolcommits/testcapture"
|
57
48
|
|
58
49
|
Scenario: Show plugins
|
59
50
|
When I successfully run `lolcommits --plugins`
|
@@ -103,33 +94,30 @@ Feature: Basic UI functionality
|
|
103
94
|
And the output should contain "enabled: true"
|
104
95
|
|
105
96
|
Scenario: test capture should work regardless of whether in a git repository
|
106
|
-
Given a directory named "nothingtoseehere"
|
107
|
-
When I
|
108
|
-
And I run `lolcommits --test --capture`
|
97
|
+
Given I am in a directory named "nothingtoseehere"
|
98
|
+
When I run `lolcommits --test --capture`
|
109
99
|
Then the output should contain "*** Capturing in test mode."
|
110
|
-
|
111
|
-
|
100
|
+
And the output should not contain "path does not exist (ArgumentError)"
|
101
|
+
And the exit status should be 0
|
112
102
|
|
113
103
|
Scenario: test capture should store in its own test directory
|
114
|
-
Given a git repository named "randomgitrepo"
|
115
|
-
When I
|
116
|
-
And I successfully run `lolcommits --test --capture`
|
104
|
+
Given I am in a git repository named "randomgitrepo" with lolcommits enabled
|
105
|
+
When I successfully run `lolcommits --test --capture`
|
117
106
|
Then a directory named "../.lolcommits/test" should exist
|
118
107
|
And a directory named "../.lolcommits/randomgitrepo" should not exist
|
119
108
|
|
120
109
|
Scenario: last command should work properly when in a lolrepo
|
121
110
|
Given a git repository named "randomgitrepo"
|
122
|
-
|
123
|
-
|
111
|
+
And a loldir named "randomgitrepo" with 2 lolimages
|
112
|
+
And I cd to "randomgitrepo"
|
124
113
|
When I run `lolcommits --last`
|
125
114
|
Then the exit status should be 0
|
126
115
|
|
127
116
|
Scenario: last command should fail gracefully if not in a lolrepo
|
128
|
-
Given a directory named "gitsuxcvs4eva"
|
129
|
-
And I cd to "gitsuxcvs4eva"
|
117
|
+
Given I am in a directory named "gitsuxcvs4eva"
|
130
118
|
When I run `lolcommits --last`
|
131
119
|
Then the output should contain "Can't do that since we're not in a valid git repository!"
|
132
|
-
|
120
|
+
And the exit status should be 1
|
133
121
|
|
134
122
|
Scenario: last command should fail gracefully if zero lolimages in lolrepo
|
135
123
|
Given a git repository named "randomgitrepo"
|
@@ -141,15 +129,14 @@ Feature: Basic UI functionality
|
|
141
129
|
|
142
130
|
Scenario: browse command should work properly when in a lolrepo
|
143
131
|
Given a git repository named "randomgitrepo"
|
144
|
-
|
145
|
-
|
132
|
+
And a loldir named "randomgitrepo" with 2 lolimages
|
133
|
+
And I cd to "randomgitrepo"
|
146
134
|
When I run `lolcommits --browse`
|
147
135
|
Then the exit status should be 0
|
148
136
|
|
149
137
|
Scenario: browse command should fail gracefully when not in a lolrepo
|
150
|
-
Given a directory named "gitsuxcvs4eva"
|
151
|
-
And I cd to "gitsuxcvs4eva"
|
138
|
+
Given I am in a directory named "gitsuxcvs4eva"
|
152
139
|
When I run `lolcommits --browse`
|
153
140
|
Then the output should contain "Can't do that since we're not in a valid git repository!"
|
154
|
-
|
141
|
+
And the exit status should be 1
|
155
142
|
|
data/features/plugins.feature
CHANGED
@@ -15,7 +15,7 @@ Feature: Plugins Work
|
|
15
15
|
When I successfully run `git add .`
|
16
16
|
And I successfully run `git commit -m 'can haz commit'`
|
17
17
|
Then the output should contain "*** Preserving this moment in history."
|
18
|
-
And there should be 1 jpg in "../.lolcommits/dot_com"
|
18
|
+
And there should be exactly 1 jpg in "../.lolcommits/dot_com"
|
19
19
|
|
20
20
|
Scenario: Disable loltext
|
21
21
|
Given a git repository named "loltext"
|
@@ -29,5 +29,5 @@ Feature: Plugins Work
|
|
29
29
|
When I successfully run `git add .`
|
30
30
|
And I successfully run `git commit -m 'can haz commit'`
|
31
31
|
Then the output should contain "*** Preserving this moment in history."
|
32
|
-
And there should be 1 jpg in "../.lolcommits/loltext"
|
32
|
+
And there should be exactly 1 jpg in "../.lolcommits/loltext"
|
33
33
|
|
@@ -1,11 +1,19 @@
|
|
1
1
|
include FileUtils
|
2
2
|
|
3
|
+
Given /^I am in a directory named "(.*?)"$/ do |dir_name|
|
4
|
+
steps %Q{
|
5
|
+
Given a directory named "#{dir_name}"
|
6
|
+
And I cd to "#{dir_name}"
|
7
|
+
}
|
8
|
+
end
|
3
9
|
|
4
10
|
Given /^a git repository named "(.*?)"$/ do |repo_name|
|
5
11
|
repo_dir = File.join current_dir, repo_name
|
6
12
|
mkdir_p repo_dir
|
7
13
|
Dir.chdir repo_dir do
|
8
14
|
sh "git init --quiet ."
|
15
|
+
sh "git config user.name 'Testy McTesterson'"
|
16
|
+
sh "git config user.email 'testy@tester.com'"
|
9
17
|
end
|
10
18
|
end
|
11
19
|
|
@@ -24,6 +32,14 @@ Given /^a git repository named "(.*?)" with (a|no) "(.*?)" hook$/ do |repo_name,
|
|
24
32
|
step %{the git repository named "#{repo_name}" has #{yesno_modifier} "#{hook_name}" hook}
|
25
33
|
end
|
26
34
|
|
35
|
+
Given /^I am in a git repository named "(.*?)" with lolcommits enabled$/ do |repo_name|
|
36
|
+
steps %Q{
|
37
|
+
Given a git repository named "#{repo_name}"
|
38
|
+
And I cd to "#{repo_name}"
|
39
|
+
And I successfully run `lolcommits --enable`
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
27
43
|
When /^I run `(.*?)` and wait for output$/ do |command|
|
28
44
|
command = "cd #{current_dir} && #{command}"
|
29
45
|
@stdin, @stdout, @stderr = Open3.popen3(command)
|
@@ -48,10 +64,33 @@ When /^I enter "(.*?)" for "(.*?)"$/ do |input, field|
|
|
48
64
|
@stdin.puts input
|
49
65
|
end
|
50
66
|
|
51
|
-
Then /^there should be (.*?) jpg(
|
67
|
+
Then /^there should be (?:exactly|only) (.*?) jpg(?:s?) in "(.*?)"$/ do |n, folder|
|
52
68
|
assert_equal n.to_i, Dir["#{current_dir}/#{folder}/*.jpg"].count
|
53
69
|
end
|
54
70
|
|
55
71
|
Then /^the output should contain a list of plugins$/ do
|
56
72
|
step %{the output should contain "Available plugins: "}
|
57
|
-
end
|
73
|
+
end
|
74
|
+
|
75
|
+
When /^I do a git commit with commit message "(.*?)"$/ do |commit_msg|
|
76
|
+
filename = Faker::Lorem.words(1).first
|
77
|
+
step %{a 98 byte file named "#{filename}"}
|
78
|
+
step %{I successfully run `git add #{filename}`}
|
79
|
+
step %{I successfully run `git commit -m "#{commit_msg}"`}
|
80
|
+
end
|
81
|
+
|
82
|
+
When /^I do a git commit$/ do
|
83
|
+
commit_msg = Faker::Lorem.sentence
|
84
|
+
step %{I do a git commit with commit message "#{commit_msg}"}
|
85
|
+
end
|
86
|
+
|
87
|
+
When /^I do (\d+) git commits$/ do |n|
|
88
|
+
n.to_i.times do
|
89
|
+
step %{I do a git commit}
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
Then /^there should be (\d+) commit entries in the git log$/ do |n|
|
94
|
+
#sleep 1
|
95
|
+
assert_equal n.to_i, `git shortlog | grep -E '^[ ]+\w+' | wc -l`.chomp.to_i
|
96
|
+
end
|
data/features/support/env.rb
CHANGED
@@ -3,6 +3,7 @@ require 'methadone/cucumber'
|
|
3
3
|
require 'open3'
|
4
4
|
require 'test/unit/assertions'
|
5
5
|
include Test::Unit::Assertions
|
6
|
+
require 'faker'
|
6
7
|
|
7
8
|
ENV['PATH'] = "#{File.expand_path(File.dirname(__FILE__) + '/../../bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
|
8
9
|
LIB_DIR = File.join(File.expand_path(File.dirname(__FILE__)),'..','..','lib')
|
@@ -10,15 +11,19 @@ LIB_DIR = File.join(File.expand_path(File.dirname(__FILE__)),'..','..','lib')
|
|
10
11
|
Before do
|
11
12
|
# Using "announce" causes massive warnings on 1.9.2
|
12
13
|
@puts = true
|
13
|
-
@original_rubylib = ENV['RUBYLIB']
|
14
14
|
@aruba_timeout_seconds = 20
|
15
|
+
|
16
|
+
@original_rubylib = ENV['RUBYLIB']
|
15
17
|
ENV['RUBYLIB'] = LIB_DIR + File::PATH_SEPARATOR + ENV['RUBYLIB'].to_s
|
16
18
|
|
17
19
|
@original_fakecapture = ENV['LOLCOMMITS_FAKECAPTURE']
|
18
20
|
ENV['LOLCOMMITS_FAKECAPTURE'] = "1"
|
19
21
|
|
20
|
-
@original_loldir = ENV['LOLCOMMITS_DIR']
|
21
|
-
ENV['LOLCOMMITS_DIR'] = File.expand_path( File.join(current_dir, ".lolcommits") )
|
22
|
+
# @original_loldir = ENV['LOLCOMMITS_DIR']
|
23
|
+
# ENV['LOLCOMMITS_DIR'] = File.expand_path( File.join(current_dir, ".lolcommits") )
|
24
|
+
|
25
|
+
@original_home = ENV['HOME']
|
26
|
+
ENV['HOME'] = File.expand_path( current_dir )
|
22
27
|
|
23
28
|
ENV['LAUNCHY_DRY_RUN'] = 'true'
|
24
29
|
end
|
@@ -26,20 +31,7 @@ end
|
|
26
31
|
After do
|
27
32
|
ENV['RUBYLIB'] = @original_rubylib
|
28
33
|
ENV['LOLCOMMITS_FAKECAPTURE'] = @original_fakecapture
|
29
|
-
ENV['LOLCOMMITS_DIR'] = @original_loldir
|
34
|
+
# ENV['LOLCOMMITS_DIR'] = @original_loldir
|
35
|
+
ENV['HOME'] = @original_home
|
30
36
|
ENV['LAUNCHY_DRY_RUN'] = nil
|
31
37
|
end
|
32
|
-
|
33
|
-
# ###moved the below into env for everything
|
34
|
-
# Before('@simulate-env') do
|
35
|
-
# @original_fakecapture = ENV['LOLCOMMITS_FAKECAPTURE']
|
36
|
-
# ENV['LOLCOMMITS_FAKECAPTURE'] = "1"
|
37
|
-
|
38
|
-
# @original_loldir = ENV['LOLCOMMITS_DIR']
|
39
|
-
# ENV['LOLCOMMITS_DIR'] = File.join(current_dir, ".lolcommits")
|
40
|
-
# end
|
41
|
-
|
42
|
-
# After('@simulate-env') do
|
43
|
-
# ENV['LOLCOMMITS_FAKECAPTURE'] = @original_fakecapture
|
44
|
-
# ENV['LOLCOMMITS_DIR'] = @original_loldir
|
45
|
-
# end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Lolcommits
|
2
2
|
class CaptureWindows < Capturer
|
3
3
|
def capture
|
4
|
-
commandcam_exe = File.join Configuration::LOLCOMMITS_ROOT, "ext", "CommandCam", "CommandCam.exe"
|
4
|
+
commandcam_exe = File.join Configuration::LOLCOMMITS_ROOT, "vendor", "ext", "CommandCam", "CommandCam.exe"
|
5
5
|
# DirectShow takes a while to show... at least for me anyway
|
6
6
|
delaycmd = " /delay 3000"
|
7
7
|
if capture_delay > 0
|
@@ -71,7 +71,7 @@ module Lolcommits
|
|
71
71
|
puts "Available plugins: #{names.join(', ')}"
|
72
72
|
end
|
73
73
|
|
74
|
-
def do_configure!(plugin)
|
74
|
+
def do_configure!(plugin, forced_options=nil)
|
75
75
|
if plugin.nil? || plugin.strip == ''
|
76
76
|
puts_plugins
|
77
77
|
print "Name of plugin to configure: "
|
@@ -90,14 +90,19 @@ module Lolcommits
|
|
90
90
|
return
|
91
91
|
end
|
92
92
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
93
|
+
if forced_options.nil?
|
94
|
+
options = plugin_object.options.inject(Hash.new) do |acc, option|
|
95
|
+
print "#{option}: "
|
96
|
+
val = STDIN.gets.strip
|
97
|
+
val = true if val == 'true'
|
98
|
+
val = false if val == 'false'
|
98
99
|
|
99
|
-
|
100
|
+
acc.merge(option => val)
|
101
|
+
end
|
102
|
+
else
|
103
|
+
options = forced_options
|
100
104
|
end
|
105
|
+
|
101
106
|
config = self.user_configuration || Hash.new
|
102
107
|
config[plugin] = options
|
103
108
|
File.open(self.user_configuration_file, 'w') do |f|
|
@@ -109,11 +114,11 @@ module Lolcommits
|
|
109
114
|
end
|
110
115
|
|
111
116
|
def self.is_mac?
|
112
|
-
RUBY_PLATFORM.downcase.include?("darwin")
|
117
|
+
RUBY_PLATFORM.to_s.downcase.include?("darwin")
|
113
118
|
end
|
114
119
|
|
115
120
|
def self.is_linux?
|
116
|
-
RUBY_PLATFORM.downcase.include?("linux")
|
121
|
+
RUBY_PLATFORM.to_s.downcase.include?("linux")
|
117
122
|
end
|
118
123
|
|
119
124
|
def self.is_windows?
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'twitter'
|
3
|
+
require 'oauth'
|
4
|
+
|
5
|
+
TWITTER_CONSUMER_KEY = 'qc096dJJCxIiqDNUqEsqQ'
|
6
|
+
TWITTER_CONSUMER_SECRET = 'rvjNdtwSr1H0TvBvjpk6c4bvrNydHmmbvv7gXZQI'
|
7
|
+
|
8
|
+
module Lolcommits
|
9
|
+
|
10
|
+
class LolTwitter < Plugin
|
11
|
+
|
12
|
+
def initialize(runner)
|
13
|
+
super
|
14
|
+
self.name = 'twitter'
|
15
|
+
self.default = false
|
16
|
+
end
|
17
|
+
|
18
|
+
def initial_twitter_auth
|
19
|
+
puts "\n--------------------------------------------"
|
20
|
+
puts "Need to grab twitter tokens (first time only)"
|
21
|
+
puts "---------------------------------------------"
|
22
|
+
|
23
|
+
consumer = OAuth::Consumer.new(TWITTER_CONSUMER_KEY,
|
24
|
+
TWITTER_CONSUMER_SECRET,
|
25
|
+
:site => 'http://api.twitter.com',
|
26
|
+
:request_endpoint => 'http://api.twitter.com',
|
27
|
+
:sign_in => true)
|
28
|
+
|
29
|
+
request_token = consumer.get_request_token
|
30
|
+
rtoken = request_token.token
|
31
|
+
rsecret = request_token.secret
|
32
|
+
|
33
|
+
puts "\n1.) Open the following url in your browser, get the PIN:\n\n"
|
34
|
+
puts request_token.authorize_url
|
35
|
+
puts "\n2.) Enter PIN, then press enter:"
|
36
|
+
|
37
|
+
begin
|
38
|
+
STDOUT.flush
|
39
|
+
twitter_pin = STDIN.gets.chomp
|
40
|
+
rescue
|
41
|
+
end
|
42
|
+
|
43
|
+
if (twitter_pin.nil?) || (twitter_pin.length == 0)
|
44
|
+
puts "\n\tERROR: Could not read PIN, auth fail"
|
45
|
+
return
|
46
|
+
end
|
47
|
+
|
48
|
+
begin
|
49
|
+
OAuth::RequestToken.new(consumer, rtoken, rsecret)
|
50
|
+
access_token = request_token.get_access_token(:oauth_verifier => twitter_pin)
|
51
|
+
rescue Twitter::Unauthorized
|
52
|
+
puts "> FAIL!"
|
53
|
+
return
|
54
|
+
end
|
55
|
+
|
56
|
+
# saves the config back to yaml file.
|
57
|
+
self.runner.config.do_configure!('twitter', { 'enabled' => true,
|
58
|
+
'access_token' => access_token.token,
|
59
|
+
'secret' => access_token.secret })
|
60
|
+
end
|
61
|
+
|
62
|
+
def run
|
63
|
+
commit_msg = self.runner.message
|
64
|
+
available_commit_msg_size = 128
|
65
|
+
tweet_msg = commit_msg.length > available_commit_msg_size ? "#{commit_msg[0..(available_commit_msg_size-3)]}..." : commit_msg
|
66
|
+
tweet_text = "#{tweet_msg} #lolcommits"
|
67
|
+
puts "Tweeting: #{tweet_text}"
|
68
|
+
|
69
|
+
if configuration['access_token'].nil? || configuration['secret'].nil?
|
70
|
+
initial_twitter_auth()
|
71
|
+
end
|
72
|
+
|
73
|
+
if configuration['access_token'].nil? || configuration['secret'].nil?
|
74
|
+
puts "Missing Twitter Credentials - Skipping The Tweet"
|
75
|
+
return
|
76
|
+
end
|
77
|
+
|
78
|
+
Twitter.configure do |config|
|
79
|
+
config.consumer_key = TWITTER_CONSUMER_KEY
|
80
|
+
config.consumer_secret = TWITTER_CONSUMER_SECRET
|
81
|
+
end
|
82
|
+
|
83
|
+
client = Twitter::Client.new(
|
84
|
+
:oauth_token => configuration['access_token'],
|
85
|
+
:oauth_token_secret => configuration['secret']
|
86
|
+
)
|
87
|
+
retries = 2
|
88
|
+
begin
|
89
|
+
if client.update_with_media(tweet_text, File.open(self.runner.main_image, 'r'))
|
90
|
+
puts "\t--> Tweet Sent!"
|
91
|
+
end
|
92
|
+
rescue Twitter::Error::InternalServerError
|
93
|
+
retries -= 1
|
94
|
+
retry if retries > 0
|
95
|
+
puts "\t ! --> Tweet 500 Error - Tweet Not Posted"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -12,7 +12,7 @@ module Lolcommits
|
|
12
12
|
def run
|
13
13
|
canvas = ImageList.new(self.runner.main_image)
|
14
14
|
draw = Magick::Draw.new
|
15
|
-
draw.font = File.join(Configuration::LOLCOMMITS_ROOT, "fonts", "Impact.ttf")
|
15
|
+
draw.font = File.join(Configuration::LOLCOMMITS_ROOT, "vendor", "fonts", "Impact.ttf")
|
16
16
|
|
17
17
|
draw.fill = 'white'
|
18
18
|
draw.stroke = 'black'
|
data/lib/lolcommits/runner.rb
CHANGED
@@ -12,6 +12,7 @@ module Lolcommits
|
|
12
12
|
|
13
13
|
# Executed Last
|
14
14
|
set_callback :run, :after, :cleanup!
|
15
|
+
set_callback :run, :after, :execute_lolcommits_lol_twitter
|
15
16
|
set_callback :run, :after, :execute_lolcommits_stats_d
|
16
17
|
set_callback :run, :after, :execute_lolcommits_dot_com
|
17
18
|
set_callback :run, :after, :execute_lolcommits_loltext
|
data/lib/lolcommits/version.rb
CHANGED
data/lib/lolcommits.rb
CHANGED
@@ -22,6 +22,7 @@ require 'lolcommits/plugins/loltext'
|
|
22
22
|
require 'lolcommits/plugins/dot_com'
|
23
23
|
require 'lolcommits/plugins/tranzlate'
|
24
24
|
require 'lolcommits/plugins/statsd'
|
25
|
+
require 'lolcommits/plugins/lol_twitter'
|
25
26
|
|
26
27
|
# require runner after all the plugins have been required
|
27
28
|
require 'lolcommits/runner'
|
data/lolcommits.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = Lolcommits::VERSION
|
8
8
|
s.authors = ["Matthew Rothenberg"]
|
9
9
|
s.email = ["mrothenberg@gmail.com"]
|
10
|
-
s.homepage = "http://github.com/
|
10
|
+
s.homepage = "http://mroth.github.com/lolcommits/"
|
11
11
|
s.summary = %q{Capture webcam image on git commit for lulz.}
|
12
12
|
s.description = %q{Takes a snapshot with your Mac's built-in iSight/FaceTime webcam (or any working webcam on Linux or Windows) every time you git commit code, and archives a lolcat style image with it.}
|
13
13
|
s.license = "LGPL-3"
|
@@ -22,11 +22,14 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.add_runtime_dependency('git', '~> 1.2.5')
|
23
23
|
s.add_runtime_dependency('choice', '~> 0.1.6')
|
24
24
|
s.add_runtime_dependency('launchy', '~> 2.1.1')
|
25
|
+
s.add_runtime_dependency("twitter")
|
26
|
+
s.add_runtime_dependency("oauth")
|
25
27
|
|
26
28
|
s.add_development_dependency('rdoc')
|
27
29
|
s.add_development_dependency('aruba')
|
28
30
|
s.add_development_dependency('rake','~> 0.9.2')
|
29
31
|
s.add_development_dependency('fivemat')
|
32
|
+
s.add_development_dependency('faker')
|
30
33
|
|
31
34
|
s.add_dependency('methadone', '~>1.2.1')
|
32
35
|
s.add_runtime_dependency('httmultiparty')
|
data/test/test_lolcommits.rb
CHANGED
@@ -31,8 +31,8 @@ class LolTest < Test::Unit::TestCase
|
|
31
31
|
# this will test the permissions but only locally, important before building a gem package!
|
32
32
|
#
|
33
33
|
def test_permissions
|
34
|
-
impact_perms = File.lstat(File.join(Configuration::LOLCOMMITS_ROOT, "fonts", "Impact.ttf")).mode & 0777
|
35
|
-
imagesnap_perms = File.lstat(File.join(Configuration::LOLCOMMITS_ROOT, "ext", "imagesnap", "imagesnap")).mode & 0777
|
34
|
+
impact_perms = File.lstat(File.join(Configuration::LOLCOMMITS_ROOT, "vendor", "fonts", "Impact.ttf")).mode & 0777
|
35
|
+
imagesnap_perms = File.lstat(File.join(Configuration::LOLCOMMITS_ROOT, "vendor", "ext", "imagesnap", "imagesnap")).mode & 0777
|
36
36
|
assert impact_perms == 0644 || impact_perms == 0664,
|
37
37
|
"expected perms of 644/664 but instead got #{sprintf '%o', impact_perms}"
|
38
38
|
assert imagesnap_perms == 0755 || imagesnap_perms == 0775,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lolcommits
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
5
|
-
prerelease:
|
4
|
+
version: 0.3.2.pre1
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Matthew Rothenberg
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rmagick
|
@@ -75,6 +75,38 @@ dependencies:
|
|
75
75
|
- - ~>
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: 2.1.1
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: twitter
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: oauth
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
78
110
|
- !ruby/object:Gem::Dependency
|
79
111
|
name: rdoc
|
80
112
|
requirement: !ruby/object:Gem::Requirement
|
@@ -139,6 +171,22 @@ dependencies:
|
|
139
171
|
- - ! '>='
|
140
172
|
- !ruby/object:Gem::Version
|
141
173
|
version: '0'
|
174
|
+
- !ruby/object:Gem::Dependency
|
175
|
+
name: faker
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
178
|
+
requirements:
|
179
|
+
- - ! '>='
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
type: :development
|
183
|
+
prerelease: false
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
142
190
|
- !ruby/object:Gem::Dependency
|
143
191
|
name: methadone
|
144
192
|
requirement: !ruby/object:Gem::Requirement
|
@@ -216,23 +264,18 @@ files:
|
|
216
264
|
- .gitignore
|
217
265
|
- .travis.yml
|
218
266
|
- CHANGELOG
|
267
|
+
- CONTRIBUTING
|
219
268
|
- Gemfile
|
220
269
|
- LICENSE
|
221
270
|
- NOTES
|
222
271
|
- README.md
|
223
272
|
- Rakefile
|
224
273
|
- bin/lolcommits
|
225
|
-
- ext/CommandCam/COPYING
|
226
|
-
- ext/CommandCam/CommandCam.exe
|
227
|
-
- ext/CommandCam/LICENSE
|
228
|
-
- ext/imagesnap/ReadMeOrDont.rtf
|
229
|
-
- ext/imagesnap/imagesnap
|
230
274
|
- features/bugs.feature
|
231
275
|
- features/lolcommits.feature
|
232
276
|
- features/plugins.feature
|
233
277
|
- features/step_definitions/lolcommits_steps.rb
|
234
278
|
- features/support/env.rb
|
235
|
-
- fonts/Impact.ttf
|
236
279
|
- lib/core_ext/class.rb
|
237
280
|
- lib/lolcommits.rb
|
238
281
|
- lib/lolcommits/capture_fake.rb
|
@@ -244,6 +287,7 @@ files:
|
|
244
287
|
- lib/lolcommits/git_info.rb
|
245
288
|
- lib/lolcommits/plugin.rb
|
246
289
|
- lib/lolcommits/plugins/dot_com.rb
|
290
|
+
- lib/lolcommits/plugins/lol_twitter.rb
|
247
291
|
- lib/lolcommits/plugins/loltext.rb
|
248
292
|
- lib/lolcommits/plugins/statsd.rb
|
249
293
|
- lib/lolcommits/plugins/tranzlate.rb
|
@@ -253,7 +297,13 @@ files:
|
|
253
297
|
- lolcommits.gemspec
|
254
298
|
- test/images/test_image.jpg
|
255
299
|
- test/test_lolcommits.rb
|
256
|
-
|
300
|
+
- vendor/ext/CommandCam/COPYING
|
301
|
+
- vendor/ext/CommandCam/CommandCam.exe
|
302
|
+
- vendor/ext/CommandCam/LICENSE
|
303
|
+
- vendor/ext/imagesnap/ReadMeOrDont.rtf
|
304
|
+
- vendor/ext/imagesnap/imagesnap
|
305
|
+
- vendor/fonts/Impact.ttf
|
306
|
+
homepage: http://mroth.github.com/lolcommits/
|
257
307
|
licenses:
|
258
308
|
- LGPL-3
|
259
309
|
post_install_message:
|
@@ -266,18 +316,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
266
316
|
- - ! '>='
|
267
317
|
- !ruby/object:Gem::Version
|
268
318
|
version: '0'
|
269
|
-
segments:
|
270
|
-
- 0
|
271
|
-
hash: 1355111623428597869
|
272
319
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
273
320
|
none: false
|
274
321
|
requirements:
|
275
|
-
- - ! '
|
322
|
+
- - ! '>'
|
276
323
|
- !ruby/object:Gem::Version
|
277
|
-
version:
|
278
|
-
segments:
|
279
|
-
- 0
|
280
|
-
hash: 1355111623428597869
|
324
|
+
version: 1.3.1
|
281
325
|
requirements: []
|
282
326
|
rubyforge_project: lolcommits
|
283
327
|
rubygems_version: 1.8.24
|