balboa 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4c25acee3579ab0c156d12ce5e438e813d1547d8
4
- data.tar.gz: 1476c5b8e2c9a49b7f5e5d2d5591888234e3b5f0
3
+ metadata.gz: 5afd6ed3afeeb7f8b8df77c2eac12c2f0c331056
4
+ data.tar.gz: f61c6b46fe1b9cfdf11ad6517c7576d672fae7d1
5
5
  SHA512:
6
- metadata.gz: 3fcfe0ee354b9c9996907fb1d529e72d6910127b9abd812dbbb486259ea35f1ed21835843febaf6b626113b3dc95fda6fb0ec55b9bbf425459f69152c718dc4b
7
- data.tar.gz: 387295753dda02919638b846b917bb4e9a63992ae178f74e1ff6b184628d1224f2ac50d3507e6badb22673f4a0784cbdca1bdcbdd4d79504c16be5dfc48f105e
6
+ metadata.gz: c42fb6f86aefaf243229ce60e8192c24f4970ed2892754fef303f775a268f9a56dec8ecb49061b37ea561f079c2c74bc7fb14fc446a1a226ab0e75dbd03c8159
7
+ data.tar.gz: 392b518101ad26e4be02afd360eace9dc9980f8e546609df9d9ca7bb1b59c9f2b7b6acb14df75b5df12159331b4b1ade2e4619e1a8128cf9a27143d091367594
data/.gitignore CHANGED
@@ -7,4 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
- .balboa
10
+ .balboa.yml
data/bin/balboa CHANGED
@@ -2,20 +2,24 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require_relative '../lib/balboa'
5
+ require_relative '../lib/balboa/cli/parser_builder'
6
+ require_relative '../lib/balboa/interactor/interactor_builder'
5
7
 
6
- defaults = if File.exist?(Balboa::CONFIG_FILE)
8
+ require 'highline/import'
9
+
10
+ options = if File.exist?(Balboa::CONFIG_FILE)
7
11
  YAML.load_file(Balboa::CONFIG_FILE)
8
12
  else
9
- Balboa::CLI::Defaults.prompt
13
+ Balboa::CLI::Defaults.prompt(HighLine)
10
14
  end
11
15
 
12
- options = Balboa::CLI::Options.parse(ARGV, defaults)
16
+ Balboa::CLI::ParserBuilder.create(ARGV, options).parse!
13
17
 
14
18
  raw_interactor = Balboa::Interactor::InteractorBuilder.create(options)
15
19
  interactor = Balboa::Interactor::InteractorWrapper.new(raw_interactor)
16
20
 
17
21
  app_last = Balboa::CLI::Command::LastCommand.new(interactor)
18
- app_punch = Balboa::CLI::Command::PunchCommand.new(interactor)
22
+ app_punch = Balboa::CLI::Command::PunchCommand.new(interactor, HighLine)
19
23
  app_reset = Balboa::CLI::Command::ResetCommand.new
20
24
  app_star_wars = Balboa::CLI::Command::StarWarsCommand.new
21
25
 
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'holidays'
4
- require 'highline/import'
3
+ require_relative '../../punch_date'
5
4
 
6
5
  module Balboa
7
6
  module CLI
8
7
  module Command
9
8
  class PunchCommand
10
- def initialize(interactor)
9
+ def initialize(interactor, cli)
11
10
  @interactor = interactor
11
+ @cli = cli
12
12
  end
13
13
 
14
14
  def execute
@@ -25,7 +25,7 @@ module Balboa
25
25
  yesterday = Date.today - 1
26
26
 
27
27
  (last_punch_date..yesterday).map do |date|
28
- PunchDate.new(date)
28
+ PunchDate.new(date, @cli)
29
29
  end
30
30
  end
31
31
 
@@ -40,49 +40,6 @@ module Balboa
40
40
  def last_punch_date
41
41
  Date.parse(@interactor.last) + 1
42
42
  end
