checkcheckit 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -4,8 +4,7 @@ source 'https://rubygems.org'
4
4
  gemspec
5
5
 
6
6
  group :test do
7
- gem 'minitest'
8
7
  gem 'fakefs'
9
8
  gem 'ruby-debug19'
10
- gem 'turn'
9
+ gem 'vault-test-tools'
11
10
  end
data/README.md CHANGED
@@ -8,17 +8,15 @@ use checklists, like a boss
8
8
 
9
9
  ## TODO
10
10
 
11
+ - run on phone
12
+ - kick off from cmd line
13
+ - send email to self
14
+ - click on url in email in phone
11
15
  - save a run
12
16
  - to file
13
17
  - to service
14
18
  - resume a run
15
19
  - run to campfire
16
- - commands with confirmation
17
- - saves results
18
- - run on phone
19
- - kick off from cmd line
20
- - send email to self
21
- - click on url in email in phone
22
20
 
23
21
  ## Usage
24
22
 
data/checkcheckit.gemspec CHANGED
@@ -18,4 +18,6 @@ Gem::Specification.new do |gem|
18
18
  gem.require_paths = ["lib"]
19
19
 
20
20
  gem.add_dependency 'lucy-goosey', '~> 0.2.0'
21
+ gem.add_dependency 'excon'
22
+ gem.add_dependency 'yajl-ruby'
21
23
  end
@@ -15,6 +15,7 @@ class CheckCheckIt::Console
15
15
 
16
16
  def run!(args = [])
17
17
  @options = Lucy::Goosey.parse_options(args)
18
+ @options['email'] ||= ENV['CHECKCHECKIT_EMAIL']
18
19
  @list_dir = File.expand_path(@options.fetch('home', '~/checkcheckit'))
19
20
 
20
21
  if args.length == 0
@@ -36,9 +37,19 @@ class CheckCheckIt::Console
36
37
  list(args)
37
38
  return
38
39
  end
39
- hit = Dir[dir + '/*/*'].find{ |fname| fname.include? target }
40
- if hit
41
- step_through_list(List.new(hit))
40
+ list_name = Dir[dir + '/*/*'].find{ |fname| fname.include? target }
41
+ if list_name
42
+ list = List.new(list_name)
43
+ if emails = @options['email']
44
+ web_service_url = ENV['CHECKCHECKIT_URL']
45
+ response = Excon.post(web_service_url, :body => {
46
+ emails: emails,
47
+ list: list.to_h
48
+ }.to_json,
49
+ :headers => { 'Content-Type' => 'application/json' })
50
+ end
51
+
52
+ step_through_list(list)
42
53
  else
43
54
  puts "Could not find checklist via: #{target}"
44
55
  end
@@ -97,8 +108,7 @@ class CheckCheckIt::Console
97
108
  puts
98
109
  end
99
110
 
100
- msg = results.all? { |r| r } ? "Done" : "Issues"
101
- puts "#{fmt_results(results)} #{msg}"
111
+ puts "#{fmt_results(results)} Done"
102
112
  save_results(list, results)
103
113
  end
104
114
 
@@ -6,6 +6,11 @@ class List
6
6
  @name = fname.sub(File.extname(fname), '')
7
7
  @body = File.read(file)
8
8
  @steps = parse_steps(@body)
9
+ @current_step = 0
10
+ end
11
+
12
+ def to_h
13
+ {name: @name, steps: @steps.map(&:to_h)}
9
14
  end
10
15
 
11
16
  private
@@ -33,5 +38,9 @@ class List
33
38
  @name = name
34
39
  @body = body
35
40
  end
41
+
42
+ def to_h
43
+ {name: @name, body: @body}
44
+ end
36
45
  end
37
46
  end
@@ -1,3 +1,3 @@
1
1
  module CheckCheckIt
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/checkcheckit.rb CHANGED
@@ -1,4 +1,7 @@
1
1
  require 'lucy-goosey'
2
+ require 'excon'
3
+ require 'yajl/json_gem'
4
+
2
5
  require "checkcheckit/version"
3
6
 
4
7
  module CheckCheckIt
data/test/console_test.rb CHANGED
@@ -23,6 +23,7 @@ class ConsoleTest < CheckCheckIt::TestCase
23
23
 
24
24
 
25
25
  def test_default_no_notes
26
+ Examples.create_grocery_list(home)
26
27
  console.in_stream = MiniTest::Mock.new
27
28
  console.out_stream = MiniTest::Mock.new
28
29
 
