MuranoCLI 2.2.4 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (159) hide show
  1. checksums.yaml +4 -4
  2. data/.agignore +3 -0
  3. data/.gitignore +18 -1
  4. data/.rubocop.yml +222 -0
  5. data/.trustme.sh +185 -0
  6. data/.trustme.vim +24 -0
  7. data/Gemfile +23 -4
  8. data/LICENSE.txt +1 -1
  9. data/MuranoCLI.gemspec +43 -8
  10. data/README.markdown +9 -11
  11. data/Rakefile +187 -143
  12. data/TODO.taskpaper +2 -2
  13. data/bin/murano +51 -52
  14. data/docs/basic_example.rst +436 -0
  15. data/docs/completions/murano_completion-bash +3484 -0
  16. data/docs/demo.md +32 -32
  17. data/docs/develop.rst +391 -0
  18. data/lib/MrMurano.rb +21 -7
  19. data/lib/MrMurano/Account.rb +159 -174
  20. data/lib/MrMurano/Business.rb +381 -0
  21. data/lib/MrMurano/Config-Migrate.rb +32 -26
  22. data/lib/MrMurano/Config.rb +407 -128
  23. data/lib/MrMurano/Content.rb +191 -0
  24. data/lib/MrMurano/Gateway.rb +489 -0
  25. data/lib/MrMurano/Keystore.rb +48 -0
  26. data/lib/MrMurano/Passwords.rb +103 -0
  27. data/lib/MrMurano/ProjectFile.rb +121 -79
  28. data/lib/MrMurano/ReCommander.rb +114 -10
  29. data/lib/MrMurano/Setting.rb +90 -0
  30. data/lib/MrMurano/Solution-ServiceConfig.rb +89 -45
  31. data/lib/MrMurano/Solution-Services.rb +461 -166
  32. data/lib/MrMurano/Solution-Users.rb +70 -31
  33. data/lib/MrMurano/Solution.rb +372 -13
  34. data/lib/MrMurano/SolutionId.rb +73 -0
  35. data/lib/MrMurano/SyncRoot.rb +137 -0
  36. data/lib/MrMurano/SyncUpDown.rb +594 -284
  37. data/lib/MrMurano/Webservice-Cors.rb +71 -0
  38. data/lib/MrMurano/Webservice-Endpoint.rb +234 -0
  39. data/lib/MrMurano/Webservice-File.rb +193 -0
  40. data/lib/MrMurano/Webservice.rb +51 -0
  41. data/lib/MrMurano/commands.rb +18 -15
  42. data/lib/MrMurano/commands/business.rb +300 -6
  43. data/lib/MrMurano/commands/completion-bash.erb +166 -0
  44. data/lib/MrMurano/commands/{zshcomplete.erb → completion-zsh.erb} +0 -0
  45. data/lib/MrMurano/commands/completion.rb +76 -39
  46. data/lib/MrMurano/commands/config.rb +108 -44
  47. data/lib/MrMurano/commands/content.rb +115 -72
  48. data/lib/MrMurano/commands/cors.rb +29 -14
  49. data/lib/MrMurano/commands/devices.rb +286 -0
  50. data/lib/MrMurano/commands/domain.rb +52 -12
  51. data/lib/MrMurano/commands/gb.rb +24 -9
  52. data/lib/MrMurano/commands/globals.rb +64 -0
  53. data/lib/MrMurano/commands/init.rb +377 -155
  54. data/lib/MrMurano/commands/keystore.rb +92 -82
  55. data/lib/MrMurano/commands/link.rb +300 -0
  56. data/lib/MrMurano/commands/login.rb +74 -11
  57. data/lib/MrMurano/commands/logs.rb +63 -32
  58. data/lib/MrMurano/commands/mock.rb +57 -29
  59. data/lib/MrMurano/commands/password.rb +57 -39
  60. data/lib/MrMurano/commands/postgresql.rb +127 -94
  61. data/lib/MrMurano/commands/settings.rb +203 -0
  62. data/lib/MrMurano/commands/show.rb +79 -38
  63. data/lib/MrMurano/commands/solution.rb +423 -5
  64. data/lib/MrMurano/commands/solution_picker.rb +547 -0
  65. data/lib/MrMurano/commands/status.rb +195 -61
  66. data/lib/MrMurano/commands/sync.rb +78 -39
  67. data/lib/MrMurano/commands/timeseries.rb +71 -55
  68. data/lib/MrMurano/commands/tsdb.rb +113 -87
  69. data/lib/MrMurano/commands/usage.rb +57 -15
  70. data/lib/MrMurano/hash.rb +100 -10
  71. data/lib/MrMurano/http.rb +187 -43
  72. data/lib/MrMurano/makePretty.rb +16 -14
  73. data/lib/MrMurano/optparse.rb +2178 -0
  74. data/lib/MrMurano/progress.rb +138 -0
  75. data/lib/MrMurano/schema/resource-v1.0.0.yaml +32 -0
  76. data/lib/MrMurano/template/projectFile.murano.erb +16 -13
  77. data/lib/MrMurano/verbosing.rb +166 -29
  78. data/lib/MrMurano/version.rb +30 -1
  79. data/spec/Account-Passwords_spec.rb +21 -4
  80. data/spec/Account_spec.rb +69 -146
  81. data/spec/Business_spec.rb +290 -0
  82. data/spec/ConfigFile_spec.rb +1 -0
  83. data/spec/ConfigMigrate_spec.rb +12 -8
  84. data/spec/Config_spec.rb +40 -34
  85. data/spec/Content_spec.rb +363 -0
  86. data/spec/GatewayBase_spec.rb +54 -0
  87. data/spec/GatewayDevice_spec.rb +321 -0
  88. data/spec/GatewayResource_spec.rb +266 -0
  89. data/spec/GatewaySettings_spec.rb +120 -0
  90. data/spec/Http_spec.rb +18 -8
  91. data/spec/Mock_spec.rb +2 -2
  92. data/spec/ProjectFile_spec.rb +25 -14
  93. data/spec/Setting_spec.rb +110 -0
  94. data/spec/Solution-ServiceConfig_spec.rb +44 -5
  95. data/spec/Solution-ServiceEventHandler_spec.rb +23 -14
  96. data/spec/Solution-ServiceModules_spec.rb +47 -37
  97. data/spec/Solution-UsersRoles_spec.rb +10 -8
  98. data/spec/Solution_spec.rb +17 -8
  99. data/spec/SyncRoot_spec.rb +46 -20
  100. data/spec/SyncUpDown_spec.rb +437 -201
  101. data/spec/Verbosing_spec.rb +12 -4
  102. data/spec/{Solution-Cors_spec.rb → Webservice-Cors_spec.rb} +23 -20
  103. data/spec/{Solution-Endpoint_spec.rb → Webservice-Endpoint_spec.rb} +43 -41
  104. data/spec/{Solution-File_spec.rb → Webservice-File_spec.rb} +44 -33
  105. data/spec/Webservice-Setting_spec.rb +89 -0
  106. data/spec/_workspace.rb +4 -4
  107. data/spec/cmd_business_spec.rb +9 -4
  108. data/spec/cmd_common.rb +44 -1
  109. data/spec/cmd_content_spec.rb +43 -17
  110. data/spec/cmd_cors_spec.rb +4 -4
  111. data/spec/cmd_device_spec.rb +61 -16
  112. data/spec/cmd_domain_spec.rb +29 -6
  113. data/spec/cmd_init_spec.rb +281 -126
  114. data/spec/cmd_keystore_spec.rb +3 -3
  115. data/spec/cmd_link_spec.rb +98 -0
  116. data/spec/cmd_password_spec.rb +1 -1
  117. data/spec/cmd_setting_application_spec.rb +260 -0
  118. data/spec/cmd_setting_product_spec.rb +220 -0
  119. data/spec/cmd_status_spec.rb +223 -114
  120. data/spec/cmd_syncdown_spec.rb +115 -35
  121. data/spec/cmd_syncup_spec.rb +68 -15
  122. data/spec/cmd_usage_spec.rb +35 -8
  123. data/spec/fixtures/dumped_config +6 -4
  124. data/spec/fixtures/gateway_resource_files/resources.notyaml +12 -0
  125. data/spec/fixtures/gateway_resource_files/resources.yaml +13 -0
  126. data/spec/fixtures/gateway_resource_files/resources_invalid.yaml +13 -0
  127. data/spec/fixtures/mrmuranorc_deleted_bob +0 -2
  128. data/spec/fixtures/product_spec_files/lightbulb.yaml +20 -13
  129. data/spec/fixtures/{syncable_content → syncable_conflict}/services/devdata.lua +1 -1
  130. data/spec/fixtures/{syncable_content → syncable_conflict}/services/timers.lua +0 -0
  131. data/spec/spec_helper.rb +5 -0
  132. metadata +262 -171
  133. data/bin/mr +0 -8
  134. data/lib/MrMurano/Product-1P-Device.rb +0 -145
  135. data/lib/MrMurano/Product-Resources.rb +0 -205
  136. data/lib/MrMurano/Product.rb +0 -358
  137. data/lib/MrMurano/Solution-Cors.rb +0 -47
  138. data/lib/MrMurano/Solution-Endpoint.rb +0 -191
  139. data/lib/MrMurano/Solution-File.rb +0 -166
  140. data/lib/MrMurano/commands/assign.rb +0 -57
  141. data/lib/MrMurano/commands/businessList.rb +0 -45
  142. data/lib/MrMurano/commands/product.rb +0 -14
  143. data/lib/MrMurano/commands/productCreate.rb +0 -39
  144. data/lib/MrMurano/commands/productDelete.rb +0 -33
  145. data/lib/MrMurano/commands/productDevice.rb +0 -87
  146. data/lib/MrMurano/commands/productDeviceIdCmds.rb +0 -89
  147. data/lib/MrMurano/commands/productList.rb +0 -45
  148. data/lib/MrMurano/commands/productWrite.rb +0 -27
  149. data/lib/MrMurano/commands/solutionCreate.rb +0 -41
  150. data/lib/MrMurano/commands/solutionDelete.rb +0 -34
  151. data/lib/MrMurano/commands/solutionList.rb +0 -45
  152. data/spec/ProductBase_spec.rb +0 -113
  153. data/spec/ProductContent_spec.rb +0 -162
  154. data/spec/ProductResources_spec.rb +0 -329
  155. data/spec/Product_1P_Device_spec.rb +0 -202
  156. data/spec/Product_1P_RPC_spec.rb +0 -175
  157. data/spec/Product_spec.rb +0 -153
  158. data/spec/Solution-ServiceDevice_spec.rb +0 -176
  159. data/spec/cmd_assign_spec.rb +0 -51
