MuranoCLI 2.2.3 → 2.2.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: c9accf3aa9ba6d1b05ce2f8e5ec5e25f5dd7112a
4
- data.tar.gz: b5ad0c1ea60a8638ced916c1f5364b3b21802deb
3
+ metadata.gz: e73fc277539519b2b36d38f2d86a67bd106779e2
4
+ data.tar.gz: f715f1075a208806e9ff2f9e989f154f312bfde8
5
5
  SHA512:
6
- metadata.gz: b9e0922ce8294ca87478ce84f764e4afce1b979dd2e7f79344a2260da50a03f19b366e17bde29f0507049b52ca4b0bd8d0fb1b9b04e667c06affd0b9a32f01fe
7
- data.tar.gz: 3ae95b5db41330ee002fcc26102f80f2a39f547ee3e28a03ca45341a965b15d67f4d3a6f31529cc20b541105160b0dce77e3f55d362a29318bd07ebc70a16e74
6
+ metadata.gz: 552129eb3e4167a498cd8ad76910fa9efd1793cc1b96331542956009c5e18eacdede1a27bd3017b2d10b77e7aa6add683609459c40ff8bf107b864e23a8cb85d
7
+ data.tar.gz: 351343bca4f083fbb75ca4452a5878c43268943ea25c905d8d73f55b7de954442c12124eb1e1fe2a18fa2dc04d000fb7596e5cc7dfe6391d43338fb964f98f41
@@ -0,0 +1,13 @@
1
+ .git/
2
+ coverage/
3
+ pkg/
4
+ report/
5
+
6
+ .byebug_history
7
+ .rspec_examples.txt
8
+ Gemfile.lock
9
+ .bundle/
10
+
11
+ # 2017-05-12: Testing!
12
+ *.out
13
+
data/Rakefile CHANGED
@@ -31,7 +31,7 @@ gvim lib/MrMurano/version.rb
31
31
  git commit -a -m 'version bump'
32
32
  git flow release finish <newversion>
33
33
  # When editing message for tag, add release notes.
34
- rake git:all
34
+ #rake git:all
35
35
  # Wait for all tests to complete.
36
36
  # if all passed: rake gemit
37
37
  EOR
@@ -71,24 +71,24 @@ end
71
71
 
72
72
  ###
73
73
  # When new tags are pushed to upstream, the CI will kick-in and build the release
74
- namespace :git do
75
- desc "Push only develop, master, and tags to origin"
76
- task :origin do
77
- sh %{git push origin develop}
78
- sh %{git push origin master}
79
- sh %{git push origin --tags}
80
- end
81
-
82
- desc "Push only develop, master, and tags to upstream"
83
- task :upstream do
84
- sh %{git push upstream develop}
85
- sh %{git push upstream master}
86
- sh %{git push upstream --tags}
87
- end
88
-
89
- desc "Push to origin and upstream"
90
- task :all => [:origin, :upstream]
91
- end
74
+ #namespace :git do
75
+ # desc "Push only develop, master, and tags to origin"
76
+ # task :origin do
77
+ # sh %{git push origin develop}
78
+ # sh %{git push origin master}
79
+ # sh %{git push origin --tags}
80
+ # end
81
+ #
82
+ # desc "Push only develop, master, and tags to upstream"
83
+ # task :upstream do
84
+ # sh %{git push upstream develop}
85
+ # sh %{git push upstream master}
86
+ # sh %{git push upstream --tags}
87
+ # end
88
+ #
89
+ # desc "Push to origin and upstream"
90
+ # task :all => [:origin, :upstream]
91
+ #end
92
92
 
93
93
  desc "Build, install locally, and push gem"
94
94
  task :gemit do
@@ -17,5 +17,5 @@ require 'MrMurano/Product'
17
17
  require 'MrMurano/Product-1P-Device'
18
18
  require 'MrMurano/Product-Resources'
19
19
 
20
- require 'MrMurano/ReCommander'
20
+ #require 'MrMurano/ReCommander'
21
21
  require 'MrMurano/commands'
@@ -142,6 +142,8 @@ module MrMurano
142
142
  else
143
143
  set('diff.cmd', 'diff -u', :defaults)
144
144
  end
145
+
146
+ set('postgresql.migrations_dir', 'sql-migrations', :defaults)
145
147
  end
