balboa 0.1.4 → 0.1.5

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: 5afd6ed3afeeb7f8b8df77c2eac12c2f0c331056
4
- data.tar.gz: f61c6b46fe1b9cfdf11ad6517c7576d672fae7d1
3
+ metadata.gz: 4c75e34d3e6ac77e6c54426f34b818a6ab89f062
4
+ data.tar.gz: 6a5a659d87bcb2411cc32e5a2271c7cef6298465
5
5
  SHA512:
6
- metadata.gz: c42fb6f86aefaf243229ce60e8192c24f4970ed2892754fef303f775a268f9a56dec8ecb49061b37ea561f079c2c74bc7fb14fc446a1a226ab0e75dbd03c8159
7
- data.tar.gz: 392b518101ad26e4be02afd360eace9dc9980f8e546609df9d9ca7bb1b59c9f2b7b6acb14df75b5df12159331b4b1ade2e4619e1a8128cf9a27143d091367594
6
+ metadata.gz: 3f31f8113ddfc943b705d51a49131d831492e2c212fbab4d9a4127a41201874ddcc6fcdf66ec4ff06ceda1418624325bbe784afe93de2dedd2718be9668c6092
7
+ data.tar.gz: f2dd74759422b457b08be14979023417c4691ee94d8e4e1b59cf29038c5ea84e342c468114be927e02e605d7842e26ca8b46eb460dd51b0e8dd31ab1acdce636
data/Rakefile CHANGED
@@ -23,10 +23,6 @@ end
23
23
  namespace :test do
24
24
  RSpec::Core::RakeTask.new(:spec)
25
25
 
26
- Cucumber::Rake::Task.new(:features) do |t|
27
- t.cucumber_opts = 'features --format progress --color'
28
- end
29
-
30
26
  task :mutant do
31
27
  command = <<-EOS
32
28
  RUBY_THREAD_VM_STACK_SIZE=64000\
@@ -34,7 +30,6 @@ namespace :test do
34
30
  --include lib\
35
31
  --require balboa\
36
32
  --use rspec\
37
- --since master^\
38
33
  --jobs 4 'Balboa*'
39
34
  EOS
40
35
  system command
@@ -44,6 +39,6 @@ namespace :test do
44
39
  task all: ['test:spec', 'test:features', :mutant]
45
40
  end
46
41
 
47
- task ci: ['test:all', 'quality:all']
42
+ task ci: ['test:spec', 'quality:all']
48
43
 
49
44
  task default: :ci
data/bin/balboa CHANGED
@@ -2,18 +2,18 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require_relative '../lib/balboa'
5
- require_relative '../lib/balboa/cli/parser_builder'
5
+ require_relative '../lib/balboa/cli/parser'
6
6
  require_relative '../lib/balboa/interactor/interactor_builder'
7
7
 
8
8
  require 'highline/import'
9
9
 
10
10
  options = if File.exist?(Balboa::CONFIG_FILE)
11
- YAML.load_file(Balboa::CONFIG_FILE)
12
- else
13
- Balboa::CLI::Defaults.prompt(HighLine)
14
- end
11
+ YAML.load_file(Balboa::CONFIG_FILE)
12
+ else
13
+ Balboa::CLI::Defaults.prompt(HighLine)
14
+ end
15
15
 
16
- Balboa::CLI::ParserBuilder.create(ARGV, options).parse!
16
+ Balboa::CLI::Parser.parse(ARGV, options)
17
17
 
18
18
  raw_interactor = Balboa::Interactor::InteractorBuilder.create(options)
19
19
  interactor = Balboa::Interactor::InteractorWrapper.new(raw_interactor)
@@ -7,7 +7,7 @@ module Balboa
7
7
 
8
8
  def initialize(command_id)
9
9
  @command_id = command_id.to_s
10
- @commands = Hash.new { fail CommandNotFound }
10
+ @commands = Hash.new { raise CommandNotFound }
11
11
  end
12
12
 
13
13
  def add_command(key, command)
@@ -9,7 +9,7 @@ module Balboa
9
9
  end
10
10
 
11
11
  def execute
12
- $stdout.puts(@interactor.last)
12
+ $stdout.puts("\n#{@interactor.last}")
13
13
  end
14
14
  end
15
15
  end