@@ -1,23 +1,25 @@
1
+ require 'tempfile'
2
+ require 'MrMurano/hash'
1
3
  require 'MrMurano/version'
2
4
  require 'MrMurano/Solution-Users'
3
- require 'MrMurano/hash'
4
- require 'tempfile'
5
+ require 'MrMurano/SyncRoot'
5
6
  require '_workspace'
6
7
 
7
8
  RSpec.describe MrMurano::Role do
8
9
  include_context "WORKSPACE"
9
10
  before(:example) do
11
+ MrMurano::SyncRoot.instance.reset
10
12
  $cfg = MrMurano::Config.new
11
13
  $cfg.load
12
14
  $cfg['net.host'] = 'bizapi.hosted.exosite.io'
13
- $cfg['solution.id'] = 'XYZ'
15
+ $cfg['application.id'] = 'XYZ'
14
16
 
15
17
  @srv = MrMurano::Role.new
16
18
  allow(@srv).to receive(:token).and_return("TTTTTTTTTT")
17
19
  end
18
20
 
19
21
  it "initializes" do
20
- uri = @srv.endPoint('/')
22
+ uri = @srv.endpoint('/')
21
23
  expect(uri.to_s).to eq("https://bizapi.hosted.exosite.io/api:1/solution/XYZ/role/")
22
24
  end
23
25
 
@@ -110,7 +112,7 @@ RSpec.describe MrMurano::Role do
110
112
 
111
113
  context "downloads" do
112
114
  before(:example) do
113
- @lry = Pathname.new(@projectDir) + 'roles.yaml'
115
+ @lry = Pathname.new(@project_dir) + 'roles.yaml'
114
116
  @grl = {:role_id=>"guest", :parameter=>[{:name=>"could"}]}
115
117
  end
116
118
 
@@ -133,7 +135,7 @@ RSpec.describe MrMurano::Role do
133
135
 
134
136
  context "removing local roles" do
135
137
  before(:example) do
136
- @lry = Pathname.new(@projectDir) + 'roles.yaml'
138
+ @lry = Pathname.new(@project_dir) + 'roles.yaml'
137
139
  @grl = {:role_id=>"guest", :parameter=>[{:name=>"could"}]}
138
140
  end
139
141
 
@@ -166,14 +168,14 @@ RSpec.describe MrMurano::Role do
166
168
  end
167
169
 
168
170
  it "tolocalpath is into" do
169
- lry = Pathname.new(@projectDir) + 'roles.yaml'
171
+ lry = Pathname.new(@project_dir) + 'roles.yaml'
170
172
  ret = @srv.tolocalpath(lry, {:role_id=>"guest", :parameter=>[{:name=>"could"}]})
171
173
  expect(ret).to eq(lry)
172
174
  end
173
175
 
174
176
  context "list local items" do
175
177
  before(:example) do
176
- @lry = Pathname.new(@projectDir) + 'roles.yaml'
178
+ @lry = Pathname.new(@project_dir) + 'roles.yaml'
177
179
  end
178
180
 
179
181
  it "when missing" do
@@ -1,25 +1,33 @@
1
- require 'MrMurano/version'
2
- require 'MrMurano/Solution-Cors'
3
1
  require 'tempfile'
4
2
  require 'yaml'
3
+ require 'MrMurano/version'
4
+ require 'MrMurano/ProjectFile'
5
+ require 'MrMurano/Solution'
6
+ require 'MrMurano/SyncRoot'
5
7
  require '_workspace'
6
8
 
7
9
  RSpec.describe MrMurano::Solution do
8
10
  include_context "WORKSPACE"
9
11
  before(:example) do
12
+ MrMurano::SyncRoot.instance.reset
10
13
  $cfg = MrMurano::Config.new
11
14
  $cfg.load
12
15
  $project = MrMurano::ProjectFile.new
13
16
  $project.load
14
17
  $cfg['net.host'] = 'bizapi.hosted.exosite.io'
15
- $cfg['solution.id'] = 'XYZ'
18
+ $cfg['product.id'] = 'XYZ'
19
+ $cfg['application.id'] = 'XYZ'
20
+
21
+ # NOTE: This test works on either Product or Application.
22
+ # MAYBE: Add Application to this test.
23
+ @srv = MrMurano::Product.new
24
+ #@srv = MrMurano::Application.new
16
25
 
17
- @srv = MrMurano::Solution.new
18
26
  allow(@srv).to receive(:token).and_return("TTTTTTTTTT")
19
27
  end
20
28
 
21
29
  it "initializes" do
22
- uri = @srv.endPoint('/')
30
+ uri = @srv.endpoint('/')
23
31
  expect(uri.to_s).to eq("https://bizapi.hosted.exosite.io/api:1/solution/XYZ/")
24
32
  end
25
33
 
@@ -31,7 +39,7 @@ RSpec.describe MrMurano::Solution do
31
39
  :biz_id=>"ABCDEFG",
32
40
  :cors=> "{\"origin\":true,\"methods\":[\"HEAD\",\"GET\",\"POST\",\"PUT\",\"DELETE\",\"OPTIONS\",\"PATCH\"],\"headers\":[\"Content-Type\",\"Cookie\",\"Authorization\"],\"credentials\":true}"
33
41
  }
34
-
42
+
35
43
  stub_request(:get, "https://bizapi.hosted.exosite.io/api:1/solution/XYZ").
36
44
  with(:headers=>{'Authorization'=>'token TTTTTTTTTT',
37
45
  'Content-Type'=>'application/json'}).
@@ -49,13 +57,13 @@ RSpec.describe MrMurano::Solution do
49
57
  :biz_id=>"ABCDEFG",
50
58
  :cors=> "{\"origin\":true,\"methods\":[\"HEAD\",\"GET\",\"POST\",\"PUT\",\"DELETE\",\"OPTIONS\",\"PATCH\"],\"headers\":[\"Content-Type\",\"Cookie\",\"Authorization\"],\"credentials\":true}"
