hydra-tutorial 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ h3. 0.2.1
2
+
3
+ * Minor edits to various messages and user prompts.
4
+ * Improved the index view.
5
+ * Modified edit view to agree with Record model.
6
+ * Added the --thru option, mainly for developer use.
7
+
8
+ h3. 0.2.0
9
+
10
+ * Added ability to run tutorial step-by-step.
11
+ * Added Git to generated Rails app so user can diff changes between steps.
12
+
13
+ h3. 0.1.0
14
+
15
+ * Initial versions.
@@ -1,476 +1,42 @@
1
- TODO:
2
- - Incorporate enhancements from notes.txt info tutorial.
1
+ Incorporate the edits from the last commit (00b010bb) of hydra_walkthrough.
3
2
 
4
- - Improve README.
5
- - Remove monkey-patch to hydra-head.
6
- - Write method to extract long messages from the tutorial code.
7
- - Support the --pop option.
8
- - Implement a --help option.
9
- - Support control over verbosity, and tie it to :capture declarations.
10
- - Improve tutorial unit tests.
11
- - Improve the views in the tutorial.
12
- - Write unit tests for the tutorial script itself.
13
- - Write an integration test for the entire tutorial.
3
+ See issues submitted by users on Github.
14
4
 
5
+ Improve README.
15
6
 
16
- ====================================================================
7
+ Remove monkey-patch of hydra-head.
17
8
 
18
- # Install a version of Ruby.
9
+ Write method to extract long messages from the tutorial code.
19
10
 
20
- # Install RVM.
11
+ Support the --pop option.
21
12
 
22
- # Install Ruby 1.9.
13
+ Implement a --list option.
23
14
 
24
- # Create a gemset
25
- rvm use --rvmrc --create 1.9.3@hydra_walkthrough
15
+ Implement a --help option.
26
16
 
27
- # See current gems.
28
- gem list
17
+ Support control over verbosity, and tie it to :capture declarations.
29
18
 
30
- # Install bundler and Rails.
31
- gem install bundler rails
19
+ Improve tutorial unit tests.
32
20
 
33
- # See the effect.
34
- gem list
21
+ Improve the views in the tutorial.
35
22
 
36
- # Initialize a new Rails application.
37
- rails new hydra_walkthrough
23
+ Write unit tests for the tutorial script itself.
38
24
 
39
- # Put the .rvmrc file in our project directory.
40
- mv .rvmrc hydra_walkthrough
25
+ Write an integration test for the entire tutorial.
41
26
 
42
- # Get a copy of the resources directory.
43
- ...
27
+ Edit desc() commands: search for FIX.
44
28
 
45
- # Get a copy the hydra-jetty project.
46
- git clone git://github.com/projecthydra/hydra-jetty.git
29
+ Use delegate_to().
47
30
 
48
- # Put a copy of it into our Rails project.
49
- cp -r hydra-jetty hydra_walkthrough/jetty
31
+ Make resources(:records) a separate Git commit.
50
32
 
51
- # Check out the initial Rails app.
52
- cd hydra_walkthrough
33
+ Various problems evident after the check_the_new_form step:
34
+ - Delete links are not working.
35
+ - Keywords are not being saved.
36
+ - The view has multiple problems and is not in synce with the model.
53
37
 
54
- # Add to .gitignore
55
- jetty
56
- .rvmrc
57
- Gemfile.lock
38
+ run_hydra_generators() produces a large commit. Can we break this apart?
58
39
 
59
- # Git.
60
- git init
61
- git add .
62
- git commit -m 'Initial commit'
40
+ write_model_test()
63
41
 
