MrMurano 1.10.4 → 1.11.0

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: cf5ccffebdadc594e4bbee2043d852e75ccf2880
4
- data.tar.gz: c4a286c251447baad93cdc7eaa25867968dcd66b
3
+ metadata.gz: df22b4d754cd7953bdc3a0eb585237340b1a1bc1
4
+ data.tar.gz: a1beeba561cee4af0d3269f6b91aa9f97f4233fa
5
5
  SHA512:
6
- metadata.gz: f6b88a0b7797d4382613e566482a2de65772c592d76d1937c1032ad2beee144b8becfca6444f17a6aaf1f65a41665c9a1c6e7952736479cd8e32eddb2d969072
7
- data.tar.gz: eeabfe027720df8f0c3d02deae524382a755e83ac0e8875057ef643efaf1e99acba143e920f260c22185e7030c643fd85fe2db8ea313d2731854ba5e34915465
6
+ metadata.gz: 93e43f224d125b59114a30ee086b8ce378e02bb40be13813317d9e8d19ba9d74af697af14bef8cc0562c6e9bc234b62f09fdc8d9ef20027d91b0d282baeae467
7
+ data.tar.gz: aed4c799fe5037211194dd5d16cf3f1ba5bcc935bd3cfc64b5509e913a99062884f4c497d39b87a24c65b590a9bf16889f170d5821af7268636044dbcc161c40
data/.gitignore CHANGED
@@ -6,6 +6,7 @@ Icon
6
6
  cookies
7
7
  .jiramulerc
8
8
  tags
9
+ mr.exe
9
10
 
10
11
  xcuserdata
11
12
  Pods/