51
59
  }
52
-
60
+
53
61
  stub_request(:get, "https://bizapi.hosted.exosite.io/api:1/solution/XYZ/").
54
62
  with(:headers=>{'Authorization'=>'token TTTTTTTTTT',
55
63
  'Content-Type'=>'application/json'}).
56
64
  to_return(body: body.to_json)
57
65
 
58
- ret = @srv.list()
66
+ ret = @srv.list
59
67
  expect(ret).to eq(body)
60
68
  end
61
69
 
@@ -90,3 +98,4 @@ RSpec.describe MrMurano::Solution do
90
98
  end
91
99
 
92
100
  # vim: set ai et sw=2 ts=2 :
101
+
@@ -1,6 +1,14 @@
1
+ # Last Modified: 2017.08.17 /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 'MrMurano/version'
2
9
  require 'MrMurano/Config'
3
10
  require 'MrMurano/ProjectFile'
11
+ require 'MrMurano/SyncRoot'
4
12
  require 'MrMurano/SyncUpDown'
5
13
  require '_workspace'
6
14
 
@@ -8,17 +16,33 @@ RSpec.describe MrMurano::SyncRoot do
8
16
  include_context "WORKSPACE"
9
17
 
10
18
  after(:example) do
11
- MrMurano::SyncRoot.reset
19
+ MrMurano::SyncRoot.instance.reset
12
20
  end
13
21
 
14
22
  before(:example) do
15
- MrMurano::SyncRoot.reset # also creates @@syncset
16
- class User
23
+ MrMurano::SyncRoot.instance.reset # also creates @@syncset
24
+ # Weird/2017-07-31: I [lb] must[ve changed something, because this
25
+ # block being called twice, which is generating a warning:
26
+ # /exo/clients/exosite/MuranoCLIs/MuranoCLI+landonb/spec/SyncRoot_spec.rb:30:
27
+ # warning: method redefined; discarding old description
28
+ # /exo/clients/exosite/MuranoCLIs/MuranoCLI+landonb/spec/SyncRoot_spec.rb:30:
29
+ # warning: previous definition of description was here
30
+ if !defined?(User)
31
+ class User
32
+ def self.description
33
+ %(describe user)
34
+ end
35
+ end
17
36
  end
18
- class Role
37
+ MrMurano::SyncRoot.instance.add('user', User, 'U', true)
38
+ if !defined?(Role)
39
+ class Role
40
+ def self.description
41
+ %(describe role)
42
+ end
43
+ end
19
44
  end
20
- MrMurano::SyncRoot.add('user', User, 'U', "describe user", true)
21
- MrMurano::SyncRoot.add('role', Role, 'R', "describe role")
45
+ MrMurano::SyncRoot.instance.add('role', Role, 'G', false)
22
46
 
23
47
  # This must happen after all syncables have been added.
24
48
  $cfg = MrMurano::Config.new
@@ -27,7 +51,7 @@ RSpec.describe MrMurano::SyncRoot do
27
51
  $project.load
28
52
 
29
53
  @options = {}
30
- @options.define_singleton_method(:method_missing) do |mid,*args|
54
+ @options.define_singleton_method(:method_missing) do |mid, *args|
31
55
  if mid.to_s.match(/^(.+)=$/) then
32
56
  self[$1.to_sym] = args.first
33
57
  else
@@ -37,47 +61,49 @@ RSpec.describe MrMurano::SyncRoot do
37
61
  end
38
62
 
39
63
  it "has defaults" do
40
- ret = MrMurano::SyncRoot.bydefault
64
+ ret = MrMurano::SyncRoot.instance.bydefault
41
65
  expect(ret).to eq(['user'])
42
66
  end
43
67
 
44
68
  it "iterates on each" do
45
69
  ret=[]
46
- MrMurano::SyncRoot.each{|a,b,c| ret << a}
70
+ MrMurano::SyncRoot.instance.each { |a, _b, _c, _d| ret << a }
47
71
  expect(ret).to eq(["user", "role"])
48
72
  end
49
73
 
50
74
  it "iterates only on selected" do
51
75
  @options.role = true
52
76
  ret=[]
53
- MrMurano::SyncRoot.each_filtered(@options) {|a,b,c| ret << a}
77
+ MrMurano::SyncRoot.instance.each_filtered(@options) { |a, _b, _c, _d| ret << a }
54
78
  expect(ret).to eq(["role"])
55
79
  end
56
80
 
57
81
  it "selects all" do
58
82
  @options.all = true
59
- MrMurano::SyncRoot.checkSAME(@options)
83
+ MrMurano::SyncRoot.instance.check_same(@options)
60
84
  expect(@options).to eq({:all=>true, :user=>true, :role=>true})
61
85
  end
62
86
 
63
87
  it "selects defaults when none" do
64
- MrMurano::SyncRoot.checkSAME(@options)
88
+ MrMurano::SyncRoot.instance.check_same(@options)
65
89
  expect(@options).to eq({:user=>true})
66
90
  end
67
91
 
68
92
  it "selects custom defaults when none" do
69
93
  $cfg['sync.bydefault'] = 'role'
70
- MrMurano::SyncRoot.checkSAME(@options)
71
- expect(@options).to eq({:role=>true})
94
+ MrMurano::SyncRoot.instance.check_same(@options)
95
+ expect(@options).to eq({role: true})
72
96
  end
73
97
 
74
98
  it "builds option params" do
75
- ret=[]
76
- MrMurano::SyncRoot.each_option do |s,l,d|
77
- ret << [s,l,d]
99
+ ret = []
100
+ MrMurano::SyncRoot.instance.each_option do |s, l, d|
101
+ ret << [s, l, d]
78
102
  end
79
- expect(ret).to eq([["-u", "--[no-]user", "describe user"], ["-r", "--[no-]role", "describe role"]])
103
+ expect(ret).to eq([
104
+ ["-U", "--[no-]user", "describe user"],
105
+ ["-G", "--[no-]role", "describe role"],
106
+ ])
80
107
  end
81
-
82
108
  end
83
- # vim: set ai et sw=2 ts=2 :
109
+
@@ -1,18 +1,39 @@
1
- require 'MrMurano/version'
2
1
  require 'MrMurano/verbosing'
2
+ require 'MrMurano/version'
3
3
  require 'MrMurano/Config'
4
+ require 'MrMurano/ProjectFile'
5
+ require 'MrMurano/SyncRoot'
4
6
  require 'MrMurano/SyncUpDown'
5
7
  require '_workspace'
6
8
 
7
9
  class TSUD
8
10
  include MrMurano::Verbose
9
11
  include MrMurano::SyncUpDown
12
+
10
13
  def initialize
14
+ # 2017-07-03: See MrMurano::SolutionBase.state for the list of attrs.
15
+ @sid = 'XYZ'
16
+ @valid_sid = true
17
+ @uriparts = []
18
+ @solntype = 'application.id'
11
19
  @itemkey = :name
12
20
  @project_section = :routes
13
21
  end
22
+
23
+ def sid
24
+ @sid
25
+ end
26
+
27
+ def sid?
28
+ @valid_sid
29
+ end
30
+
14
31
  def fetch(id)
15
32
  end
33
+
34
+ def self.description
35
+ %(Time Series Database)
36
+ end
16
37
  end
17
38
 
18
39
  RSpec::Matchers.define :pathname_globs do |glob|
@@ -21,10 +42,12 @@ RSpec::Matchers.define :pathname_globs do |glob|
21
42
  end
22
43
  end
23
44
 
45
+ ITEM_UPDATED_AT="2017-06-24T00:45:15.564Z"
46
+
24
47
  RSpec.describe MrMurano::SyncUpDown do
25
48
  include_context "WORKSPACE"
26
49
  before(:example) do
27
- MrMurano::SyncRoot.reset
50
+ MrMurano::SyncRoot.instance.reset
28
51
  $cfg = MrMurano::Config.new
29
52
  $cfg.load
30
53
  $project = MrMurano::ProjectFile.new
@@ -32,7 +55,8 @@ RSpec.describe MrMurano::SyncUpDown do
32
55
  $project['routes.location'] = 'tsud'
33
56
  $project['routes.include'] = ['*.lua', '*/*.lua']
34
57
  $cfg['net.host'] = 'bizapi.hosted.exosite.io'