64
- # Run the Rails server in a second terminal window.
65
- rails server
66
- open http://localhost:3000
67
-
68
- # Check before we add some gems.
69
- rake -T
70
-
71
- # Add some lines to Gemfile.
72
- # In the :assets block.
73
- gem 'execjs'
74
- gem 'therubyracer', :platforms => :ruby
75
-
76
- # In the :development block.
77
- gem 'jettywrapper'
78
- gem 'debugger'
79
-
80
- # Git.
81
- git add .
82
- git commit -m 'Added some gems: execjs, therubyracer, jettywrapper, debugger'
83
-
84
- # Set up SOLR and Fedora config files.
85
- cp ../resources/solr.yml config
86
- cp ../resources/fedora.yml config
87
-
88
- # Git.
89
- git add -A
90
- git commit -m 'Created SOLR and Fedora config files'
91
-
92
- # Bundle.
93
- bundle install
94
-
95
- # Check after: note the jetty tasks.
96
- rake -T
97
-
98
- # Start the Jetty server that will run Fedora and SOLR.
99
- rake jetty:start
100
-
101
- # Check them out.
102
- open http://localhost:8983/fedora/
103
- open http://localhost:8983/solr/development/admin/
104
-
105
- # More Gemile.
106
- gem 'active-fedora'
107
- gem 'om'
108
-
109
- # Bundle.
110
- bundle install
111
-
112
- # Git.
113
- git add .
114
- git commit -m 'Added active-fedora and OM gems'
115
-
116
- # Create a basic model.
117
- cp ../resources/basic_af_model.rb app/models/record.rb
118
-
119
- # Git.
120
- git add -A
121
- git commit -m 'Created a basic Record model with a descMetadata datastream'
122
-
123
- # Check it out.
124
- rails console
125
-
126
- ## CREATE
127
- > obj = Record.new
128
- > xml = '<xyz><foo>ABC</foo><foo>DEF</foo><bar>123</bar></xyz>'
129
- > obj.descMetadata.content = xml
130
- > obj.save
131
-
132
- > pid = obj.pid
133
-
134
- ## RETRIEVE
135
- > obj = Record.find(pid)
136
- > ds = obj.descMetadata
137
- > puts ds.content
138
-
139
- ## UPDATE
140
- > doc = ds.ng_xml
141
- > elements = doc.xpath '//foo'
142
- > elements.each { |e| puts e }
143
- > exit
144
-
145
- # Check it out in the browser.
146
- open http://localhost:8983/fedora/objects/
147
- -> click search
148
- -> click the hyperlink of the object's PID (eg, 'changeme:1')
149
- -> click hyperlink to view the object's datastreams list
150
- -> click hyperlink to view the content of the descMetadata datastream
151
-
152
- # Back in the Rails console:
153
-
154
- rails console
155
-
156
- ## DELETE
157
- > obj = Record.find('changeme:1')
158
- > obj.delete
159
- > exit
160
-
161
- # Check it out in the browser.
162
- # And click search button.
163
- open http://localhost:8983/fedora/objects/
164
-
165
- # Enhance our datastream.
166
- cp ../resources/basic_om_model.rb app/models/record.rb
167
-
168
- # Git.
169
- git commit -am 'Added an OM terminology'
170
-
171
- # Check it out.
172
- rails console
173
-
174
- > obj = Record.new
175
- > obj.descMetadata.title = "My object title"
176
- > obj.save
177
- > puts obj.descMetadata.content
178
- > obj.delete
179
- > exit
180
-
181
- # Modify record.rb
182
- # Add this after the has_metadata call.
183
-
184
- delegate :title, :to => 'descMetadata'
185
-
186
- # Git.
187
- git commit -am 'Added delegate() to the model'
188
-
189
- # Check it out.
190
- rails console
191
-
192
- > obj = Record.new
193
- > obj.title = "My object title"
194
- > obj.save
195
- > puts obj.descMetadata.content
196
- > puts obj.title.inspect
197
- > obj.delete
198
- > exit
199
-
200
- # Use delegate_to().
201
- # Replace the delete() line.
202
-
203
- delegate_to 'descMetadata', [:title, :author, :url, :description], :unique => true
204
-
205
- # Git.
206
- git commit -am 'Switched to delegate_to()'
207
-
208
- # Check it out.
209
- rails console
210
-
211
- > obj = Record.new
212
- > obj.title = "Some title"
213
- > obj.title
214
- > obj.author = 'Some author'
215
- > obj.save
216
- > puts obj.descMetadata.contnet
217
- > puts obj.descMetadata.content
218
- > obj.delete
219
- > exit
220
-
221
- # Enhance our model.
222
- # This example is too complicated.
223
- # Also, it undoes the delegate_to().
224
- cp ../resources/basic_mods_model.rb app/models/record.rb
225
- cp ../resources/mods_desc_metadata.rb app/models/mods_desc_metadata.rb
226
-
227
- # Git.
228
- git add -A
229
- git commit -m 'Added a more extensive OM example'
230
-
231
- # Check it out.
232
- rails console
233
-
234
- > obj = Record.new
235
- > obj.title = "My object title"
236
- > obj.save
237
- > puts obj.descMetadata.content
238
- > obj.delete
239
- > exit
240
-
241
- # Initialize a controller and views for our Record model.
242
- rails generate scaffold_controller Record --no-helper --skip-test-framework
243
-
244
- # Git.
245
- git add -A
246
- git commit -m 'Added a basic controller and views for the Record model'
247
-
248
- # Check files that were created.
249
- app/controlers/records_controller.rb
250
- app/views/records/
251
-
252
- # Modify config/routes.rb
253
- resources :records
254
-
255
- # Git.
256
- git commit -am 'Set up resourceful routing for the Record model'
257
-
258
- # Put some files in place.
259
- cp ../resources/_form.html.erb app/views/records/_form.html.erb
260
- cp ../resources/show.html.erb app/views/records/show.html.erb
261
-
262
- # Git.
263
- git commit -am 'Fleshed out the edit form and show page'
264
-
265
- # Try it out.
266
- # Delete links are not working.
267
- # Keywords are not being saved.
268
- # The view has multiple problems and is not in synce with the model.
269
- open http://localhost:3000/records/new
270
-
271
- # More Gemile.
272
- gem 'blacklight'
273
- gem 'hydra-head'
274
- gem 'devise'
275
-
276
- # Git.
277
- git commit -am 'Added blacklight, hydra-head, and devise'
278
-
279
- # Bundle.
280
- bundle install
281
-
282
- # Remove some files.
283
- rm public/index.html
284
- rm config/solr.yml
285
-
286
- # Set up devise.
287
- rails generate blacklight --devise
288
-
289
- # Git.
290
- git add -A
291
- git commit -m 'Set up devise'
292
-
293
- # Remove some files.
294
- rm config/solr.yml
295
- rm app/controllers/catalog_controller.rb
296
-
297
- # Set up a User model for hydra-head.
298
- rails generate hydra:head User
299
-
300
- # Do some stuff.
301
- rake db:migrate
302
- rake db:test:prepare
303
- rake jetty:stop
304
- rake hydra:jetty:config
305
- rake jetty:start
306
-
307
- # Git.
308
- git add -A
309
- git commit -m 'Set up User model under hydra-head'
310
-
311
- # Various edits:
312
-
313
- # app/controllers/records_controller.rb
314
- include Hydra::AssetsControllerHelper
315
- include Hydra::AccessControlsEnforcement
316
- before_filter :enforce_access_controls
317
-
318
- # app/controllers/records_controller.rb
319
- # In create(), after @record is set.
320
- apply_depositor_metadata(@record)
321
-
322
- # app/models/record.rb
323
- include Hydra::ModelMixins::CommonMetadata
324
- include Hydra::ModelMethods
325
-
326
- # app/models/solr_document.rb
327
- # After other includes.
328
- include Hydra::Solr::Document
329
-
330
- # app/assets/javascripts/application.js
331
- # At end of file.
332
- Blacklight.do_search_context_behavior = function() { }
333
-
334
- # Git.
335
- git commit -am 'Included hydra-head into our model, controller, etc.'
336
-
337
- # Check it out.
338
- # Needed to edit hydra-head: _user_util_links.html.erb
339
- open http://localhost:3000/records/new
340
- -> Click sign up.
341
- -> Enter any email and password.
342
-
343
- # Add some gems for testing.
344
- # In the :test group (and :development group?)
345
- gem 'rspec'
346
- gem 'rspec-rails'
347
-
348
- # Git.
349
- git commit -am 'Added rspec gem'
350
-
351
- # Bundle
352
- bundle install
353
-
354
- # Set up rspec.
355
- rails generate rspec:install
356
-
357
- # Git.
358
- git add -A
359
- git commit -m 'Initialized rspec directory'
360
-
361
- # Create a test.
362
- # This test should do something real.
363
- mkdir spec/controllers
364
- cp ../resources/records_controller_spec.rb spec/controllers/records_controller_spec.rb
365
-
366
- # Git.
367
- git add -A
368
- git commit -m 'Create a placeholder test'
369
-
370
- # Run the test
371
- rspec
372
-
373
- # Add some gems for testing.
374
- # In the :test group (and :development group?)
375
- gem 'capybara'
376
-
377
- # Bundle
378
- bundle install
379
-
380
- # Git.
381
- git commit -am 'Added capybara gem'
382
-
383
- # Create a test.
384
- mkdir spec/integration
385
- cp ../resources/integration_spec.rb spec/integration/integration_spec.rb
386
-
387
- # Git.
388
- git add -A
389
- git commit -m 'Created a few integration tests'
390
-
391
- # Run the tests
392
- rspec
393
-
394
- # Create a ci rake task.
395
- cp ../resources/ci.rake lib/tasks/ci.rake
396
-
397
- # Git.
398
- git add -A
399
- git commit -m 'Created a ci rake task'
400
-
401
- # Run it.
402
- rake jetty:stop
403
- rake ci
404
- rake jetty:start
405
-
406
- # Add a gem for test coverage.
407
- # In the :test group (and :development group?)
408
- gem 'simplecov'
409
-
410
- # Bundle
411
- bundle install
412
-
413
- # Git.
414
- git commit -am 'Added simplecov gem'
415
-
416
- # ci.rake
417
- # After Rails.env is set.
418
- ENV['COVERAGE'] ||= 'true'
419
-
420
- # spec/spec_helper.rb
421
- # After ENV['RAILS_ENV'] is set.
422
- if ENV['COVERAGE'] == "true"
423
- require 'simplecov'
424
- SimpleCov.start do
425
- add_filter "config/"
426
- add_filter "spec/"
427
- end
428
- end
429
-
430
- # Add to .gitignore
431
- coverage
432
-
433
- # Git
434
- git commit -am 'Set up test coverage'
435
-
436
- # Run it.
437
- rake jetty:stop
438
- rake ci
439
- rake jetty:start
440
-
441
- # Check test coverage
442
- open coverage/index.html
443
-
444
- # app/models/record.rb
445
- # After has_metadata
446
- has_file_datastream :name => 'content', :type => ActiveFedora::Datastream
447
-
448
- # app/controllers/records_controller.rb
449
- include Hydra::Controller::UploadBehavior
450
-
451
- # app/controllers/records_controller.rb
452
- # After: apply_depositor_metadata().
453
- @record.label = params[:record][:title] # this is a bad hack to work around an AF bug
454
- add_posted_blob_to_asset(@record, params[:filedata]) if params.has_key?(:filedata)
455
-
456
- # app/views/records/_form.html.erb
457
- # Delete first line. Use this instead:
458
- <%= form_for(@record, :html => { :multipart => true } ) do |f| -%>
459
- <h2>File</h2>
460
- <%= file_field_tag "filedata" %>
461
-
462
- # Get stuff.
463
- cp ../resources/_add_assets_links.html.erb app/views/_add_assets_links.html.erb
464
-
465
- # Git.
466
- git add -A
467
- git commit -m 'Add some styling and link to new Record in the header of the layout'
468
-
469
- # Run the app.
470
- rake jetty:stop
471
- rake jetty:start
472
- rails server
473
-
474
- # Wrap up.
475
- Shut down rails server (CTRL-C)
476
- rake jetty:stop
42
+ run_integration_test_fail(): seems to small of a step: combine with previous?
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "hydra-tutorial"
3
- s.version = "0.2.0"
3
+ s.version = "0.2.1"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.authors = ["Chris Beer", "Monty Hindman"]
6
6
  s.email = ["hydra-tech@googlegroups.com"]
