MuranoCLI 3.0.1 → 3.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.agignore +1 -0
  3. data/.rubocop.yml +67 -5
  4. data/Gemfile +6 -3
  5. data/MuranoCLI.gemspec +14 -10
  6. data/README.markdown +299 -126
  7. data/Rakefile +6 -1
  8. data/bin/murano +2 -2
  9. data/docs/completions/murano_completion-bash +93 -0
  10. data/lib/MrMurano.rb +19 -2
  11. data/lib/MrMurano/Business.rb +22 -19
  12. data/lib/MrMurano/Config.rb +19 -9
  13. data/lib/MrMurano/Content.rb +4 -4
  14. data/lib/MrMurano/Exchange-Element.rb +99 -0
  15. data/lib/MrMurano/Exchange.rb +137 -0
  16. data/lib/MrMurano/Gateway.rb +9 -9
  17. data/lib/MrMurano/Keystore.rb +4 -2
  18. data/lib/MrMurano/ReCommander.rb +3 -5
  19. data/lib/MrMurano/Solution-ServiceConfig.rb +12 -12
  20. data/lib/MrMurano/Solution-Services.rb +15 -14
  21. data/lib/MrMurano/Solution-Users.rb +2 -2
  22. data/lib/MrMurano/Solution.rb +43 -49
  23. data/lib/MrMurano/SolutionId.rb +28 -28
  24. data/lib/MrMurano/SyncUpDown.rb +32 -22
  25. data/lib/MrMurano/Webservice-Endpoint.rb +2 -1
  26. data/lib/MrMurano/Webservice.rb +5 -5
  27. data/lib/MrMurano/commands.rb +2 -1
  28. data/lib/MrMurano/commands/business.rb +21 -19
  29. data/lib/MrMurano/commands/domain.rb +16 -2
  30. data/lib/MrMurano/commands/exchange.rb +272 -0
  31. data/lib/MrMurano/commands/globals.rb +17 -1
  32. data/lib/MrMurano/commands/init.rb +3 -3
  33. data/lib/MrMurano/commands/link.rb +16 -16
  34. data/lib/MrMurano/commands/postgresql.rb +2 -2
  35. data/lib/MrMurano/commands/show.rb +13 -7
  36. data/lib/MrMurano/commands/solution.rb +23 -17
  37. data/lib/MrMurano/commands/solution_picker.rb +49 -44
  38. data/lib/MrMurano/commands/sync.rb +2 -1
  39. data/lib/MrMurano/commands/timeseries.rb +2 -2
  40. data/lib/MrMurano/commands/tsdb.rb +2 -2
  41. data/lib/MrMurano/hash.rb +19 -7
  42. data/lib/MrMurano/http.rb +12 -2
  43. data/lib/MrMurano/orderedhash.rb +200 -0
  44. data/lib/MrMurano/spec_commander.rb +98 -0
  45. data/lib/MrMurano/verbosing.rb +2 -2
  46. data/lib/MrMurano/version.rb +2 -2
  47. data/spec/Business_spec.rb +8 -6
  48. data/spec/Solution-ServiceConfig_spec.rb +1 -1
  49. data/spec/SyncUpDown_spec.rb +6 -6
  50. data/spec/_workspace.rb +9 -4
  51. data/spec/cmd_business_spec.rb +8 -2
  52. data/spec/cmd_common.rb +266 -25
  53. data/spec/cmd_exchange_spec.rb +118 -0
  54. data/spec/cmd_help_spec.rb +54 -13
  55. data/spec/cmd_init_spec.rb +1 -12
  56. data/spec/cmd_link_spec.rb +94 -72
  57. data/spec/spec_helper.rb +11 -16
  58. metadata +23 -17