35
- $cfg['solution.id'] = 'XYZ'
58
+ $cfg['product.id'] = 'XYZ'
59
+ $cfg['application.id'] = 'XYZ'
36
60
  end
37
61
 
38
62
  context "status" do
@@ -40,173 +64,241 @@ RSpec.describe MrMurano::SyncUpDown do
40
64
  t = TSUD.new
41
65
  expect(t).to receive(:warning).once.with(/Skipping missing location.*/)
42
66
  ret = t.status
43
- expect(ret).to eq({:toadd=>[], :todel=>[], :tomod=>[], :unchg=>[]})
67
+ expect(ret).to eq({toadd: [], todel: [], tomod: [], unchg: [], skipd: []})
44
68
  end
45
69
 
46
70
  it "finds nothing in empty directory" do
47
- FileUtils.mkpath(@projectDir + '/tsud')
71
+ FileUtils.mkpath(@project_dir + '/tsud')
48
72
  t = TSUD.new
49
73
  ret = t.status
50
- expect(ret).to eq({:toadd=>[], :todel=>[], :tomod=>[], :unchg=>[]})
74
+ expect(ret).to eq({toadd: [], todel: [], tomod: [], unchg: [], skipd: []})
51
75
  end
52
76
 
53
77
  it "finds things there but not here" do
54
- FileUtils.mkpath(@projectDir + '/tsud')
78
+ FileUtils.mkpath(@project_dir + '/tsud')
55
79
  t = TSUD.new
56
80
  expect(t).to receive(:list).once.and_return([
57
- {:name=>1},{:name=>2},{:name=>3}
81
+ {:name=>1},
82
+ {:name=>2},
83
+ {:name=>3},
58
84
  ])
59
85
  ret = t.status
60
86
  expect(ret).to eq({
61
87
  :toadd=>[],
62
- :todel=>[{:name=>1, :synckey=>1}, {:name=>2, :synckey=>2}, {:name=>3, :synckey=>3}],
88
+ :todel=>[
89
+ {
90
+ :name=>1,
91
+ :synckey=>1,
92
+ :synctype=>TSUD.description,
93
+ },
94
+ {
95
+ :name=>2,
96
+ :synckey=>2,
97
+ :synctype=>TSUD.description,
98
+ },
99
+ {
100
+ :name=>3,
101
+ :synckey=>3,
102
+ :synctype=>TSUD.description,
103
+ }],
63
104
  :tomod=>[],
64
- :unchg=>[]})
105
+ :unchg=>[],
106
+ :skipd=>[],
107
+ })
65
108
  end
66
109
 
67
110
  it "finds things there but not here; asdown" do
68
- FileUtils.mkpath(@projectDir + '/tsud')
111
+ FileUtils.mkpath(@project_dir + '/tsud')
69
112
  t = TSUD.new
70
113
  expect(t).to receive(:list).once.and_return([
71
- {:name=>1},{:name=>2},{:name=>3}
114
+ {:name=>1},
115
+ {:name=>2},
116
+ {:name=>3},
72
117
  ])
73
118
  ret = t.status({:asdown=>true})
74
119
  expect(ret).to eq({
75
- :todel=>[],
76
- :toadd=>[{:name=>1, :synckey=>1}, {:name=>2, :synckey=>2}, {:name=>3, :synckey=>3}],
77
- :tomod=>[],
78
- :unchg=>[]})
120
+ todel: [],
121
+ toadd: [
122
+ { name: 1, synckey: 1, synctype: TSUD.description },
123
+ { name: 2, synckey: 2, synctype: TSUD.description },
124
+ { name: 3, synckey: 3, synctype: TSUD.description },
125
+ ],
126
+ tomod: [],
127
+ unchg: [],
128
+ skipd: [],
129
+ })
79
130
  end
80
131
 
81
132
  it "finds things here but not there" do
82
- FileUtils.mkpath(@projectDir + '/tsud')
83
- FileUtils.touch(@projectDir + '/tsud/one.lua')
84
- FileUtils.touch(@projectDir + '/tsud/two.lua')
133
+ FileUtils.mkpath(@project_dir + '/tsud')
134
+ FileUtils.touch(@project_dir + '/tsud/one.lua')
135
+ FileUtils.touch(@project_dir + '/tsud/two.lua')
85
136
  t = TSUD.new
86
- expect(t).to receive(:toRemoteItem).and_return(
87
- {:name=>'one.lua'},{:name=>'two.lua'}
137
+ expect(t).to receive(:to_remote_item).and_return(
138
+ {:name=>'one.lua'},
139
+ {:name=>'two.lua'},
88
140
  )
89
141
  ret = t.status
90
142
  expect(ret).to match({
91
- :toadd=>[
92
- {:name=>'one.lua', :synckey=>'one.lua',
93
- :local_path=>an_instance_of(Pathname)},
94
- {:name=>'two.lua', :synckey=>'two.lua',
95
- :local_path=>an_instance_of(Pathname)},
143
+ toadd: [
144
+ {
145
+ name: 'one.lua',
146
+ synckey: 'one.lua',
147
+ synctype: TSUD.description,
148
+ local_path: an_instance_of(Pathname),
149
+ },
150
+ {
151
+ name: 'two.lua',
152
+ synckey: 'two.lua',
153
+ synctype: TSUD.description,
154
+ local_path: an_instance_of(Pathname),
155
+ },
96
156
  ],
97
- :todel=>[],
98
- :tomod=>[],
99
- :unchg=>[]})
157
+ todel: [],
158
+ tomod: [],
159
+ unchg: [],
160
+ skipd: [],
161
+ })
100
162
  end
101
163
 
102
164
  it "finds things here and there" do
103
- FileUtils.mkpath(@projectDir + '/tsud')
104
- FileUtils.touch(@projectDir + '/tsud/one.lua')
105
- FileUtils.touch(@projectDir + '/tsud/two.lua')
165
+ FileUtils.mkpath(@project_dir + '/tsud')
166
+ FileUtils.touch(@project_dir + '/tsud/one.lua')
167
+ FileUtils.touch(@project_dir + '/tsud/two.lua')
106
168
  t = TSUD.new
107
169
  expect(t).to receive(:list).once.and_return([
108
- {:name=>'one.lua'},{:name=>'two.lua'}
170
+ {:name=>'one.lua'},
171
+ {:name=>'two.lua'},
109
172
  ])
110
- expect(t).to receive(:toRemoteItem).and_return(
111
- {:name=>'one.lua'},{:name=>'two.lua'}
173
+ expect(t).to receive(:to_remote_item).and_return(
174
+ {:name=>'one.lua'},
175
+ {:name=>'two.lua'},
112
176
  )
113
177
  ret = t.status
114
178
  expect(ret).to match({
115
- :tomod=>[
116
- {:name=>'one.lua', :synckey=>'one.lua',
117
- :local_path=>an_instance_of(Pathname)},
118
- {:name=>'two.lua', :synckey=>'two.lua',
119
- :local_path=>an_instance_of(Pathname)},
179
+ tomod: [
180
+ {
181
+ name: 'one.lua',
182
+ synckey: 'one.lua',
183
+ synctype: TSUD.description,
184
+ local_path: an_instance_of(Pathname),
185
+ },
186
+ {
187
+ name: 'two.lua',
188
+ synckey: 'two.lua',
189
+ synctype: TSUD.description,
190
+ local_path: an_instance_of(Pathname),
191
+ },
120
192
  ],
121
- :todel=>[],
122
- :toadd=>[],
123
- :unchg=>[]})
193
+ todel: [],
194
+ toadd: [],
195
+ unchg: [],
196
+ skipd: [],
197
+ })
124
198
  end
125
199
  it "finds things here and there; but they're the same" do
126
- FileUtils.mkpath(@projectDir + '/tsud')
127
- FileUtils.touch(@projectDir + '/tsud/one.lua')
128
- FileUtils.touch(@projectDir + '/tsud/two.lua')
200
+ FileUtils.mkpath(@project_dir + '/tsud')
201
+ FileUtils.touch(@project_dir + '/tsud/one.lua')
202
+ FileUtils.touch(@project_dir + '/tsud/two.lua')
129
203
  t = TSUD.new
130
204
  expect(t).to receive(:list).once.and_return([
131
- {:name=>'one.lua'},{:name=>'two.lua'}
205
+ {:name=>'one.lua'},
206
+ {:name=>'two.lua'},
132
207
  ])