@@ -1,29 +1,35 @@
1
1
  <%= form_for(@record) do |f| -%>
2
- <h2>Title</h2>
2
+ <h2>Title and Author</h2>
3
+
3
4
  <div class="row">
4
5
  <%= f.label :title, "Title" %>
5
6
  <%= f.text_area :title, :value=>@record.title, :required => true %>
6
7
  </div>
7
8
 
8
- <h2>Abstract and keywords</h2>
9
-
10
9
  <div class="row">
11
- <%= f.label :abstract %>
12
- <%= f.text_area :abstract, :value=>@record.abstract.first, :required=>true %>
10
+ <%= f.label :author, "Author" %>
11
+ <%= f.text_area :author, :value=>@record.author, :required => true %>
13
12
  </div>
14
13
 
14
+ <h2>Abstract</h2>
15
+
15
16
  <div class="row">
16
- <%= label_tag("hydrus_item_keywords", "Keywords") %>
17
- <%= text_field_tag("hydrus_item_keywords", @record.descMetadata.subject.topic.join(", ")) -%>
18
- <div class="help">separate keywords with commas</div>
17
+ <%= f.label :abstract %>
18
+ <%= f.text_area :abstract, :value=>@record.abstract, :required=>true %>
19
19
  </div>
20
20
 