@@ -12,10 +12,11 @@ module Balboa
12
12
  end
13
13
 
14
14
  def execute
15
- punch_dates.each do |date|
16
- $stdout.print("\n#{date.strftime("%d/%m/%Y")}")
15
+ punch_dates.reject! { |date| skip_date?(date) }
17
16
 
18
- @interactor.punch(date) unless skip_date?(date)
17
+ punch_dates.each do |date|
18
+ $stdout.print("\n#{date.strftime('%d/%m/%Y')}")
19
+ @interactor.punch(date)
19
20
  end
20
21
  end
21
22
 
@@ -9,7 +9,7 @@ module Balboa
9
9
  new(*args).prompt
10
10
  end
11
11
 
12
- def initialize(cli, config={})
12
+ def initialize(cli, config = {})
13
13
  @config = config
14
14
  @cli = cli
15
15
  end
@@ -28,25 +28,27 @@ module Balboa
28
28
 
29
29
  def create_file
30
30
  @config.reject! { |_, key| key.empty? }
31
- @config.merge!('skips' => [])
31
+ @config['skips'] = []
32
32
 
33
- File.open(Balboa::CONFIG_FILE, 'w') { |file| file.write(@config.to_yaml) }
33
+ File.open(Balboa::CONFIG_FILE, 'w') do |file|
34
+ file.write(@config.to_yaml)
35
+ end
34
36
  end
35
37
 
36
38
  def prompt_attributes
37
- @config.merge!('email' => prompt_email)
38
- @config.merge!('password' => prompt_password)
39
- @config.merge!('project' => prompt_project)
39
+ @config['email'] = prompt_email
40
+ @config['password'] = prompt_password
41
+ @config['project'] = prompt_project
40
42
  end
41
43
 
42
44
  def prompt_email
43
- @cli.ask("E-mail: ")
45
+ @cli.ask('E-mail: ')
44
46
  end
45
47
 
46
48
  def prompt_password
47
- @cli.say("\nRemember: Password can be stored as text or passed via option!")
49
+ @cli.say("\nPassword can be stored as text or passed via option!")
48
50
 
49
- @cli.ask("Password: ") { |qst| qst.echo = "*" }
51
+ @cli.ask('Password: ') { |qst| qst.echo = '*' }
50
52
  end
51
53
 
52
54
  def prompt_project
@@ -54,26 +56,26 @@ module Balboa
54
56
  end
55
57
 
56
58
  def prompt_schedule
57
- @config.merge!('start_at' => prompt_start)
58
- @config.merge!('lunch_at' => prompt_lunch)
59
- @config.merge!('restart_at' => prompt_restart)
60
- @config.merge!('leave_at' => prompt_leave)
59
+ @config['start_at'] = prompt_start
60
+ @config['lunch_at'] = prompt_lunch
61
+ @config['restart_at'] = prompt_restart
62
+ @config['leave_at'] = prompt_leave
61
63
  end
62
64
 
63
65
  def prompt_start
64
- @cli.ask("\nFirst shift: ") { |qst| qst.default = "8" }
66
+ @cli.ask("\nFirst shift: ") { |qst| qst.default = '8' }
65
67
  end
66
68
 
67
69
  def prompt_lunch
68
- @cli.ask("\nLunch: ") { |qst| qst.default = "12" }
70
+ @cli.ask("\nLunch: ") { |qst| qst.default = '12' }
69
71
  end
70
72
 
71
73
  def prompt_restart
72
- @cli.ask("\nSecond shift: ") { |qst| qst.default = "13" }
74
+ @cli.ask("\nSecond shift: ") { |qst| qst.default = '13' }
73
75
  end
74
76
 
75
77
  def prompt_leave
76
- @cli.ask("\nLeave: ") { |qst| qst.default = "17" }
78
+ @cli.ask("\nLeave: ") { |qst| qst.default = '17' }
77
79
  end
78
80
  end
79
81
  end