133
- expect(t).to receive(:toRemoteItem).and_return(
134
- {:name=>'one.lua'},{:name=>'two.lua'}
208
+ expect(t).to receive(:to_remote_item).and_return(
209
+ {:name=>'one.lua'},
210
+ {:name=>'two.lua'},
135
211
  )
136
212
  expect(t).to receive(:docmp).twice.and_return(false)
137
213
  ret = t.status
138
214
  expect(ret).to match({
139
- :unchg=>[
140
- {:name=>'one.lua', :synckey=>'one.lua',
141
- :local_path=>an_instance_of(Pathname)},
142
- {:name=>'two.lua', :synckey=>'two.lua',
143
- :local_path=>an_instance_of(Pathname)},
215
+ unchg: [
216
+ {
217
+ name: 'one.lua',
218
+ synckey: 'one.lua',
219
+ synctype: TSUD.description,
220
+ local_path: an_instance_of(Pathname),
221
+ },
222
+ {
223
+ name: 'two.lua',
224
+ synckey: 'two.lua',
225
+ synctype: TSUD.description,
226
+ local_path: an_instance_of(Pathname),
227
+ },
144
228
  ],
145
- :todel=>[],
146
- :toadd=>[],
147
- :tomod=>[]})
229
+ todel: [],
230
+ toadd: [],
231
+ tomod: [],
232
+ skipd: [],
233
+ })
148
234
  end
149
235
 
150
236
  it "calls diff" do
151
- FileUtils.mkpath(@projectDir + '/tsud')
152
- FileUtils.touch(@projectDir + '/tsud/one.lua')
237
+ FileUtils.mkpath(@project_dir + '/tsud')
238
+ FileUtils.touch(@project_dir + '/tsud/one.lua')
153
239
  t = TSUD.new
154
240
  expect(t).to receive(:list).once.and_return([
155
241
  {:name=>'one.lua'}
156
242
  ])
157
- expect(t).to receive(:toRemoteItem).and_return(
243
+ expect(t).to receive(:to_remote_item).and_return(
158
244
  {:name=>'one.lua'}
159
245
  )
160
246
  expect(t).to receive(:dodiff).once.and_return("diffed output")
161
247
  ret = t.status({:diff=>true})
162
248
  expect(ret).to match({
163
- :tomod=>[
164
- {:name=>'one.lua', :synckey=>'one.lua',
165
- :local_path=>an_instance_of(Pathname),
166
- :diff=>"diffed output"},
249
+ tomod: [
250
+ {
251
+ name: 'one.lua',
252
+ synckey: 'one.lua',
253
+ synctype: TSUD.description,
254
+ local_path: an_instance_of(Pathname),
255
+ diff: "diffed output",
256
+ },
167
257
  ],
168
- :todel=>[],
169
- :toadd=>[],
170
- :unchg=>[]})
258
+ todel: [],
259
+ toadd: [],
260
+ unchg: [],
261
+ skipd: [],
262
+ })
171
263
  end
172
264
 
173
265
  context "Filtering" do
174
266
  before(:example) do
175
- FileUtils.mkpath(@projectDir + '/tsud/ga')
176
- FileUtils.mkpath(@projectDir + '/tsud/gb')
177
- FileUtils.touch(@projectDir + '/tsud/one.lua') # tomod
178
- FileUtils.touch(@projectDir + '/tsud/ga/two.lua') # tomod
179
- FileUtils.touch(@projectDir + '/tsud/three.lua') # unchg
180
- FileUtils.touch(@projectDir + '/tsud/gb/four.lua') # unchg
181
- FileUtils.touch(@projectDir + '/tsud/five.lua') # toadd
182
- FileUtils.touch(@projectDir + '/tsud/ga/six.lua') # toadd
267
+ FileUtils.mkpath(@project_dir + '/tsud/ga')
268
+ FileUtils.mkpath(@project_dir + '/tsud/gb')
269
+ FileUtils.touch(@project_dir + '/tsud/one.lua') # tomod
270
+ FileUtils.touch(@project_dir + '/tsud/ga/two.lua') # tomod
271
+ FileUtils.touch(@project_dir + '/tsud/three.lua') # unchg
272
+ FileUtils.touch(@project_dir + '/tsud/gb/four.lua') # unchg
273
+ FileUtils.touch(@project_dir + '/tsud/five.lua') # toadd
274
+ FileUtils.touch(@project_dir + '/tsud/ga/six.lua') # toadd
183
275
  @t = TSUD.new
184
276
  expect(@t).to receive(:list).once.and_return([
185
- MrMurano::SyncUpDown::Item.new({:name=>'one.lua'}), # tomod
186
- MrMurano::SyncUpDown::Item.new({:name=>'two.lua'}), # tomod
187
- MrMurano::SyncUpDown::Item.new({:name=>'three.lua'}), # unchg
188
- MrMurano::SyncUpDown::Item.new({:name=>'four.lua'}), # unchg
189
- MrMurano::SyncUpDown::Item.new({:name=>'seven.lua'}), # todel
190
- MrMurano::SyncUpDown::Item.new({:name=>'eight.lua'}), # todel
277
+ MrMurano::SyncUpDown::Item.new({:name=>'eight.lua', :updated_at=>ITEM_UPDATED_AT}), # todel
278
+ MrMurano::SyncUpDown::Item.new({:name=>'four.lua', :updated_at=>ITEM_UPDATED_AT}), # unchg
279
+ MrMurano::SyncUpDown::Item.new({:name=>'one.lua', :updated_at=>ITEM_UPDATED_AT}), # tomod
280
+ MrMurano::SyncUpDown::Item.new({:name=>'seven.lua', :updated_at=>ITEM_UPDATED_AT}), # todel
281
+ MrMurano::SyncUpDown::Item.new({:name=>'three.lua', :updated_at=>ITEM_UPDATED_AT}), # unchg
282
+ MrMurano::SyncUpDown::Item.new({:name=>'two.lua', :updated_at=>ITEM_UPDATED_AT}), # tomod
191
283
  ])
192
- expect(@t).to receive(:toRemoteItem).
284
+ expect(@t).to receive(:to_remote_item).
193
285
  with(anything(), pathname_globs('**/one.lua')).
194
- and_return(MrMurano::SyncUpDown::Item.new({:name=>'one.lua'}))
195
- expect(@t).to receive(:toRemoteItem).
286
+ and_return(MrMurano::SyncUpDown::Item.new({:name=>'one.lua', :updated_at=>ITEM_UPDATED_AT}))
287
+ expect(@t).to receive(:to_remote_item).
196
288
  with(anything(), pathname_globs('**/two.lua')).
197
- and_return(MrMurano::SyncUpDown::Item.new({:name=>'two.lua'}))
198
- expect(@t).to receive(:toRemoteItem).
289
+ and_return(MrMurano::SyncUpDown::Item.new({:name=>'two.lua', :updated_at=>ITEM_UPDATED_AT}))
290
+ expect(@t).to receive(:to_remote_item).
199
291
  with(anything(), pathname_globs('**/three.lua')).
200
- and_return(MrMurano::SyncUpDown::Item.new({:name=>'three.lua'}))
201
- expect(@t).to receive(:toRemoteItem).
292
+ and_return(MrMurano::SyncUpDown::Item.new({:name=>'three.lua', :updated_at=>ITEM_UPDATED_AT}))
293
+ expect(@t).to receive(:to_remote_item).
202
294
  with(anything(), pathname_globs('**/four.lua')).
203
- and_return(MrMurano::SyncUpDown::Item.new({:name=>'four.lua'}))
204
- expect(@t).to receive(:toRemoteItem).
295
+ and_return(MrMurano::SyncUpDown::Item.new({:name=>'four.lua', :updated_at=>ITEM_UPDATED_AT}))
296
+ expect(@t).to receive(:to_remote_item).
205
297
  with(anything(), pathname_globs('**/five.lua')).
206
- and_return(MrMurano::SyncUpDown::Item.new({:name=>'five.lua'}))
207
- expect(@t).to receive(:toRemoteItem).
298
+ and_return(MrMurano::SyncUpDown::Item.new({:name=>'five.lua', :updated_at=>ITEM_UPDATED_AT}))
299
+ expect(@t).to receive(:to_remote_item).
208
300
  with(anything(), pathname_globs('**/six.lua')).