43
-
44
- class PunchDate
45
- def initialize(date)
46
- @date = date
47
- @holiday = Hash(Holidays.on(@date, :br).first)
48
- end
49
-
50
- def punchable?
51
- if weekend?
52
- false
53
- elsif holiday?
54
- ask_for_punch
55
- else
56
- true
57
- end
58
- end
59
-
60
- def to_s
61
- @date.to_s
62
- end
63
-
64
- def strftime(format)
65
- @date.strftime(format)
66
- end
67
-
68
- private
69
-
70
- def ask_for_punch
71
- HighLine.agree(" #{holiday_name}. Punch? (y|n) ")
72
- end
73
-
74
- def holiday_name
75
- @holiday[:name]
76
- end
77
-
78
- def holiday?
79
- !!@holiday
80
- end
81
-
82
- def weekend?
83
- @date.sunday? || @date.saturday?
84
- end
85
- end
86
43
  end
87
44
  end
88
45
  end
@@ -1,18 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'yaml'
4
- require 'highline'
5
4
 
6
5
  module Balboa
7
6
  module CLI
8
7
  class Defaults
9
- def self.prompt
10
- new.prompt
8
+ def self.prompt(*args)
9
+ new(*args).prompt
11
10
  end
12
11
 
13
- def initialize
14
- @config = {}
15
- @cli = HighLine.new
12
+ def initialize(cli, config={})
13
+ @config = config
14
+ @cli = cli
16
15
  end
17
16
 
18
17
  def prompt
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'holidays'
4
+
5
+ module Balboa
6
+ class PunchDate
7
+ def initialize(date, cli)
8
+ @date = date
9
+ @cli = cli
10
+ @holiday = Hash(Holidays.on(date, :br).first)
11
+ end
12
+
13
+ def punchable?
14
+ if weekend?
15
+ false
16
+ elsif holiday?
17
+ ask_for_punch
18
+ else
19
+ true
20
+ end
21
+ end
22
+
23
+ def to_s
24
+ @date.to_s
25
+ end
26
+
27
+ def strftime(format)
28
+ @date.strftime(format)
29
+ end
30
+
31
+ private
32
+
33
+ def ask_for_punch
34
+ @cli.agree(" #{holiday_name}. Punch? (y|n) ")
35
+ end
36
+
37
+ def holiday_name
38
+ @holiday[:name]
39
+ end
40
+
41
+ def holiday?
42
+ !@holiday.empty?
43
+ end
44
+
45
+ def weekend?
46
+ @date.sunday? || @date.saturday?
47
+ end
48
+ end
49
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Balboa
4
- VERSION = '0.1.3'.freeze
4
+ VERSION = '0.1.4'.freeze
5
5
  end
data/lib/balboa.rb CHANGED
@@ -6,13 +6,11 @@ require_relative 'balboa/host'
6
6
 
7
7
  require_relative 'balboa/interactor/capybara_interactor'
8
8
  require_relative 'balboa/interactor/interactor_wrapper'
9
- require_relative 'balboa/interactor/interactor_builder'
10
9
  require_relative 'balboa/interactor/command/fetch_last_punch_command'
11
10
  require_relative 'balboa/interactor/command/fill_punch_command'
12
11
  require_relative 'balboa/interactor/command/login_command'
13
12
 
14
13
  require_relative 'balboa/cli/application'
15
- require_relative 'balboa/cli/options'
16
14
  require_relative 'balboa/cli/defaults'
17
15
  require_relative 'balboa/cli/command/last_command'
18
16
  require_relative 'balboa/cli/command/punch_command'
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'highline'
5
+
6
+ describe Balboa::CLI::Defaults do
7
+ end
@@ -22,4 +22,13 @@ describe Balboa::Interactor::InteractorWrapper do
22
22
 
23
23
  expect(interactor).to have_received(:last).once
24
24
  end
25
+
26
+ it 'forwards options call to its dependency' do
27
+ interactor = double
28
+ allow(interactor).to receive(:options)
29
+
30
+ described_class.new(interactor).options
31
+
32
+ expect(interactor).to have_received(:options).once
33
+ end
25
34
  end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'highline/import'