146
148
 
147
149
  ## Find the root of this project Directory.
@@ -281,6 +283,9 @@ module MrMurano
281
283
 
282
284
  end
283
285
 
286
+ class ConfigError < StandardError
287
+ end
288
+
284
289
  end
285
290
 
286
291
  # vim: set ai et sw=2 ts=2 :
@@ -35,7 +35,14 @@ module Commander
35
35
  hooked = MrMurano::Hooked.new(section)
36
36
  hooked.check_run_pre_hook
37
37
 
38
- old_run_active_command
38
+ begin
39
+ old_run_active_command
40
+ rescue MrMurano::ConfigError => err
41
+ puts err.message
42
+ exit 1
43
+ rescue StandardError => err
44
+ raise
45
+ end
39
46
 
40
47
  hooked.check_run_post_hook
41
48
  end
@@ -13,6 +13,7 @@ module MrMurano
13
13
 
14
14
  def fetch(id=nil, &block)
15
15
  ret = get()
16
+ return [] if ret.is_a? Hash and ret.has_key? :error
16
17
  if ret.kind_of?(Hash) and ret.has_key?(:cors) then
17
18
  # XXX cors is a JSON encoded string. That seems weird. keep an eye on this.
18
19
  data = JSON.parse(ret[:cors], @json_opts)
@@ -30,7 +30,9 @@ module MrMurano
30
30
  ##
31
31
  # This gets all data about all endpoints
32
32
  def list
33
- get().map do |item|
33
+ ret = get()
34
+ return [] if ret.is_a? Hash and ret.has_key? :error
35
+ ret.map do |item|
34
36
  if item[:content_type].nil? or item[:content_type].empty? then
35
37
  item[:content_type] = 'application/json'
36
38
  end
@@ -28,7 +28,9 @@ module MrMurano
28
28
  ##
29
29
  # Get a list of all of the static content
30
30
  def list
31
- get().map{|i| FileItem.new(i)}
31
+ ret = get()
32
+ return [] if ret.is_a? Hash and ret.has_key? :error
33
+ ret.map{|i| FileItem.new(i)}
32
34
  end
33
35
 
34
36
  ##
@@ -10,7 +10,9 @@ module MrMurano
10
10
  end
11
11
 
12
12
  def list
13
- get()[:items]
13
+ ret = get()
14
+ return [] if ret.is_a? Hash and ret.has_key? :error
15
+ ret[:items]
14
16
  end
15
17
  def fetch(id)
16
18
  get('/' + id.to_s)
@@ -85,6 +87,7 @@ module MrMurano
85
87
 
86
88
  def list
87
89
  ret = get()
90
+ return [] if ret.is_a? Hash and ret.has_key? :error
88
91
  ret[:items]
89
92
  end
90
93
 
@@ -191,7 +191,7 @@ module MrMurano
191
191
 
192
192
  def list
193
193
  ret = get()
194
- return [] unless ret.has_key? :items
194
+ return [] if ret.is_a? Hash and ret.has_key? :error
195
195
  ret[:items].map{|i| LibraryItem.new(i)}
196
196
  end
197
197
 
@@ -250,6 +250,7 @@ module MrMurano
250
250
 
251
251
  def list
252
252
  ret = get()
253
+ return [] if ret.is_a? Hash and ret.has_key? :error
253
254
  # eventhandler.skiplist is a list of whitespace seperated dot-paired values.
254
255
  # fe: service.event service service service.event
255
256
  skiplist = ($cfg['eventhandler.skiplist'] or '').split
@@ -8,7 +8,7 @@ module MrMurano
8
8
  class SolutionBase
9
9
  def initialize
10
10
  @sid = $cfg['solution.id']
11
- raise "No solution!" if @sid.nil?
11
+ raise MrMurano::ConfigError.new("No solution!") if @sid.nil?
12
12
  @uriparts = [:solution, @sid]
13
13
  @itemkey = :id
14
14
  @project_section = nil
@@ -658,7 +658,7 @@ module MrMurano
658
658
 
659
659
  ## Get status of things here verses there
660
660
  #
661
- # @param options [Hash, Commander::Command::Options] Options on opertation
661
+ # @param options [Hash, Commander::Command::Options] Options on operation
662
662
  # @param selected [Array<String>] Filters for _matcher
