MrMurano 1.6.3 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -2
  3. data/Gemfile +1 -1
  4. data/MrMurano.gemspec +1 -1
  5. data/README.markdown +4 -0
  6. data/TODO.taskpaper +17 -4
  7. data/lib/MrMurano/Account.rb +5 -1
  8. data/lib/MrMurano/Config.rb +3 -1
  9. data/lib/MrMurano/Product-Resources.rb +239 -0
  10. data/lib/MrMurano/Product.rb +51 -2
  11. data/lib/MrMurano/Solution-Cors.rb +81 -0
  12. data/lib/MrMurano/Solution-Endpoint.rb +8 -4
  13. data/lib/MrMurano/Solution-File.rb +4 -2
  14. data/lib/MrMurano/Solution-ServiceConfig.rb +74 -1
  15. data/lib/MrMurano/Solution-Services.rb +4 -2
  16. data/lib/MrMurano/Solution-Users.rb +6 -3
  17. data/lib/MrMurano/Solution.rb +6 -274
  18. data/lib/MrMurano/SyncUpDown.rb +433 -0
  19. data/lib/MrMurano/commands/completion.rb +152 -0
  20. data/lib/MrMurano/commands/content.rb +15 -14
  21. data/lib/MrMurano/commands/cors.rb +11 -38
  22. data/lib/MrMurano/commands/exportImport.rb +4 -3
  23. data/lib/MrMurano/commands/keystore.rb +15 -16
  24. data/lib/MrMurano/commands/logs.rb +2 -2
  25. data/lib/MrMurano/commands/productCreate.rb +4 -4
  26. data/lib/MrMurano/commands/productDelete.rb +6 -8
  27. data/lib/MrMurano/commands/productSpec.rb +31 -36
  28. data/lib/MrMurano/commands/productWrite.rb +9 -7
  29. data/lib/MrMurano/commands/serialNumberCmds.rb +4 -4
  30. data/lib/MrMurano/commands/solutionCreate.rb +4 -4
  31. data/lib/MrMurano/commands/solutionDelete.rb +5 -5
  32. data/lib/MrMurano/commands/status.rb +9 -42
  33. data/lib/MrMurano/commands/sync.rb +15 -71
  34. data/lib/MrMurano/commands/timeseries.rb +23 -29
  35. data/lib/MrMurano/commands/tsdb.rb +202 -0
  36. data/lib/MrMurano/commands/zshcomplete.erb +112 -0
  37. data/lib/MrMurano/commands.rb +4 -1
  38. data/lib/MrMurano/http.rb +4 -3
  39. data/lib/MrMurano/makePretty.rb +15 -6
  40. data/lib/MrMurano/verbosing.rb +71 -0
  41. data/lib/MrMurano/version.rb +1 -1
  42. data/lib/MrMurano.rb +1 -0
  43. data/spec/ConfigFile_spec.rb +3 -3
  44. data/spec/ProductContent_spec.rb +2 -2
  45. data/spec/ProductResources_spec.rb +152 -0
  46. data/spec/Product_spec.rb +38 -1
  47. data/spec/Solution-Cors_spec.rb +134 -0
  48. data/spec/Solution-ServiceConfig_spec.rb +198 -0
  49. data/spec/SyncRoot_spec.rb +74 -0
  50. data/spec/cmd_config_spec.rb +51 -0
  51. data/spec/fixtures/.mrmuranorc +9 -0
  52. data/spec/{testfiles → fixtures}/configfile +0 -0
  53. data/spec/fixtures/mrmuranorc_deleted_bob +8 -0
  54. data/spec/fixtures/product_spec_files/example.exoline.spec.yaml +116 -0
  55. data/spec/fixtures/product_spec_files/example.murano.spec.yaml +14 -0
  56. data/spec/fixtures/product_spec_files/gwe.exoline.spec.yaml +21 -0
  57. data/spec/fixtures/product_spec_files/gwe.murano.spec.yaml +16 -0
  58. data/spec/{lightbulb.yaml → fixtures/product_spec_files/lightbulb.yaml} +0 -0
  59. data/spec/spec_helper.rb +4 -4
  60. metadata +47 -19