209
- and_return(MrMurano::SyncUpDown::Item.new({:name=>'six.lua'}))
301
+ and_return(MrMurano::SyncUpDown::Item.new({:name=>'six.lua', :updated_at=>ITEM_UPDATED_AT}))
210
302
 
211
303
  expect(@t).to receive(:docmp).with(have_attributes({:name=>'one.lua'}),anything()).and_return(true)
212
304
  expect(@t).to receive(:docmp).with(have_attributes({:name=>'two.lua'}),anything()).and_return(true)
@@ -218,27 +310,69 @@ RSpec.describe MrMurano::SyncUpDown do
218
310
  ret = @t.status
219
311
  expect(ret).to match({
220
312
  :unchg=>[
221
- have_attributes({:name=>'three.lua', :synckey=>'three.lua',
222
- :local_path=> pathname_globs('**/three.lua')}),
223
- have_attributes({:name=>'four.lua', :synckey=>'four.lua',
224
- :local_path=>pathname_globs('**/four.lua')}),
313
+ have_attributes(
314
+ {
315
+ :name=>'four.lua',
316
+ :synckey=>'four.lua',
317
+ :synctype=>TSUD.description,
318
+ :local_path=>pathname_globs('**/four.lua'),
319
+ }),
320
+ have_attributes(
321
+ {
322
+ :name=>'three.lua',
323
+ :synckey=>'three.lua',
324
+ :synctype=>TSUD.description,
325
+ :local_path=>pathname_globs('**/three.lua'),
326
+ }),
225
327
  ],
226
328
  :toadd=>[
227
- have_attributes({:name=>'five.lua', :synckey=>'five.lua',
228
- :local_path=>pathname_globs('**/five.lua')}),
229
- have_attributes({:name=>'six.lua', :synckey=>'six.lua',
230
- :local_path=>pathname_globs('**/six.lua')}),
329
+ have_attributes(
330
+ {
331
+ :name=>'five.lua',
332
+ :synckey=>'five.lua',
333
+ :synctype=>TSUD.description,
334
+ :local_path=>pathname_globs('**/five.lua'),
335
+ }),
336
+ have_attributes(
337
+ {
338
+ :name=>'six.lua',
339
+ :synckey=>'six.lua',
340
+ :synctype=>TSUD.description,
341
+ :local_path=>pathname_globs('**/six.lua'),
342
+ }),
231
343
  ],
232
344
  :todel=>[
233
- have_attributes({:name=>'seven.lua', :synckey=>'seven.lua'}),
234
- have_attributes({:name=>'eight.lua', :synckey=>'eight.lua'}),
345
+ have_attributes(
346
+ {
347
+ :name=>'eight.lua',
348
+ :synckey=>'eight.lua',
349
+ :synctype=>TSUD.description,
350
+ }),
351
+ have_attributes(
352
+ {
353
+ :name=>'seven.lua',
354
+ :synckey=>'seven.lua',
355
+ :synctype=>TSUD.description,
356
+ }),
235
357
  ],
236
358
  :tomod=>[
237
- have_attributes({:name=>'one.lua', :synckey=>'one.lua',
238
- :local_path=>pathname_globs('**/one.lua')}),
239
- have_attributes({:name=>'two.lua', :synckey=>'two.lua',
240
- :local_path=>pathname_globs('**/two.lua')}),
241
- ]})
359
+ have_attributes(
360
+ {
361
+ :name=>'one.lua',
362
+ :synckey=>'one.lua',
363
+ :synctype=>TSUD.description,
364
+ :local_path=>pathname_globs('**/one.lua'),
365
+ }),
366
+ have_attributes(
367
+ {
368
+ :name=>'two.lua',
369
+ :synckey=>'two.lua',
370
+ :synctype=>TSUD.description,
371
+ :local_path=>pathname_globs('**/two.lua'),
372
+ }),
373
+ ],
374
+ :skipd=>[],
375
+ })
242
376
  end
243
377
 
244
378
  it "Finds local path globs" do
@@ -246,50 +380,104 @@ RSpec.describe MrMurano::SyncUpDown do
246
380
  expect(ret).to match({
247
381
  :unchg=>[ ],
248
382
  :toadd=>[
249
- have_attributes(:name=>'six.lua', :synckey=>'six.lua',
250
- :local_path=>an_instance_of(Pathname)),
383
+ have_attributes(
384
+ :name=>'six.lua',
385
+ :synckey=>'six.lua',
386
+ :synctype=>TSUD.description,
387
+ :local_path=>an_instance_of(Pathname)
388
+ ),
251
389
  ],
252
390
  :todel=>[ ],
253
391
  :tomod=>[
254
- have_attributes(:name=>'two.lua', :synckey=>'two.lua',
255
- :local_path=>an_instance_of(Pathname)),
256
- ]})
392
+ have_attributes(
393
+ :name=>'two.lua',
394
+ :synckey=>'two.lua',
395
+ :synctype=>TSUD.description,
396
+ :local_path=>an_instance_of(Pathname)
397
+ ),
398
+ ],
399
+ :skipd=>[],
400
+ })
257
401
  end
258
402
 
259
403
  it "Finds nothing with specific matcher" do
260
404
  ret = @t.status({}, ['#foo'])
261
405
  expect(ret).to match({
262
- :unchg=>[ ],
263
- :toadd=>[ ],
264
- :todel=>[ ],
265
- :tomod=>[ ]})
406
+ :unchg=>[],
407
+ :toadd=>[],
408
+ :todel=>[],
409
+ :tomod=>[],
410
+ :skipd=>[],
411
+ })
266
412
  end
267
413
 
268
414
  it "gets all the details" do
269
415
  ret = @t.status({:unselected=>true})
270
416
  expect(ret).to match({
271
417
  :unchg=>[
272
- have_attributes(:name=>'three.lua', :synckey=>'three.lua', :selected=>true,
273
- :local_path=> pathname_globs('**/three.lua')),
274
- have_attributes(:name=>'four.lua', :synckey=>'four.lua', :selected=>true,
275
- :local_path=>pathname_globs('**/four.lua')),
418
+ have_attributes(
419
+ :name=>'four.lua',
420
+ :synckey=>'four.lua',
421
+ :synctype=>TSUD.description,
422
+ :selected=>true,
423
+ :local_path=>pathname_globs('**/four.lua')
424
+ ),
425
+ have_attributes(
426
+ :name=>'three.lua',
427
+ :synckey=>'three.lua',
428
+ :synctype=>TSUD.description,
429
+ :selected=>true,
430
+ :local_path=>pathname_globs('**/three.lua')
431
+ ),
276
432
  ],
277
433
  :toadd=>[
278
- have_attributes(:name=>'five.lua', :synckey=>'five.lua', :selected=>true,
279
- :local_path=>pathname_globs('**/five.lua')),
280
- have_attributes(:name=>'six.lua', :synckey=>'six.lua', :selected=>true,
281
- :local_path=>pathname_globs('**/six.lua')),
434
+ have_attributes(
435
+ :name=>'five.lua',
436
+ :synckey=>'five.lua',
437
+ :synctype=>TSUD.description,
438
+ :selected=>true,
439
+ :local_path=>pathname_globs('**/five.lua')
440
+ ),
441
+ have_attributes(
442
+ :name=>'six.lua',
443
+ :synckey=>'six.lua',
444
+ :synctype=>TSUD.description,
445
+ :selected=>true,
446
+ :local_path=>pathname_globs('**/six.lua')
447
+ ),
282
448
  ],
283
449
  :todel=>[
284
- have_attributes(:name=>'seven.lua', :selected=>true, :synckey=>'seven.lua'),
285
- have_attributes(:name=>'eight.lua', :selected=>true, :synckey=>'eight.lua'),
450
+ have_attributes(
451
+ :name=>'eight.lua',
452
+ :selected=>true,
453
+ :synckey=>'eight.lua',
454
+ :synctype=>TSUD.description,
455
+ ),
456
+ have_attributes(
457
+ :name=>'seven.lua',
458
+ :selected=>true,
459
+ :synckey=>'seven.lua',
460
+ :synctype=>TSUD.description,
461
+ ),
286
462
  ],
287
463
  :tomod=>[
288
- have_attributes(:name=>'one.lua', :synckey=>'one.lua', :selected=>true,
289
- :local_path=>pathname_globs('**/one.lua')),
290
- have_attributes(:name=>'two.lua', :synckey=>'two.lua', :selected=>true,
291
- :local_path=>pathname_globs('**/two.lua')),
292
- ]})
464
+ have_attributes(
465
+ :name=>'one.lua',
466
+ :synckey=>'one.lua',
467
+ :synctype=>TSUD.description,
468
+ :selected=>true,
469
+ :local_path=>pathname_globs('**/one.lua')
470
+ ),
471
+ have_attributes(
472
+ :name=>'two.lua',
473
+ :synckey=>'two.lua',
474
+ :synctype=>TSUD.description,
475
+ :selected=>true,
476
+ :local_path=>pathname_globs('**/two.lua')
477
+ ),
478
+ ],
479
+ :skipd=>[],
480
+ })
293
481
  end