@@ -0,0 +1,133 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'optparse'
4
+ require 'yaml'
5
+
6
+ module Balboa
7
+ module CLI
8
+ class Parser
9
+ def self.parse(*args)
10
+ new(*args).parse
11
+ end
12
+
13
+ def initialize(argv, default_config)
14
+ @config = default_config
15
+ @argv = argv
16
+ @parser = OptionParser.new
17
+ end
18
+
19
+ def parse
20
+ configure_parser
21
+
22
+ @parser.parse!(@argv)
23
+ end
24
+
25
+ private
26
+
27
+ def configure_parser
28
+ program_name = @parser.program_name
29
+
30
+ @parser.banner = <<-EOF.gsub(/^[ ]+/, '')
31
+ \nUsage: #{program_name} [commands] [options]"
32
+
33
+ Commands:
34
+
35
+ #{program_name} last
36
+ #{program_name} punch -p '123456' -s '12/06/1992,13/06/1992,14/06/1992'
37
+ #{program_name} reset
38
+ EOF
39
+
40
+ set_options
41
+ set_utilities
42
+ end
43
+
44
+ def set_options
45
+ @parser.separator "\nOptions:"
46
+ set_attributes
47
+ set_skipped_dates
48
+ set_custom_defaults
49
+ end
50
+
51
+ def set_utilities
52
+ @parser.separator "\nUtilities:"
53
+ set_help_option
54
+ set_version_option
55
+ set_balboa_picture
56
+ end
57
+
58
+ def set_custom_defaults
59
+ message = 'Read configuration options from FILE'
60
+
61
+ @parser.on('-c', '--config \'FILE\'', message) do |file|
62
+ @config.merge!(YAML.load_file(file))
63
+ end
64
+ end
65
+
66
+ # :reek:TooManyStatements
67
+ def set_attributes
68
+ @parser.on('-e', '--email \'EMAIL\'') do |email|
69
+ @config['email'] = email
70
+ end
71
+
72
+ @parser.on('-p', '--password \'PASSWORD\'') do |password|
73
+ @config['password'] = password
74
+ end
75
+
76
+ @parser.on('-w', '--project \'PROJECT\'') do |project|
77
+ @config['project'] = project
78
+ end
79
+ end
80
+
81
+ def set_skipped_dates
82
+ message = 'Skip input dates'
83
+
84
+ @parser.on('-s', '--skip \'DATES\'', message, Array) do |dates|
85
+ parse_dates(dates)
86
+ end
87
+ end
88
+
89
+ def parse_dates(dates)
90
+ @config.merge!('skips' => dates.map { |date| Date.parse(date) })
91
+ end
92
+
93
+ def set_help_option
94
+ @parser.on('-h', '--help', 'Show this message') do
95
+ $stdout.puts @parser
96
+ exit
97
+ end
98
+ end
99
+
100
+ def set_version_option
101
+ @parser.on('-v', '--version', 'Show version') do
102
+ $stdout.puts "#{@parser.program_name} #{Balboa::VERSION}\n"
103
+ exit
104
+ end
105
+ end
106
+
107
+ # rubocop:disable Metrics/MethodLength
108
+ def set_balboa_picture
109
+ @parser.separator("\n" + [
110
+ '░░░░░░▄▄███████████████▄▄░░░░',
111
+ '░░░▄██████████████████████▄░░',
112
+ '░░█████████▀███████▀████████░',
113
+ '░█████████▀▀█▀█░░▀██▄██▄████░',
114
+ '░░████████▄▄█░▀▀▄▄█░░▀░████░░',
115
+ '░░███████▀░░░▄▄▄▄░░░▄▄▄███░░░',
116
+ '░▀███████░░▄▀▀██▀░░█▄░▄▀███░░',
117
+ '░░██████▀░░█░██▀▀░░████░██░░░',
118
+ '░████████░░░░▀▀░░░░▀▄░▀▀█░░░░',
119
+ '░█▀██████░░░░░░░░░░░░█░░█░░░░',
120
+ '░▀▄████▄▀░░░░░░░░░░░▀▀░░░█░░░',
121
+ '░▄██████▀▄░░░░░░░░░▄▄▄░░░█░░░',
122
+ '░███████░█░░░░░░░░██▄▄█░░░█░░',
123
+ '░░██████░░█░░░░░░░░░░░░░░░█░░',
124
+ '░▀▄█████░░░▀▄░░░░░░░░░░░░▄▀░░',
125
+ '░░░░███▀░░░░░▀▀▀█▄▄▄░░░░█▀░░░',
126
+ '░░░░▄▀░░░░░░░░░▀▄░░░██▀▀▀░░░░',
127
+ '░░▄▀░░░░░░░░░░░░░░▀░░▀▀▀▀▀▄░░',
128
+ '▄▀░░░░░░░░░░░░░░░░░░░░░░▄░█▀▄'
129
+ ].join("\n"))
130
+ end
131
+ end
132
+ end
133
+ end
@@ -3,19 +3,18 @@
3
3
  module Balboa