@@ -0,0 +1,118 @@
1
+ # Last Modified: 2017.08.31 /coding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ # Copyright © 2016-2017 Exosite LLC.
5
+ # License: MIT. See LICENSE.txt.
6
+ # vim:tw=0:ts=2:sw=2:et:ai
7
+
8
+ require 'fileutils'
9
+ require 'open3'
10
+ require 'pathname'
11
+
12
+ require 'cmd_common'
13
+ require 'MrMurano/Config'
14
+
15
+ RSpec.describe 'murano exchange', :cmd, :needs_password do
16
+ include_context 'CI_CMD'
17
+
18
+ context 'without project' do
19
+ it 'help' do
20
+ cmd_verify_help('exchange')
21
+ end
22
+ end
23
+
24
+ context 'with project' do
25
+ #before(:example) { project_up }
26
+ #after(:example) { project_down }
27
+
28
+ def expect_exchange_element_table(stdout, stderr, num_cols: nil)
29
+ expect(stderr).to eq('')
30
+ lines = stdout.lines
31
+ # FIXME/2017-08-29: Is this too much detail??
32
+ # What about running test once, dumping output to file,
33
+ # and expecting same output next time?
34
+ expect(lines[0]).to match(/^Found [\d]+ elements.$/)
35
+ # Outline of table. n columns. '+-----+-----+---...----+\n'
36
+ expect(lines[1]).to match(/^(\+-+){#{num_cols}}\+$/)
37
+ # Header.
38
+ expect(lines[2]).to match(/^\| elementId/)
39
+ # Separator.
40
+ expect(lines[3]).to match(/^(\+-+){#{num_cols}}\+$/)
41
+ # Content. Starts with elementId.
42
+ (4..(lines.length - 2)).to_a.each do |line|
43
+ expect(lines[line]).to match(/^\| [0-9a-f]+ \| /)
44
+ end
45
+ expect(lines[-1]).to match(/^(\+-+){#{num_cols}}\+$/)
46
+ end
47
+
48
+ context 'list' do
49
+ it 'as table' do
50
+ stdout, stderr = murano_command_run('exchange list')
51
+ # 4 columns: elementId, name, status, description.
52
+ expect_exchange_element_table(stdout, stderr, num_cols: 4)
53
+ end
54
+
55
+ it 'only ids' do
56
+ stdout, stderr = murano_command_run('exchange list', '--idonly')
57
+ expect(stderr).to eq('')
58
+ stdout.lines.each do |line|
59
+ expect(line).to match(/^[0-9a-f]+$/)
60
+ end
61
+ end
62
+
63
+ it 'fewer fields' do
64
+ stdout, stderr = murano_command_run('exchange list', '--brief')
65
+ # 3 columns: elementId, name, status.
66
+ expect_exchange_element_table(stdout, stderr, num_cols: 3)
67
+ end
68
+
69
+ it 'as json' do
70
+ stdout, stderr = murano_command_run('exchange list', '-c', 'outformat=json')
71
+ expect(stderr).to eq('')
72
+ expect { JSON.parse(stdout) }.to_not raise_error
73
+ #expect(status.exitstatus).to eq(0)
74
+ end
75
+
76
+ it 'output to file' do
77
+ stdout, stderr = murano_command_run('exchange list', '--idonly', '-o', 'bob')
78
+ expect(stderr).to eq('')
79
+ expect(stdout).to eq('')
80
+ #expect(status.exitstatus).to eq(0)
81
+ expect(File.exist?('bob')).to be true
82
+ data = IO.read('bob')
83
+ expect(data).to match(/^(\S+\s)*\S+$/)
84
+ end
85
+
86
+ context 'purchase' do
87
+ # MAYBE/TESTME/2017-08-30: Cannot functional test 'exchange purchase'
88
+ # of 'available' element because you cannot un-add elements (you'd
89
+ # have to create a new business). We could add a unit test of
90
+ # MrMurano::Exchange.purchase, though. But it's just 4 statements,
91
+ # and the functional test here for adding an already added element
92
+ # also tests that same function. So probably no need to add test.
93
+
94
+ it 'is ambiguous name' do
95
+ # MEH/2017-08-31: This test is dependent on the platform having
96
+ # more than one element with the term 'IoT' in its name!
97
+ stdout, stderr = murano_command_exits('exchange purchase', 'IoT')
98
+ expect(stdout).to eq('')
99
+ expect(stderr).to a_string_starting_with(
100
+ 'Please be more specific: More than one matching element was found: '
101
+ )
102
+ end
103
+
104
+ it 'is already added ID' do
105
+ element_name = 'Timer Service'
106
+ stdout, _stderr = murano_command_run('exchange list', element_name, '--idonly')
107
+ element_id = stdout.strip
108
+ stdout, stderr = murano_command_exits('exchange purchase', element_id)
109
+ expect(stdout).to eq('')
110
+ expect(stderr).to eq(
111
+ "The specified element has already been purchased: ‘#{element_name}’ (#{element_id})\n"
112
+ )
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
118
+
@@ -1,25 +1,66 @@
1
+ # Last Modified: 2017.08.31 /coding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ # Copyright © 2016-2017 Exosite LLC.
5
+ # License: MIT. See LICENSE.txt.
6
+ # vim:tw=0:ts=2:sw=2:et:ai
7
+
1
8
  require 'fileutils'
2
9
  require 'open3'
3
10
  require 'pathname'
11
+
12
+ require 'highline/import'
13
+
4
14
  require 'cmd_common'
5
15
 
6
16
  RSpec.describe 'murano help', :cmd do
7
- include_context "CI_CMD"
17
+ include_context 'CI_CMD'
8
18
 
9
- it "no args" do
10
- out, err, status = Open3.capture3(capcmd('murano'))
11
- expect(err).to eq('')
12
- expect(out).to_not eq('')
13
- expect(status.exitstatus).to eq(0)
14
- end
19
+ context 'using subshell' do
20
+ it 'no args' do
21
+ out, err, status = Open3.capture3(capcmd('murano'))
22
+ expect(err).to eq('')
23
+ expect(out).to_not eq('')
24
+ expect(status.exitstatus).to eq(0)
25
+ end
15
26
 
16
- it "as --help" do
17
- out, err, status = Open3.capture3(capcmd('murano', '--help'))
18
- expect(err).to eq('')
19
- expect(out).to_not eq('')
20
- expect(status.exitstatus).to eq(0)
27
+ it 'as --help' do
28
+ out, err, status = Open3.capture3(capcmd('murano', '--help'))
29
+ expect(err).to eq('')
30
+ expect(out).to_not eq('')
31
+ expect(status.exitstatus).to eq(0)
32
+ end
21
33
  end
22
34
 
35
+ context 'using commander' do
36
+ it 'no args' do
37
+ #cmd_verify_help('help')
38
+ stdout, stderr = murano_command_run('help')
39
+ # The :help command gets processed by optparse, since we did
40
+ # not call run!, and optparse looks at $0, which is 'rspec'.
41
+ expect(strip_color(stdout)).to start_with(
42
+ " NAME:\n\n #{File.basename $PROGRAM_NAME}\n\n DESCRIPTION:\n\n "
43
+ )
44
+ expect(stderr).to eq('')
45
+ end
46
+
47
+ it 'as --help' do
48
+ stdout, stderr = murano_command_wont_parse('help', '--help')
49
+ # See comment above; optparse uses $0, or 'rspec'.
50
+ expect(strip_color(stdout)).to start_with(
51
+ "Usage: #{File.basename $PROGRAM_NAME} [options]\n"
52
+ )
53
+ expect(stderr).to eq('')
54
+ end
55
+
56
+ # The version flag is processed in ::Commander::Runner.instance.run!,
57
+ # which we're not calling, and if we try to test it here, optparse
58
+ # ends up trying to handle it and barfs when it cannot find parser.ver
59
+ #it 'cannot test version' do
60
+ # #stdout, stderr = murano_command_run('-v')
61
+ # #stdout, stderr = murano_command_run('help', '-v')
62
+ # #stdout, stderr = murano_command_run('help', '--version')
63
+ #end
64
+ end
23
65
  end
24
66
 
25
- # vim: set ai et sw=2 ts=2 :
@@ -1,4 +1,4 @@
1
- # Last Modified: 2017.08.16 /coding: utf-8
1
+ # Last Modified: 2017.08.29 /coding: utf-8
2
2
  # frozen_string_literal: true
3
3
 
4
4
  # Copyright © 2016-2017 Exosite LLC.
@@ -136,17 +136,6 @@ RSpec.describe 'murano init', :cmd do
136
136
  expecting
137
137
  end
138
138
 
139
- def murano_solutions_expunge_yes
140
- out, err, status = Open3.capture3(capcmd('murano', 'solutions', 'expunge', '-y'))
141
- expect(out).to eq('').
142
- or eq("No solutions found\n").
143
- or eq("Deleted 1 solution\n").
144
- or eq("Deleted 2 solutions\n")
145
- expect(err).to eq('').
146
- or eq("\e[31mNo solutions found\e[0m\n")
147
- expect(status.exitstatus).to eq(0).or eq(1)
148
- end
149
-
150
139
  it "Won't init in HOME (gracefully)" do
151
140
  # this is in the project dir. Want to be in HOME
152
141
  Dir.chdir(ENV['HOME']) do
@@ -1,4 +1,4 @@
1
- # Last Modified: 2017.08.16 /coding: utf-8
1
+ # Last Modified: 2017.08.30 /coding: utf-8
2
2
  # frozen_string_literal: probably not yet
3
3
 
4
4
  # Copyright © 2016-2017 Exosite LLC.
@@ -8,91 +8,113 @@
8
8
  require 'fileutils'
9
9
  require 'open3'
10
10
  require 'pathname'
11
+
11
12
  require 'cmd_common'
13
+ require 'MrMurano/Config'
12
14
 
13
15
  RSpec.describe 'murano link', :cmd, :needs_password do
14
16
  include_context "CI_CMD"
15
17
 
16
- before(:example) do
17
- @solz_name = rname('linktest')
18
- out, err, status = Open3.capture3(capcmd('murano', 'application', 'create', @solz_name, '--save'))
19
- expect(err).to eq('')
20
- expect(out.chomp).to match(/^[a-zA-Z0-9]+$/)
21
- expect(status.exitstatus).to eq(0)
18
+ context "without project" do
19
+ it "help" do
20
+ cmd_verify_help('link')
21
+ end
22
22
 
23
- out, err, status = Open3.capture3(capcmd('murano', 'product', 'create', @solz_name, '--save'))
24
- expect(err).to eq('')
25
- expect(out.chomp).to match(/^[a-zA-Z0-9]+$/)
26
- expect(status.exitstatus).to eq(0)
27
- end
28
- after(:example) do
29
- out, err, status = Open3.capture3(capcmd('murano', 'application', 'delete', @solz_name, '-y'))
30
- expect(out).to eq('')
31
- expect(err).to eq('')
32
- expect(status.exitstatus).to eq(0)
23
+ # 2017-08-30: The next two tests show the difference between using a
24
+ # subshell to run murano commands versus running them directly. The
25
+ # latter method lets us get coverage of the command modules.
26
+ context "subshell vs inline" do
27
+ context "using subshell" do
28
+ it "will not list" do
29
+ out, err, status = Open3.capture3(capcmd('murano', 'link', 'list'))
30
+ expect(strip_color(out)).to eq(MrMurano::Config::INVALID_PROJECT_HINT + "\n")
31
+ expecting = %(The "link list" command only works in a Murano project.\n)
32
+ expect(strip_color(err)).to eq(expecting)
33
+ expect(status.exitstatus).to eq(1)
34
+ end
35
+ end
33
36
 
34
- out, err, status = Open3.capture3(capcmd('murano', 'product', 'delete', @solz_name, '-y'))
35
- expect(out).to eq('')
36
- expect(err).to eq('')
37
- expect(status.exitstatus).to eq(0)
37
+ context "using commander" do
38
+ it "will not list" do
39
+ stdout, stderr = murano_command_run('link list')
40
+ expect(stdout).to eq(MrMurano::Config::INVALID_PROJECT_HINT + "\n")
41
+ expect(stderr).to eq(
42
+ %(The "link list" command only works in a Murano project.\n)
43
+ )
44
+ end
45
+ end
46
+ end
38
47
  end
39
48
 
40
- it "links and lists" do
41
- out, err, status = Open3.capture3(capcmd('murano', 'assign', 'set'))
42
- #expect(out).to a_string_starting_with("Linked product #{@solz_name}")
43
- olines = out.lines
49
+ context "with project" do
50
+ before(:example) { project_up(skip_link: true) }
51
+ after(:example) { project_down }
44
52
 
45
- # Windows has a complaint about the fancy quotes if you don't encode!, which is
46
- #
47
- # expected: "Linked \u2018syncdowntestprd1e8b4034\u2019
48
- # to \u2018syncdowntestapp23d5135b\u2019\n"
49
- # got: "Linked \xE2\x80\x98syncdowntestprd1e8b4034\xE2\x80\x99
50
- # to \xE2\x80\x98syncdowntestapp23d5135b\xE2\x80\x99\n"
51
- #
52
- # or, to put it another way,
53
- #
54
- # -Linked ?syncdowntestprd1e8b4034? to ?syncdowntestapp23d5135b?
55
- # +Linked ΓÇÿsyncdowntestprd1e8b4034ΓÇÖ to ΓÇÿsyncdowntestapp23d5135bΓÇÖ
56
- #
57
- # which we can solve with an encode call. (Or but using norm quotes.)
58
- #
59
- #expect(olines[0]).to eq("Linked ‘#{@solz_name}’ to ‘#{@solz_name}’\n")
60
- expect(olines[0].encode!('UTF-8', 'UTF-8')).to eq("Linked ‘#{@solz_name}’ to ‘#{@solz_name}’\n")
53
+ it "links and lists" do
54
+ out, err, status = Open3.capture3(capcmd('murano', 'assign', 'set'))
55
+ #expect(out).to a_string_starting_with("Linked product #{@solz_name}")
56
+ olines = out.lines
61
57
 
62
- expect(olines[1]).to eq("Created default event handler\n")
63
- expect(err).to eq('')
64
- expect(status.exitstatus).to eq(0)
58
+ # Windows has a complaint about the fancy quotes if you don't encode!, which is
59
+ #
60
+ # expected: "Linked \u2018syncdowntestprd1e8b4034\u2019
61
+ # to \u2018syncdowntestapp23d5135b\u2019\n"
62
+ # got: "Linked \xE2\x80\x98syncdowntestprd1e8b4034\xE2\x80\x99
63
+ # to \xE2\x80\x98syncdowntestapp23d5135b\xE2\x80\x99\n"
64
+ #
65
+ # or, to put it another way,
66
+ #
67
+ # -Linked ?syncdowntestprd1e8b4034? to ?syncdowntestapp23d5135b?
68
+ # +Linked ΓÇÿsyncdowntestprd1e8b4034ΓÇÖ to ΓÇÿsyncdowntestapp23d5135bΓÇÖ
69
+ #
70
+ # which we can solve with an encode call. (Or but using norm quotes.)
71
+ #
72
+ #expect(olines[0]).to eq("Linked ‘#{@solz_name}’ to ‘#{@solz_name}’\n")
73
+ expect(olines[0].encode!('UTF-8', 'UTF-8')).to eq(
74
+ "Linked ‘#{@proj_name_prod}’ to ‘#{@proj_name_appy}’\n"
75
+ )
65
76
 
66
- out, err, status = Open3.capture3(capcmd('murano', 'assign', 'list'))
67
- expect(err).to eq('')
68
- olines = out.lines
69
- expect(olines[0]).to match(/^(\+-+){3}\+$/)
70
- expect(olines[1]).to match(/^\| name\s+\| script_key\s+\| service\s+\|$/)
71
- expect(olines[2]).to match(/^(\+-+){3}\+$/)
72
- expect(olines[-1]).to match(/^(\+-+){3}\+$/)
73
- expect(status.exitstatus).to eq(0)
74
- end
77
+ expect(olines[1]).to eq("Created default event handler\n")
78
+ expect(err).to eq('')
79
+ expect(status.exitstatus).to eq(0)
80
+
81
+ out, err, status = Open3.capture3(capcmd('murano', 'assign', 'list'))
82
+ expect(err).to eq('')
83
+ olines = out.lines
84
+ expect(olines[0]).to match(/^(\+-+){3}\+$/)
85
+ expect(olines[1]).to match(/^\| name\s+\| script_key\s+\| service\s+\|$/)
86
+ expect(olines[2]).to match(/^(\+-+){3}\+$/)
87
+ expect(olines[-1]).to match(/^(\+-+){3}\+$/)
88
+ expect(status.exitstatus).to eq(0)
89
+ end
75
90
 
76
- it "unlinks" do
77
- out, err, status = Open3.capture3(capcmd('murano', 'assign', 'set'))
78
- #expect(out).to a_string_starting_with("Linked product #{@solz_name}")
79
- olines = out.lines
80
- expect(olines[0].encode!('UTF-8', 'UTF-8')).to eq("Linked ‘#{@solz_name}’ to ‘#{@solz_name}’\n")
81
- expect(olines[1]).to eq("Created default event handler\n")
82
- expect(err).to eq('')
83
- expect(status.exitstatus).to eq(0)
91
+ it "unlinks" do
92
+ out, err, status = Open3.capture3(capcmd('murano', 'assign', 'set'))
93
+ #expect(out).to a_string_starting_with("Linked product #{@solz_name}")
94
+ olines = out.lines
95
+ expect(olines[0].encode!('UTF-8', 'UTF-8')).to eq(
96
+ "Linked ‘#{@proj_name_prod}’ to ‘#{@proj_name_appy}’\n"
97
+ )
98
+ expect(olines[1]).to eq("Created default event handler\n")
99
+ expect(err).to eq('')
100
+ expect(status.exitstatus).to eq(0)
84
101
 
85
- out, err, status = Open3.capture3(capcmd('murano', 'link', 'unset'))
86
- #expect(out).to a_string_starting_with("Unlinked #{@solz_name}")
87
- # E.g.,
88
- # Unlinked ‘linktest3e7def1b86a1d680’ from ‘linktest3e7def1b86a1d680’\n
89
- # Removed ‘h2thqll2z9sqoooc0_w4w3vxla11ngg4cok_event’ from ‘linktest3e7def1b86a1d680\n
90
- olines = out.lines
91
- expect(olines[0].encode!('UTF-8', 'UTF-8')).to eq("Unlinked ‘#{@solz_name}’ from ‘#{@solz_name}’\n")
92
- expect(olines[1].encode!('UTF-8', 'UTF-8')).to a_string_starting_with("Removed ")
93
- expect(olines[1].encode!('UTF-8', 'UTF-8')).to match(/^Removed ‘[_a-z0-9]*’ from ‘#{@solz_name}’\n$/)
94
- expect(err).to eq('')
95
- expect(status.exitstatus).to eq(0)
102
+ out, err, status = Open3.capture3(capcmd('murano', 'link', 'unset'))
103
+ #expect(out).to a_string_starting_with("Unlinked #{@solz_name}")
104
+ # E.g.,
105
+ # Unlinked ‘linktest3e7def1b86a1d680’ from ‘linktest3e7def1b86a1d680’\n
106
+ # Removed ‘h2thqll2z9sqoooc0_w4w3vxla11ngg4cok_event’ from ‘linktest3e7def1b86a1d680\n
107
+ olines = out.lines
108
+ expect(olines[0].encode!('UTF-8', 'UTF-8')).to eq(
109
+ "Unlinked ‘#{@proj_name_prod}’ from ‘#{@proj_name_appy}’\n"
110
+ )
111
+ expect(olines[1].encode!('UTF-8', 'UTF-8')).to a_string_starting_with("Removed ‘")
112
+ expect(olines[1].encode!('UTF-8', 'UTF-8')).to match(
113
+ /^Removed ‘[_a-z0-9]*’ from ‘#{@proj_name_appy}’\n$/
114
+ )
115
+ expect(err).to eq('')
116
+ expect(status.exitstatus).to eq(0)
117
+ end
96
118
  end
97
119
  end
98
120
 
@@ -17,29 +17,24 @@
17
17
  #
18
18
  require 'simplecov'
19
19
  SimpleCov.start do
20
- if ENV['CI_MR_EXE'].nil? then
21
- coverage_dir "coverage/cov-#{RUBY_VERSION.gsub(/\./,'_')}"
20
+ if ENV['CI_MR_EXE'].nil?
21
+ coverage_dir "coverage/cov-#{RUBY_VERSION.tr('.', '_')}"
22
22
  else
23
- coverage_dir "coverage/cov-#{RUBY_VERSION.gsub(/\./,'_')}-exe"
23
+ coverage_dir "coverage/cov-#{RUBY_VERSION.tr('.', '_')}-exe"
24
24
  end
25
- add_group "Specs", "spec/.*"
26
- add_group "Solution", "lib/MrMurano/Solution.*"
27
- add_group "Product", "lib/MrMurano/Product.*"
25
+ add_group 'Specs', 'spec/.*'
26
+ add_group 'Solution', 'lib/MrMurano/Solution.*'
27
+ add_group 'Product', 'lib/MrMurano/Product.*'
28
28
 
29
- track_files "lib/MrMurano/*.rb"
29
+ track_files 'lib/MrMurano/*.rb'
30
30
  end
31
31
 
32
32
  require 'webmock/rspec'
33
33
 
34
34
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
35
35
  RSpec.configure do |config|
36
-
37
- if ENV['MURANO_PASSWORD'].nil? then
38
- config.filter_run_excluding :needs_password
39
- end
40
- if Gem.win_platform? then
41
- config.filter_run_excluding :broken_on_windows
42
- end
36
+ config.filter_run_excluding :needs_password if ENV['MURANO_PASSWORD'].nil?
37
+ config.filter_run_excluding :broken_on_windows if Gem.win_platform?
43
38
 
44
39
  # rspec-expectations config goes here. You can use an alternate
45
40
  # assertion/expectation library such as wrong or the stdlib/minitest
@@ -84,7 +79,7 @@ RSpec.configure do |config|
84
79
  # Allows RSpec to persist some state between runs in order to support
85
80
  # the `--only-failures` and `--next-failure` CLI options. We recommend
86
81
  # you configure your source control system to ignore this file.
87
- config.example_status_persistence_file_path = ".rspec_examples.txt"
82
+ config.example_status_persistence_file_path = '.rspec_examples.txt'
88
83
 
89
84
  # Limits the available syntax to the non-monkey patched syntax that is
90
85
  # recommended. For more details, see:
@@ -123,5 +118,5 @@ RSpec.configure do |config|
123
118
  # test failures related to randomization by passing the same `--seed` value
124
119
  # as the one that triggered the failure.
125
120
  Kernel.srand config.seed
126
-
127
121
  end
122
+