21
- <h2>Citations</h2>
21
+ <h2>Citation and related URL</h2>
22
+
22
23
  <div class="row">
23
24
  <%= f.label :preferred_citation, "Preferred citation for this object", :class => "hidden-tablet" %>
24
25
  <%= f.text_area :preferred_citation, :value=>@record.preferred_citation %>
25
26
  </div>
26
27
 
28
+ <div class="row">
29
+ <%= f.label :related_url, "URL of related item", :class => "hidden-tablet" %>
30
+ <%= f.text_area :related_url, :value=>@record.related_url %>
31
+ </div>
32
+
27
33
  <input type="submit" class="btn btn-small save-edits" name="save" id="save" />
28
34
 
29
35
  <% end %>
@@ -1,13 +1,12 @@
1
1
  class Record < ActiveFedora::Base
2
2
 
3
- has_metadata :name => "descMetadata", :type => ModsDescMetadata
4
-
5
- delegate :title, :to=>'descMetadata', :at => [:mods, :titleInfo, :title], :unique=>true
6
- delegate :abstract, :to => "descMetadata"
7
- delegate :preferred_citation, :to => "descMetadata", :unique=>true
8
- delegate :author, :to=>'descMetadata', :at => [:name, :namePart], :unique=>true
9
- delegate :url, :to=>'descMetadata', :at => [:relatedItem, :location, :url], :unique=>true
10
- delegate :description, :to=>'descMetadata', :at => [:abstract], :unique=>true
3
+ has_metadata :name => 'descMetadata', :type => ModsDescMetadata
4
+
5
+ delegate :title, :to => 'descMetadata', :unique=>true, :at => [:mods, :titleInfo, :title]
6
+ delegate :author, :to => 'descMetadata', :unique=>true, :at => [:name, :namePart]
7
+ delegate :abstract, :to => 'descMetadata', :unique=>true
8
+ delegate :preferred_citation, :to => 'descMetadata', :unique=>true
9
+ delegate :related_url, :to => 'descMetadata', :unique=>true, :at => [:relatedItem, :location, :url]
11
10
 
