bloc 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,14 @@
1
+ ### 0.1.1
2
+
3
+ * bloc add-chapter
4
+ * specs update
5
+
6
+ ### 0.1.0
7
+
8
+ * bloc tasks
9
+ * bloc authenticate
10
+ * bloc create
11
+
1
12
  ### 0.0.10
2
13
 
3
14
  * create, test, and patch commands added
@@ -0,0 +1,2 @@
1
+ test:
2
+ bundle exec rspec spec
data/bin/bloc CHANGED
@@ -4,10 +4,15 @@ require "rubygems"
4
4
  require "bloc"
5
5
 
6
6
  commands = {
7
+ # user commands
8
+ 'authenticate' => proc { Bloc::Command::Authenticate.run },
9
+ 'tasks' => proc { Bloc::Command::Tasks.run },
10
+
11
+ # author commands
7
12
  'validate' => proc { Bloc::Command::Validate.run },
8
13
  'test' => proc { Bloc::Command::Test.run },
9
- 'authenticate' => proc { Bloc::Command::Authenticate.run },
10
- 'tasks' => proc { Bloc::Command::Tasks.run }
14
+ 'create' => proc { Bloc::Command::Create.run },
15
+ 'add-chapter' => proc { Bloc::Command::AddChapter.run },
11
16
  }
12
17
 
13
18
  if commands.keys.include?(ARGV.first.downcase)
@@ -21,12 +26,17 @@ else
21
26
  Usage:
22
27
  bloc <command> [options]
23
28
 
24
- Commands:
29
+ User Commands:
30
+ authenticate Authenticate by entering your Bloc email and password
31
+ tasks Run the tasks for your current chapter
32
+
33
+ Author Commands:
25
34
  validate Attempt to parse the manifest and check for the existence of default files
26
- create["Course name"] Create a course manifest with the specified name prefilled
27
35
  test [chapter-number] If chapter number is specified, run tests for that chapter. If not, run all tests in order.
28
- patch [chapter-number] Same as "test", except apply patches first (if present)
29
- authenticate Authenticate by entering your Bloc email and password
36
+ create ["Course name"] Create a course manifest with the specified name
37
+ add-chapter <"name"> <"markdown"> <"command">
38
+ Add a chapter with the specified attributes
39
+
30
40
  eos
31
41
  puts helpstring
32
42
  end
@@ -2,6 +2,8 @@ require "bloc/command/validate"
2
2
  require "bloc/command/test"
3
3
  require "bloc/command/tasks"
4
4
  require "bloc/command/authenticate"
5
+ require "bloc/command/create"
6
+ require "bloc/command/add_chapter"
5
7
 
6
8
  module Bloc
7
9
  module Command
@@ -0,0 +1,27 @@
1
+ module Bloc::Command
2
+ class AddChapter
3
+ USAGE = <<eos
4
+ Usage:
5
+
6
+ bloc add-chapter <"name"> <"markdown"> <"command">
7
+
8
+ Example:
9
+
10
+ bloc add-chapter "Stacks and Queues" "markdown/chapter4.md" "rspec spec -t ch4 -f j"
11
+ eos
12
+ def self.run(*args)
13
+ raise Bloc::Manifest::MANIFEST_NOT_FOUND unless File.exists?(Bloc::Manifest::MANIFEST_PATH)
14
+ raise USAGE unless ARGV.size == 3
15
+ name = ARGV[1] || "New Chapter"
16
+ markdown = ARGV[2] || ""
17
+ command = ARGV[3] || ""
18
+
19
+ manifest = Bloc::Manifest.parse
20
+ manifest.add_chapter(
21
+ :name => name,
22
+ :markdown => markdown,
23
+ :command => command
24
+ )
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,21 @@
1
+ module Bloc
2
+ module Command
3
+ class Create
4
+ MANIFEST_ALREADY_EXISTS = "Found existing bloc manifest, remove and re-run command.".red
5
+
6
+ def self.run(*args)
7
+ raise MANIFEST_ALREADY_EXISTS if File.exists?(Bloc::Manifest::MANIFEST_PATH)
8
+ name = ARGV[1] || "My Bloc Course"
9
+ manifest = {
10
+ :course => {
11
+ :name => name,
12
+ :description => ""
13
+ },
14
+ :chapters => []
15
+ }
16
+
17
+ Bloc::Manifest.new(manifest).write
18
+ end
19
+ end
20
+ end
21
+ end
@@ -21,6 +21,11 @@ module Bloc
21
21
  Manifest.new(manifest)
