git-flattr 0.0.3 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
data/bin/git-flattr CHANGED
@@ -1,8 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  $:.push File.expand_path("../../lib", __FILE__)
3
- require 'version'
4
- require 'flattr'
5
- require 'launchy'
3
+
4
+ require 'git-flattr'
6
5
  require 'commander/import'
7
6
 
8
7
  program :name, "git flattr"
@@ -11,114 +10,11 @@ program :version, VERSION
11
10
  program :help, 'Author', 'Simon Gate <simon@smgt.me>'
12
11
  default_command :help
13
12
 
14
- def error message
15
- puts "Error: #{message}"
16
- end
17
-
18
- class Git
19
- class <<self
20
- def command cmd, opts = []
21
- opts = [opts].flatten.map {|s| escape(s) }.join(' ')
22
- git_cmd = "git #{cmd} #{opts} 2>&1"
23
- `#{git_cmd}`.chomp
24
- end
25
-
26
- def escape(s)
27
- escaped = s.to_s.gsub('\'', '\'\\\'\'')
28
- %Q{"#{escaped}"}
29
- end
30
-
31
- def config name
32
- command('config', ['--get', name])
33
- end
34
-
35
- def set_config name, value
36
- command('config', ['--global', '--add', name, value])
37
- end
38
-
39
- def github_repository?
40
- origin = config 'remote.origin.url'
41
- !origin.match(%r{^(https://[a-z0-9\-_]+@github\.com|git@github\.com:|https://github\.com/)}).nil?
42
- end
43
-
44
- def github_url
45
- origin = config 'remote.origin.url'
46
- if @github_url.nil?
47
- if origin.match %r{^https://[a-zA-Z0-9\-_]+@github\.com}
48
- match = origin.match(%r{^https://[a-zA-Z0-9\-_]+@github\.com/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)\.git$})
49
- elsif origin.match %r{^git@github.com:}
50
- match = origin.match(%r{^git@github\.com:([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)\.git$})
51
- elsif origin.match %r{^https://github\.com/}
52
- match = origin.match(%r{^https://github\.com/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)\.git$})
53
- end
54
- if match.nil?
55
- error "Parsing GitHub origin."
56
- exit 1
57
- else
58
- @github_url = "https://github.com/#{match[1]}/#{match[2]}"
59
- end
60
- end
61
- return @github_url
62
- end
63
-
64
- def valid?
65
-
66
- git_opts = {
67
- :dir => "#{Dir.pwd}/.git",
68
- :config => "#{Dir.pwd}/.git/config"
69
- }
70
-
71
- unless File.exists?(git_opts[:dir])
72
- error "Don't seem to be a git repository"
73
- exit 1
74
- end
75
-
76
- unless File.exists?(git_opts[:config])
77
- error "Git .config file not found"
78
- exit 1
79
- end
80
-
81
- unless Git.github_repository?
82
- error "Not a GitHub repository"
83
- exit 1
84
- end
85
- end
86
- end
87
- end
88
-
89
- module Auth
90
- class <<self
91
- def is_authed?
92
- Git.config('flattr.token') != ""
93
- end
94
-
95
- def do!
96
- begin
97
- Launchy.open("https://git-flattr.herokuapp.com/")
98
- token = ask("Token: ")
99
- rescue Exception => e
100
- puts e.message
101
- puts "Seems like you are missing a Flattr access token."
102
- puts "Browse to http://git-flattr.herokuapp.com and follow the instructions"
103
- token = ask("Token: ")
104
- end
105
- if token.nil?
106
- error "Invalid access token"
107
- exit 1
108
- end
109
-
110
- Git.set_config "flattr.token", token.chomp
111
- end
112
- end
113
- end
114
-
115
13
  Flattr.configure do |config|
116
14
  config.access_token = Git.config 'flattr.token'
117
15
  end
118
16
 
119
17
  command :repo do |c|
120
-
121
-
122
18
  c.syntax = "git flattr repo"
123
19
  c.description = "Flattr the repository"
124
20
  c.action do |args, options|
@@ -138,10 +34,8 @@ command :repo do |c|
138
34
 
139
35
  rescue Flattr::Error::Unauthorized => e
140
36
  error e.message
141
- exit 1
142
37
  rescue Flattr::Error::Forbidden => e
143
38
  error e.message
144
- exit 1
145
39
  end
146
40
  end
147
41
  end
@@ -158,6 +52,44 @@ command :commit do |c|
158
52
  end
159
53
 
160
54
  ARGV.shift
55
+
56
+ commit = ARGV.shift
57
+ if commit.nil?
58
+ error "No commit supplied"
59
+ end
60
+
61
+ commit = Git.commit commit
62
+
63
+ if !commit
64
+ error "Commit does not exist in this repository"
65
+ end
66
+
67
+ commit_url = "#{Git.github_url}/commit/#{commit}"
68
+ flattr = Flattr.new
69
+ puts commit_url
70
+ flattr.flattr commit_url
71
+ thing = flattr.thing_lookup Git.github_url
72
+ puts "Flattred #{Git.github_url} (#{thing.link})!"
73
+ exit 0
74
+ rescue Flattr::Error::Unauthorized => e
75
+ error e.message
76
+ rescue Flattr::Error::Forbidden => e
77
+ error e.message
78
+ end
79
+ end
80
+ end
81
+
82
+ command :info do |c|
83
+ c.syntax = "git flattr info"
84
+ c.description = "Information about the current repository"
85
+ c.action do |args, opts|
86
+ Git.valid?
87
+ flattr = Flattr.new
88
+ thing = flattr.thing_lookup Git.github_url
89
+ if thing
90
+ puts "[#{thing.flattrs}] flattrs, #{thing.title} ( #{thing.url} )"
91
+ else
92
+ puts "This GitHub repo is not on Flattr."
161
93
  end
162
94
  end
163
95
  end
data/lib/git-flattr.rb ADDED
@@ -0,0 +1,119 @@
1
+ require 'version'
2
+ require 'flattr'
3
+ require 'launchy'
4
+
5
+ def error message
6
+ puts "Error: #{message}"
7
+ exit 1
8
+ end
9
+
10
+ class Git
11
+ class <<self
12
+ def command cmd, opts = []
13
+ opts = [opts].flatten.map {|s| escape(s) }.join(' ')
14
+ git_cmd = "git #{cmd} #{opts} 2>&1"
15
+ result = `#{git_cmd}`.chomp
16
+ if $?.to_i == 0
17
+ return result
18
+ else
19
+ return false
20
+ end
21
+ end
22
+
23
+ def escape(s)
24
+ escaped = s.to_s.gsub('\'', '\'\\\'\'')
25
+ %Q{"#{escaped}"}
26
+ end
27
+
28
+ def config name
29
+ command('config', ['--get', name])
30
+ end
31
+
32
+ def set_config name, value
33
+ command('config', ['--global', '--add', name, value])
34
+ end
35
+
36
+ def current_repo_github?
37
+ origin = config 'remote.origin.url'
38
+ github_repo? origin
39
+ end
40
+
41
+ def commit sha
42
+ #git log -1 --format=%H 53bebbe
43
+ command("log", ["-1", "--format=%H", sha])
44
+ end
45
+
46
+ def github_url
47
+ origin = config 'remote.origin.url'
48
+ if github_repo? origin
49
+ return @github_url
50
+ end
51
+ end
52
+
53
+ def github_repo? url
54
+
55
+ if url.match %r{^https://[\w-]+@github\.com}
56
+ match = url.match(%r{^https://[\w-]+@github\.com/([\w-]+)/([\w-.]+)\.git$})
57
+ elsif url.match %r{^git@github\.com:}
58
+ match = url.match(%r{^git@github\.com:([\w-]+)/([\w-.]+)\.git$})
59
+ elsif url.match %r{^git://github\.com/}
60
+ match = url.match(%r{^git://github\.com/([\w-]+)/([\w-.]+)\.git$})
61
+ elsif url.match %r{^https://github\.com/}
62
+ match = url.match(%r{^https://github\.com/([\w-]+)/([\w-.]+)\.git$})
63
+ end
64
+
65
+ if !match.nil?
66
+ @github_url = "https://github.com/#{match[1]}/#{match[2]}"
67
+ return true
68
+ else
69
+ @github_url = nil
70
+ return false
71
+ end
72
+ end
73
+
74
+ def valid?
75
+
76
+ git_opts = {
77
+ :dir => "#{Dir.pwd}/.git",
78
+ :config => "#{Dir.pwd}/.git/config"
79
+ }
80
+
81
+ unless File.exists?(git_opts[:dir])
82
+ error "Don't seem to be a git repository"
83
+ end
84
+
85
+ unless File.exists?(git_opts[:config])
86
+ error "Git .config file not found"
87
+ end
88
+
89
+ unless Git.current_repo_github?
90
+ error "Not a GitHub repository"
91
+ end
92
+ end
93
+ end
94
+ end
95
+
96
+ module Auth
97
+ class <<self
98
+ def is_authed?
99
+ Git.config('flattr.token') != ""
100
+ end
101
+
102
+ def do!
103
+ begin
104
+ Launchy.open("https://git-flattr.herokuapp.com/")
105
+ token = ask("Token: ")
106
+ rescue Exception => e
107
+ puts e.message
108
+ puts "Seems like you are missing a Flattr access token."
109
+ puts "Browse to http://git-flattr.herokuapp.com and follow the instructions"
110
+ token = ask("Token: ")
111
+ end
112
+ if token.nil?
113
+ error "Invalid access token"
114
+ end
115
+
116
+ Git.set_config "flattr.token", token.chomp
117
+ end
118
+ end
119
+ end
data/lib/version.rb CHANGED
@@ -1 +1 @@
1
- VERSION="0.0.3"
1
+ VERSION="0.0.9"
data/spec/git_spec.rb ADDED
@@ -0,0 +1,26 @@
1
+ $:.push File.expand_path("../../lib", __FILE__)
2
+ require "git-flattr"
3
+
4
+ github_urls = [
5
+ "git@github.com:kallux/5defence.git",
6
+ "https://simon@github.com/kallux/5defence.git",
7
+ "git://github.com/kallux/5defence.git",
8
+ "git@github.com:simon/git-flattr.git",
9
+ "https://simon@github.com/simon/git-flattr.git",
10
+ "git://github.com/simon/git-flattr.git",
11
+ "https://github.com/voxpelli/jquery-alterbyobject.git",
12
+ "git://github.com/voxpelli/jquery-alterbyobject.git",
13
+ "git@github.com:simon/colorful_json.git",
14
+ "https://simon@github.com/simon/colorful_json.git",
15
+ "git://github.com/simon/colorful_json.git",
16
+ "https://github.com/Ask11/backbone.offline.git",
17
+ "git://github.com/Ask11/backbone.offline.git"
18
+ ]
19
+
20
+ describe Git, '#github_repo?' do
21
+ it "returns true for all github urls" do
22
+ github_urls.each { |url|
23
+ Git.github_repo?(url).should be_true
24
+ }
25
+ end
26
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-flattr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-06 00:00:00.000000000 Z
12
+ date: 2012-05-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: flattr
@@ -74,7 +74,9 @@ files:
74
74
  - Rakefile
75
75
  - bin/git-flattr
76
76
  - git-flattr.gemspec
77
+ - lib/git-flattr.rb
77
78
  - lib/version.rb
79
+ - spec/git_spec.rb
78
80
  homepage:
79
81
  licenses: []
80
82
  post_install_message:
@@ -99,4 +101,5 @@ rubygems_version: 1.8.23
99
101
  signing_key:
100
102
  specification_version: 3
101
103
  summary: Flattr GitHub repositories from the cli
102
- test_files: []
104
+ test_files:
105
+ - spec/git_spec.rb