663
663
  # @return [Hash{Symbol=>Array<Item>}] Items grouped by the action that should be taken
664
664
  def status(options={}, selected=[])
@@ -694,7 +694,7 @@ module MrMurano
694
694
  mrg = herebox[key].reject{|k,v| k==itemkey}
695
695
  mrg = therebox[key].merge(mrg)
696
696
  if docmp(herebox[key], therebox[key]) then
697
- mrg[:diff] = dodiff(mrg) if options[:diff] and mrg[:selected]
697
+ mrg[:diff] = dodiff(mrg.to_h) if options[:diff] and mrg[:selected]
698
698
  tomod << mrg
699
699
  else
700
700
  unchg << mrg
@@ -1,4 +1,5 @@
1
1
  require 'MrMurano/commands/assign'
2
+ require 'MrMurano/commands/business'
2
3
  require 'MrMurano/commands/businessList'
3
4
  require 'MrMurano/commands/config'
4
5
  require 'MrMurano/commands/content'
@@ -0,0 +1,15 @@
1
+ require 'MrMurano/SubCmdGroupContext'
2
+
3
+ command :business do |c|
4
+ c.syntax = %{murano business}
5
+ c.summary = %{About Business}
6
+ c.description = %{Sub-commands for working with Businesses}
7
+
8
+ c.action do |args, options|
9
+ ::Commander::UI.enable_paging
10
+ say MrMurano::SubCmdGroupHelp.new(c).get_help
11
+ end
12
+ end
13
+
14
+ # vim: set ai et sw=2 ts=2 :
15
+
@@ -63,7 +63,7 @@ command :init do |c|
63
63
  if not options.force and not $cfg['solution.id'].nil? then
64
64
  say "Using Solution ID already set to #{$cfg['solution.id']}"
65
65
  else
66
- solz = acc.solutions
66
+ solz = acc.solutions.select{|s| s[:type] == 'dataApi'}
67
67
  if solz.count == 1 then
68
68
  sol = solz.first
69
69
  say "You only have one solution; using #{sol[:domain]}"
@@ -83,10 +83,12 @@ command :init do |c|
83
83
  end
84
84
 
85
85
  # create doesn't return anything, so we need to go look for it.
