vimgolf 0.1.0 → 0.1.1

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.
data/Gemfile.lock CHANGED
@@ -1,13 +1,15 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- vimgolf (0.0.1)
4
+ vimgolf (0.1.0)
5
+ json
5
6
  thor
6
7
 
7
8
  GEM
8
9
  remote: http://rubygems.org/
9
10
  specs:
10
11
  diff-lcs (1.1.2)
12
+ json (1.4.6)
11
13
  rspec (2.3.0)
12
14
  rspec-core (~> 2.3.0)
13
15
  rspec-expectations (~> 2.3.0)
@@ -22,6 +24,7 @@ PLATFORMS
22
24
  ruby
23
25
 
24
26
  DEPENDENCIES
27
+ json
25
28
  rspec
26
29
  thor
27
30
  vimgolf!
data/lib/vimgolf/cli.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  module VimGolf
2
2
 
3
- GOLFHOST = ENV['GOLFHOST'] || "http://vimgolf.com"
3
+ GOLFHOST = ENV['GOLFHOST'] || "http://vimgolf.com"
4
+ GOLFDEBUG = ENV['GOLFDEBUG'].to_sym rescue false
4
5
 
5
6
  class Error
6
7
  end
@@ -38,7 +39,7 @@ module VimGolf
38
39
  def setup
39
40
  token = VimGolf.ui.ask "Please specify your VimGolf API token (register on vimgolf.com to get it):"
40
41
 
41
- if token =~ /[\w\d]{1,32}/
42
+ if token =~ /[\w\d]{32}/
42
43
  FileUtils.mkdir_p Config.path
43
44
  FileUtils.mkdir_p Config.put_path
44
45
  Config.save({:key => token})
@@ -58,13 +59,15 @@ module VimGolf
58
59
  def put(id = nil)
59
60
  VimGolf.ui.warn "Launching VimGolf session for challenge: #{id}"
60
61
 
61
- type = download(id)
62
+ begin
63
+ type = download(id)
62
64
 
63
- if !type.nil? && !type.empty?
64
65
  # - n - no swap file, memory only editing
65
66
  # - --noplugin - don't load any plugins, lets be fair!
67
+ # -u NONE and -U none - don't load .vimrc or .gvimrc
68
+ # -i NONE - don't load .viminfo (for saved macros and the like)
66
69
  # - +0 - always start on line 0
67
- system("vim -n --noplugin +0 -W #{log(id)} #{input(id, type)}")
70
+ system("vim -n --noplugin -i NONE +0 -W #{log(id)} #{input(id, type)}")
68
71
 
69
72
  if $?.exitstatus.zero?
70
73
  diff = `diff --strip-trailing-cr #{input(id, type)} #{output(id)}`
@@ -88,7 +91,7 @@ module VimGolf
88
91
  VimGolf.ui.info "Uploaded entry, thanks for golfing!"
89
92
  VimGolf.ui.info "View the leaderboard: #{GOLFHOST}/challenges/#{id}"
90
93
  else
91
- VimGolf.ui.error "Uh oh, upload to VimGolf failed, please check your key."
94
+ VimGolf.ui.error "Uh oh, upload filed. You're not cheating are you? :-)"
92
95
  end
93
96
 
94
97
  else
@@ -103,10 +106,14 @@ module VimGolf
103
106
 
104
107
  VimGolf.ui.error error
105
108
  end
109
+
110
+ rescue Exception => e
111
+ VimGolf.ui.error "Uh oh, something wen't wrong! Error: #{e}"
112
+ VimGolf.ui.error "If the error persists, please report it to github.com/igrigorik/vimgolf"
106
113
  end
107
114
  end
108
115
 
109
- private
116
+ no_tasks do
110
117
  def download(id)
111
118
  begin
112
119
  url = URI.parse("#{GOLFHOST}/challenges/#{id}.json")
@@ -126,8 +133,8 @@ module VimGolf
126
133
  data['in']['type']
127
134
 
128
135
  rescue Exception => e