22
22
  end
23
23
 
24
+ def add_chapter(options)
25
+ chapters << Manifest.new(options)
26
+ write
27
+ end
28
+
24
29
  def write
25
30
  begin
26
31
  Dir.mkdir(File.dirname(MANIFEST_PATH))
@@ -1,3 +1,3 @@
1
1
  module Bloc
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -0,0 +1,37 @@
1
+ require './spec/spec_helper'
2
+ require 'fakefs/safe'
3
+
4
+ module Bloc::Command
5
+ describe AddChapter do
6
+ before do
7
+ @options = {
8
+ :course => {
9
+ :name => "foobar",
10
+ :description => "foobar"
11
+ },
12
+ :chapters => []
13
+ }
14
+ end
15
+
16
+ it "raises an exception if a manifest doesn't exist" do
17
+ lambda { AddChapter.run() }.should raise_error(Bloc::Manifest::MANIFEST_NOT_FOUND)
18
+ end
19
+
20
+ it "raises and exception if not all arguments are passed" do
21
+ Bloc::Manifest.new(@options).write
22
+ lambda { AddChapter.run() }.should raise_error(AddChapter::USAGE)
23
+ end
24
+
25
+ it "adds a chapter to an existing manifest" do
26
+ FakeFS do
27
+
28
+ manifest = Bloc::Manifest.new(@options)
29
+ manifest.write
30
+ chapter_count = manifest.chapters.size
31
+ ARGV = ['stacks and queues', 'markdown/chapter4.md', 'rspec spec -t ch4 -f j']
32
+ AddChapter.run
33
+ Bloc::Manifest.parse.chapters.size.should be(chapter_count + 1)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,29 @@
1
+ require './spec/spec_helper'
2
+ require 'fakefs/safe'
3
+
4
+ module Bloc::Command
5
+ describe Create do
6
+ it "writes a valid bloc manifest" do
7
+ FakeFS do
8
+ Create.run()
9
+ lambda { Bloc::Manifest.parse }.should_not raise_error
10
+ end
11
+ end
12
+
13
+ it "raises an exception if a manifest already exists", :wip => true do
14
+ FakeFS do
15
+ manifest = {
16
+ :course => {
17
+ :name => "Fobar",
18
+ :description => "foobar"
19
+ },
20
+ :chapters => []
21
+ }
22
+
23
+ Bloc::Manifest.new(manifest).write
24
+ File.exists?(Bloc::Manifest::MANIFEST_PATH).should be(true)
25
+ lambda { Create.run() }.should raise_error(Create::MANIFEST_ALREADY_EXISTS)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,6 +1,6 @@
1
1
  require "./spec/spec_helper"
2
2
  require "stringio"
3
- require "fakefs"
3
+ require "fakefs/safe"
4
4
 
5
5
  module Bloc
6
6
  describe Bloc::Command::Tasks do
@@ -12,6 +12,7 @@ module Bloc
12
12
  let(:failed_results) { { "tests" => [{"passed" => false }, { "passed" => true }] } }
13
13
 
14
14
  before do
15
+ FakeFS.activate!
15
16
  FileUtils.mkdir_p(File.dirname(Manifest::MANIFEST_PATH))
16
17
  File.open(Manifest::MANIFEST_PATH, "w+") do |f|
17
18
  f << %Q({"course": {"name" : "CatNap"}, "chapters": [{ "command": "whatever" }, {"command": "stuff"}]})
@@ -24,7 +25,10 @@ module Bloc
24
25
  $stdout = StringIO.new
