super_test_engine 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -21
  3. data/lib/super_test_engine.rb +1 -3
  4. data/lib/super_test_engine/copy_app_templates/controllers/favorite_things_controller.rb +50 -0
  5. data/lib/super_test_engine/copy_app_templates/controllers/members_controller.rb +57 -0
  6. data/lib/super_test_engine/copy_app_templates/controllers/ships_controller.rb +47 -0
  7. data/{db/migrate → lib/super_test_engine/copy_app_templates/migrations}/20190216224956_create_members.rb +0 -0
  8. data/lib/super_test_engine/copy_app_templates/migrations/20190803143320_create_ships.rb +11 -0
  9. data/lib/super_test_engine/copy_app_templates/migrations/20190806014121_add_ship_to_members.rb +5 -0
  10. data/lib/super_test_engine/copy_app_templates/migrations/20191126050453_create_favorite_things.rb +10 -0
  11. data/lib/super_test_engine/copy_app_templates/models/favorite_thing.rb +7 -0
  12. data/{app → lib/super_test_engine/copy_app_templates}/models/member.rb +10 -0
  13. data/lib/super_test_engine/copy_app_templates/models/ship.rb +3 -0
  14. data/lib/super_test_engine/copy_app_templates/routes.rb +11 -0
  15. data/lib/super_test_engine/copy_app_templates/seeds.rb +2 -0
  16. data/lib/super_test_engine/copy_app_templates/views/members/_favorite_things.html.erb +11 -0
  17. data/lib/super_test_engine/copy_app_templates/views/members/show.html.erb +11 -0
  18. data/lib/super_test_engine/fixtures/favorite_things.yml +9 -0
  19. data/{test → lib/super_test_engine}/fixtures/members.yml +56 -0
  20. data/lib/super_test_engine/fixtures/ships.yml +10 -0
  21. data/lib/super_test_engine/generate_copy_app.rb +49 -0
  22. data/lib/super_test_engine/generate_dummy.rb +98 -0
  23. data/lib/super_test_engine/starfleet_seeder.rb +50 -0
  24. data/super_test_engine.gemspec +23 -0
  25. metadata +47 -28
  26. data/MIT-LICENSE +0 -20
  27. data/Rakefile +0 -32
  28. data/app/controllers/admin/members_controller.rb +0 -9
  29. data/app/controllers/admin_controller.rb +0 -2
  30. data/app/dashboards/member_dashboard.rb +0 -81
  31. data/config/routes.rb +0 -5
  32. data/db/seeds.rb +0 -34
  33. data/lib/generators/super_test_engine/dummy/USAGE +0 -8
  34. data/lib/generators/super_test_engine/dummy/dummy_generator.rb +0 -108
  35. data/lib/generators/super_test_engine/dummy/templates/db_seeds.rb.tt +0 -1
  36. data/lib/super_test_engine/engine.rb +0 -9
  37. data/lib/super_test_engine/version.rb +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9c8180d8dd33f99eb0442bb67751b0722b11d453679df0852587ef0f74c5c9a7
4
- data.tar.gz: d3656c32d72e55007163f578c6c3d9671b81c98e20505f76bfd69215ef1ab55d
3
+ metadata.gz: c7d20e2c3646b4dee8144f92fa4f43ea042d0f03bce4a8111b3a081ba57cd067
4
+ data.tar.gz: a9ee55f386103ea4522409f6a16c564a6db2eb950a44b3e54a09a49913653e4e
5
5
  SHA512:
6
- metadata.gz: 63150cc18e312cd009bd9bb06f89512b621813fad701d16f33bb6bea3a8f6f6aa523c6e5656059cc45c428ad54e98427b9446ae672c840801040287db4d7708a
7
- data.tar.gz: 8956150cb78092261446188ba9434a001aa51a2a3f5c1ba6bc29f97983e09cd820253b6511c522167bc6a7956d60632189dc852d92474a8265b938a8e41289e6
6
+ metadata.gz: e00688f985b35865f04a61bf0bb7815dbf92ff603bb8e60f962d0cde6237dca9af1ba0551eafa189f86e64029f2c27ca03951da686f0c5a3ecd1babf258a6d65
7
+ data.tar.gz: 90fcf2eda947e9f281cdff7cd83234cbad475df837d13dd80f259d5dd87339fce01ae34c81aa1c8308c673724511f5e18956a6b321ccf9ec5845d09f9e04ee83
data/README.md CHANGED
@@ -1,28 +1,14 @@
1
1
  # SuperTestEngine