12
11
  end
13
12
 
@@ -0,0 +1,24 @@
1
+ <h1>Listing records</h1>
2
+
3
+ <table>
4
+ <tr>
5
+ <th>Actions</th>
6
+ <th>Title</th>
7
+ </tr>
8
+
9
+ <% @records.each do |record| %>
10
+ <tr>
11
+ <td>
12
+ <%= link_to 'Show', record %> |
13
+ <%= link_to 'Edit', edit_record_path(record) %> |
14
+ <%= link_to 'Delete', record, method: :delete, data: { confirm: 'Are you sure?' } %>
15
+ </td>
16
+ <td><%= record.title %></td>
17
+ </tr>
18
+
19
+ <% end %>
20
+ </table>
21
+
22
+ <br />
23
+
24
+ <%= link_to 'New Record', new_record_path %>
@@ -29,7 +29,7 @@ module HydraTutorialHelpers
29
29
  def rails_console
30
30
  return if @@conf.quick
31
31
  say %Q{
32
- We'll launch the console again. Give some of those commands a try.\n}, STATEMENT
32
+ We'll launch the console again.\n}, STATEMENT
33
33
  say %Q{
34
34
  Hit Ctrl-D (^D) to stop the Rails console and continue this tutorial.\n}, WAIT
35
35
  run "rails c"
@@ -132,6 +132,7 @@ class HydraTutorial < Thor
132
132
  HTConf = Struct.new(
133
133
  # Command-line options.
134
134
  :run_all, # If true, run all remaining tasks rather than only the next task.
135
+ :thru, # Implies :run_all and stores name of last task to be run.
135
136
  :quick, # If true, bypass interactive user confirmations.
136
137
  :reset, # If true, reset the tutorial back to the beginning.
137
138
  :gems_from_git, # If true, get a couple of gems directly from github.
@@ -150,6 +151,7 @@ class HydraTutorial < Thor
150
151
  desc('main: FIX', 'FIX')
151
152
  method_options(
152
153
  :run_all => :boolean,
154
+ :thru => :string,
153
155
  :quick => :boolean,
154
156
  :reset => :boolean,
155
157
  :gems_from_git => :boolean,
@@ -190,6 +192,9 @@ class HydraTutorial < Thor
190
192
  # Persist the fact that the task was run to the YAML progress file.
191
193
  @@conf.done << t
192
194
  File.open(@@conf.progress_file, "w") { |f| f.puts(@@conf.to_yaml) }
195
+
196
+ # Exit loop if we just ran the task user supplied with --thru option.
197
+ break if t == @@conf.thru
193
198
  end
194
199
 
195
200
  # Inform user if the tutorial is finished.
@@ -206,6 +211,7 @@ class HydraTutorial < Thor
206
211
  def self.initialize_config(opts)
207
212
  @@conf = HTConf.new
208
213
  @@conf.run_all = opts[:run_all]
214
+ @@conf.thru = opts[:thru]
209
215
  @@conf.quick = opts[:quick]
210
216
  @@conf.reset = opts[:reset]
211
217
  @@conf.gems_from_git = opts[:gems_from_git]
@@ -216,6 +222,7 @@ class HydraTutorial < Thor
216
222
  @@conf.progress_file = (opts[:progress_file] || '.hydra-tutorial-progress')
217
223
  @@conf.done = nil
218
224
  @@conf.templates_path = File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
225
+ @@conf.run_all = true if @@conf.thru
219
226
  end
220
227
 
221
228
  # Initializes the YAML progress file that keeps track of which
@@ -270,21 +277,16 @@ class HydraTutorial < Thor
270
277
  def welcome
271
278
  say %Q{
272
279
  Welcome to this Hydra tutorial. We're going to step through building a
273
- working Hydra application. We'll build the application gradually, starting
274
- by building our "business logic", wiring in HTML views, and then
275
- connecting it to our Rails application.
280
+ working Hydra application. We'll build the application gradually, starting by
281
+ building our "business logic", wiring in HTML views, and then connecting it
282
+ to our Rails application.
276
283
 
277
- At several points in this tutorial, as we iteratively develop our files,
278
- you may be prompted to review conflicts between versions of files. It is
279
- safe to blindly accept the changes ('y'), however you may wish to view
280
- the diff ('d') to see the things we're change.
284
+ We'll generate a stub application in the #{@@conf.app} folder. You can change
285
+ that using the --app option.
281
286
 
282
287
  This tutorial, a README file, and our bug tracker are at:
283
288
 
284
- https://github.com/projecthydra/hydra-tutorial
285
-
286
- We'll generate a stub application in the #{@@conf.app}
287
- folder. You can change that using the --app option.\n}, STATEMENT
289
+ https://github.com/projecthydra/hydra-tutorial\n}, STATEMENT
288
290
  end
289
291
 
290
292
  desc('install_ruby: FIX', 'FIX')
@@ -337,8 +339,8 @@ class HydraTutorial < Thor
337
339
 
338
340
  if File.exists? @@conf.app
339
341
  say %Q{
340
- #{@@conf.app} already exists. Either remove it or provide
341
- a different application name using the --app option.}, WARNING
342
+ #{@@conf.app} already exists. Either remove it or provide
343
+ a different application name using the --app option.}, WARNING
342
344
  exit
343
345
  end
344
346
 
@@ -382,8 +384,12 @@ class HydraTutorial < Thor
382
384
 
383
385
  desc('adding_dependencies: FIX', 'FIX')
384
386
  def adding_dependencies
385
- gem 'execjs'
386
- gem 'therubyracer'
387
+ say %Q{
388
+ Now we'll add some Javascript dependencies.\n}, STATEMENT
389
+ gem_group :assets do
390
+ gem 'execjs'
391
+ gem 'therubyracer'
392
+ end
387
393
  run_git('Added gems for Javascript: execjs and therubyracer')
388
394
  end
389
395
 
@@ -417,19 +423,24 @@ class HydraTutorial < Thor
417
423
  copy_file 'fedora.yml', 'config/fedora.yml'
418
424
 
419
425
  say %Q{
420
- Add the 'jettywrapper' gem, which adds Rake tasks to start and stop Jetty.\n}, STATEMENT
426
+ And we will add the 'jettywrapper' gem, which adds Rake tasks to start
427
+ and stop Jetty.\n}, STATEMENT
421
428
 
422
- gem 'jettywrapper'
429
+ gem_group :development, :test do
430
+ gem 'jettywrapper'
431
+ end
423
432
  run 'bundle install', :capture => false
424
433
  run_git('Solr and Fedora configuration')
434
+ end
425
435
 
436
+ desc('starting_jetty: FIX', 'FIX')
437
+ def starting_jetty
426
438
  say %Q{
427
- Starting Jetty\n}, STATEMENT
439
+ Now we'll start Jetty.\n}, STATEMENT
428
440
  rake 'jetty:start'
429
441
 
430
442
  say %Q{
431
- Take a look around. Jetty should be running on port 8983. You can see
432
- the Fedora server at:
443
+ Jetty should be running on port 8983. You can see the Fedora server at:
433
444
 
434
445
  http://localhost:8983/fedora/
435
446
 
@@ -442,6 +453,8 @@ class HydraTutorial < Thor
442
453
 
443
454
  desc('remove_public_index: FIX', 'FIX')
444
455
  def remove_public_index
456
+ say %Q{
457
+ Removing the default home page from Rails. We will replace it later.\n}, STATEMENT
445
458
  remove_file 'public/index.html'
446
459
  run_git('Removed the Rails index.html file')
447
460
  end
@@ -478,28 +491,37 @@ class HydraTutorial < Thor
478
491
  launch the Rails interactive console (`rails c`), we can create
479
492
  and manipulate our object:
480
493
 
481
- ## CREATE
482
- > obj = Record.new
483
- # => #<Record:1571331701243443635 @pid="__DO_NOT_USE__" >
484
- > obj.descMetadata.content = e.g. '<my_xml_content />'
485
- > obj.save
494
+ # CREATE
495
+ > obj = Record.new
496
+ > xml = '<xyz><foo>ABC</foo><foo>DEF</foo><bar>123</bar></xyz>'
497
+ > obj.descMetadata.content = xml
498
+ > obj.save
499
+
500
+ > pid = obj.pid
501
+
502
+ # RETRIEVE
503
+ > obj = Record.find(pid)
504
+ > ds = obj.descMetadata
505
+ > puts ds.content
486
506
 
487
- > obj.pid
488
- # => e.g. 'changeme:1'
507
+ # UPDATE
508
+ > doc = ds.ng_xml
509
+ > elements = doc.xpath '//foo'
510
+ > elements.each { |e| puts e }
489
511
 
490
- ## RETRIEVE
491
- > obj = Record.find('changeme:1')
492
- > ds = obj.descMetadata
493
- # => #<ActiveFedora::NokogiriDatastream:3283711306477137919 ...>
494
- > ds.content
495
- # => (should be the XML document you added before)
512
+ # Now check the Fedora object in the browser.
513
+ # -> open http://localhost:8983/fedora/objects
514
+ # -> click search
515
+ # -> click the hyperlink of the object's PID (eg, 'changeme:1')
516
+ # -> click hyperlink to view the object's datastreams list
517
+ # -> click hyperlink to view the content of the descMetadata datastream
496
518
 
497
- ## UPDATE
498
- # manipulating XML:
499
- > ds.ng_xml.xpath('//my_xml_content')
519
+ # Back in the Rails console.
520
+
521
+ # DELETE
522
+ > obj.delete
523
+ > exit\n}, STATEMENT
500
524
 
501
- ## DELETE
502
- > obj.delete\n}, STATEMENT
503
525
  rails_console
504
526
  end
505
527
 
@@ -518,34 +540,52 @@ class HydraTutorial < Thor
518
540
  desc('experiment_with_om_descmd: FIX', 'FIX')
519
541
  def experiment_with_om_descmd
520
542
  say %Q{
521
- If you launch the Rails interactive console, we can now create and
543
+ If we launch the Rails interactive console, you can now create and
522
544
  manipulate our object using methods provided by OM.
523
545
 
524
546
  > obj = Record.new
525
547
  > obj.descMetadata.title = "My object title"
526
548
  > obj.save
527
- > obj.descMetadata.content
528
- # => An XML document with the title "My object title"\n}, STATEMENT
549
+
550
+ Notice also that OM also makes it easy to instantiate an empty version
551
+ of a datastream. This behavior is controlled by the code in the
552
+ xml_template() method of our Record model. Having set a value for
553
+ the title and saved the object, you can now take a look at the entire
554
+ datastream spawned by OM according to the instructions in the
555
+ xml_template() method:
556
+
557
+ > puts obj.descMetadata.content
558
+
559
+ > obj.delete
560
+ > exit\n}, STATEMENT
529
561
  rails_console
530
562
  end
531
563
 
532
564
  desc('use_the_delegate_method: FIX', 'FIX')
533
565
  def use_the_delegate_method
534
566
  say %Q{
535
- We can use the #delegate method to tell the model-object how
536
- to access these attributes.
567
+ We can use the delegate() method to tell the model object how
568
+ to access its descMetadata attributes.\n\n}, STATEMENT
569
+
570
+ loc = %Q{\nend\n}
571
+ insert_into_file "app/models/record.rb", :before => loc do
572
+ "\n delegate :title, :to => 'descMetadata'"
573
+ end
574
+ run_git('Modify Record model to delegate title to descMetadata')
575
+
576
+ say %Q{
577
+ Back in the Rails console you can now access the title attribute directly
578
+ from the object:
537
579
 
538
580
  > obj = Record.new
539
581
  > obj.title = "My object title"
540
582
  > obj.save
541
- > obj.descMetadata.content
542
- # => An XML document with the title "My object title"\n\n}, STATEMENT
583
+ > puts obj.descMetadata.content
584
+ > puts obj.title.inspect
585
+ > obj.delete
586
+ > exit\n}, STATEMENT
543
587
 
544
- loc = 'has_metadata :name => "descMetadata", :type => DatastreamMetadata\n'
545
- insert_into_file "app/models/record.rb", :after => loc do
546
- "delegate :title, :to => 'descMetadata'\n"
547
- end
548
- run_git('Modify Record model to delegate title to descMetadata')
588
+ rails_console
549
589
  end
550
590
 
551
591
  desc('add_mods_model_with_mods_descmd: FIX', 'FIX')
@@ -573,8 +613,8 @@ class HydraTutorial < Thor
573
613
  > obj = Record.new
574
614
  > obj.title = "My object title"
575
615
  > obj.save
576
- > obj.descMetadata.content
577
- # => A MODS XML document\n}, STATEMENT
616
+ > puts obj.descMetadata.content
617
+ > exit\n}, STATEMENT
578
618
  rails_console
