gradesfirst 0.6.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -7,3 +7,4 @@ gem 'webmock', '~> 1.16.0'
7
7
  gem 'pry'
8
8
  gem 'pry-debugger'
9
9
  gem 'http_magic', '~> 0.1'
10
+ gem 'dotenv'
@@ -12,6 +12,9 @@ GEM
12
12
  debugger-ruby_core_source (~> 1.2.4)
13
13
  debugger-linecache (1.2.0)
14
14
  debugger-ruby_core_source (1.2.4)
15
+ dotenv (0.11.1)
16
+ dotenv-deployment (~> 0.0.2)
17
+ dotenv-deployment (0.0.2)
15
18
  http_magic (0.1.1)
16
19
  method_source (0.8.2)
17
20
  minitest (4.7.5)
@@ -34,6 +37,7 @@ PLATFORMS
34
37
  ruby
35
38
 
36
39
  DEPENDENCIES
40
+ dotenv
37
41
  http_magic (~> 0.1)
38
42
  minitest (~> 4.7.0)
39
43
  pry
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.platform = Gem::Platform::RUBY
3
3
  s.name = "gradesfirst"
4
- s.version = "0.6.0"
4
+ s.version = "0.6.1"
5
5
  s.summary = "GradesFirst command line utility for developers."
6
6
  s.description = "This utility will help manage the various tasks developers need to do on their workstation such as database updates."
7
7
  s.license = "MIT"
@@ -24,5 +24,6 @@ Gem::Specification.new do |s|
24
24
 
25
25
  s.add_dependency('thor', '~> 0.18.1')
26
26
  s.add_dependency('http_magic', '~> 0.1.2')
27
+ s.add_dependency('dotenv', '~> 0.11.1')
27
28
  s.add_development_dependency('minitest', '~> 4.7.0')
28
29
  end
@@ -21,6 +21,7 @@ module GradesFirst
21
21
  end
22
22
 
23
23
  desc 'codetalk', GradesFirst::CodeTalkCommand.description
24
+ long_desc GradesFirst::CodeTalkCommand.long_description
24
25
  def codetalk
25
26
  execute GradesFirst::CodeTalkCommand
26
27
  end
@@ -32,6 +33,7 @@ module GradesFirst
32
33
  end
33
34
 
34
35
  desc 'pair', GradesFirst::PairCommand.description
36
+ long_desc GradesFirst::PairCommand.long_description
35
37
  def pair
36
38
  execute GradesFirst::PairCommand
37
39
  end
@@ -8,6 +8,36 @@ module GradesFirst
8
8
  'Show the next dates for code talks.'
9
9
  end
10
10
 
11
+ # Description of the "gf codetalk" command that will be used in the
12
+ # commandline help to provide a complete description.
13
+ def self.long_description
14
+ <<-LONG_DESCRIPTION
15
+ Code talk dates are calculated based on a zero day date and the list
16
+ of people who can give code talks. The dates are based on a simple
17
+ rotation.
18
+
19
+ In order for this command to work correctly, the environment variables
20
+ GF_DAY_ZERO and GF_CODE_TALKERS need to be properly defined. These can
21
+ be actual environment variables, a .env file, or .env.master file. The
22
+ .env file can be in the current directory or the home directory. The
23
+ .env.master file must be in the current directory. The precedence order
24
+ is environment variables, .env in the current directory, .env in the
25
+ home directory, and .env.master in the current directory. It is
26
+ recommended that .env.master be committed to source control and the
27
+ other options used to override .env.master.
28
+
29
+ GF_DAY_ZERO is a date in a valid Ruby date string format.
30
+
31
+ GF_CODE_TALKERS is a pipe (|) delimited list of names.
32
+
33
+ Examples:
34
+
35
+ GF_DAY_ZERO="2014-3-10 00:00:00"
36
+
37
+ GF_CODE_TALKERS="Anthony Crumley|Tom Miller|Andrew Sellers"
38
+ LONG_DESCRIPTION
39
+ end
40
+
11
41
  # Performs the gf codetalk command with show the code talk assignments
12
42
  # for the next round of talks.
13
43
  def execute
@@ -31,16 +61,7 @@ module GradesFirst
31
61
  end
32
62
 
33
63
  def code_talkers
34
- [
35
- "Anthony Crumley",
36
- "Tom Miller",
37
- "Andrew Sellers",
38
- "Matt Turney",
39
- "Zac Williams",
40
- "Ben Holley",
41
- "Chris Collins",
42
- "Evan Travers"
43
- ].sort
64
+ config.code_talkers.sort
44
65
  end
45
66
 
46
67
  def next_code_talkers
@@ -2,12 +2,12 @@ require 'gradesfirst'
2
2
 
3
3
  module GradesFirst
4
4
 
5
- # Base class for all command objects.
5
+ # Base class for all command objects
6
6
  class Command
7
7
 
8
8
  private
9
9
 
10
- # Retrieves the current git branch.
10
+ # Retrieves the current git branch
11
11
  def current_branch
12
12
  `git rev-parse --abbrev-ref HEAD`
13
13
  end
@@ -17,7 +17,7 @@ module GradesFirst
17
17
  PivotalTracker.stories[story_id].get
18
18
  end
19
19
 
20
- # Extracts a PivotalTracker story id from a branch if one is present.
20
+ # Extracts a PivotalTracker story id from a branch if one is present
21
21
  def story_id(branch = current_branch)
22
22
  if branch =~ /[0-9]+$/
23
23
  branch.match(/[0-9]+$/)[0]
@@ -26,10 +26,14 @@ module GradesFirst
26
26
  end
27
27
  end
28
28
 
29
- # Currently hard coded to return the beginning of a GradesFirst sprint but
30
- # could be put in a configuration file in the future.
29
+ # Configuration for the current project
30
+ def config
31
+ @configuration ||= GradesFirst::Config.new
32
+ end
33
+
34
+ # The beginning date of a sprint
31
35
  def day_zero
32
- Time.parse("2014-3-10 00:00:00")
36
+ config.day_zero
33
37
  end
34
38
  end
35
39
  end
@@ -0,0 +1,33 @@
1
+ require 'dotenv'
2
+
3
+ module GradesFirst
4
+ class Config
5
+ def initialize
6
+ Dotenv.load(*GradesFirst::Config.load_paths)
7
+ end
8
+
9
+ def self.load_paths
10
+ @@load_paths ||= [".env", "~/.env", ".env.master"]
11
+ end
12
+
13
+ def self.load_paths=(paths)
14
+ @@load_paths = paths
15
+ end
16
+
17
+ def code_talkers
18
+ ENV["GF_CODE_TALKERS"].to_s.split("|")
19
+ end
20
+
21
+ def day_zero
22
+ if ENV["GF_DAY_ZERO"].nil?
23
+ Time.now
24
+ else
25
+ Time.parse(ENV["GF_DAY_ZERO"])
26
+ end
27
+ end
28
+
29
+ def developers
30
+ ENV["GF_DEVELOPERS"].to_s.split("|")
31
+ end
32
+ end
33
+ end
@@ -11,6 +11,36 @@ module GradesFirst
11
11
  'Show the current developer pairings.'
12
12
  end
13
13
 
14
+ # Description of the "gf pair" Thor commeand that will be used in the
15
+ # commandline help to provide a complete description.
16
+ def self.long_description
17
+ <<-LONG_DESCRIPTION
18
+ Developer pairings are calculated based on a zero day date and the list
19
+ people who are developers. The actual pairings are made by a round robin
20
+ tournament algorithm.
21
+
22
+ In order for this command to work correctly, the environment variables
23
+ GF_DAY_ZERO and GF_DEVELOPERS need to be properly defined. These can
24
+ be actual environment variables, a .env file, or .env.master file. The
25
+ .env file can be in the current directory or the home directory. The
26
+ .env.master file must be in the current directory. The precedence order
27
+ is environment variables, .env in the current directory, .env in the
28
+ home directory, and .env.master in the current directory. It is
29
+ recommended that .env.master be committed to source control and the
30
+ other options used to override .env.master.
31
+
32
+ GF_DAY_ZERO is a date in a valid Ruby date string format.
33
+
34
+ GF_DEVELOPERS is a pipe (|) delimited list of names.
35
+
36
+ Examples:
37
+
38
+ GF_DAY_ZERO="2014-3-10 00:00:00"
39
+
40
+ GF_DEVELOPERS="Anthony Crumley|Tom Miller|Andrew Sellers"
41
+ LONG_DESCRIPTION
42
+ end
43
+
14
44
  # Performs the gf pair Thor command which determines the current
15
45
  # developer pairings.
16
46
  def execute
@@ -31,14 +61,7 @@ module GradesFirst
31
61
  def developers
32
62
  return @developers unless @developers.nil?
33
63
 
34
- @developers = [
35
- "Anthony Crumley",
36
- "Tom Miller",
37
- "Andrew Sellers",
38
- "Matt Turney",
39
- "Zac Williams",
40
- "Ben Holley"
41
- ].sort
64
+ @developers = config.developers.sort
42
65
  @developers << nil if @developers.length.odd?
43
66
 
44
67
  @developers
@@ -15,7 +15,11 @@ describe GradesFirst::CodeTalkCommand do
15
15
  end
16
16
 
17
17
  specify '#execute schedules code talks correctly' do
18
- @command.stub :code_talkers, @code_talkers do
18
+ config = OpenStruct.new(
19
+ code_talkers: @code_talkers,
20
+ day_zero: Time.parse("2014-3-10 00:00:00")
21
+ )
22
+ @command.stub :config, config do
19
23
  @command.stub :today, Date.parse("2014-3-25") do
20
24
  @command.execute
21
25
  assert_equal(
@@ -9,4 +9,12 @@ describe GradesFirst::Command do
9
9
  specify '#story_id returns nil if not story id' do
10
10
  assert_nil GradesFirst::Command.new.send(:story_id, 'abc')
11
11
  end
12
+
13
+ specify '#day_zero is the beginning of our first sprint' do
14
+ assert_equal(
15
+ Time.parse("2014-3-10 00:00:00"),
16
+ GradesFirst::Command.new.send(:day_zero),
17
+ 'Day zero should be March 10, 2014'
18
+ )
19
+ end
12
20
  end
@@ -0,0 +1,46 @@
1
+ require 'test_helper'
2
+ require 'gradesfirst/config'
3
+
4
+ describe GradesFirst::Config do
5
+ specify '#code_talkers is the list of code talkers' do
6
+ code_talkers = [
7
+ "Anthony Crumley",
8
+ "Tom Miller",
9
+ "Andrew Sellers",
10
+ "Matt Turney",
11
+ "Zac Williams",
12
+ "Ben Holley",
13
+ "Chris Collins",
14
+ "Evan Travers"
15
+ ]
16
+ assert_equal(
17
+ code_talkers,
18
+ GradesFirst::Config.new.code_talkers,
19
+ 'Configuration should return a code talker list.'
20
+ )
21
+ end
22
+
23
+ specify '#day_zero is the beginning of our first sprint' do
24
+ assert_equal(
25
+ Time.parse("2014-3-10 00:00:00"),
26
+ GradesFirst::Config.new.day_zero,
27
+ 'Day zero should be March 10, 2014'
28
+ )
29
+ end
30
+
31
+ specify '#developers is the list of developers' do
32
+ developers = [
33
+ "Anthony Crumley",
34
+ "Tom Miller",
35
+ "Andrew Sellers",
36
+ "Matt Turney",
37
+ "Zac Williams",
38
+ "Ben Holley"
39
+ ]
40
+ assert_equal(
41
+ developers,
42
+ GradesFirst::Config.new.developers,
43
+ 'Configuration should return a developer list.'
44
+ )
45
+ end
46
+ end
@@ -0,0 +1,3 @@
1
+ GF_DAY_ZERO="2014-3-10 00:00:00"
2
+ GF_CODE_TALKERS="Anthony Crumley|Tom Miller|Andrew Sellers|Matt Turney|Zac Williams|Ben Holley|Chris Collins|Evan Travers"
3
+ GF_DEVELOPERS="Anthony Crumley|Tom Miller|Andrew Sellers|Matt Turney|Zac Williams|Ben Holley"
@@ -1,6 +1,6 @@
1
- 03/25/2014 Tue - Minnie Mouse
2
- 03/27/2014 Thu - Ironman
3
- 04/01/2014 Tue - Mickey Mouse
4
- 04/03/2014 Thu - Cat Woman
5
- 04/08/2014 Tue - Wonder Woman
6
- 04/10/2014 Thu - Superman
1
+ 03/25/2014 Tue - Superman
2
+ 03/27/2014 Thu - Wonder Woman
3
+ 04/01/2014 Tue - Cat Woman
4
+ 04/03/2014 Thu - Ironman
5
+ 04/08/2014 Tue - Mickey Mouse
6
+ 04/10/2014 Thu - Minnie Mouse
@@ -1,3 +1,3 @@
1
- Mickey Mouse and Ironman
2
- Minnie Mouse and Wonder Woman
3
- Superman and Cat Woman
1
+ Cat Woman and Wonder Woman
2
+ Superman and Mickey Mouse
3
+ Minnie Mouse and Ironman
@@ -15,7 +15,11 @@ describe GradesFirst::PairCommand do
15
15
  end
16
16
 
17
17
  specify '#execute pairs developers correctly' do
18
- @command.stub :developers, @developers do
18
+ config = OpenStruct.new(
19
+ developers: @developers,
20
+ day_zero: Time.parse("2014-3-10 00:00:00")
21
+ )
22
+ @command.stub :config, config do
19
23
  @command.stub :now, Time.parse("2014-3-25 00:00:00") do
20
24
  @command.execute
21
25
  end
@@ -14,6 +14,7 @@ class MiniTest::Unit::TestCase
14
14
 
15
15
  def setup
16
16
  pivotal_tracker_setup
17
+ GradesFirst::Config.load_paths = ["test/fixtures/.env"]
17
18
  end
18
19
 
19
20
  # Retreive the contents of fixture files to be used in tests. It is easier
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gradesfirst
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
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: 2014-05-12 00:00:00.000000000 Z
12
+ date: 2014-07-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
45
  version: 0.1.2
46
+ - !ruby/object:Gem::Dependency
47
+ name: dotenv
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 0.11.1
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.11.1
46
62
  - !ruby/object:Gem::Dependency
47
63
  name: minitest
48
64
  requirement: !ruby/object:Gem::Requirement
@@ -82,6 +98,7 @@ files:
82
98
  - lib/gradesfirst/code_talk_command.rb
83
99
  - lib/gradesfirst/command.rb
84
100
  - lib/gradesfirst/commit_message_command.rb
101
+ - lib/gradesfirst/config.rb
85
102
  - lib/gradesfirst/pair_command.rb
86
103
  - lib/gradesfirst/task_add_command.rb
87
104
  - lib/gradesfirst/task_cli.rb
@@ -96,6 +113,8 @@ files:
96
113
  - test/code_talk_command_test.rb
97
114
  - test/command_test.rb
98
115
  - test/commit_message_command_test.rb
116
+ - test/config_test.rb
117
+ - test/fixtures/.env
99
118
  - test/fixtures/code_talk.txt
100
119
  - test/fixtures/commit_message.txt
101
120
  - test/fixtures/gf_branch.txt
@@ -141,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
141
160
  version: 1.3.6
142
161
  requirements: []
143
162
  rubyforge_project:
144
- rubygems_version: 1.8.25
163
+ rubygems_version: 1.8.23.2
145
164
  signing_key:
146
165
  specification_version: 3
147
166
  summary: GradesFirst command line utility for developers.