5
+
6
+ describe Balboa::PunchDate do
7
+ it 'responds to to_s' do
8
+ date = Date.new(2011,1,1)
9
+ punch_date = described_class.new(date, nil)
10
+
11
+ expect(punch_date.to_s).to eq('2011-01-01')
12
+ end
13
+
14
+ it 'responds to strftime' do
15
+ date = Date.new(2011,1,1)
16
+ punch_date = described_class.new(date, nil)
17
+
18
+ expect(punch_date.strftime('%d/%m/%Y')).to eq('01/01/2011')
19
+ end
20
+
21
+ context 'punchable' do
22
+ it 'returns false on satudays' do
23
+ date = Date.new(2011,1,1)
24
+ punch_date = described_class.new(date, nil)
25
+
26
+ expect(punch_date.punchable?).to be false
27
+ end
28
+
29
+ it 'returns false on sundays' do
30
+ date = Date.new(2011,1,2)
31
+ punch_date = described_class.new(date, nil)
32
+
33
+ expect(punch_date.punchable?).to be false
34
+ end
35
+
36
+ it 'returns true on a week day that is not a holiday' do
37
+ date = Date.new(2011,1,3)
38
+ punch_date = described_class.new(date, nil)
39
+
40
+ expect(punch_date.punchable?).to be true
41
+ end
42
+
43
+ it 'returns true if user says yes on holidays' do
44
+ input = StringIO.new("no\n")
45
+ output = StringIO.new
46
+ cli = HighLine.new(input, output)
47
+
48
+ date = Date.new(2011,4,21)
49
+ punch_date = described_class.new(date, cli)
50
+
51
+ expect(punch_date.punchable?).to be false
52
+ end
53
+
54
+ it 'returns false if user says no on holidays' do
55
+ input = StringIO.new("yes\n")
56
+ output = StringIO.new
57
+ cli = HighLine.new(input, output)
58
+
59
+ date = Date.new(2011,4,21)
60
+ punch_date = described_class.new(date, cli)
61
+
62
+ expect(punch_date.punchable?).to be true
63
+ end
64
+ end
65
+ end
data/spec/balboa_spec.rb CHANGED
@@ -10,4 +10,8 @@ describe Balboa do
10
10
  it 'has a target host' do
11
11
  expect(Balboa::HOST).not_to be nil
12
12
  end
13
+
14
+ it 'has a config file' do
15
+ expect(Balboa::CONFIG_FILE).not_to be nil
16
+ end
13
17
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: balboa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Waldyr de Souza
@@ -91,13 +91,11 @@ files:
91
91
  - features/support/env.rb
92
92
  - lib/balboa.rb
93
93
  - lib/balboa/cli/application.rb
94
- - lib/balboa/cli/command/help_command.rb
95
94
  - lib/balboa/cli/command/last_command.rb
96
95
  - lib/balboa/cli/command/punch_command.rb
97
96
  - lib/balboa/cli/command/reset_command.rb
98
97
  - lib/balboa/cli/command/star_wars_command.rb
99
98
  - lib/balboa/cli/defaults.rb
100
- - lib/balboa/cli/options.rb
101
99
  - lib/balboa/cli/parser_builder.rb
102
100
  - lib/balboa/config_file.rb
103
101
  - lib/balboa/host.rb
@@ -107,10 +105,13 @@ files:
107
105
  - lib/balboa/interactor/command/login_command.rb
108
106
  - lib/balboa/interactor/interactor_builder.rb
109
107
  - lib/balboa/interactor/interactor_wrapper.rb
108
+ - lib/balboa/punch_date.rb
110
109
  - lib/balboa/version.rb
111
110
  - spec/balboa/capybara_interactor_spec.rb
112
111
  - spec/balboa/cli/application_spec.rb
112
+ - spec/balboa/cli/defaults_spec.rb
113
113
  - spec/balboa/interactor/interactor_wrapper_spec.rb
114
+ - spec/balboa/punch_date_spec.rb
114
115
  - spec/balboa_spec.rb
115
116
  - spec/spec_helper.rb
116
117
  homepage:
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../version'
4
-
5
- module Balboa
6
- module CLI
7
- module Command
8
- class HelpCommand
9
- def execute
10
- $stdout.puts help
11
- end
12
-
13
- private
14
-
15
- def help
16
- end
17
-
18
- def quote
19
- "`Life's not about how hard of a hit you can give...'"
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'parser_builder'
4
-
5
- module Balboa
6
- module CLI
7
- class Options
8
- def self.parse(*args)
9
- new(*args).parse
10
- rescue OptionParser::InvalidOption => error
11
- $stderr.puts "Error: #{error}"
12
- exit
13
- end
14
-
15
- def initialize(argv=[], config={})
16
- @config = config
17
- @parser = Balboa::CLI::ParserBuilder.create(argv, config)
18
- end
19
-
20
- def parse
21
- @parser.parse!
22
- @config
23
- end
24
- end
25
- end
26
- end