579
619
  end
580
620
 
@@ -593,11 +633,12 @@ class HydraTutorial < Thor
593
633
  run_git('Used Rails generator to create controller and views for the Record model')
594
634
 
595
635
  say %Q{
596
- If you look in ./app/views/records, you can see a set of
597
- Rails ERB templates.
636
+ You can see a set of Rails ERB templates, along with a controller that
637
+ ties the Record model to those view, if you look in the following
638
+ directories of the application:
598
639
 
599
- ./app/controlers/records_controller.rb contains the controller
600
- that ties the model to the views.\n}, STATEMENT
640
+ app/controlers/records_controller.rb
641
+ app/views/records/\n}, STATEMENT
601
642
 
602
643
  continue_prompt
603
644
  end
@@ -605,11 +646,12 @@ class HydraTutorial < Thor
605
646
  desc('add_new_form: FIX', 'FIX')
606
647
  def add_new_form
607
648
  say %Q{
608
- The scaffold just provided the basic outline for an application, so
609
- we need to provide the guts for the web form. Here's a simple one:\n\n}, STATEMENT
649
+ The scaffold provided only the basic outline for an application, so
650
+ we need to provide the guts for the web form.\n\n}, STATEMENT
610
651
  files = [
611
652
  ["_form.wiring_it_into_rails.html.erb", "app/views/records/_form.html.erb"],
612
653
  ["show.html.erb", "app/views/records/show.html.erb"],
654
+ ["index.html.erb", "app/views/records/index.html.erb"],
613
655
  ]