2
- Short description and motivation.
3
2
 
4
- ## Usage
5
- How to use my plugin.
3
+ Not an engine. Not just for tests.
6
4
 
7
- ## Installation
8
- Add this line to your application's Gemfile:
9
5
 
10
- ```ruby
11
- gem 'super_test_engine'
12
- ```
6
+ ## Example usage
13
7
 
14
- And then execute:
15
- ```bash
16
- $ bundle
17
8
  ```
18
-
19
- Or install it yourself as:
20
- ```bash
21
- $ gem install super_test_engine
9
+ env BUNDLE_GEMFILE="gemfiles/rails50_sprockets3.gemfile" bundle exec ruby super_test_engine/lib/super_test_engine/generate_copy_app.rb --destination=test/dummy50_sprockets3
10
+ env BUNDLE_GEMFILE="gemfiles/rails51_sprockets3.gemfile" bundle exec ruby super_test_engine/lib/super_test_engine/generate_copy_app.rb --destination=test/dummy51_sprockets3
11
+ env BUNDLE_GEMFILE="gemfiles/rails52_sprockets4.gemfile" bundle exec ruby super_test_engine/lib/super_test_engine/generate_copy_app.rb --destination=test/dummy52_sprockets4
12
+ env BUNDLE_GEMFILE="gemfiles/rails60_sprockets4.gemfile" bundle exec ruby super_test_engine/lib/super_test_engine/generate_copy_app.rb --destination=test/dummy60_sprockets4
13
+ env BUNDLE_GEMFILE="gemfiles/rails60_webpacker4.gemfile" bundle exec ruby super_test_engine/lib/super_test_engine/generate_copy_app.rb --destination=test/dummy60_webpacker4
22
14
  ```
23
-
24
- ## Contributing
25
- Contribution directions go here.
26
-
27
- ## License
28
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -1,5 +1,3 @@
1
- require "super_test_engine/engine"
2
-
3
1
  module SuperTestEngine
4
- # Your code goes here...
2
+ VERSION = "0.1.0"
5
3
  end