25
26
  end
26
27
 
27
- after { $stdout = STDOUT }
28
+ after do
29
+ $stdout = STDOUT
30
+ FakeFS.deactivate!
31
+ end
28
32
 
29
33
  it "runs the tasks command for the current chapter" do
30
34
  Runner.should_receive(:run).with("whatever")
@@ -1,23 +1,28 @@
1
1
  require "./spec/spec_helper"
2
- require "fakefs"
2
+ require "fakefs/safe"
3
3
  require "stringio"
4
4
 
5
5
  module Bloc::Command
6
6
  describe Validate do
7
7
  it "raises an exception if the Bloc manifest can not be found" do
8
- lambda { Validate.run() }.should raise_error(Bloc::Manifest::MANIFEST_NOT_FOUND)
8
+ FakeFS do
9
+ lambda { Validate.run() }.should raise_error(Bloc::Manifest::MANIFEST_NOT_FOUND)
10
+ end
9
11
  end
10
12
 
11
13
  it "raises an exception if the Bloc manifest has invalid JSON" do
12
- FileUtils.mkdir_p("bloc")
13
- File.open(Bloc::Manifest::MANIFEST_PATH, 'w+') {|f| f.write "<<invalid json>>" }
14
+ FakeFS do
15
+ FileUtils.mkdir_p("bloc")
16
+ File.open(Bloc::Manifest::MANIFEST_PATH, 'w+') {|f| f.write "<<invalid json>>" }
14
17
 
15
- lambda { Validate.run() }.should raise_error(Bloc::Manifest::INVALID_MANIFEST)
18
+ lambda { Validate.run() }.should raise_error(Bloc::Manifest::INVALID_MANIFEST)
19
+ end
16
20
  end
17
21
 
18
22
  it "prints a success message if the manifest is valid" do
