balboa 0.1.3 → 0.1.4

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.
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