@@ -0,0 +1,50 @@
1
+ module Admin
2
+ class FavoriteThingsController < AdminController
3
+ private
4
+
5
+ def new_controls
6
+ Controls.new
7
+ end
8
+
9
+ class Controls
10
+ def title
11
+ FavoriteThing.name.pluralize
12
+ end
13
+
14
+ def model
15
+ FavoriteThing
16
+ end
17
+
18
+ def scope(action:)
19
+ FavoriteThing.all
20
+ end
21
+
22
+ def permitted_params(params, action:)
23
+ params.require(:favorite_thing).permit(:name, member_attributes: [:id, :name, :rank, :position, :ship_id])
24
+ end
25
+
26
+ def display_schema(action:)
27
+ Super::Schema.new(Super::Display::SchemaTypes.new) do |fields, type|
28
+ fields[:name] = type.dynamic(&:itself)
29
+ fields[:member] = type.dynamic { |member| "#{member.name} (member ##{member.id})" }
30
+ end
31
+ end
32
+
33
+ def form_schema(action:)
34
+ Super::Schema.new(Super::Form::SchemaTypes.new) do |fields, type|
35
+ fields[:name] = type.generic("form_field_text")
36
+
37
+ fields[:member_attributes] = type.belongs_to(:member) do
38
+ fields[:name] = type.generic("form_field_text")
39
+ fields[:rank] = type.generic("form_field_select", collection: Member.ranks.keys)
40
+ fields[:position] = type.generic("form_field_text")
41
+ fields[:ship_id] = type.generic(
42
+ "form_field_select",
43
+ collection: Ship.all.map { |s| ["#{s.name} (Ship ##{s.id})", s.id] },
44
+ )
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,57 @@
1
+ module Admin
2
+ class MembersController < AdminController
3
+ private
4
+
5
+ def new_controls
6
+ Controls.new
7
+ end
8
+
9
+ class Controls
10
+ def title
11
+ Member.name.pluralize
12
+ end
13
+
14
+ def model
15
+ Member
16
+ end
17
+
18
+ def scope(action:)
19
+ Member.all
20
+ end
21
+
22
+ def permitted_params(params, action:)
23
+ params.require(:member).permit(:name, :rank, :position, :ship_id, favorite_things_attributes: [:id, :name, :_destroy])
24
+ end
25
+
26
+ def display_schema(action:)
27
+ Super::Schema.new(Super::Display::SchemaTypes.new) do |fields, type|
28
+ fields[:name] = type.dynamic(&:itself)
29
+ fields[:rank] = type.dynamic(&:itself)
30
+ fields[:position] = type.dynamic(&:itself)
31
+ fields[:ship] = type.dynamic { |ship| "#{ship.name} (Ship ##{ship.id})" }
32
+ fields[:created_at] = type.dynamic(&:iso8601)
33
+ if action.show?
34
+ fields[:updated_at] = type.dynamic(&:iso8601)
35
+ end
36
+ end
37
+ end
38
+
39
+ def form_schema(action:)
40
+ Super::Schema.new(Super::Form::SchemaTypes.new) do |fields, type|
41
+ fields[:name] = type.generic("form_field_text")
42
+ fields[:rank] = type.generic("form_field_select", collection: Member.ranks.keys)
43
+ fields[:position] = type.generic("form_field_text")
44
+ fields[:ship_id] = type.generic(
45
+ "form_field_select",
46
+ collection: Ship.all.map { |s| ["#{s.name} (Ship ##{s.id})", s.id] },
47
+ )
48
+
49
+ fields[:favorite_things_attributes] = type.has_many(:favorite_things) do
50
+ fields[:name] = type.generic("form_field_text")
51
+ fields[:_destroy] = type._destroy
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,47 @@
1
+ module Admin
2
+ class ShipsController < AdminController
3
+ private
4
+
5
+ def new_controls
6
+ Controls.new
7
+ end
8
+
9
+ class Controls
10
+ def title
11
+ Ship.name.pluralize
12
+ end
13
+
14
+ def model
15
+ Ship
16
+ end
17
+
18
+ def scope(action:)
19
+ Ship.all
20
+ end
21
+
22
+ def permitted_params(params, action:)
23
+ params.require(:ship).permit(:name, :registry, :class_name)
24
+ end
25
+
26
+ def display_schema(action:)
27
+ Super::Schema.new(Super::Display::SchemaTypes.new) do |fields, type|
28
+ fields[:name] = type.dynamic(&:itself)
29
+ fields[:registry] = type.dynamic(&:itself)
30
+ fields[:class_name] = type.dynamic(&:itself)
31
+ if action.show?
32
+ fields[:created_at] = type.dynamic(&:iso8601)
33
+ fields[:updated_at] = type.dynamic(&:iso8601)
34
+ end
35
+ end
36
+ end
37
+
38
+ def form_schema(action:)
39
+ Super::Schema.new(Super::Form::SchemaTypes.new) do |fields, type|
40
+ fields[:name] = type.generic("form_field_text")
41
+ fields[:registry] = type.generic("form_field_text")
42
+ fields[:class_name] = type.generic("form_field_text")
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,11 @@
1
+ class CreateShips < ActiveRecord::Migration[5.0]
2
+ def change
3
+ create_table :ships do |t|
4
+ t.string :name
5
+ t.string :registry
6
+ t.string :class_name
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ class AddShipToMembers < ActiveRecord::Migration[5.0]
2
+ def change
3
+ add_reference :members, :ship, foreign_key: true
4
+ end
5
+ end
@@ -0,0 +1,10 @@
1
+ class CreateFavoriteThings < ActiveRecord::Migration[5.0]
2
+ def change
3
+ create_table :favorite_things do |t|
4
+ t.references :member, null: false, foreign_key: true
5
+ t.text :name
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ class FavoriteThing < ApplicationRecord
2
+ belongs_to :member
3
+
4
+ validates :name, presence: true
5
+
6
+ accepts_nested_attributes_for :member
7
+ end
@@ -9,6 +9,16 @@ class Member < ApplicationRecord
9
9
  nco: "NCO",
10
10
  }
11
11
 
12
+ belongs_to :ship
13
+ has_many :favorite_things, dependent: :delete_all
14
+
15
+ accepts_nested_attributes_for(
16
+ :favorite_things,
17
+ allow_destroy: true,
18
+ reject_if: -> (record) { record[:name].blank? }
19
+ )
20
+
12
21
  validates :name, presence: true