86
- ret = acc.solutions.select{|i| i[:domain] =~ /#{solname}\./}
87
- sid = ret.first[:apiId]
86
+ ret = acc.solutions.select do |i|
87
+ i[:type] == 'dataApi' and (i[:name] == solname or i[:domain] =~ /#{solname}\./i)
88
+ end
89
+ sid = (ret.first or {})[:apiId]
88
90
  if sid.nil? or sid.empty? then
89
- acc.error "Solution didn't find an apiId!!!! #{ret}"
91
+ acc.error "Solution didn't find an apiId!!!! #{name} -> #{ret}"
90
92
  exit 3
91
93
  end
92
94
  $cfg.set('solution.id', sid, :project)
@@ -7,12 +7,16 @@ module MrMurano
7
7
  @serviceName = 'postgresql'
8
8
  end
9
9
 
10
- def query(query)
11
- call(:query, :post, {:sql=>query})
10
+ def query(query, params=nil)
11
+ aqr = {:sql=>query}
12
+ aqr[:parameters] = params unless params.nil?
13
+ call(:query, :post, aqr)
12
14
  end
13
15
 
14
- def queries(query)
15
- call(:queries, :post, {:sql=>query})
16
+ def queries(query, params=nil)
17
+ aqr = {:sql=>query}
18
+ aqr[:parameters] = params unless params.nil?
19
+ call(:queries, :post, aqr)
16
20
  end
17
21
  end
18
22
  end
@@ -20,18 +24,28 @@ end
20
24
  command :postgresql do |c|
21
25
  c.syntax = %{murano postgresql <SQL Commands>}
22
26
  c.summary = %{Query the relational database}
27
+ c.description = %{Query the relational database
23
28
 
29
+ Queries can include $# escapes that are filled from the --param option.
30
+ }
31
+
32
+ c.option '--param LIST',Array, %{Values to fill $# with}
24
33
  c.option '-f', '--file FILE', %{File of SQL commands}
25
34
  c.option '-o', '--output FILE', %{Download to file instead of STDOUT}
26
35
 
36
+ c.example %{murano postgresql 'select * from bob'}, %{Run a SQL command}
37
+ c.example %{murano postgresql 'select * from prices' -c outformat=csv -o prices.csv}, %{Download all values in prices to a CSV file.}
38
+ c.example %{murano postgresql 'INSERT INTO prices (price, item) VALUES ($1,$2)' --param 1.24,Food}, %{Insert using parameters.}
39
+ c.example %{murano postgresql -f cmds.sql}, %{Run multiple commands from a file}
40
+
27
41
  c.action do |args,options|
28
42
  pg = MrMurano::Postgresql.new
29
43
  if options.file then
30
44
  sqls = File.read(options.file)
31
45
 
32
- ret = pg.queries sqls
46
+ ret = pg.queries(sqls, options.param)
33
47
  else
34
- ret = pg.query args.join(' ')
48
+ ret = pg.query(args.join(' '), options.param)
35
49
  end
36
50
 
37
51
  unless ret[:error].nil? then
@@ -58,21 +72,26 @@ end
58
72
 
59
73
  command 'postgresql migrate' do |c|
60
74
  c.syntax = %{murano postgresql migrate (up|down) <level>}
61
- c.summary = %{Run database migration scripts.
62
-
75
+ c.summary = %{Run database migration scripts.}
76
+ c.description = %{Run database migration scripts.
63
77
 
64
78
  The names of the script files must be in the "<level>-<name>-<up|down>.sql"
65
- format.
79
+ format. Each file is a series of Postgres SQL commands.
66
80
 
67
81
  The current version of the migrations (last <level> ran) will be stored in an
68
- extra table in your database. (__murano_cli_migrate__)
82
+ extra table in your database. (__murano_cli__.migrate_version)
69
83
 
70
84
  }
71
85
 
72
86
  c.option '--dir DIR', %{Directory where migrations live}
73
87
 
88
+ c.example %{murano postgresql migrate up}, %{Run migrations up to largest version.}
89
+ c.example %{murano postgresql migrate up 2}, %{Run migrations up to version 2.}
90
+ c.example %{murano postgresql migrate down 1}, %{Run migrations down to version 1.}
91
+ c.example %{murano postgresql migrate down 0}, %{Run migrations down to version 0.}
92
+
74
93
  c.action do |args,options|
75
- options.default :dir => File.join($cfg['location.base'], 'sql-migrations')
94
+ options.default :dir => File.join($cfg['location.base'], $cfg['postgresql.migrations_dir'])
76
95
 
77
96
  direction = args.shift
78
97
  if direction =~ /down/i then
@@ -87,8 +106,9 @@ command 'postgresql migrate' do |c|
87
106
 
88
107
  # get current version of DB.
89
108
  ret = pg.queries %{
90
- CREATE TABLE IF NOT EXISTS __murano_cli_migrate__ (version integer);
91
- SELECT version FROM __murano_cli_migrate__;
109
+ CREATE SCHEMA IF NOT EXISTS __murano_cli__;
110
+ CREATE TABLE IF NOT EXISTS __murano_cli__.migrate_version (version integer);
111
+ SELECT version FROM __murano_cli__.migrate_version ORDER BY version DESC;
92
112
  }.gsub(/^\s+/,'')
93
113
  unless ret[:error].nil? then
94
114
  pp ret
@@ -122,6 +142,7 @@ command 'postgresql migrate' do |c|
122
142
  end
123
143
  end
124
144
 
145
+ pg.debug "Migrations before: #{migrations}"
125
146
  # Select migrations between current and desired
126
147
  migrations.select! do |m|
127
148
  mvrs, _ = File.basename(m).split('-')
@@ -132,6 +153,7 @@ command 'postgresql migrate' do |c|
132
153
  mvrs > current_version and mvrs <= want_version
133
154
  end
134
155
  end
156
+ pg.debug "Migrations after: #{migrations}"
135
157
 
136
158
  # Run migrations.
137
159
  migrations.each do |m|
@@ -147,10 +169,10 @@ command 'postgresql migrate' do |c|
147
169
  exit 5
148
170
  else
149
171
  if direction == 'down' then
150
- pg.queries %{DELETE FROM __murano_cli_migrate__ WHERE version = #{mvrs};
172
+ pg.queries %{DELETE FROM __murano_cli__.migrate_version WHERE version = #{mvrs};
151
173
  COMMIT;}.gsub(/^\s+/,'')
152
174
  else
153
- pg.queries %{INSERT INTO __murano_cli_migrate__ values (#{mvrs});
175
+ pg.queries %{INSERT INTO __murano_cli__.migrate_version values (#{mvrs});
154
176
  COMMIT;}.gsub(/^\s+/,'')
155
177
  end
156
178
  end
@@ -23,10 +23,12 @@ command 'solution create' do |c|
23
23
  end
24
24
 
25
25
  # create doesn't return anything, so we need to go look for it.
26
- ret = acc.solutions.select{|i| i[:domain] =~ /#{name}\./}
27
- sid = ret.first[:apiId]
26
+ ret = acc.solutions.select do |i|
27
+ i[:type] == 'dataApi' and (i[:name] == name or i[:domain] =~ /#{name}\./i)
28
+ end
29
+ sid = (ret.first or {})[:apiId]
28
30
  if sid.nil? or sid.empty? then
29
- acc.error "Didn't find an apiId!!!! #{ret}"
31
+ acc.error "Didn't find an apiId!!!! #{name} -> #{ret} "
30
32
  exit 3
31
33
  end
32
34
  if options.save then
@@ -69,15 +69,21 @@ command :status do |c|
69
69
  @grouped = {:toadd=>[],:todel=>[],:tomod=>[], :unchg=>[]}
70
70
  def gmerge(ret, type, options)
71
71
  if options.grouped then
72
- [:toadd, :todel, :tomod, :unchg].each do |kind|
73
- ret[kind].each do |item|
74
- item = item.to_h
75
- item[:pp_type] = type
76
- @grouped[kind] << item
77
- end
78
- end
72
+ out = @grouped
79
73
  else
80
- pretty(ret, options)
74
+ out = {:toadd=>[],:todel=>[],:tomod=>[], :unchg=>[]}
75
+ end
76
+
77
+ [:toadd, :todel, :tomod, :unchg].each do |kind|
78
+ ret[kind].each do |item|
79
+ item = item.to_h
80
+ item[:pp_type] = type
81
+ out[kind] << item
82
+ end
83
+ end
84
+
85
+ unless options.grouped then
86
+ pretty(out, options)
81
87
  end
82
88
  end
83
89
 
@@ -1,4 +1,4 @@
1
1
  module MrMurano
2
- VERSION = '2.2.3'.freeze
2
+ VERSION = '2.2.4'.freeze
3
3
  end
4
4
 
@@ -22,7 +22,7 @@ RSpec.describe 'murano domain', :cmd, :needs_password do
22
22
 
23
23
  it "show domain" do
24
24
  out, err, status = Open3.capture3(capcmd('murano', 'domain'))
25
- expect(out.chomp).to eq("#{@project_name}.apps.exosite.io")
25
+ expect(out.chomp).to eq("#{@project_name.downcase}.apps.exosite.io")
26
26
  expect(err).to eq('')
27
27
  expect(status.exitstatus).to eq(0)
28
28
  end
@@ -40,3 +40,6 @@ ignoring = *_test.lua *_spec.lua .*
40
40
 
41
41
  [diff]
42
42
  cmd = <%= Gem.win_platform? ? 'fc' : 'diff -u' %>
43
+
44
+ [postgresql]
45
+ migrations_dir = sql-migrations
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: MuranoCLI
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.3
4
+ version: 2.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Conrad Tadpol Tilstra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-12 00:00:00.000000000 Z
11
+ date: 2017-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander
@@ -246,6 +246,7 @@ executables:
246
246
  extensions: []
247
247
  extra_rdoc_files: []
248
248
  files:
249
+ - .agignore
249
250
  - .gitignore
250
251
  - .rspec
251
252
  - .travis.yml
@@ -280,6 +281,7 @@ files:
280
281
  - lib/MrMurano/SyncUpDown.rb
281
282
  - lib/MrMurano/commands.rb
282
283
  - lib/MrMurano/commands/assign.rb
284
+ - lib/MrMurano/commands/business.rb
283
285
  - lib/MrMurano/commands/businessList.rb
284
286
  - lib/MrMurano/commands/completion.rb
285
287
  - lib/MrMurano/commands/config.rb