129
- VimGolf.ui.error "Uh oh, couldn't download or parse challenge, please verify your challenge id and client version."
130
- nil
136
+ debug(e)
137
+ raise "Uh oh, couldn't download or parse challenge, please verify your challenge id & client version."
131
138
  end
132
139
  end
133
140
 
@@ -146,10 +153,13 @@ module VimGolf
146
153
  JSON.parse(res.body)['status'].to_sym
147
154
 
148
155
  rescue Exception => e
149
- VimGolf.ui.error "Uh oh, entry upload has failed, please check your key."
156
+ debug(e)
157
+ raise "Uh oh, entry upload has failed, please check your key."
150
158
  end
151
159
  end
160
+ end
152
161
 
162
+ private
153
163
  def input(id, type); challenge(id) + ".#{type}"; end
154
164
  def output(id); challenge(id) + ".output"; end
155
165
  def log(id); challenge(id) + ".log"; end
@@ -157,5 +167,9 @@ module VimGolf
157
167
  def challenge(id)
158
168
  Config.put_path + "/#{id}"
159
169
  end
170
+
171
+ def debug(msg)
172
+ p [caller.first, msg] if GOLFDEBUG
173
+ end
160
174
  end
161
175
  end
@@ -1,3 +1,3 @@
1
1
  module Vimgolf
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/spec/cli_spec.rb CHANGED
@@ -22,4 +22,20 @@ describe VimGolf do
22
22
  out.should include("launch")
23
23
  end
24
24
 
25
+ describe "download / upload challenge" do
26
+ let(:c) { VimGolf::CLI.new }
27
+
28
+ it "should raise error on invalid challenge" do
29
+ lambda { c.download('invalidID') }.should raise_error
30
+ end
31
+
32
+ it "should return type of challenge on success" do
33
+ c.download('4d1a1c36567bac34a9000002').should == "rb"
34
+ end
35
+
36
+ it "should raise error on invalid upload id" do
37
+ lambda { c.upload('invalidID') }.should raise_error
38
+ end
39
+ end
40
+
25
41
  end
data/vimgolf.gemspec CHANGED
@@ -13,8 +13,9 @@ Gem::Specification.new do |s|
13
13
  s.description = s.summary
14
14
 
15
15
  s.rubyforge_project = "vimgolf"
16
- s.add_dependency "thor"
16
+ s.add_dependency "thor", ">= 0.14.6"
17
17
  s.add_dependency "json"
18
+ s.add_dependency "highline"
18
19
 
19
20
  s.add_development_dependency "rspec"
20
21
 
@@ -22,4 +23,4 @@ Gem::Specification.new do |s|
22
23
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
24
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
24
25
  s.require_paths = ["lib"]
25
- end
26
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 0
9
- version: 0.1.0
8
+ - 1
9
+ version: 0.1.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Ilya Grigorik
@@ -27,7 +27,9 @@ dependencies:
27
27
  - !ruby/object:Gem::Version
28
28
  segments:
29
29
  - 0
30
- version: "0"
30
+ - 14
31
+ - 6
32
+ version: 0.14.6
31
33
  type: :runtime
32
34
  version_requirements: *id001
33
35
  - !ruby/object:Gem::Dependency
@@ -44,7 +46,7 @@ dependencies:
44
46
  type: :runtime
45
47
  version_requirements: *id002
46
48
  - !ruby/object:Gem::Dependency
47
- name: rspec
49
+ name: highline
48
50
  prerelease: false
49
51
  requirement: &id003 !ruby/object:Gem::Requirement
50
52
  none: false
@@ -54,8 +56,21 @@ dependencies:
54
56
  segments:
55
57
  - 0
56
58
  version: "0"
57
- type: :development
59
+ type: :runtime
58
60
  version_requirements: *id003
61
+ - !ruby/object:Gem::Dependency
62
+ name: rspec
63
+ prerelease: false
64
+ requirement: &id004 !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ segments:
70
+ - 0
71
+ version: "0"
72
+ type: :development
73
+ version_requirements: *id004
59
74
  description: CLI client for vimgolf.com
60
75
  email:
61
76
  - ilya@igvita.com