13
22
  validates :rank, presence: true
23
+ validates :position, presence: true
14
24
  end
@@ -0,0 +1,3 @@
1
+ class Ship < ApplicationRecord
2
+ has_many :members
3
+ end
@@ -0,0 +1,11 @@
1
+ Rails.application.routes.draw do
2
+ namespace :admin do
3
+ resources :members
4
+ resources :ships
5
+ resources :favorite_things
6
+
7
+ root to: redirect("admin/members", status: 302)
8
+ end
9
+
10
+ root to: redirect("admin/members", status: 302)
11
+ end
@@ -0,0 +1,2 @@
1
+ require "super_test_engine/starfleet_seeder"
2
+ StarfleetSeeder.seed
@@ -0,0 +1,11 @@
1
+ <% if @resource.favorite_things.any? %>
2
+ <%= render(Super::Panel.new) do %>
3
+ <h1 class="text-xl">Favorite Things</h1>
4
+
5
+ <ul class="list-disc list-outside mt-4">
6
+ <% @resource.favorite_things.each do |favorite_thing| %>
7
+ <li class="ml-6"><%= favorite_thing.name %></li>
8
+ <% end %>
9
+ </ul>
10
+ <% end %>
11
+ <% end %>
@@ -0,0 +1,11 @@
1
+ <%= render(
2
+ Super::Layout.new(
3
+ mains: [
4
+ Super::Panel.new(
5
+ Super::Partial.new("resource_header"),
6
+ Super::Partial.new("show")
7
+ ),
8
+ Super::Partial.new("favorite_things")
9
+ ]
10
+ )
11
+ ) %>
@@ -0,0 +1,9 @@
1
+ # Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
2
+
3
+ tea:
4
+ member: picard
5
+ name: Tea, earl grey, hot
6
+
7
+ spot:
8
+ member: data
9
+ name: Spot
@@ -3,278 +3,334 @@ picard:
3
3
  name: Jean-Luc Picard
4
4
  rank: Captain
5
5
  position: Commanding Officer
6
+ ship: uss_enterprise_d
6
7
 
7
8
  riker:
8
9
  name: William T. Riker
9
10
  rank: Commander
10
11
  position: First Officer
12
+ ship: uss_enterprise_d
11
13
 
12
14
  data:
13
15
  name: Data
14
16
  rank: Lieutenant Commander
15
17
  position: Second Officer
18
+ ship: uss_enterprise_d
16
19
 
17
20
  crusher:
18
21
  name: Beverly Crusher
19
22
  rank: Commander
20
23
  position: Chief Medical Officer
24
+ ship: uss_enterprise_d
21
25
 
22
26
  worf:
23
27
  name: Worf
24
28
  rank: Lieutenant Commander
25
29
  position: Chief of Security
30
+ ship: uss_enterprise_d
26
31
 
27
32
  la_forge:
28
33
  name: Geordi La Forge
29
34
  rank: Lieutenant Commander
30
35
  position: Chief Engineering Officer
36
+ ship: uss_enterprise_d
31
37
 
32
38
  troi:
33
39
  name: Deanna Troi
34
40
  rank: Commander
35
41
  position: Counselor
42
+ ship: uss_enterprise_d
36
43
 
37
44
  tasha:
38
45
  name: Natasha Yar
39
46
  rank: Lieutenant
40
47
  position: Chief of Security
48
+ ship: uss_enterprise_d
41
49
 
42
50
  miles:
43
51
  name: Miles O'Brien
44
52
  rank: NCO
45
53
  position: Transporter Chief
54
+ ship: uss_enterprise_d
46
55
 
47
56
  guinan:
48
57
  name: Guinan
49
58
  rank: NCO
50
59
  position: Bartender
60
+ ship: uss_enterprise_d
51
61
 
52
62
  sepulveda:
53
63
  name: Fernando Sepulveda
54
64
  rank: Lieutenant
55
65
  position: Ops engineer
66
+ ship: uss_enterprise_d
56
67
 
57
68
  jaxa:
58
69
  name: Sito Jaxa
59
70
  rank: Ensign
60
71
  position: Security officer
72
+ ship: uss_enterprise_d
61
73
 