4
4
  module Interactor
5
5
  class CapybaraInteractor
6
-
7
6
  CommandNotFound = Class.new(RuntimeError)
8
7
 
9
8
  LoginCommandNotFound = Class.new(RuntimeError)
10
9
 
11
10
  attr_reader :options
12
11
 
13
- def initialize(options={})
12
+ def initialize(options = {})
14
13
  @options = options
15
- @commands = Hash.new { fail CommandNotFound }
14
+ @commands = Hash.new { raise CommandNotFound }
16
15
  @signed_in = false
17
16
  end
18
-
17
+
19
18
  def add_command(key, command)
20
19
  @commands[key.to_s] = command
21
20
  end
@@ -34,7 +33,9 @@ module Balboa
34
33
 
35
34
  attr_accessor :signed_in
36
35
 
37
- alias_method :signed_in?, :signed_in
36
+ def signed_in?
37
+ signed_in
38
+ end
38
39
 
39
40
  def login
40
41
  @commands['login'].execute
@@ -21,7 +21,7 @@ module Balboa
21
21
  end
22
22
 
23
23
  def find_last_punch_date
24
- find('tbody tr:first-child td:nth-child(2)').text
24
+ find('tbody tr:first-child td:first-child').text
25
25
  end
26
26
  end
27
27
  end
@@ -53,7 +53,7 @@ module Balboa
53
53
  def confirm
54
54
  click_button 'Criar Punch'
55
55
 
56
- fail PunchCreationError unless body[SUCCESS_MESSAGE]
56
+ raise PunchCreationError unless body[SUCCESS_MESSAGE]
57
57
  end
58
58
  end
59
59
  end
@@ -36,9 +36,9 @@ module Balboa
36
36
  end
37
37
 
38
38
  def confirm
39
- click_button 'Sign in'
39
+ click_button 'Log in'
40
40
 
41
- fail LoginFailure unless body[SUCCESS_MESSAGE]
41
+ raise LoginFailure unless body[SUCCESS_MESSAGE]
42
42
  end
43
43
  end
44
44
  end
@@ -16,7 +16,7 @@ module Balboa
16
16
  @options = options
17
17
  @interactor = Balboa::Interactor::CapybaraInteractor.new(options)
18
18
  end
19
-
19
+
20
20
  def create
21
21
  last_punch = Balboa::Interactor::Command::FetchLastPunchCommand.new
22
22
 
@@ -6,7 +6,7 @@ module Balboa
6
6
  def initialize(interactor)
7
7
  @interactor = interactor
8
8
  end
9
-
9
+
10
10
  def punch(date)
11
11
  @interactor.punch(date)
12
12
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Balboa
4
- VERSION = '0.1.4'.freeze
4
+ VERSION = '0.1.5'.freeze
5
5
  end
@@ -28,15 +28,12 @@ describe Balboa::Interactor::CapybaraInteractor do
28
28
  it 'responds to last but raises if no command provided' do
29
29
  interactor = described_class.new
30
30
 
31
- last = double('cmd', execute: nil)
32
31
  login = double('login', execute: nil)
33
32
 
34
33
  interactor.add_command('login', login)
35
34
 
36
35
  error = Balboa::Interactor::CapybaraInteractor::CommandNotFound
37
- expect {
38
- interactor.last
39
- }.to raise_error error
36
+ expect { interactor.last }.to raise_error error
40
37
  end
41
38
 
42
39
  it 'holds the options so commands can use it' do
@@ -48,15 +45,12 @@ describe Balboa::Interactor::CapybaraInteractor do
48
45
  it 'responds to punch but raises if no command provided' do
49
46
  interactor = described_class.new
50
47
 
51
- punch = double('cmd', execute: nil)
52
48
  login = double('login', execute: nil)
53
49
 