@@ -0,0 +1,198 @@
1
+ require 'MrMurano/version'
2
+ require 'MrMurano/Solution-ServiceConfig'
3
+ require 'tempfile'
4
+
5
+ RSpec.describe MrMurano::ServiceConfig do
6
+ before(:example) do
7
+ $cfg = MrMurano::Config.new
8
+ $cfg.load
9
+ $cfg['net.host'] = 'bizapi.hosted.exosite.io'
10
+ $cfg['solution.id'] = 'XYZ'
11
+
12
+ @srv = MrMurano::ServiceConfig.new
13
+ allow(@srv).to receive(:token).and_return("TTTTTTTTTT")
14
+ end
15
+
16
+ it "initializes" do
17
+ uri = @srv.endPoint('/')
18
+ expect(uri.to_s).to eq("https://bizapi.hosted.exosite.io/api:1/solution/XYZ/serviceconfig/")
19
+ end
20
+
21
+ it "lists" do
22
+ body = {:items=>[{:id=>"9K0",
23
+ :name=>"debug",
24
+ :alias=>"XYZ_debug",
25
+ :solution_id=>"XYZ",
26
+ :service=>"device",
27
+ :status=>"ready",
28
+ :created_at=>"2016-07-07T19:16:19.479Z",
29
+ :updated_at=>"2016-09-12T13:26:55.868Z",
30
+ :deleted_at=>nil}],
31
+ :total=>1}
32
+ stub_request(:get, "https://bizapi.hosted.exosite.io/api:1/solution/XYZ/serviceconfig").
33
+ with(:headers=>{'Authorization'=>'token TTTTTTTTTT',
34
+ 'Content-Type'=>'application/json'}).
35
+ to_return(body: body.to_json)
36
+
37
+ ret = @srv.list()
38
+ expect(ret).to eq(body[:items])
39
+ end
40
+
41
+ it "fetches" do
42
+ body = {:id=>"9K0",
43
+ :name=>"debug",
44
+ :alias=>"XYZ_debug",
45
+ :solution_id=>"XYZ",
46
+ :service=>"device",
47
+ :status=>"ready",
48
+ :created_at=>"2016-07-07T19:16:19.479Z",
49
+ :updated_at=>"2016-09-12T13:26:55.868Z"
50
+ }
51
+ stub_request(:get, "https://bizapi.hosted.exosite.io/api:1/solution/XYZ/serviceconfig/9K0").
52
+ with(:headers=>{'Authorization'=>'token TTTTTTTTTT',
53
+ 'Content-Type'=>'application/json'}).
54
+ to_return(body: body.to_json)
55
+
56
+ ret = @srv.fetch('9K0')
57
+ expect(ret).to eq(body)
58
+ end
59
+
60
+ it "gets id from service" do
61
+ body = {:items=>[{:id=>"9K0",
62
+ :name=>"debug",
63
+ :alias=>"XYZ_debug",
64
+ :solution_id=>"XYZ",
65
+ :service=>"device",
66
+ :status=>"ready",
67
+ :created_at=>"2016-07-07T19:16:19.479Z",
68
+ :updated_at=>"2016-09-12T13:26:55.868Z",
69
+ :deleted_at=>nil}],
70
+ :total=>1}
71
+ stub_request(:get, "https://bizapi.hosted.exosite.io/api:1/solution/XYZ/serviceconfig").
72
+ with(:headers=>{'Authorization'=>'token TTTTTTTTTT',
73
+ 'Content-Type'=>'application/json'}).
74
+ to_return(body: body.to_json)
75
+
76
+ ret = @srv.scid_for_name('device')
77
+ expect(ret).to eq("9K0")
78
+ end
79
+
80
+ it "gets nil if not there" do
81
+ body = {:items=>[{:id=>"9K0",
82
+ :name=>"debug",
83
+ :alias=>"XYZ_debug",
84
+ :solution_id=>"XYZ",
85
+ :service=>"device",
86
+ :status=>"ready",
87
+ :created_at=>"2016-07-07T19:16:19.479Z",
88
+ :updated_at=>"2016-09-12T13:26:55.868Z",
89
+ :deleted_at=>nil}],
90
+ :total=>1}
91
+ stub_request(:get, "https://bizapi.hosted.exosite.io/api:1/solution/XYZ/serviceconfig").
92
+ with(:headers=>{'Authorization'=>'token TTTTTTTTTT',
93
+ 'Content-Type'=>'application/json'}).
94
+ to_return(body: body.to_json)
95
+
96
+ ret = @srv.scid_for_name('debug')
97
+ expect(ret).to eq(nil)
98
+ end
99
+
100
+ it "gets info" do
101
+ body = {:calls=>{:daily=>0, :monthly=>0, :total=>0}}
102
+ stub_request(:get, "https://bizapi.hosted.exosite.io/api:1/solution/XYZ/serviceconfig/9K0/info").
103
+ with(:headers=>{'Authorization'=>'token TTTTTTTTTT',
104
+ 'Content-Type'=>'application/json'}).
105
+ to_return(body: body.to_json)
106
+
107
+ ret = @srv.info('9K0')
108
+ expect(ret).to eq(body)
109
+ end
110
+
111
+ context "calls" do
112
+ before(:example) do
113
+ allow(@srv).to receive(:scid).and_return("9K0")
114
+ end
115
+ it "a get" do
116
+ body = {:calls=>{:daily=>0, :monthly=>0, :total=>0}}
117
+ stub_request(:get, "https://bizapi.hosted.exosite.io/api:1/solution/XYZ/serviceconfig/9K0/call/info").
118
+ with(:headers=>{'Authorization'=>'token TTTTTTTTTT',
119
+ 'Content-Type'=>'application/json'}).
120
+ to_return(body: body.to_json)
121
+
122
+ ret = @srv.call(:info)
123
+ expect(ret).to eq(body)
124
+ end
125
+
126
+ it "a get with query" do
127
+ body = {:calls=>{:daily=>0, :monthly=>0, :total=>0}}
128
+ stub_request(:get, "https://bizapi.hosted.exosite.io/api:1/solution/XYZ/serviceconfig/9K0/call/ask?q=what").
129
+ with(:headers=>{'Authorization'=>'token TTTTTTTTTT',
130
+ 'Content-Type'=>'application/json'}).
131
+ to_return(body: body.to_json)
132
+
133
+ ret = @srv.call(:ask, :get, {:q=>'what'})
134
+ expect(ret).to eq(body)
135
+ end
136
+
137
+ it "a post" do
138
+ body = {:calls=>{:daily=>0, :monthly=>0, :total=>0}}
139
+ stub_request(:post, "https://bizapi.hosted.exosite.io/api:1/solution/XYZ/serviceconfig/9K0/call/ask").
140
+ with(:body => JSON.generate({:q=> 'what'}),
141
+ :headers=>{'Authorization'=>'token TTTTTTTTTT',
142
+ 'Content-Type'=>'application/json'}).
143
+ to_return(body: body.to_json)
144
+
145
+ ret = @srv.call(:ask, :post, {:q=>'what'})
146
+ expect(ret).to eq(body)
147
+ end
148
+
149
+ it "a post without data" do
150
+ body = {:calls=>{:daily=>0, :monthly=>0, :total=>0}}
151
+ stub_request(:post, "https://bizapi.hosted.exosite.io/api:1/solution/XYZ/serviceconfig/9K0/call/ask").
152
+ with(:body => JSON.generate({}),
153
+ :headers=>{'Authorization'=>'token TTTTTTTTTT',
154
+ 'Content-Type'=>'application/json'}).
155
+ to_return(body: body.to_json)
156
+
157
+ ret = @srv.call(:ask, :post)
158
+ expect(ret).to eq(body)
159
+ end
160
+
161
+ it "a put" do
162
+ body = {:calls=>{:daily=>0, :monthly=>0, :total=>0}}
163
+ stub_request(:put, "https://bizapi.hosted.exosite.io/api:1/solution/XYZ/serviceconfig/9K0/call/ask").
164
+ with(:body => JSON.generate({:q=> 'what'}),
165
+ :headers=>{'Authorization'=>'token TTTTTTTTTT',
166
+ 'Content-Type'=>'application/json'}).
167
+ to_return(body: body.to_json)
168
+
169
+ ret = @srv.call(:ask, :put, {:q=>'what'})
170
+ expect(ret).to eq(body)
171
+ end
172
+
173
+ it "a put without data" do
174
+ body = {:calls=>{:daily=>0, :monthly=>0, :total=>0}}
175
+ stub_request(:put, "https://bizapi.hosted.exosite.io/api:1/solution/XYZ/serviceconfig/9K0/call/ask").
176
+ with(:body => JSON.generate({}),
177
+ :headers=>{'Authorization'=>'token TTTTTTTTTT',
178
+ 'Content-Type'=>'application/json'}).
179
+ to_return(body: body.to_json)
180
+
181
+ ret = @srv.call(:ask, :put)
182
+ expect(ret).to eq(body)
183
+ end
184
+
185
+ it "a delete" do
186
+ body = {:calls=>{:daily=>0, :monthly=>0, :total=>0}}
187
+ stub_request(:delete, "https://bizapi.hosted.exosite.io/api:1/solution/XYZ/serviceconfig/9K0/call/gone").
188
+ with(:headers=>{'Authorization'=>'token TTTTTTTTTT',
189
+ 'Content-Type'=>'application/json'}).
190
+ to_return(body: body.to_json)
191
+
192
+ ret = @srv.call(:gone, :delete)
193
+ expect(ret).to eq(body)
194
+ end
195
+ end
196
+
197
+ end
198
+ # vim: set ai et sw=2 ts=2 :
@@ -0,0 +1,74 @@
1
+ require 'MrMurano/version'
2
+ require 'MrMurano/Config'
3
+ require 'MrMurano/SyncUpDown'
4
+
5
+ RSpec.describe MrMurano::SyncRoot do
6
+
7
+ after(:example) do
8
+ MrMurano::SyncRoot.reset
9
+ end
10
+
11
+ it "Adds" do
12
+ class User
13
+ end
14
+ class Role
15
+ end
16
+ MrMurano::SyncRoot.add('user', User, 'U', "describe user")
17
+ MrMurano::SyncRoot.add('role', Role, 'R', "describe role")
18
+ end
19
+
20
+ context "b" do
21
+ before(:example) do
22
+ class User
23
+ end
24
+ class Role
25
+ end
26
+ MrMurano::SyncRoot.add('user', User, 'U', "describe user", true)
27
+ MrMurano::SyncRoot.add('role', Role, 'R', "describe role")
28
+
29
+ @options = {}
30
+ @options.define_singleton_method(:method_missing) do |mid,*args|
31
+ if mid.to_s.match(/^(.+)=$/) then
32
+ self[$1.to_sym] = args.first
33
+ else
34
+ self[mid]
35
+ end
36
+ end
37
+
38
+ end
39
+
40
+ it "iterrates on each" do
41
+ ret=[]
42
+ MrMurano::SyncRoot.each{|a,b,c| ret << a}
43
+ expect(ret).to eq(["user", "role"])
44
+ end
45
+
46
+ it "iterrates only on selected" do
47
+ @options.role = true
48
+ ret=[]
49
+ MrMurano::SyncRoot.each_filtered(@options) {|a,b,c| ret << a}
50
+ expect(ret).to eq(["role"])
51
+ end
52
+
53
+ it "selects all" do
54
+ @options.all = true
55
+ MrMurano::SyncRoot.checkSAME(@options)
56
+ expect(@options).to eq({:all=>true, :user=>true, :role=>true})
57
+ end
58
+
59
+ it "selects defaults when none" do
60
+ MrMurano::SyncRoot.checkSAME(@options)
61
+ expect(@options).to eq({:user=>true})
62
+ end
63
+
64
+ it "builds option params" do
65
+ ret=[]
66
+ MrMurano::SyncRoot.each_option do |s,l,d|
67
+ ret << [s,l,d]
68
+ end
69
+ expect(ret).to eq([["-u", "--[no-]user", "describe user"], ["-r", "--[no-]role", "describe role"]])
70
+ end
71
+
72
+ end
73
+ end
74
+ # vim: set ai et sw=2 ts=2 :
@@ -0,0 +1,51 @@
1
+ require 'tmpdir'
2
+ require 'open3'
3
+ require 'fileutils'
4
+
5
+ RSpec.describe 'mr config' do
6
+
7
+ pref = "ruby -Ilib bin/"
8
+ around(:example) do |ex|
9
+ Dir.mktmpdir do |dir|
10
+ @tmpdir = dir
11
+ ex.run
12
+ end
13
+ end
14
+
15
+ it "Needs a key" do
16
+ out, err, status = Open3.capture3("#{pref}mr config")
17
+ expect(status).to eq(0)
18
+ expect(out).to eq("\e[31mNeed a config key\e[0m\n")
19
+ expect(err).to eq('')
20
+ end
21
+
22
+ it "Sets a key" do
23
+ out, err, status = Open3.capture3("#{pref}mr config bob build")
24
+ expect(status).to eq(0)
25
+ expect(out).to eq('')
26
+ expect(err).to eq('')
27
+ end
28
+
29
+ it "Reads a key" do
30
+ FileUtils.copy_file 'spec/fixtures/.mrmuranorc', File.join(@tmpdir, '.mrmuranorc'), :verbose => true
31
+ out, err, status = Open3.capture3("#{pref}mr config --project doThisTest.bob")
32
+ expect(status).to eq(0)
33
+ expect(out).to eq('')
34
+ expect(err).to eq('')
35
+ end
36
+
37
+ it "Removes a key" do
38
+ rcf = File.join(@tmpdir, '.mrmuranorc')
39
+ FileUtils.copy_file 'spec/fixtures/.mrmuranorc', rcf, :verbose => true
40
+ out, err, status = Open3.capture3(%{#{pref}mr config --project --unset doThisTest.bob})
41
+ expect(status).to eq(0)
42
+ expect(out).to eq('')
43
+ expect(err).to eq('')
44
+
45
+ afile = IO.read(rcf)
46
+ bfile = IO.read('spec/fixtures/.mrmuranorc')
47
+ expect(afile).to eq(bfile)
48
+ end
49
+ end
50
+
51
+ # vim: set ai et sw=2 ts=2 :
@@ -0,0 +1,9 @@
1
+ [solution]
2
+ id = XXXXXXXXXX
3
+
4
+ [doThisTest]
5
+ bob = build
6
+
7
+ [s-fDEADBEEFGAEG]
8
+ spec = bobo.yaml
9
+
File without changes
@@ -0,0 +1,8 @@
1
+ [solution]
2
+ id = XXXXXXXXXX
3
+
4
+ [doThisTest]
5
+
6
+ [s-fDEADBEEFGAEG]
7
+ spec = bobo.yaml
8
+
@@ -0,0 +1,116 @@
1
+
2
+ # Example client specification file
3
+ # Specification files are in YAML format (a superset of JSON
4
+ # with more readable syntax and support for comments) and
5
+ # look like this. They may contain comments that begin
6
+ # with a # sign.
7
+
8
+ # Device client model information
9
+ device:
10
+ model: "myModel"
11
+ vendor: "myVendor"
12
+
13
+ # list of dataports that must exist
14
+ dataports:
15
+ # this the absolute minimum needed to specify a
16
+ # dataport.
17
+ - alias: mystring
18
+ # names are created, but not compared
19
+ - name: Temperature
20
+ # aliases, type, and format are created
21
+ # and compared
22
+ alias: temp
23
+ format: float
24
+ unit: °F
25
+ - name: LED Control
26
+ alias: led6
27
+ format: integer
28
+ - alias: config
29
+ # format should be string, and parseable JSON
30
+ format: string/json
31
+ # initial value (if no other value is read back)
32
+ initial: '{"text": "555-555-1234", "email": "jeff@555.com"}'
33
+ - alias: person
34
+ format: string/json
35
+ # JSON schema specified inline (http://json-schema.org/)
36
+ # format must be string/json to do validate
37
+ # you may also specify a string to reference schema in an
38
+ # external file. E.g. jsonschema: personschema.json
39
+ jsonschema: {"title": "Person Schema",
40
+ "type": "object",
41
+ "properties": {"name": {"type": "string"}},
42
+ "required": ["name"]}
43
+ initial: '{"name":"John Doe"}'
44
+ - alias: place
45
+ # An description of the dataport.
46
+ description: 'This is a place I have been'
47
+ # Dataports are not public by default,
48
+ # but if you want to share one with the world
49
+ public: true
50
+
51
+ # any dataports not listed but found in the client
52
+ # are ignored. The spec command does not delete things.
53
+
54
+ # list of script datarules that must exist
55
+ scripts:
56
+ # by default, scripts are datarules with
57
+ # names and aliases set to the file name
58
+ - file: test/files/helloworld.lua
59
+ # you can also set them explicitly
60
+ - file: test/files/helloworld.lua
61
+ alias: greeting
62
+ # you can also place lua code inline
63
+ - alias: singleLineScript
64
+ code: debug('hello from inside lua!')
65
+ # multiline lua scripts should start with | and
66
+ # be indented inside the "code:" key.
67
+ - alias: multilineScript
68
+ code: |
69
+ for x=1,10 do
70
+ debug('hello from for loop ' .. x)
71
+ end
72
+ # simple templating for script aliases and
73
+ # content is also supported.
74
+ - file: test/files/convert.lua
75
+ # if <% id %> is embedded in aliases
76
+ # or script content, the --ids parameter must
77
+ # be passed in. The spec command then expects
78
+ # a script or dataport resource per id passed, substituting
79
+ # each ID for <% id %>. In this example, if the command was:
80
+ #
81
+ # $ exo spec mysensor sensorspec.yaml --ids=A,B
82
+ #
83
+ # ...then the spec command looks for *two* script datarules
84
+ # in mysensor, with aliases convertA.lua and convertB.lua.
85
+ # Additionally, any instances of <% id %> in the content of
86
+ # convert.lua are substituted with A and B before being
87
+ # written to each script datarule.
88
+ #
89
+ alias: convert<% id %>.lua
90
+
91
+ # list of dispatches that must exist
92
+ dispatches:
93
+ - alias: myDispatch
94
+ # email | http_get | http_post | http_put | sms | xmpp
95
+ method: email
96
+ recipient: support@exosite.com
97
+ message: hello from Exoline spec example!
98
+ subject: hello!
99
+ # may be an RID or alias
100
+ subscribe: mystring
101
+
102
+ # list of simple datarules that must exist.
103
+ # scripts may go here too, but it's better to
104
+ # to put them under scripts (above)
105
+ datarules:
106
+ - alias: highTemp
107
+ format: float
108
+ subscribe: temp
109
+ rule: {
110
+ "simple": {
111
+ "comparison": "gt",
112
+ "constant": 80,
113
+ "repeat": true
114
+ }
115
+ }
116
+
@@ -0,0 +1,14 @@
1
+ ---
2
+ resources:
3
+ - alias: mystring
4
+ - alias: temp
5
+ format: float
6
+ - alias: led6
7
+ format: integer
8
+ - alias: config
9
+ format: string
10
+ initial: '{"text": "555-555-1234", "email": "jeff@555.com"}'
11
+ - alias: person
12
+ format: string
13
+ initial: '{"name":"John Doe"}'
14
+ - alias: place
@@ -0,0 +1,21 @@
1
+ ---
2
+ dataports:
3
+ - alias: engine_fetch
4
+ format: string/json
5
+ - alias: sensors_report
6
+ format: string/json
7
+ - alias: update_interval
8
+ format: string
9
+ - alias: device_info
10
+ format: string/json
11
+ - alias: usage_report
12
+ format: string/json
13
+ - alias: fetch_status
14
+ format: string/json
15
+ - alias: engine_report
16
+ format: string/json
17
+ jsonschema: {"title": "Person Schema",
18
+ "type": "object",
19
+ "properties": {"name": {"type": "string"}},
20
+ "required": ["name"]}
21
+
@@ -0,0 +1,16 @@
1
+ ---
2
+ resources:
3
+ - alias: engine_fetch
4
+ format: string
5
+ - alias: sensors_report
6
+ format: string
7
+ - alias: update_interval
8
+ format: string
9
+ - alias: device_info
10
+ format: string
11
+ - alias: usage_report
12
+ format: string
13
+ - alias: fetch_status
14
+ format: string
15
+ - alias: engine_report
16
+ format: string
data/spec/spec_helper.rb CHANGED
@@ -51,18 +51,18 @@ RSpec.configure do |config|
51
51
 
52
52
  # The settings below are suggested to provide a good initial experience
53
53
  # with RSpec, but feel free to customize to your heart's content.
54
- =begin
54
+
55
55
  # This allows you to limit a spec run to individual examples or groups
56
56
  # you care about by tagging them with `:focus` metadata. When nothing
57
57
  # is tagged with `:focus`, all examples get run. RSpec also provides
58
58
  # aliases for `it`, `describe`, and `context` that include `:focus`
59
59
  # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
60
- config.filter_run_when_matching :focus
60
+ #config.filter_run_when_matching :focus
61
61
 
62
62
  # Allows RSpec to persist some state between runs in order to support
63
63
  # the `--only-failures` and `--next-failure` CLI options. We recommend
64
64
  # you configure your source control system to ignore this file.
65
- config.example_status_persistence_file_path = "spec/examples.txt"
65
+ #config.example_status_persistence_file_path = "spec/examples.txt"
66
66
 
67
67
  # Limits the available syntax to the non-monkey patched syntax that is
68
68
  # recommended. For more details, see:
@@ -101,5 +101,5 @@ RSpec.configure do |config|
101
101
  # test failures related to randomization by passing the same `--seed` value
102
102
  # as the one that triggered the failure.
103
103
  Kernel.srand config.seed
104
- =end
104
+
105
105
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: MrMurano
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.3
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Conrad Tadpol Tilstra
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: 4.4.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: highline
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.7.8
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 1.7.8
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: terminal-table
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -94,20 +108,6 @@ dependencies:
94
108
  - - ~>
95
109
  - !ruby/object:Gem::Version
96
110
  version: 1.0.1
97
- - !ruby/object:Gem::Dependency
98
- name: rainbow
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ~>
102
- - !ruby/object:Gem::Version
103
- version: 2.1.0
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ~>
109
- - !ruby/object:Gem::Version
110
- version: 2.1.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: dotenv
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -200,16 +200,20 @@ files:
200
200
  - lib/MrMurano.rb
201
201
  - lib/MrMurano/Account.rb
202
202
  - lib/MrMurano/Config.rb
203
+ - lib/MrMurano/Product-Resources.rb
203
204
  - lib/MrMurano/Product.rb
205
+ - lib/MrMurano/Solution-Cors.rb
204
206
  - lib/MrMurano/Solution-Endpoint.rb
205
207
  - lib/MrMurano/Solution-File.rb
206
208
  - lib/MrMurano/Solution-ServiceConfig.rb
207
209
  - lib/MrMurano/Solution-Services.rb
208
210
  - lib/MrMurano/Solution-Users.rb
209
211
  - lib/MrMurano/Solution.rb
212
+ - lib/MrMurano/SyncUpDown.rb
210
213
  - lib/MrMurano/commands.rb
211
214
  - lib/MrMurano/commands/account.rb
212
215
  - lib/MrMurano/commands/assign.rb
216
+ - lib/MrMurano/commands/completion.rb
213
217
  - lib/MrMurano/commands/config.rb
214
218
  - lib/MrMurano/commands/content.rb
215
219
  - lib/MrMurano/commands/cors.rb
@@ -229,6 +233,8 @@ files:
229
233
  - lib/MrMurano/commands/status.rb
230
234
  - lib/MrMurano/commands/sync.rb
231
235
  - lib/MrMurano/commands/timeseries.rb
236
+ - lib/MrMurano/commands/tsdb.rb
237
+ - lib/MrMurano/commands/zshcomplete.erb
232
238
  - lib/MrMurano/hash.rb
233
239
  - lib/MrMurano/http.rb
234
240
  - lib/MrMurano/makePretty.rb
@@ -240,12 +246,23 @@ files:
240
246
  - spec/MakePretties_spec.rb
241
247
  - spec/ProductBase_spec.rb
242
248
  - spec/ProductContent_spec.rb
249
+ - spec/ProductResources_spec.rb
243
250
  - spec/Product_spec.rb
251
+ - spec/Solution-Cors_spec.rb
252
+ - spec/Solution-ServiceConfig_spec.rb
244
253
  - spec/Solution-ServiceEventHandler_spec.rb
245
254
  - spec/Solution-ServiceModules_spec.rb
246
- - spec/lightbulb.yaml
255
+ - spec/SyncRoot_spec.rb
256
+ - spec/cmd_config_spec.rb
257
+ - spec/fixtures/.mrmuranorc
258
+ - spec/fixtures/configfile
259
+ - spec/fixtures/mrmuranorc_deleted_bob
260
+ - spec/fixtures/product_spec_files/example.exoline.spec.yaml
261
+ - spec/fixtures/product_spec_files/example.murano.spec.yaml
262
+ - spec/fixtures/product_spec_files/gwe.exoline.spec.yaml
263
+ - spec/fixtures/product_spec_files/gwe.murano.spec.yaml
264
+ - spec/fixtures/product_spec_files/lightbulb.yaml
247
265
  - spec/spec_helper.rb
248
- - spec/testfiles/configfile
249
266
  homepage: https://github.com/tadpol/MrMurano
250
267
  licenses:
251
268
  - MIT
@@ -277,9 +294,20 @@ test_files:
277
294
  - spec/MakePretties_spec.rb
278
295
  - spec/ProductBase_spec.rb
279
296
  - spec/ProductContent_spec.rb
297
+ - spec/ProductResources_spec.rb
280
298
  - spec/Product_spec.rb
299
+ - spec/Solution-Cors_spec.rb
300
+ - spec/Solution-ServiceConfig_spec.rb
281
301
  - spec/Solution-ServiceEventHandler_spec.rb
282
302
  - spec/Solution-ServiceModules_spec.rb
283
- - spec/lightbulb.yaml
303
+ - spec/SyncRoot_spec.rb
304
+ - spec/cmd_config_spec.rb
305
+ - spec/fixtures/.mrmuranorc
306
+ - spec/fixtures/configfile
307
+ - spec/fixtures/mrmuranorc_deleted_bob
308
+ - spec/fixtures/product_spec_files/example.exoline.spec.yaml
309
+ - spec/fixtures/product_spec_files/example.murano.spec.yaml
310
+ - spec/fixtures/product_spec_files/gwe.exoline.spec.yaml
311
+ - spec/fixtures/product_spec_files/gwe.murano.spec.yaml
312
+ - spec/fixtures/product_spec_files/lightbulb.yaml
284
313
  - spec/spec_helper.rb
285
- - spec/testfiles/configfile