62
74
  calloway:
63
75
  name: Maddy Calloway
64
76
  rank: Ensign
65
77
  position: Medical technician
78
+ ship: uss_enterprise_d
66
79
 
67
80
  mayter:
68
81
  name: Van Mayter
69
82
  rank: NCO
70
83
  position: Engineer
84
+ ship: uss_enterprise_d
71
85
 
72
86
  sutter:
73
87
  name: Daniel Sutter
74
88
  rank: Ensign
75
89
  position: Engineer
90
+ ship: uss_enterprise_d
76
91
 
77
92
  bernard:
78
93
  name: Harry Bernard, Sr.
79
94
  rank: Lieutenant
80
95
  position: Oceanographer
96
+ ship: uss_enterprise_d
81
97
 
82
98
  dangelo:
83
99
  name: Dick D'Angelo
84
100
  rank: Lieutenant
85
101
  position: Ops Engineer
102
+ ship: uss_enterprise_d
86
103
 
87
104
  ogawa:
88
105
  name: Alyssa Ogawa
89
106
  rank: Lieutenant
90
107
  position: Nurse
108
+ ship: uss_enterprise_d
91
109
 
92
110
  nesterowicz:
93
111
  name: John Nesterowicz
94
112
  rank: Lieutenant
95
113
  position: WarpField Tech 2
114
+ ship: uss_enterprise_d
96
115
 
97
116
  keiko:
98
117
  name: Keiko O'Brien
99
118
  rank: NCO
100
119
  position: Botanist
120
+ ship: uss_enterprise_d
101
121
 
102
122
  anaya:
103
123
  name: April Anaya
104
124
  rank: Ensign
105
125
  position: Flight controller
126
+ ship: uss_enterprise_d
106
127
 
107
128
  ziff:
108
129
  name: Anaanda Ziff
109
130
  rank: Lieutenant
110
131
  position: Specialist
132
+ ship: uss_enterprise_d
111
133
 
112
134
  tarses:
113
135
  name: Simon Tarses
114
136
  rank: NCO
115
137
  position: Medical technician
138
+ ship: uss_enterprise_d
116
139
 
117
140
  wallace:
118
141
  name: Darien Wallace
119
142
  rank: Lieutenant
120
143
  position: Crewmember
144
+ ship: uss_enterprise_d
121
145
 
122
146
  giddings:
123
147
  name: Diana Giddings
124
148
  rank: Lieutenant
125
149
  position: Junior engineer
150
+ ship: uss_enterprise_d
126
151
 
127
152
  pulaski:
128
153
  name: Katherine Pulaski
129
154
  rank: Commander
130
155
  position: Medical officer
156
+ ship: uss_enterprise_d
131
157
 
132
158
  dumont:
133
159
  name: Suzanne Dumont
134
160
  rank: Ensign
135
161
  position: Crewmember
162
+ ship: uss_enterprise_d
136
163
 
137
164
  tsu:
138
165
  name: Lian T'Su
139
166
  rank: Ensign
140
167
  position: Operations officer
168
+ ship: uss_enterprise_d
141
169
 
142
170
  lynch:
143
171
  name: Leland T. Lynch
144
172
  rank: Lieutenant Commander
145
173
  position: Chief engineer
174
+ ship: uss_enterprise_d
146
175
 
147
176
  dsora:
148
177
  name: Jenna D'Sora
149
178
  rank: Lieutenant Junior Grade
150
179
  position: Security officer
180
+ ship: uss_enterprise_d
151
181
 
152
182
  macdougal:
153
183
  name: Sarah MacDougal
154
184
  rank: Lieutenant Commander
155
185
  position: Chief engineer
186
+ ship: uss_enterprise_d
156
187
 
157
188
  shimoda:
158
189
  name: Jim Shimoda
159
190
  rank: NCO
160
191
  position: Assistant chief engineer
192
+ ship: uss_enterprise_d
161
193
 
162
194
  solis:
163
195
  name: Orfil Solis
164
196
  rank: Lieutenant Junior Grade
165
197
  position: Flight controller
198
+ ship: uss_enterprise_d
166
199
 
167
200
  rhodes:
168
201
  name: Sandra Rhodes
169
202
  rank: Lieutenant
170
203
  position: Security officer
204
+ ship: uss_enterprise_d
171
205
 