54
50
  interactor.add_command('login', login)
55
51
 
56
52
  error = Balboa::Interactor::CapybaraInteractor::CommandNotFound
57
- expect {
58
- interactor.punch(Date.today)
59
- }.to raise_error error
53
+ expect { interactor.punch(Date.today) }.to raise_error error
60
54
  end
61
55
 
62
56
  it 'signs in only once' do
@@ -36,17 +36,14 @@ describe Balboa::CLI::Application do
36
36
  allow(command).to receive(:execute).and_raise
37
37
 
38
38
  app.add_command(:cmd, command)
39
-
40
- expect {
41
- app.execute
42
- }.to raise_error(RuntimeError)
39
+
40
+ expect { app.execute }.to raise_error(RuntimeError)
43
41
  end
44
42
 
45
43
  it 'raises error when command not found' do
46
44
  app = described_class.new('cmd')
47
45
 
48
- expect {
49
- app.execute
50
- }.to raise_error(Balboa::CLI::Application::CommandNotFound)
46
+ error = Balboa::CLI::Application::CommandNotFound
47
+ expect { app.execute }.to raise_error(error)
51
48
  end
52
49
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Balboa::CLI::Command::LastCommand do
6
+ it 'prints out the result of interactor last method' do
7
+ interactor = double('itr', last: 42)
8
+
9
+ expect(STDOUT).to receive(:puts).with("\n42")
10
+
11
+ described_class.new(interactor).execute
12
+ end
13
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Balboa::CLI::Command::ResetCommand do
6
+ it 'deletes the .balboa.yml file' do
7
+ expect(File).to receive(:delete).with('.balboa.yml')
8
+
9
+ described_class.new.execute
10
+ end
11
+
12
+ it 'prints out a success message' do
13
+ success_message = "\nBalboa restored to initial settings!"
14
+
15
+ allow(File).to receive(:delete).with('.balboa.yml')
16
+
17
+ expect(STDOUT).to receive(:puts).with(success_message)
18
+
19
+ described_class.new.execute
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Balboa::CLI::Command::StarWarsCommand do
6
+ it 'is a trap!' do
7
+ command = described_class.new
8
+
9
+ expect(command).to receive(:system).with('telnet towel.blinkenlights.nl')
10
+
11
+ command.execute
12
+ end
13
+ end
@@ -0,0 +1,171 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ require_relative '../../../lib/balboa/cli/parser'
6
+
7
+ describe Balboa::CLI::Parser do
8
+ it 'parses a password option into a hash of configurations' do
9
+ config = {}
10
+ argv = ['-p', 'test']
11
+
12
+ described_class.parse(argv, config)
13
+
14
+ expect(config).to eq('password' => 'test')
15
+ end
16
+
17
+ it 'parses a password full option into a hash of configurations' do
18
+ config = {}
19
+ argv = ['--password', 'test']
20
+
21
+ described_class.parse(argv, config)
22
+
23
+ expect(config).to eq('password' => 'test')
24
+ end
25
+
26
+ it 'parses a project option into a hash of configurations' do
27
+ config = {}
28
+ argv = ['-w', 'test']
29
+
30
+ described_class.parse(argv, config)
31
+
32
+ expect(config).to eq('project' => 'test')
33
+ end
34
+
35
+ it 'parses a project full option into a hash of configurations' do
36
+ config = {}
37
+ argv = ['--project', 'test']
38
+
39
+ described_class.parse(argv, config)
40
+
41
+ expect(config).to eq('project' => 'test')
42
+ end
43
+
44
+ it 'parses a email option into a hash of configurations' do
45
+ config = {}
46
+ argv = ['-e', 'test']
47
+
48
+ described_class.parse(argv, config)
49
+
50
+ expect(config).to eq('email' => 'test')
51
+ end
52
+
53
+ it 'parses a email full option into a hash of configurations' do
54
+ config = {}
55
+ argv = ['--email', 'test']
56
+
57
+ described_class.parse(argv, config)
58
+
59
+ expect(config).to eq('email' => 'test')
60
+ end
61
+
62
+ it 'parses a config option into a hash of configurations' do
63
+ config = {}
64
+ argv = ['-c', 'spec/fixtures/file.yml']
65
+
66
+ described_class.parse(argv, config)
67
+
68
+ expectation = {
69
+ 'email' => 'email',
70
+ 'password' => 'password',
71
+ 'project' => 'project',
72
+ 'start_at' => '8',
73
+ 'lunch_at' => '12',
74
+ 'restart_at' => '13',
75
+ 'leave_at' => '17',
76
+ 'skips' => []
77
+ }
78
+ expect(config).to eq(expectation)
79
+ end
80
+
81
+ it 'parses a config full option into a hash of configurations' do
82
+ config = {}
83
+ argv = ['--config', 'spec/fixtures/file.yml']
84
+
85
+ described_class.parse(argv, config)
86
+
87
+ expectation = {
88
+ 'email' => 'email',
89
+ 'password' => 'password',
90
+ 'project' => 'project',
91
+ 'start_at' => '8',
92
+ 'lunch_at' => '12',
93
+ 'restart_at' => '13',
94
+ 'leave_at' => '17',
95
+ 'skips' => []
96
+ }
97
+ expect(config).to eq(expectation)
98
+ end
99
+
100
+ it 'raises ENOENT on invalid path to file' do
101
+ config = {}
102
+ argv = ['-c', 'wrong path to file']
103
+
104
+ parser = described_class.new(argv, config)
105
+
106
+ expect { parser.parse }.to raise_error(Errno::ENOENT)
107
+ end
108
+
109
+ it 'parses a skipped date option into a hash of configurations' do
110
+ config = {}
111
+ argv = ['-s', '13/06/1992,15/06/2002']
112
+
113
+ described_class.parse(argv, config)
114
+
115
+ expectation = {
116
+ 'skips' => [
117
+ Date.new(1992, 6, 13), Date.new(2002, 6, 15)
118
+ ]
119
+ }
120
+ expect(config).to eq(expectation)
121
+ end
122
+
123
+ it 'raises argument error in case of a wrong date format' do
124
+ config = {}
125
+ argv = ['-s', 'test']
126
+
127
+ parser = described_class.new(argv, config)
128
+
129
+ expect { parser.parse }.to raise_error(ArgumentError)
130
+ end
131
+
132
+ it 'parses a skipped date full option into a hash of configurations' do
133
+ config = {}
134
+ argv = ['--skip', '12/06/1992,12/06/1992']
135
+
136
+ described_class.parse(argv, config)
137
+
138
+ expectation = {
139
+ 'skips' => [
140
+ Date.new(1992, 6, 12), Date.new(1992, 6, 12)
141
+ ]
142
+ }
143
+ expect(config).to eq(expectation)
144
+ end
145
+
146
+ it 'parses options that override or fulfill config' do
147
+ config = {
148
+ 'password' => '1',
149
+ 'project' => '3'
150
+ }
151
+ argv = ['-p', '3', '-e', '2', '-w', '1']
152
+
153
+ described_class.parse(argv, config)
154
+
155
+ expectation = {
156
+ 'password' => '3',
157
+ 'email' => '2',
158
+ 'project' => '1'
159
+ }
160
+
161
+ expect(config).to eq(expectation)
162
+ end
163
+
164
+ it 'raises on invalid arguments' do
165
+ config = {}
166
+ argv = ['-z']
167
+ parser = described_class.new(argv, config)
168
+
169
+ expect { parser.parse }.to raise_error(OptionParser::InvalidOption)
170
+ end
171
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ require_relative '../../../lib/balboa/interactor/interactor_builder'
6
+
7
+ describe Balboa::Interactor::InteractorBuilder do
8
+ it 'responds to create as class method' do
9
+ interactor = described_class.create({})
10
+
11
+ expect(interactor).not_to be nil
12
+ end
13
+
14
+ it 'responds to create as instance method' do
15
+ interactor = described_class.new({}).create
16
+
17
+ expect(interactor).not_to be nil
18
+ end
19
+ end
@@ -5,14 +5,14 @@ require 'highline/import'
5
5
 