294
482
  end
295
483
  end
@@ -302,60 +490,86 @@ RSpec.describe MrMurano::SyncUpDown do
302
490
  @t = TSUD.new
303
491
  end
304
492
  it "finds local items" do
305
- expect(@t).to receive(:toRemoteItem).and_return(
306
- {:name=>'one.lua'},{:name=>'two.lua'}
493
+ expect(@t).to receive(:to_remote_item).and_return(
494
+ {:name=>'one.lua'},
495
+ {:name=>'two.lua'},
307
496
  )
308
- ret = @t.localitems(Pathname.new(@projectDir + '/tsud').realpath)
497
+ ret = @t.localitems(Pathname.new(@project_dir + '/tsud').realpath)
309
498
  expect(ret).to match([
310
- {:name=>'one.lua',
311
- :local_path=>an_instance_of(Pathname)},
312
- {:name=>'two.lua',
313
- :local_path=>an_instance_of(Pathname)},
499
+ {
500
+ :name=>'one.lua',
501
+ :local_path=>an_instance_of(Pathname)
502
+ },
503
+ {
504
+ :name=>'two.lua',
505
+ :local_path=>an_instance_of(Pathname)
506
+ },
314
507
  ])
315
508
  end
316
509
 
317
- it "takes an array from toRemoteItem" do
318
- expect(@t).to receive(:toRemoteItem).and_return(
319
- [{:name=>'one:1'},{:name=>'one:2'}],
320
- [{:name=>'two:1'},{:name=>'two:2'}]
321
- )
322
- ret = @t.localitems(Pathname.new(@projectDir + '/tsud').realpath)
510
+ it "takes an array from to_remote_item" do
511
+ expect(@t).to receive(:to_remote_item).and_return(
512
+ [
513
+ {:name=>'one:1'},
514
+ {:name=>'one:2'},
515
+ ],
516
+ [
517
+ {:name=>'two:1'},
518
+ {:name=>'two:2'},
519
+ ],
520
+ )
521
+ ret = @t.localitems(Pathname.new(@project_dir + '/tsud').realpath)
323
522
  expect(ret).to match([
324
- {:name=>'one:1',
325
- :local_path=>an_instance_of(Pathname)},
326
- {:name=>'one:2',
327
- :local_path=>an_instance_of(Pathname)},
328
- {:name=>'two:1',
329
- :local_path=>an_instance_of(Pathname)},
330
- {:name=>'two:2',
331
- :local_path=>an_instance_of(Pathname)},
523
+ {
524
+ :name=>'one:1',
525
+ :local_path=>an_instance_of(Pathname),
526
+ },
527
+ {
528
+ :name=>'one:2',
529
+ :local_path=>an_instance_of(Pathname),
530
+ },
531
+ {
532
+ :name=>'two:1',
533
+ :local_path=>an_instance_of(Pathname),
534
+ },
535
+ {
536
+ :name=>'two:2',
537
+ :local_path=>an_instance_of(Pathname),
538
+ },
332
539
  ])
333
540
  end
334
541
  end
335
542
 
336
543
  context "download" do
337
544
  it "defaults to :id if @itemkey missing" do
338
- FileUtils.mkpath(@projectDir + '/tsud')
339
- FileUtils.touch(@projectDir + '/tsud/one.lua')
340
- lp = Pathname.new(@projectDir + '/tsud/one.lua').realpath
545
+ FileUtils.mkpath(@project_dir + '/tsud')
546
+ FileUtils.touch(@project_dir + '/tsud/one.lua')
547
+ lp = Pathname.new(@project_dir + '/tsud/one.lua').realpath
341
548
  t = TSUD.new
342
549
  expect(t).to receive(:fetch).once.with(1).and_yield("foo")
343
- t.download(lp, {:id=>1})
550
+ t.download(lp, {:id=>1, :updated_at=>ITEM_UPDATED_AT})
344
551
  end
345
552
  end
346
553
 
347
554
  context "doing diffs" do
348
555
  before(:example) do
349
- FileUtils.mkpath(@projectDir + '/tsud')
556
+ FileUtils.mkpath(@project_dir + '/tsud')
350
557
  @t = TSUD.new
351
- @scpt = Pathname.new(@projectDir + '/tsud/one.lua')
558
+ @scpt = Pathname.new(@project_dir + '/tsud/one.lua')
352
559
  @scpt.open('w'){|io| io << %{-- fake lua\nreturn 0\n}}
353
560
  @scpt = @scpt.realpath
354
561
  end
355
562
 
356
563
  it "nothing when same." do
357
564
  expect(@t).to receive(:fetch).and_yield(%{-- fake lua\nreturn 0\n})
358
- ret = @t.dodiff({:name=>'one.lua', :local_path=>@scpt})
565
+ ret = @t.dodiff(
566
+ {
567
+ name: 'one.lua',
568
+ local_path: @scpt,
569
+ updated_at: ITEM_UPDATED_AT,
570
+ },
571
+ nil
572
+ )
359
573
  if Gem.win_platform? then
360
574
  expect(ret).to match(/FC: no differences encountered/)
361
575
  else
@@ -365,14 +579,29 @@ RSpec.describe MrMurano::SyncUpDown do
365
579
 
366
580
  it "something when different." do
367
581
  expect(@t).to receive(:fetch).and_yield(%{-- fake lua\nreturn 2\n})
368
- ret = @t.dodiff({:name=>'one.lua', :local_path=>@scpt})
582
+ ret = @t.dodiff(
583
+ {
584
+ name: 'one.lua',
585
+ local_path: @scpt,
586
+ updated_at: ITEM_UPDATED_AT,
587
+ },
588
+ nil
589
+ )
369
590
  expect(ret).not_to eq('')
370
591
  end
371
592
 
372
593
  it "uses script in item" do
373
594
  script = %{-- fake lua\nreturn 2\n}
374
595
  expect(@t).to receive(:fetch).and_yield(script)
375
- ret = @t.dodiff({:name=>'one.lua', :local_path=>@scpt, :script=>script})
596
+ ret = @t.dodiff(
597
+ {
598
+ name: 'one.lua',
599
+ local_path: @scpt,
600
+ script: script,
601
+ updated_at: ITEM_UPDATED_AT,
602
+ },
603
+ nil
604
+ )
376
605
  if Gem.win_platform? then
377
606
  expect(ret).to match(/FC: no differences encountered/)
378
607
  else
@@ -383,37 +612,42 @@ RSpec.describe MrMurano::SyncUpDown do
383
612
 
384
613
  context "syncup" do
385
614
  before(:example) do
386
- FileUtils.mkpath(@projectDir + '/tsud')
615
+ FileUtils.mkpath(@project_dir + '/tsud')
387
616
  @t = TSUD.new
388
617
  end
389
618
 
390
619
  it "removes" do
391
620
  expect(@t).to receive(:list).once.and_return([
392
- {:name=>1},{:name=>2},{:name=>3}
621
+ {:name=>1},
622
+ {:name=>2},
623
+ {:name=>3},
393
624
  ])
394
625
  expect(@t).to receive(:remove).exactly(3).times
395
626
  @t.syncup({:delete=>true})
396
627
  end
397
628
 
398
629
  it "creates" do
399
- FileUtils.touch(@projectDir + '/tsud/one.lua')
400
- FileUtils.touch(@projectDir + '/tsud/two.lua')
630
+ FileUtils.touch(@project_dir + '/tsud/one.lua')
631
+ FileUtils.touch(@project_dir + '/tsud/two.lua')
401
632
 
402
633
  expect(@t).to receive(:upload).twice.with(kind_of(Pathname), kind_of(MrMurano::SyncUpDown::Item), false)
403
634
  @t.syncup({:create=>true})
404
635
  end
405
636
 
406
637
  it "updates" do
407
- FileUtils.touch(@projectDir + '/tsud/one.lua')
408
- FileUtils.touch(@projectDir + '/tsud/two.lua')
638
+ FileUtils.touch(@project_dir + '/tsud/one.lua')
639
+ FileUtils.touch(@project_dir + '/tsud/two.lua')
409
640
  expect(@t).to receive(:list).once.and_return([
410
- MrMurano::SyncUpDown::Item.new({:name=>'one.lua'}),
411
- MrMurano::SyncUpDown::Item.new({:name=>'two.lua'})
641
+ MrMurano::SyncUpDown::Item.new({:name=>'one.lua', :updated_at=>ITEM_UPDATED_AT}),
642
+ MrMurano::SyncUpDown::Item.new({:name=>'two.lua', :updated_at=>ITEM_UPDATED_AT})
412
643
  ])
413
644
 
414
- expect(@t).to receive(:upload).twice.with(kind_of(Pathname), kind_of(MrMurano::SyncUpDown::Item), true)
415
- expect(@t).to receive(:toRemoteItem).and_return(
416
- {:name=>'one.lua'},{:name=>'two.lua'}
645
+ expect(@t).to receive(:upload).twice.with(
646
+ kind_of(Pathname), kind_of(MrMurano::SyncUpDown::Item), true
647
+ )
648
+ expect(@t).to receive(:to_remote_item).and_return(
649
+ {:name=>'one.lua'},
650
+ {:name=>'two.lua'},
417
651
  )
418
652
  @t.syncup({:update=>true})
419
653
  end
@@ -421,62 +655,62 @@ RSpec.describe MrMurano::SyncUpDown do
421
655
 
422
656
  context "syncdown" do
423
657
  before(:example) do
424
- FileUtils.mkpath(@projectDir + '/tsud')
658
+ FileUtils.mkpath(@project_dir + '/tsud')
425
659
  @t = TSUD.new
426
660
  end
427
661
 
428
662
  it "removes" do
429
- FileUtils.touch(@projectDir + '/tsud/one.lua')
430
- FileUtils.touch(@projectDir + '/tsud/two.lua')
663
+ FileUtils.touch(@project_dir + '/tsud/one.lua')
664
+ FileUtils.touch(@project_dir + '/tsud/two.lua')
431
665
 
432
- @t.syncdown({:delete=>true})
433
- expect(FileTest.exist?(@projectDir + '/tsud/one.lua')).to be false
434
- expect(FileTest.exist?(@projectDir + '/tsud/two.lua')).to be false
666
+ @t.syncdown(delete: true)
667
+ expect(FileTest.exist?(@project_dir + '/tsud/one.lua')).to be false
668
+ expect(FileTest.exist?(@project_dir + '/tsud/two.lua')).to be false
435
669
  end
436
670
 
437
671
  it "creates" do
438
672
  expect(@t).to receive(:list).once.and_return([
439
- MrMurano::SyncUpDown::Item.new({:name=>'one.lua'}),
440
- MrMurano::SyncUpDown::Item.new({:name=>'two.lua'})
673
+ MrMurano::SyncUpDown::Item.new({:name=>'one.lua', :updated_at=>ITEM_UPDATED_AT}),
674
+ MrMurano::SyncUpDown::Item.new({:name=>'two.lua', :updated_at=>ITEM_UPDATED_AT})
441
675
  ])
442
676
 
443
677
  expect(@t).to receive(:fetch).twice.and_yield("--foo\n")
444
- @t.syncdown({:create=>true})
445
- expect(FileTest.exist?(@projectDir + '/tsud/one.lua')).to be true
446
- expect(FileTest.exist?(@projectDir + '/tsud/two.lua')).to be true
678
+ @t.syncdown(create: true)
679
+ expect(FileTest.exist?(@project_dir + '/tsud/one.lua')).to be true
680
+ expect(FileTest.exist?(@project_dir + '/tsud/two.lua')).to be true
447
681
  end
448
682
 
449
683
  it "updates" do
450
- FileUtils.touch(@projectDir + '/tsud/one.lua')
451
- FileUtils.touch(@projectDir + '/tsud/two.lua')
684
+ FileUtils.touch(@project_dir + '/tsud/one.lua')
685
+ FileUtils.touch(@project_dir + '/tsud/two.lua')
452
686
  expect(@t).to receive(:list).once.and_return([
453
- MrMurano::SyncUpDown::Item.new({:name=>'one.lua'}),
454
- MrMurano::SyncUpDown::Item.new({:name=>'two.lua'})
687
+ MrMurano::SyncUpDown::Item.new({:name=>'one.lua', :updated_at=>ITEM_UPDATED_AT}),
688
+ MrMurano::SyncUpDown::Item.new({:name=>'two.lua', :updated_at=>ITEM_UPDATED_AT})
455
689
  ])
456
690
 
457
691
  expect(@t).to receive(:fetch).twice.and_yield("--foo\n")
458
- expect(@t).to receive(:toRemoteItem).and_return(
459
- MrMurano::SyncUpDown::Item.new({:name=>'one.lua'}),
460
- MrMurano::SyncUpDown::Item.new({:name=>'two.lua'})
692
+ expect(@t).to receive(:to_remote_item).and_return(
693
+ MrMurano::SyncUpDown::Item.new({:name=>'one.lua', :updated_at=>ITEM_UPDATED_AT}),
694
+ MrMurano::SyncUpDown::Item.new({:name=>'two.lua', :updated_at=>ITEM_UPDATED_AT})
461
695
  )
462
- @t.syncdown({:update=>true})
463
- expect(FileTest.exist?(@projectDir + '/tsud/one.lua')).to be true
464
- expect(FileTest.exist?(@projectDir + '/tsud/two.lua')).to be true
696
+ @t.syncdown(update: true)
697
+ expect(FileTest.exist?(@project_dir + '/tsud/one.lua')).to be true
698
+ expect(FileTest.exist?(@project_dir + '/tsud/two.lua')).to be true
465
699
  end
466
700
  end
467
701
 
468
702
  # context "bundles" do
469
703
  # before(:example) do
470
- # FileUtils.mkpath(@projectDir + '/tsud')
471
- # FileUtils.mkpath(@projectDir + '/bundles/mybun/tsud')
704
+ # FileUtils.mkpath(@project_dir + '/tsud')
705
+ # FileUtils.mkpath(@project_dir + '/bundles/mybun/tsud')
472
706
  # @t = TSUD.new
473
707
  # end
474
708
  #
475
709
  # it "finds items in bundles." do
476
- # FileUtils.touch(@projectDir + '/tsud/one.lua')
477
- # FileUtils.touch(@projectDir + '/bundles/mybun/tsud/two.lua')
710
+ # FileUtils.touch(@project_dir + '/tsud/one.lua')
711
+ # FileUtils.touch(@project_dir + '/bundles/mybun/tsud/two.lua')
478
712
  #
479
- # expect(@t).to receive(:toRemoteItem).and_return(
713
+ # expect(@t).to receive(:to_remote_item).and_return(
480
714
  # {:name=>'two.lua'},{:name=>'one.lua'}
481
715
  # )
482
716
  # ret = @t.locallist
@@ -490,8 +724,8 @@ RSpec.describe MrMurano::SyncUpDown do
490
724
  # end
491
725
  #
492
726
  # it "Doesn't download a bundled item" do
493
- # FileUtils.touch(@projectDir + '/tsud/one.lua')
494
- # lp = Pathname.new(@projectDir + '/tsud/one.lua').realpath
727
+ # FileUtils.touch(@project_dir + '/tsud/one.lua')
728
+ # lp = Pathname.new(@project_dir + '/tsud/one.lua').realpath
495
729
  #
496
730
  # expect(@t).to receive(:warning).once.with(/Not downloading into bundled item.*/)
497
731
  #
@@ -499,4 +733,6 @@ RSpec.describe MrMurano::SyncUpDown do
499
733
  # end
500
734
  # end
501
735
  end
736
+
502
737
  # vim: set ai et sw=2 ts=2 :
738
+