172
206
  fratis:
173
207
  name: Jeffrey Fratis
174
208
  rank: Lieutenant
175
209
  position: Crewmember
210
+ ship: uss_enterprise_d
176
211
 
177
212
  mees:
178
213
  name: Jim Mees
179
214
  rank: Lieutenant Commander
180
215
  position: Crewmember
216
+ ship: uss_enterprise_d
181
217
 
182
218
  hubbell:
183
219
  name: Maggie Hubbell
184
220
  rank: Ensign
185
221
  position: Transporter chief
222
+ ship: uss_enterprise_d
186
223
 
187
224
  rager:
188
225
  name: Sariel Rager
189
226
  rank: Ensign
190
227
  position: Helmsman
228
+ ship: uss_enterprise_d
191
229
 
192
230
  robinson:
193
231
  name: B.G. Robinson
194
232
  rank: Lieutenant
195
233
  position: Transporter chief
234
+ ship: uss_enterprise_d
196
235
 
197
236
  allenby:
198
237
  name: Tess Allenby
199
238
  rank: Ensign
200
239
  position: Flight controller
240
+ ship: uss_enterprise_d
201
241
 
202
242
  brooks:
203
243
  name: Janet Brooks
204
244
  rank: Ensign
205
245
  position: Crewmember
246
+ ship: uss_enterprise_d
206
247
 
207
248
  foster:
208
249
  name: Don Foster, Jr.
209
250
  rank: Lieutenant
210
251
  position: WarpField Tech 1
252
+ ship: uss_enterprise_d
211
253
 
212
254
  lefler:
213
255
  name: Robin Lefler
214
256
  rank: Ensign
215
257
  position: Mission Specialist
258
+ ship: uss_enterprise_d
216
259
 
217
260
  lavelle:
218
261
  name: Sam Lavelle
219
262
  rank: Lieutenant Junior Grade
220
263
  position: Operations officer
264
+ ship: uss_enterprise_d
221
265
 
222
266
  prieto:
223
267
  name: Ben Prieto
224
268
  rank: Lieutenant
225
269
  position: Shuttlecraft Pilot
270
+ ship: uss_enterprise_d
226
271
 
227
272
  pacelli:
228
273
  name: Alfonse Pacelli
229
274
  rank: Ensign
230
275
  position: Specialist
276
+ ship: uss_enterprise_d
231
277
 
232
278
  aster:
233
279
  name: Marla Aster
234
280
  rank: Lieutenant
235
281
  position: Archaeologist
282
+ ship: uss_enterprise_d
236
283
 
237
284
  barclay:
238
285
  name: Reginald Barclay
239
286
  rank: Lieutenant
240
287
  position: Systems diagnostic engineer
288
+ ship: uss_enterprise_d
241
289
 
242
290
  salvatore:
243
291
  name: Bruno Salvatore
244
292
  rank: Ensign
245
293
  position: Specialist in biomechanical research
294
+ ship: uss_enterprise_d
246
295
 
247
296
  juarez:
248
297
  name: Francisca Juarez
249
298
  rank: Lieutenant
250
299
  position: Crewmember
300
+ ship: uss_enterprise_d
251
301
 
252
302
  finks:
253
303
  name: Wilbur Finks
254
304
  rank: Lieutenant
255
305
  position: Safety officer
306
+ ship: uss_enterprise_d
256
307
 
257
308
  larson:
258
309
  name: Linda Larson
259
310
  rank: Lieutenant Junior Grade
260
311
  position: Engineer
312
+ ship: uss_enterprise_d
261
313
 
262
314
  gomez:
263
315
  name: Sonya Gomez
264
316
  rank: Ensign
265
317
  position: Engineer
318
+ ship: uss_enterprise_d
266
319
 
267
320
  hagler:
268
321
  name: Edward Hagler
269
322
  rank: Lieutenant
270
323
  position: Crewmember
324
+ ship: uss_enterprise_d
271
325
 
272
326
  lin:
273
327
  name: Peter Lin
274
328
  rank: Ensign
275
329
  position: Flight controller
330
+ ship: uss_enterprise_d
276
331
 
277
332
  kwan:
278
333
  name: Daniel Kwan
279
334
  rank: Lieutenant Junior Grade
280
335
  position: Specialist
336
+ ship: uss_enterprise_d