6
6
  describe Balboa::PunchDate do
7
7
  it 'responds to to_s' do
8
- date = Date.new(2011,1,1)
8
+ date = Date.new(2011, 1, 1)
9
9
  punch_date = described_class.new(date, nil)
10
10
 
11
11
  expect(punch_date.to_s).to eq('2011-01-01')
12
12
  end
13
13
 
14
14
  it 'responds to strftime' do
15
- date = Date.new(2011,1,1)
15
+ date = Date.new(2011, 1, 1)
16
16
  punch_date = described_class.new(date, nil)
17
17
 
18
18
  expect(punch_date.strftime('%d/%m/%Y')).to eq('01/01/2011')
@@ -20,21 +20,21 @@ describe Balboa::PunchDate do
20
20
 
21
21
  context 'punchable' do
22
22
  it 'returns false on satudays' do
23
- date = Date.new(2011,1,1)
23
+ date = Date.new(2011, 1, 1)
24
24
  punch_date = described_class.new(date, nil)
25
25
 
26
26
  expect(punch_date.punchable?).to be false
27
27
  end
28
28
 
29
29
  it 'returns false on sundays' do
30
- date = Date.new(2011,1,2)
30
+ date = Date.new(2011, 1, 2)
31
31
  punch_date = described_class.new(date, nil)