data/LICENSE.txt ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2016 Exosite
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this
4
+ software and associated documentation files (the "Software"), to deal in the
5
+ Software without restriction, including without limitation the rights to use, copy,
6
+ modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
7
+ and to permit persons to whom the Software is furnished to do so, subject to the
8
+ following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
14
+ INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
15
+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
16
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
17
+ CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
18
+ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19
+
data/MrMurano.iss ADDED
@@ -0,0 +1,50 @@
1
+ [Setup]
2
+ AppName=MrMurano
3
+ AppVersion={%MRVERSION}
4
+ DefaultDirName={pf}\MrMurano
5
+ DefaultGroupName=MrMurano
6
+ ChangesEnvironment=yes
7
+ OutputBaseFileName=MrMuranoSetup
8
+ AppPublisher=Exosite
9
+ AppPublisherURL=http://exosite.com/
10
+ AppCopyright=Copyright (C) 2016 Exosite
11
+ LicenseFile=LICENSE.txt
12
+
13
+ [Files]
14
+ Source: "mr.exe"; DestDir: "{app}\bin"
15
+ Source: "LICENSE.txt"; DestDir: "{app}"
16
+ Source: "ReadMe.txt"; DestDir: "{app}"; Flags: isreadme
17
+
18
+ ; http://www.jrsoftware.org/ishelp/
19
+
20
+ ;;;;;;;;;;;;;;;;;;;;;;;;;
21
+ ; http://stackoverflow.com/questions/3304463/how-do-i-modify-the-path-environment-variable-when-running-an-inno-setup-install/3431379
22
+ [Registry]
23
+ Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; \
24
+ ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};{app}\bin"; \
25
+ Check: NeedsAddPath('{app}\bin')
26
+
27
+ ;;; Not working.
28
+ [Code]
29
+
30
+ function NeedsAddPath(Param: string): boolean;
31
+ var
32
+ OrigPath: string;
33
+ ParamExpanded: string;
34
+ begin
35
+ //expand the setup constants like {app} from Param
36
+ ParamExpanded := ExpandConstant(Param);
37
+ if not RegQueryStringValue(HKEY_LOCAL_MACHINE,
38
+ 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
39
+ 'Path', OrigPath)
40
+ then begin
41
+ Result := True;
42
+ exit;
43
+ end;
44
+ // look for the path with leading and trailing semicolon and with or without \ ending
45
+ // Pos() returns 0 if not found
46
+ Result := Pos(';' + UpperCase(ParamExpanded) + ';', ';' + UpperCase(OrigPath) + ';') = 0;
47
+ if Result = True then
48
+ Result := Pos(';' + UpperCase(ParamExpanded) + '\;', ';' + UpperCase(OrigPath) + ';') = 0;
49
+ end;
50
+
data/README.markdown CHANGED
@@ -213,6 +213,8 @@ MrMurano uses [git flow](https://github.com/nvie/gitflow#getting-started) for
213
213
 
214
214
  MrMurano also uses [bundler](http://bundler.io).
215
215
 
216
+ When submitting pull requests, please do them against the develop branch.
217
+
216
218
  ## Windows
217
219
 
218
220
  The MrMurano gem will install on Windows.
data/Rakefile CHANGED
@@ -16,13 +16,20 @@ task :echo do
16
16
  puts "= #{Bundler::GemHelper.gemspec.version} ="
17
17
  end
18
18
 
19
- desc "Push only develop, master, and tags to origin"
20
- task :gitpush do
21
- sh %{git checkout develop}
22
- sh %{git push}
23
- sh %{git checkout master}
24
- sh %{git push}
25
- sh %{git push --tags}
19
+ namespace :git do
20
+ desc "Push only develop, master, and tags to origin"
21
+ task :origin do
22
+ sh %{git push origin develop}
23
+ sh %{git push origin master}
24
+ sh %{git push origin --tags}
25
+ end
26
+
27
+ desc "Push only develop, master, and tags to upstream"
28
+ task :upstream do
29
+ sh %{git push upstream develop}
30
+ sh %{git push upstream master}
31
+ sh %{git push upstream --tags}
32
+ end
26
33
  end
27
34
 
28
35
  task :gempush do
@@ -38,13 +45,6 @@ task :gemit do
38
45
  sh %{git checkout develop}
39
46
  end
40
47
 
41
- task :wexe do
42
- # Need to find all dlls, because ocra isn't finding them for some reason.
43
- gemdir = `gem env gemdir`.chomp # XXX can we get that without running commands?
44
- gemdlls = Dir[File.join(gemdir, 'extensions', '*')]
45
- sh %{ocra bin/mr #{gemdlls.join(' ')}}
46
- end
47
-
48
48
  desc "Prints a cmd to test this in another directory"
49
49
  task :testwith do
50
50
  pwd=Dir.pwd.sub(Dir.home, '~')
@@ -52,10 +52,52 @@ task :testwith do
52
52
  end
53
53
 
54
54
  desc 'Run RSpec'
55
- task :test do
55
+ task :rspec do
56
56
  Dir.mkdir("report") unless File.directory?("report")
57
57
  sh %{rspec --format html --out report/index.html --format progress}
58
58
  end
59
+ task :test => [:rspec]
60
+
61
+ file "ReadMe.txt" => ['README.markdown'] do |t|
62
+ File.open(t.prerequisites.first) do |rio|
63
+ File.open(t.name, 'w') do |wio|
64
+ wio << rio.read.gsub(/\n/,"\r\n")
65
+ end
66
+ end
67
+ end
68
+
69
+ if Gem.win_platform? then
70
+ file 'mr.exe' => Dir['lib/MrMurano/**/*.rb'] do
71
+ # Need to find all dlls, because ocra isn't finding them for some reason.
72
+ gemdir = `gem env gemdir`.chomp
73
+ gemdlls = Dir[File.join(gemdir, 'extensions', '*')]
74
+ ENV['RUBYLIB'] = 'lib'
75
+ sh %{ocra bin/mr #{gemdlls.join(' ')}}
76
+ end
77
+ task :wexe => ['mr.exe']
78
+
79
+ desc 'Run rspec on cmd tests using mr.exe'
80
+ task :mr_exe_test => ['mr.exe'] do
81
+ Dir.mkdir("report") unless File.directory?("report")
82
+ ENV['CI_MR_EXE'] = '1'
83
+ files = Dir[File.join('spec', 'cmd_*_spec.rb')]
84
+ sh %{rspec --format html --out report/mr_exe.html --format progress #{files.join(' ')}}
85
+ end
86
+ task :test => [:mr_exe_test]
87
+
88
+ installerName = "Output/MrMurano-#{Bundler::GemHelper.gemspec.version.to_s}-Setup.exe"
89
+
90
+ desc "Build a Windows installer for MrMurano"
91
+ task :inno => [installerName]
92
+
93
+ file "Output/MrMuranoSetup.exe" => ['mr.exe', 'ReadMe.txt'] do
94
+ ENV['MRVERSION'] = Bundler::GemHelper.gemspec.version.to_s
95
+ sh %{"C:\\Program Files (x86)\\Inno Setup 5\\iscc.exe" MrMurano.iss}
96
+ end
97
+ file installerName => ['Output/MrMuranoSetup.exe'] do |t|
98
+ FileUtils.move t.prerequisites.first, t.name, :verbose=>true
99
+ end
100
+ end
59
101
 
60
102
  # vim: set sw=4 ts=4 :
61
103
 
data/TODO.taskpaper CHANGED
@@ -23,7 +23,7 @@ Account:
23
23
  - Netrc library (or the netrc format) doesn't allow '#' in passwords. @done(2016-08-10)
24
24
 
25
25
  Endpoints:
26
- - In fetch(); add content_type to script header if not application/json
26
+ - In fetch(); add content_type to script header if not application/json @done(2016-12-06)
27
27
  - Add support for multiple endpoints in one file @pri(high) @done(2016-11-18)
28
28
  - Add directory support like in modules @done(2016-07-26)
29
29
 
@@ -90,9 +90,19 @@ module MrMurano
90
90
  set('location.specs', 'specs', :defaults)
91
91
 
92
92
  set('files.default_page', 'index.html', :defaults)
93
+ set('files.searchFor', '**/*', :defaults)
94
+ set('files.ignoring', '', :defaults)
93
95
 
96
+ set('endpoints.searchFor', '*.lua */*.lua', :defaults)
97
+ set('endpoints.ignoring', '*_test.lua *_spec.lua .*', :defaults)
98
+
99
+ set('eventhandler.searchFor', '*.lua */*.lua', :defaults)
100
+ set('eventhandler.ignoring', '*_test.lua *_spec.lua .*', :defaults)
94
101
  set('eventhandler.skiplist', 'websocket webservice device.service_call', :defaults)
95
102
 
103
+ set('modules.searchFor', '*.lua */*.lua', :defaults)
104
+ set('modules.ignoring', '*_test.lua *_spec.lua .*', :defaults)
105
+
96
106
  set('diff.cmd', 'diff -u', :defaults)
97
107
  end
98
108
 
@@ -0,0 +1,63 @@
1
+ require 'erb'
2
+ require 'securerandom'
3
+
4
+ module MrMurano
5
+ class Mock
6
+ attr_accessor :uuid, :testpoint_file
7
+
8
+ def initialize
9
+ end
10
+
11
+ def show
12
+ file = Pathname.new(get_testpoint_path)
13
+ if file.exist? then
14
+ authorization = %{if request.headers["authorization"] == "}
15
+ file.open('rb') do |io|
16
+ io.each_line do |line|
17
+ auth_line = line.include?(authorization)
18
+ if auth_line then
19
+ capture = /\=\= "(.*)"/.match(line)
20
+ return capture.captures[0]
21
+ end
22
+ end
23
+ end
24
+ end
25
+ return false
26
+ end
27
+
28
+ def get_mock_template
29
+ path = get_mock_template_path()
30
+ return ::File.read(path)
31
+ end
32
+
33
+ def get_testpoint_path
34
+ file_name = 'testpoint.post.lua'
35
+ path = %{#{$cfg['location.endpoints']}/#{file_name}}
36
+ return path
37
+ end
38
+
39
+ def get_mock_template_path
40
+ return ::File.join(::File.dirname(__FILE__), 'template', 'mock.erb')
41
+ end
42
+
43
+ def create_testpoint
44
+ uuid = SecureRandom.uuid
45
+ template = ERB.new(get_mock_template)
46
+ endpoint = template.result(binding)
47
+
48
+ Pathname.new(get_testpoint_path).open('wb') do |io|
49
+ io << endpoint
50
+ end
51
+ return uuid
52
+ end
53
+
54
+ def remove_testpoint
55
+ file = Pathname.new(get_testpoint_path)
56
+ if file.exist? then
57
+ file.unlink
58
+ return true
59
+ end
60
+ return false
61
+ end
62
+ end
63
+ end
@@ -90,23 +90,6 @@ module MrMurano
90
90
  psn.remove_sn(sn)
91
91
  end
92
92
 
93
- ## Rename a device
94
- # +sn+:: Identifier for a device
95
- # +newname+:: The new name of the device
96
- def rename(sn, newname, rid=nil)
97
- newname = sn if newname.nil?
98
- rid = sn_rid(sn) if rid.nil?
99
- verbose "Setting name of #{sn} to #{newname}"
100
- debug " Via RID: #{rid}"
101
- do_rpc({
102
- :procedure=>:update,
103
- :arguments=>[
104
- rid,
105
- {:name=>newname}
106
- ]
107
- })
108
- end
109
-
110
93
  ## Get a tree of info for a device and its resources.
111
94
  # +sn+:: Identifier for a device
112
95
  def twee(sn)
@@ -34,7 +34,7 @@ module MrMurano
34
34
  name = $cfg['product.spec']
35
35
  prid = $cfg['product.id']
36
36
  name = $cfg["p-#{prid}.spec"] unless prid.nil? or $cfg["p-#{prid}.spec"].nil?
37
- raise "No spec file named; run `mr config prodcut.spec <specfile>`" if name.nil?
37
+ raise "No spec file named; run `mr config product.spec <specfile>`" if name.nil?
38
38
 
39
39
  unless $cfg['location.specs'].nil? then
40
40
  name = ::File.join($cfg['location.specs'], name)
@@ -111,7 +111,7 @@ module MrMurano
111
111
 
112
112
  ## Write a value to an alias on a device
113
113
  def write(sn, values)
114
- post("/write/#{sn}", values)
114
+ post("/write/#{sn}", values) unless $cfg['tool.dry']
115
115
  end
116
116
 
117
117
  ## Converts an exoline style spec file into a Murano style one
@@ -11,13 +11,18 @@ module MrMurano
11
11
  super
12
12
  @uriparts << 'endpoint'
13
13
  @location = $cfg['location.endpoints']
14
+
15
+ @match_header = /--#ENDPOINT (?<method>\S+) (?<path>\S+)( (?<ctype>.*))?/
14
16
  end
15
17
 
16
18
  ##
17
19
  # This gets all data about all endpoints
18
20
  def list
19
21
  get().map do |item|
20
- item[:content_type] = 'application/json' if item[:content_type].empty?
22
+ if item[:content_type].nil? or item[:content_type].empty? then
23
+ item[:content_type] = 'application/json'
24
+ end
25
+ # XXX should this update the script header?
21
26
  item
22
27
  end
23
28
  end
@@ -25,18 +30,35 @@ module MrMurano
25
30
  def fetch(id)
26
31
  ret = get('/' + id.to_s)
27
32
  ret[:content_type] = 'application/json' if ret[:content_type].empty?
28
- # TODO: add content_type to header if not application/json
29
- aheader = (ret[:script].lines.first or "").chomp
30
- dheader = /^--#ENDPOINT (?i:#{ret[:method]}) #{ret[:path]}$/
31
- rheader = %{--#ENDPOINT #{ret[:method].upcase} #{ret[:path]}\n}
33
+
34
+ script = ret[:script].lines.map{|l|l.chomp}
35
+
36
+ aheader = (script.first or "")
37
+
38
+ rh = ['--#ENDPOINT', ret[:method].upcase, ret[:path]]
39
+ rh << ret[:content_type] if ret[:content_type] != 'application/json'
40
+ rheader = rh.join(' ')
41
+
42
+ # if header is missing add it.
43
+ # If header is wrong, replace it.
44
+
45
+ md = @match_header.match(aheader)
46
+ if md.nil? then
47
+ # header missing.
48
+ script.unshift rheader
49
+ elsif md[:method] != ret[:method] or
50
+ md[:path] != ret[:path] or
51
+ md[:content_type] != ret[:content_type] then
52
+ # header is wrong.
53
+ script[0] = rheader
54
+ end
55
+ # otherwise current header is good.
56
+
57
+ script = script.join("\n") + "\n"
32
58
  if block_given? then
33
- yield rheader unless dheader =~ aheader
34
- yield ret[:script]
59
+ yield script
35
60
  else
36
- res = ''
37
- res << rheader unless dheader =~ aheader
38
- res << ret[:script]
39
- res
61
+ script
40
62
  end
41
63
  end
42
64
 
@@ -82,6 +104,14 @@ module MrMurano
82
104
  delete('/' + id.to_s)
83
105
  end
84
106
 
107
+ def searchFor
108
+ $cfg['endpoints.searchFor'].split
109
+ end
110
+
111
+ def ignoring
112
+ $cfg['endpoints.ignore'].split
113
+ end
114
+
85
115
  def tolocalname(item, key)
86
116
  name = ''
87
117
  name << item[:path].split('/').reject{|i|i.empty?}.join('-')
@@ -97,7 +127,7 @@ module MrMurano
97
127
  cur = nil
98
128
  lineno=0
99
129
  path.readlines().each do |line|
100
- md = /--#ENDPOINT (?<method>\S+) (?<path>\S+)( (?<ctype>.*))?/.match(line)
130
+ md = @match_header.match(line)
101
131
  if not md.nil? then
102
132
  # header line.
103
133
  cur[:line_end] = lineno unless cur.nil?
@@ -145,21 +145,28 @@ module MrMurano
145
145
  itemA[:checksum] != itemB[:checksum])
146
146
  end
147
147
 
148
- def localitems(from)
149
- from = Pathname.new(from) unless from.kind_of? Pathname
150
- unless from.exist? then
151
- return []
152
- end
153
- raise "Not a directory: #{from.to_s}" unless from.directory?
154
-
155
- Pathname.glob(from.to_s + '/**/*').reject do |path|
156
- path.directory?
157
- end.map do |path|
158
- name = toRemoteItem(from, path)
159
- name[:local_path] = path
160
- name
161
- end
148
+ def searchFor
149
+ $cfg['files.searchFor'].split
162
150
  end
151
+ def ignoring
152
+ $cfg['files.ignoring'].split
153
+ end
154
+
155
+ # def localitems(from)
156
+ # from = Pathname.new(from) unless from.kind_of? Pathname
157
+ # unless from.exist? then
158
+ # return []
159
+ # end
160
+ # raise "Not a directory: #{from.to_s}" unless from.directory?
161
+ #
162
+ # Pathname.glob(from.to_s + '/**/*').reject do |path|
163
+ # path.directory? or ignoring.any?{|i| ::File.fnmatch(i,path)}
164
+ # end.map do |path|
165
+ # name = toRemoteItem(from, path)
166
+ # name[:local_path] = path
167
+ # name
168
+ # end
169
+ # end
163
170
 
164
171
  end
165
172
  SyncRoot.add('files', File, 'S', %{Static Files}, true)
@@ -111,7 +111,8 @@ module MrMurano
111
111
  def assignTriggers(products)
112
112
  details = fetch(scid)
113
113
  products = [products] unless products.kind_of? Array
114
- details[:triggers] = {:pid=>products, :vendor=>products}
114
+ details[:triggers] = {:pid=>products}
115
+ details[:parameters] = {:pid=>products}
115
116
 
116
117
  put('/'+scid, details)
117
118
  end
@@ -25,6 +25,8 @@ module MrMurano
25
25
  end
26
26
 
27
27
  def fetch(name)
28
+ raise "Missing name!" if name.nil?
29
+ raise "Empty name!" if name.empty?
28
30
  ret = get('/'+name)
29
31
  if block_given? then
30
32
  yield ret[:script]
@@ -171,6 +173,14 @@ module MrMurano
171
173
  end
172
174
  end
173
175
 
176
+ def searchFor
177
+ $cfg['modules.searchFor'].split
178
+ end
179
+
180
+ def ignoring
181
+ $cfg['modules.ignoring'].split
182
+ end
183
+
174
184
  def toRemoteItem(from, path)
175
185
  name = path.basename.to_s.sub(/\..*/, '')
176
186
  {:name => name}
@@ -207,6 +217,14 @@ module MrMurano
207
217
  end
208
218
  end
209
219
 
220
+ def searchFor
221
+ $cfg['eventhandler.searchFor'].split
222
+ end
223
+
224
+ def ignoring
225
+ $cfg['eventhandler.ignoring'].split
226
+ end
227
+
210
228
  def list
211
229
  ret = get()
212
230
  # eventhandler.skiplist is a list of whitespace seperated dot-paired values.
@@ -245,6 +245,17 @@ module MrMurano
245
245
  items.values
246
246
  end
247
247
 
248
+ ##
249
+ # Returns array of globs to search for files
250
+ def searchFor
251
+ %w{*.lua */*.lua}
252
+ end
253
+
254
+ ## Returns array of globs of files to ignore
255
+ def ignoring
256
+ %w{*_test.lua *_spec.lua .*}
257
+ end
258
+
248
259
  ##
249
260
  # Get a list of local items rooted at #from
250
261
  #
@@ -254,22 +265,14 @@ module MrMurano
254
265
  # @param from Pathname: Directory of items to scan
255
266
  # @return Array: of Hashes of item details
256
267
  def localitems(from)
257
- from.children.map do |path|
258
- if path.directory? then
259
- # TODO: look for definition. ( ?.rockspec? ?mr.modules? ?mr.manifest? )
260
- # Lacking definition, find all *.lua but not *_test.lua
261
- # This specifically and intentionally only goes one level deep.
262
- path.children
263
- else
264
- path
268
+ searchIn = from.to_s
269
+ sf = searchFor.map{|i| ::File.join(searchIn, i)}
270
+ Dir[*sf].flatten.compact.reject do |p|
271
+ ::File.directory?(p) or ignoring.any? do |i|
272
+ ::File.fnmatch(i,p)
265
273
  end
266
- end.flatten.compact.reject do |path|
267
- # TODO: These globs should be in $cfg.
268
- path.fnmatch('*_test.lua') or path.basename.fnmatch('.*')
269
- end.select do |path|
270
- # TODO: These globs should be in $cfg.
271
- path.extname == '.lua'
272
274
  end.map do |path|
275
+ path = Pathname.new(path)
273
276
  item = toRemoteItem(from, path)
274
277
  if item.kind_of?(Array) then
275
278
  item.compact.map{|i| i[:local_path] = path; i}
@@ -0,0 +1,33 @@
1
+ require 'pp'
2
+
3
+ # You don't need this.
4
+ # To use this:
5
+ # - mkdir -p ~/.mrmurano/plugins
6
+ # - ln gb.rb ~/.mrmurano/plugins
7
+
8
+ command :_gb do |c|
9
+ c.syntax = %{mr _gb <class> <method> (<args>)}
10
+ c.summary = %{Call internal class methods directly.}
11
+ c.description = %{Call internal class methods directly.}
12
+
13
+ c.action do |args, options|
14
+ cls = args[0]
15
+ meth = args[1].to_sym
16
+ args.shift(2)
17
+
18
+ begin
19
+ gb = Object::const_get("MrMurano::#{cls}").new
20
+ if gb.respond_to? meth then
21
+ pp gb.__send__(meth, *args)
22
+ else
23
+ say_error "'#{cls}' doesn't '#{meth}'"
24
+ end
25
+ rescue Exception => e
26
+ say_error e.message
27
+ pp e
28
+ end
29
+ end
30
+ end
31
+
32
+
33
+ # vim: set ai et sw=2 ts=2 :
@@ -0,0 +1,63 @@
1
+ require 'MrMurano/Mock'
2
+
3
+ command 'mock' do |c|
4
+ c.syntax = %{mr mock}
5
+ c.summary = %{Enable or disable testpoint. Show current UUID.}
6
+ c.description = %{mock lets you enable testpoints to do local lua development}
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
+ command 'mock enable' do |c|
15
+ c.syntax = %{mr mock enable}
16
+ c.summary = %{Create a testpoint file.}
17
+ c.description = %{Run syncup after running this to carry the change through to Murano.
18
+ Returns the UUID to be used for authenticating.
19
+ }
20
+ c.option '--raw', %{print raw uuid}
21
+ c.action do |args, options|
22
+ mock = MrMurano::Mock.new
23
+ uuid = mock.create_testpoint()
24
+ if options.raw then
25
+ say uuid
26
+ else
27
+ say %{Created testpoint file. Run `mr syncup` to activate. The following is the authorization token:}
28
+ say %{$ export AUTHORIZATION="#{uuid}"}
29
+ end
30
+ end
31
+ end
32
+
33
+ command 'mock disable' do |c|
34
+ c.syntax = %{mr mock disable}
35
+ c.summary = %{Remove the testpoint file.}
36
+ c.description = %{Run syncup after running this to carry the change through to Murano.}
37
+
38
+ c.action do |args, options|
39
+ mock = MrMurano::Mock.new
40
+ removed = mock.remove_testpoint()
41
+ if removed then
42
+ say %{Deleted testpoint file. Run `mr syncup` to remove the testpoint.}
43
+ else
44
+ say %{No testpoint file to remove.}
45
+ end
46
+ end
47
+ end
48
+
49
+ command 'mock show' do |c|
50
+ c.syntax = %{mr mock disable}
51
+ c.summary = %{Remove the testpoint file.}
52
+ c.description = %{Run syncup after running this to carry the change through to Murano.}
53
+
54
+ c.action do |args, options|
55
+ mock = MrMurano::Mock.new
56
+ uuid = mock.show()
57
+ if uuid then
58
+ say uuid
59
+ else
60
+ say %{Could not find testpoint file or UUID in testpoint file.}
61
+ end
62
+ end
63
+ end