@@ -39,22 +40,44 @@ class ConsoleTest < CheckCheckIt::TestCase
39
40
  end
40
41
 
41
42
  def test_includes_notes
43
+ Examples.create_grocery_list(home)
42
44
  console.in_stream = MiniTest::Mock.new
43
45
  console.out_stream = MiniTest::Mock.new
44
46
 
45
- 9.times do
46
- console.out_stream.expect :puts, true, [String]
47
- end
48
- 3.times do
49
- console.out_stream.expect :print, true, ["Check: "]
50
- console.out_stream.expect :print, true, ["Notes: "]
51
- end
47
+ #check 1
48
+ console.out_stream.expect :puts, true, ["|...| Step 1: pineapple"]
49
+ console.out_stream.expect :print, true, ["Check: "]
52
50
  console.in_stream.expect :gets, "n"
51
+
52
+ # notes 1
53
+ console.out_stream.expect :print, true, ["Notes: "]
53
54
  console.in_stream.expect :gets, "Shit's fucked"
55
+ console.out_stream.expect :puts, true, ['']
56
+
57
+ #check 2
58
+ console.out_stream.expect :puts, true, ["|-..| Step 2: mangoes"]
59
+ console.out_stream.expect :puts, true, [String]
60
+ console.out_stream.expect :print, true, ["Check: "]
54
61
  console.in_stream.expect :gets, "y"
55
- console.in_stream.expect :gets, ""
62
+
63
+ # notes 2
64
+ console.out_stream.expect :print, true, ["Notes: "]
65
+ console.in_stream.expect :gets, "Tasty"
66
+ console.out_stream.expect :puts, true, ['']
67
+
68
+ # NO FUDGE FOR YOU
69
+ console.out_stream.expect :puts, true, ["|-+.| Step 3: fudge"]
70
+ console.out_stream.expect :puts, true, [String]
71
+ console.out_stream.expect :print, true, ["Check: "]
56
72
  console.in_stream.expect :gets, "n"
57
- console.in_stream.expect :gets, "Really, bad"
73
+
74
+ # notes 3
75
+ console.out_stream.expect :print, true, ["Notes: "]
76
+ console.in_stream.expect :gets, "Tasty"
77
+ console.out_stream.expect :puts, true, ['']
78
+
79
+ console.out_stream.expect :puts, true, ['|-+-| Done']
80
+
58
81
  check "start groceries --notes"
59
82
  console.in_stream.verify
60
83
  console.out_stream.verify
data/test/helper.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '../lib')))
2
2
  ENV['RACK_ENV'] = 'test'
3
+ ENV['CHECKCHECKIT_URL'] = 'http://example.com'
3
4
 
4
- require 'minitest/unit'
5
- require 'minitest/spec'
5
+ require 'vault-test-tools'
6
6
  require 'minitest/mock'
7
7
  require 'fakefs'
8
8
  require 'checkcheckit'
@@ -12,9 +12,9 @@ module Examples
12
12
  dir = File.join(home, 'personal')
13
13
  FileUtils.mkdir_p(dir)
14
14
  File.open(File.join(dir, 'groceries'), 'w') do |file|
15
- file << "- pineapple "
16
- file << "\n- mangoes \n enhance the flavor with \n spice "
17
- file << "\n- fudge \n best from a place in sutter creek"
15
+ file << "- pineapple \n"
16
+ file << "- mangoes \n enhance the flavor with \n spice\n"
17
+ file << "- fudge \n best from a place in sutter creek"
18
18
  end
19
19
  end
20
20
  end
@@ -50,23 +50,21 @@ module ConsoleTestHelpers
50
50
  console.list_dir || '~/checkcheckit'
51
51
  end
52
52
 
53
- end
54
-
55
- class CheckCheckIt::TestCase < MiniTest::Unit::TestCase
56
- include ConsoleTestHelpers
57
-
58
53
  def setup
59
54
  super
60
55
  reset_console
56
+ FakeFS.activate!
57
+ Excon.defaults[:mock] = true
61
58
  end
62
- end
63
59
 
64
- class CheckCheckIt::Spec < MiniTest::Spec
65
- include ConsoleTestHelpers
66
-
67
- before do
68
- reset_console
60
+ def teardown
61
+ super
62
+ FakeFS.deactivate!
63
+ Excon.stubs.clear
69
64
  end
70
65
  end
71
66
 
67
+ CheckCheckIt::TestCase = Class.new(Vault::TestCase)
68
+ CheckCheckIt::Spec = Class.new(Vault::Spec)
72
69
  MiniTest::Spec.register_spec_type //, CheckCheckIt::Spec