32
32
 
33
33
  expect(punch_date.punchable?).to be false
34
34
  end
35
35
 
36
36
  it 'returns true on a week day that is not a holiday' do
37
- date = Date.new(2011,1,3)
37
+ date = Date.new(2011, 1, 3)
38
38
  punch_date = described_class.new(date, nil)
39
39
 
40
40
  expect(punch_date.punchable?).to be true
@@ -45,7 +45,7 @@ describe Balboa::PunchDate do
45
45
  output = StringIO.new
46
46
  cli = HighLine.new(input, output)
47
47
 
48
- date = Date.new(2011,4,21)
48
+ date = Date.new(2011, 4, 21)
49
49
  punch_date = described_class.new(date, cli)
50
50
 
51
51
  expect(punch_date.punchable?).to be false
@@ -56,7 +56,7 @@ describe Balboa::PunchDate do
56
56
  output = StringIO.new
57
57
  cli = HighLine.new(input, output)
58
58
 
59
- date = Date.new(2011,4,21)
59
+ date = Date.new(2011, 4, 21)
60
60
  punch_date = described_class.new(date, cli)
61
61
 
62
62
  expect(punch_date.punchable?).to be true
@@ -0,0 +1,9 @@
1
+ ---
2
+ email: email
3
+ password: password
4
+ project: project
5
+ start_at: '8'
6
+ lunch_at: '12'
7
+ restart_at: '13'
8
+ leave_at: '17'
9
+ skips: []
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: balboa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Waldyr de Souza
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-25 00:00:00.000000000 Z
11
+ date: 2016-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capybara
@@ -96,7 +96,7 @@ files:
96
96
  - lib/balboa/cli/command/reset_command.rb
97
97
  - lib/balboa/cli/command/star_wars_command.rb
98
98
  - lib/balboa/cli/defaults.rb
99
- - lib/balboa/cli/parser_builder.rb
99
+ - lib/balboa/cli/parser.rb
100
100
  - lib/balboa/config_file.rb
101
101
  - lib/balboa/host.rb
102
102
  - lib/balboa/interactor/capybara_interactor.rb
@@ -109,10 +109,16 @@ files:
109
109
  - lib/balboa/version.rb
110
110
  - spec/balboa/capybara_interactor_spec.rb
111
111
  - spec/balboa/cli/application_spec.rb
112
+ - spec/balboa/cli/command/last_command_spec.rb
113
+ - spec/balboa/cli/command/reset_command_spec.rb
114
+ - spec/balboa/cli/command/star_wars_command_spec.rb
112
115
  - spec/balboa/cli/defaults_spec.rb
116
+ - spec/balboa/cli/parser_spec.rb
117
+ - spec/balboa/interactor/interactor_builder_spec.rb
113
118
  - spec/balboa/interactor/interactor_wrapper_spec.rb
114
119
  - spec/balboa/punch_date_spec.rb
115
120
  - spec/balboa_spec.rb
121
+ - spec/fixtures/file.yml
116
122
  - spec/spec_helper.rb
117
123
  homepage:
118
124
  licenses:
@@ -1,122 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'optparse'
4
- require 'yaml'
5
-
6
- module Balboa
7
- module CLI
8
- class ParserBuilder
9
- def self.create(*args)
10
- new(*args).create
11
- end
12
-
13
- def initialize(argv, config)
14
- @config = config
15
- @parser = OptionParser.new(argv)
16
- end
17
-
18
- def create
19
- configure_parser
20
-
21
- @parser
22
- end
23
-
24
- private
25
-
26
- def configure_parser
27
- program_name = @parser.program_name
28
-
29
- @parser.banner = <<-EOF.gsub(/^[ ]+/, '')
30
- \nUsage: #{program_name} [commands] [options]"
31
-
32
- Commands:
33
-
34
- #{program_name} last
35
- #{program_name} punch -p '123456' -s '12/06/1992,13/06/1992,14/06/1992'
36
- #{program_name} reset
37
- EOF
38
-
39
- set_options
40
- set_utilities
41
- end
42
-
43
- def set_options
44
- @parser.separator "\nOptions:"
45
- set_attributes
46
- set_skipped_dates
47
- set_custom_defaults
48
- end
49
-
50
- def set_utilities
51
- @parser.separator "\nUtilities:"
52
- set_help_option
53
- set_version_option
54
- set_balboa_picture
55
- end
56
-
57
- def set_custom_defaults
58
- @parser.on('-c', '--config \'FILE\'', 'Read configuration options from FILE') do |file|
59
- @config.merge!(YAML.load_file(file)) if File.exist?(file)
60
- end
61
- end
62
-
63
- def set_attributes
64
- @parser.on('-e', '--email \'EMAIL\'') do |email|
65
- @config.merge!('email' => email)
66
- end.on('-p', '--password \'PASSWORD\'') do |password|
67
- @config.merge!('password' => password)
68
- end.on('-w', '--project \'PROJECT\'') do |project|
69
- @config.merge!('project' => project)
70
- end
71
- end
72
-
73
- def set_skipped_dates
74
- @parser.on('-s', '--skip \'DATES\'', 'Skip input dates', Array) do |dates|
75
- parse_dates(dates)
76
- end
77
- end
78
-
79
- def parse_dates(dates)
80
- @config.merge!('skips' => dates.map { |date| Date.parse(date) })
81
- end
82
-
83
- def set_help_option
84
- @parser.on('-h', '--help', 'Show this message') do
85
- $stdout.puts @parser
86
- exit
87
- end
88
- end
89
-
90
- def set_version_option
91
- @parser.on('-v', '--version', 'Show version') do
92
- $stdout.puts "#{@parser.program_name} #{Balboa::VERSION}\n"
93
- exit
94
- end
95
- end
96
-
97
- def set_balboa_picture
98
- @parser.separator("\n" + [
99
- "░░░░░▄▄███████████████▄▄░░░░",
100
- "░░▄██████████████████████▄░░",
101
- "░█████████▀███████▀████████░",
102
- "█████████▀▀█▀█░░▀██▄██▄████░",
103
- "░████████▄▄█░▀▀▄▄█░░▀░████░░",
104
- "░███████▀░░░▄▄▄▄░░░▄▄▄███░░░",
105
- "▀███████░░▄▀▀██▀░░█▄░▄▀███░░",
106
- "░██████▀░░█░██▀▀░░████░██░░░",
107
- "████████░▄░░▀▀░░░░▀▄░▀▀█░░░░",
108
- "█▀██████▀░▄░░▄░░░░░░█░░█░░░░",
109
- "▀▄████▄▀░░░▀▀░░▀░▄░░▀░░░█░░░",
110
- "▄██████▀▄░░░░░░░░░██▄▄▄░█░░░",
111
- "███████░█░░░░░░░░█▀▄▄▄█░░█░░",
112
- "░██████░░█░░░░░░░░░▀░░░░░░▀▄",
113
- "▀▄█████░░░▀▄░░░░░░░░░░░░░░░█",
114
- "░░░███▀░░░░░░▀░░░░▄░░░░░░▄█░",
115
- "░░░▄▀░░░░░░░░░▀▄░░░▀▀▀▀▀█▀░░",
116
- "░▀░░░░░░░░░░░░░░░▀░░░░░░▀▄░░",
117
- "░░░░░░░░░░░░░░░░░░░░░░░▄░█▀▄",
118
- ].join("\n"))
119
- end
120
- end
121
- end
122
- end