19
- FileUtils.mkdir_p("bloc")
20
- File.open(Bloc::Manifest::MANIFEST_PATH, 'w+') {|f| f.write <<-eos
23
+ FakeFS do
24
+ FileUtils.mkdir_p("bloc")
25
+ File.open(Bloc::Manifest::MANIFEST_PATH, 'w+') {|f| f.write <<-eos
21
26
  {
22
27
  "course": {
23
28
  "name": "Foobar",
@@ -28,10 +33,11 @@ module Bloc::Command
28
33
  eos
29
34
  }
30
35
 
31
- out = StringIO.new
32
- $stdout = out
33
- Validate.run()
34
- $stdout = STDOUT
36
+ out = StringIO.new
37
+ $stdout = out
38
+ Validate.run()
39
+ $stdout = STDOUT
40
+ end
35
41
  end
36
42
  end
37
43
  end
@@ -3,6 +3,15 @@ require 'fakefs/safe'
3
3
 
4
4
  module Bloc
5
5
  describe Manifest do
6
+ before do
7
+ @options = {
8
+ :course => {
9
+ :name => "foobar",
10
+ :description => "foobar"
11
+ },
12
+ :chapters => []
13
+ }
14
+ end
6
15
  it "writes valid JSON" do
7
16
  FakeFS do
8
17
  Bloc::Manifest.new(@options).write
@@ -35,5 +44,17 @@ module Bloc
35
44
  manifest = Bloc::Manifest.new(@options)
36
45
  manifest.to_hash.class.should be(Hash)
37
46
  end
47
+
48
+ it "adds chapters correctly" do
49
+ FakeFS do
50
+ manifest = Bloc::Manifest.new(@options)
51
+ manifest.write
52
+ original_size = manifest.chapters.size
53
+
54
+ manifest.add_chapter(:name => "", :markdown => "", :command => "")
55
+ manifest.write
56
+ Bloc::Manifest.parse.chapters.size.should be(original_size + 1)
57
+ end
58
+ end
38
59
  end
39
60
  end
@@ -1,6 +1,7 @@
1
1
  $:.push File.expand_path("../lib", __FILE__)
2
2
 
3
3
  require "bloc"
4
+ require "fakefs/safe"
4
5
 
5
6
  module Helpers
6
7
  # Replace standard input with faked one StringIO.
@@ -18,4 +19,7 @@ end
18
19
 
19
20
  RSpec.configure do |conf|
20
21
  conf.include(Helpers)
22
+ conf.after do
23
+ FakeFS::FileSystem.clear
24
+ end
21
25
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bloc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -14,7 +14,7 @@ date: 2012-03-10 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
17
- requirement: &70122279915300 !ruby/object:Gem::Requirement
17
+ requirement: &70272016576460 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *70122279915300
25
+ version_requirements: *70272016576460
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: fakefs
28
- requirement: &70122279914880 !ruby/object:Gem::Requirement
28
+ requirement: &70272016576040 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *70122279914880
36
+ version_requirements: *70272016576040
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: ruby-debug19
39
- requirement: &70122279914460 !ruby/object:Gem::Requirement
39
+ requirement: &70272016575620 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *70122279914460
47
+ version_requirements: *70272016575620
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: json
50
- requirement: &70122279914040 !ruby/object:Gem::Requirement
50
+ requirement: &70272016575200 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *70122279914040
58
+ version_requirements: *70272016575200
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: colorize
61
- requirement: &70122279913620 !ruby/object:Gem::Requirement
61
+ requirement: &70272016574780 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :runtime
68
68
  prerelease: false
69
- version_requirements: *70122279913620
69
+ version_requirements: *70272016574780
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rest-client
72
- requirement: &70122279913200 !ruby/object:Gem::Requirement
72
+ requirement: &70272016574360 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: '0'
78
78
  type: :runtime
79
79
  prerelease: false
80
- version_requirements: *70122279913200
80
+ version_requirements: *70272016574360
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: hashie
83
- requirement: &70122279912780 !ruby/object:Gem::Requirement
83
+ requirement: &70272016573940 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,7 +88,7 @@ dependencies:
88
88
  version: '0'
89
89
  type: :runtime
90
90
  prerelease: false
91
- version_requirements: *70122279912780
91
+ version_requirements: *70272016573940
92
92
  description: A command-line tool for Bloc
93
93
  email:
94
94
  - roshan.choxi@gmail.com
@@ -102,6 +102,7 @@ files:
102
102
  - .rvmrc
103
103
  - CHANGELOG.md
104
104
  - Gemfile
105
+ - Makefile
105
106
  - README.md
106
107
  - Rakefile
107
108
  - bin/bloc
@@ -112,7 +113,9 @@ files:
112
113
  - lib/bloc/client/course.rb
113
114
  - lib/bloc/client/enrollment.rb
114
115
  - lib/bloc/command.rb
116
+ - lib/bloc/command/add_chapter.rb
115
117
  - lib/bloc/command/authenticate.rb
118
+ - lib/bloc/command/create.rb
116
119
  - lib/bloc/command/tasks.rb
117
120
  - lib/bloc/command/tasks/formatter.rb
118
121
  - lib/bloc/command/test.rb
@@ -126,7 +129,9 @@ files:
126
129
  - spec/client/authenticate_spec.rb
127
130
  - spec/client/course_spec.rb
128
131
  - spec/client/enrollment_spec.rb
132
+ - spec/command/add_chapter_spec.rb
129
133
  - spec/command/authenticate_spec.rb
134
+ - spec/command/create_spec.rb
130
135
  - spec/command/tasks_spec.rb
131
136
  - spec/command/validate_spec.rb
132
137
  - spec/manifest_spec.rb
@@ -160,7 +165,9 @@ test_files:
160
165
  - spec/client/authenticate_spec.rb
161
166
  - spec/client/course_spec.rb
162
167
  - spec/client/enrollment_spec.rb
168
+ - spec/command/add_chapter_spec.rb
163
169
  - spec/command/authenticate_spec.rb
170
+ - spec/command/create_spec.rb
164
171
  - spec/command/tasks_spec.rb
165
172
  - spec/command/validate_spec.rb
166
173
  - spec/manifest_spec.rb