614
656
  files.each do |src, dst|
615
657
  remove_file dst
@@ -636,7 +678,7 @@ class HydraTutorial < Thor
636
678
  patterns that have emerged in the Hydra community, including search,
637
679
  gated discovery, etc.
638
680
 
639
- We'll add a few new gems:
681
+ We'll add a few gems:
640
682
 
641
683
  - blacklight provides a discovery interface on top of the Solr index
642
684
 
@@ -684,7 +726,7 @@ class HydraTutorial < Thor
684
726
  desc('hydra_jetty_config: FIX', 'FIX')
685
727
  def hydra_jetty_config
686
728
  say %Q{
687
- Hydra provides some configuration for Solr and Fedora. Use them.\n}, STATEMENT
729
+ Hydra provides some configuration for Solr and Fedora. We will use them.\n}, STATEMENT
688
730
  rake 'jetty:stop'
689
731
  rake 'hydra:jetty:config'
690
732
  rake 'jetty:start'
@@ -735,11 +777,19 @@ include Hydra::Solr::Document
735
777
  def check_catalog
736
778
  say %Q{
737
779
  Blacklight and Hydra-Head have added some new functionality to the
738
- application. We can now look at a search interface (provided
739
- by Blacklight) and use gated discovery over our repository. By default,
740
- objects are only visible to their creator.
780
+ application. We can now look at a search interface (provided by Blacklight)
781
+ and use gated discovery over our repository. By default, objects are only
782
+ visible to their creator.
741
783
 
742
- Create some new objects, and then check out the search catalog at:
784
+ First create a new user account:
785
+
786
+ http://localhost:3000/users/sign_up
787
+
788
+ Then create some Record objects:
789
+
790
+ http://localhost:3000/records/new
791
+
792
+ And then check the search catalog:
743
793
 
744
794
  http://localhost:3000/catalog\n}, STATEMENT
745
795
 
@@ -767,12 +817,12 @@ include Hydra::Solr::Document
767
817
  end
768
818
 
769
819
  # TODO: write the test.
770
- desc('write_model_test: FIX', 'FIX')
771
- def write_model_test
772
- # copy_file 'record_test.rb', 'spec/models/record_test.rb'
773
- # run_git('Added a model test')
774
- run 'rspec'
775
- end
820
+ # desc('write_model_test: FIX', 'FIX')
821
+ # def write_model_test
822
+ # # copy_file 'record_test.rb', 'spec/models/record_test.rb'
823
+ # # run_git('Added a model test')
824
+ # run 'rspec'
825
+ # end
776
826
 
777
827
  # TODO: this test should do something.
778
828
  desc('write_controller_test: FIX', 'FIX')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hydra-tutorial
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-10-19 00:00:00.000000000 Z
13
+ date: 2012-10-23 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: thor
@@ -70,6 +70,7 @@ extra_rdoc_files: []
70
70
  files:
71
71
  - .gitignore
72
72
  - Gemfile
73
+ - HISTORY.md
73
74
  - README.md
74
75
  - Rakefile
75
76
  - bin/hydra-tutorial
@@ -94,6 +95,7 @@ files:
94
95
  - templates/ci.rake
95
96
  - templates/ci_with_coverage.rake
96
97
  - templates/fedora.yml
98
+ - templates/index.html.erb
97
99
  - templates/integration_spec.rb
98
100
  - templates/mods_desc_metadata.rb
99
101
  - templates/records_controller.rb
@@ -115,7 +117,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
115
117
  version: '0'
116
118
  segments:
117
119
  - 0
118
- hash: 1291579110055489875
120
+ hash: -2393405687621414256
119
121
  required_rubygems_version: !ruby/object:Gem::Requirement
120
122
  none: false
121
123
  requirements:
@@ -124,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
126
  version: '0'
125
127
  segments:
126
128
  - 0
127
- hash: 1291579110055489875
129
+ hash: -2393405687621414256
128
130
  requirements: []
129
131
  rubyforge_project:
130
132
  rubygems_version: 1.8.24