70
+ Vault::Test.include_in_all Vault::Test::EnvironmentHelpers, ConsoleTestHelpers
data/test/list_test.rb CHANGED
@@ -3,6 +3,7 @@ require 'helper'
3
3
  class ListTest < CheckCheckIt::TestCase
4
4
 
5
5
  def setup
6
+ super
6
7
  Examples.create_grocery_list(home)
7
8
  @list = List.new('~/checkcheckit/personal/groceries')
8
9
  end
@@ -11,7 +12,15 @@ class ListTest < CheckCheckIt::TestCase
11
12
  @list.steps.size.must_equal 3
12
13
  end
13
14
 
14
- def test_list_parses_commands
15
- end
16
15
 
16
+ def test_to_json
17
+ @list.to_h.must_equal({
18
+ name: 'groceries',
19
+ steps: [
20
+ { name: 'pineapple', body: '' },
21
+ { name: 'mangoes', body: " enhance the flavor with \n spice\n" },
22
+ { name: 'fudge', body: ' best from a place in sutter creek'}
23
+ ]
24
+ })
25
+ end
17
26
  end
data/test/start_test.rb CHANGED
@@ -3,12 +3,13 @@ require 'helper'
3
3
  class StartTest < CheckCheckIt::TestCase
4
4
 
5
5
  def setup
6
+ super
6
7
  Examples.create_grocery_list(home)
8
+ console.in_stream = MiniTest::Mock.new
7
9
  end
8
10
 
9
11
  def test_list_parses_steps
10
- console.in_stream = MiniTest::Mock.new
11
- 6.times { console.in_stream.expect :gets, "y" }
12
+ 3.times { console.in_stream.expect :gets, "y" }
12
13
  result = check "start groceries"
13
14
  console.in_stream.verify
14
15
  end
@@ -19,5 +20,35 @@ class StartTest < CheckCheckIt::TestCase
19
20
  output.must_include "groceries"
20
21
  end
21
22
 
23
+ # When you do
24
+ #
25
+ # check start deploy --email csquared@heroku.com
26
+ #
27
+ # It PUT/POSTS? to the checkcheckit webservice
28
+ #
29
+ # The webservice sends you an email with a link to the list so
30
+ # you can run it on the web.
31
+ def test_email_flag_triggers_live_mode
32
+ Excon.stub({:method => :post, :body => {
33
+ emails: "csquared@heroku.com,thea.lamkin@gmail.com",
34
+ list: List.new(home + '/personal/groceries').to_h
35
+ }.to_json}, {:status => 200})
36
+ 3.times { console.in_stream.expect :gets, "y" }
37
+ check "start groceries --email csquared@heroku.com,thea.lamkin@gmail.com"
38
+ end
39
+
40
+ # Same as above but with env set
41
+ def test_reads_email_from_env
42
+ set_env 'CHECKCHECKIT_EMAIL', "csquared@heroku.com,thea.lamkin@gmail.com"
43
+ Excon.stub({:method => :post, :body => {
44
+ emails: "csquared@heroku.com,thea.lamkin@gmail.com",
45
+ list: List.new(home + '/personal/groceries').to_h
46
+ }.to_json}, {:status => 200})
47
+ 3.times { console.in_stream.expect :gets, "y" }
48
+ check "start groceries"
49
+ end
50
+
51
+ def test_reads_url_from_env
52
+ end
22
53
  end
23
54
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: checkcheckit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -27,6 +27,38 @@ dependencies:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  version: 0.2.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: excon
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
+ - !ruby/object:Gem::Dependency
47
+ name: yajl-ruby
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
30
62
  description: Checklists like a boss
31
63
  email:
32
64
  - christopher.continanza@gmail.com
@@ -66,7 +98,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
66
98
  version: '0'
67
99
  segments:
68
100
  - 0
69
- hash: 2786592115624543553
101
+ hash: 2187395605340468974
70
102
  required_rubygems_version: !ruby/object:Gem::Requirement
71
103
  none: false
72
104
  requirements:
@@ -75,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
107
  version: '0'
76
108
  segments:
77
109
  - 0
78
- hash: 2786592115624543553
110
+ hash: 2187395605340468974
79
111
  requirements: []
80
112
  rubyforge_project:
81
113
  rubygems_version: 1.8.23
@@ -88,3 +120,4 @@ test_files:
88
120
  - test/list_test.rb
89
121
  - test/resume_test.rb
90
122
  - test/start_test.rb
123
+ has_rdoc: