gradesfirst 0.6.0 → 0.6.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 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.