hydra-tutorial 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. data/.gitignore +2 -0
  2. data/README.md +92 -22
  3. data/bin/hydra-tutorial +4 -2
  4. data/development_notes.txt +476 -0
  5. data/hydra-tutorial.gemspec +9 -11
  6. data/{templates → old_tutorial/templates}/application/dataset_hydra_mods_om.rb +0 -0
  7. data/{templates → old_tutorial/templates}/application/dataset_hydra_om.rb +0 -0
  8. data/{templates → old_tutorial/templates}/application/datasets_controller.rb +0 -0
  9. data/{or_templates/adding_our_models → old_tutorial/templates/application}/mods_desc_metadata.rb +0 -0
  10. data/{templates → old_tutorial/templates}/building_a_basic_rails_app/dataset_af_om.rb +0 -0
  11. data/{templates → old_tutorial/templates}/building_a_basic_rails_app/dataset_simple_om.rb +0 -0
  12. data/{or_templates → old_tutorial/templates}/building_a_basic_rails_app/fedora.yml +0 -0
  13. data/{templates → old_tutorial/templates}/building_a_basic_rails_app/om_record.rb +0 -0
  14. data/{or_templates → old_tutorial/templates}/building_a_basic_rails_app/solr.yml +0 -0
  15. data/old_tutorial/tutorial.thor +493 -0
  16. data/{or_templates/sprinkle_some_styling → templates}/_add_assets_links.html.erb +0 -0
  17. data/{or_templates/add_file_upload/_form.html.erb → templates/_form.add_file_upload.html.erb} +0 -0
  18. data/{or_templates/wiring_it_into_rails/_form.html.erb → templates/_form.wiring_it_into_rails.html.erb} +0 -0
  19. data/{or_templates/adding_our_models → templates}/basic_af_model.rb +0 -0
  20. data/{or_templates/adding_our_models → templates}/basic_mods_model.rb +0 -0
  21. data/{or_templates/adding_our_models → templates}/basic_om_model.rb +0 -0
  22. data/{or_templates/add_tests → templates}/ci.rake +0 -0
  23. data/{or_templates/add_tests → templates}/ci_with_coverage.rake +0 -0
  24. data/templates/{building_a_basic_rails_app/fedora.yml → fedora.yml} +0 -0
  25. data/{or_templates/add_tests → templates}/integration_spec.rb +0 -0
  26. data/templates/{application/mods_desc_metadata.rb → mods_desc_metadata.rb} +0 -0
  27. data/{or_templates → templates}/records_controller.rb +0 -0
  28. data/{or_templates/add_tests → templates}/records_controller_spec.rb +0 -0
  29. data/{or_templates/wiring_it_into_rails → templates}/show.html.erb +0 -0
  30. data/templates/{building_a_basic_rails_app/solr.yml → solr.yml} +0 -0
  31. data/tutorial.thor +806 -341
  32. metadata +32 -30
  33. data/open-repositories-tutorial.thor +0 -888
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hydra-tutorial
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Chris Beer
9
+ - Monty Hindman
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2012-08-07 00:00:00.000000000 Z
13
+ date: 2012-10-19 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: thor
@@ -72,32 +73,33 @@ files:
72
73
  - README.md
73
74
  - Rakefile
74
75
  - bin/hydra-tutorial
76
+ - development_notes.txt
75
77
  - hydra-tutorial.gemspec
76
- - open-repositories-tutorial.thor
77
- - or_templates/add_file_upload/_form.html.erb
78
- - or_templates/add_tests/ci.rake
79
- - or_templates/add_tests/ci_with_coverage.rake
80
- - or_templates/add_tests/integration_spec.rb
81
- - or_templates/add_tests/records_controller_spec.rb
82
- - or_templates/adding_our_models/basic_af_model.rb
83
- - or_templates/adding_our_models/basic_mods_model.rb
84
- - or_templates/adding_our_models/basic_om_model.rb
85
- - or_templates/adding_our_models/mods_desc_metadata.rb
86
- - or_templates/building_a_basic_rails_app/fedora.yml
87
- - or_templates/building_a_basic_rails_app/solr.yml
88
- - or_templates/records_controller.rb
89
- - or_templates/sprinkle_some_styling/_add_assets_links.html.erb
90
- - or_templates/wiring_it_into_rails/_form.html.erb
91
- - or_templates/wiring_it_into_rails/show.html.erb
92
- - templates/application/dataset_hydra_mods_om.rb
93
- - templates/application/dataset_hydra_om.rb
94
- - templates/application/datasets_controller.rb
95
- - templates/application/mods_desc_metadata.rb
96
- - templates/building_a_basic_rails_app/dataset_af_om.rb
97
- - templates/building_a_basic_rails_app/dataset_simple_om.rb
98
- - templates/building_a_basic_rails_app/fedora.yml
99
- - templates/building_a_basic_rails_app/om_record.rb
100
- - templates/building_a_basic_rails_app/solr.yml
78
+ - old_tutorial/templates/application/dataset_hydra_mods_om.rb
79
+ - old_tutorial/templates/application/dataset_hydra_om.rb
80
+ - old_tutorial/templates/application/datasets_controller.rb
81
+ - old_tutorial/templates/application/mods_desc_metadata.rb
82
+ - old_tutorial/templates/building_a_basic_rails_app/dataset_af_om.rb
83
+ - old_tutorial/templates/building_a_basic_rails_app/dataset_simple_om.rb
84
+ - old_tutorial/templates/building_a_basic_rails_app/fedora.yml
85
+ - old_tutorial/templates/building_a_basic_rails_app/om_record.rb
86
+ - old_tutorial/templates/building_a_basic_rails_app/solr.yml
87
+ - old_tutorial/tutorial.thor
88
+ - templates/_add_assets_links.html.erb
89
+ - templates/_form.add_file_upload.html.erb
90
+ - templates/_form.wiring_it_into_rails.html.erb
91
+ - templates/basic_af_model.rb
92
+ - templates/basic_mods_model.rb
93
+ - templates/basic_om_model.rb
94
+ - templates/ci.rake
95
+ - templates/ci_with_coverage.rake
96
+ - templates/fedora.yml
97
+ - templates/integration_spec.rb
98
+ - templates/mods_desc_metadata.rb
99
+ - templates/records_controller.rb
100
+ - templates/records_controller_spec.rb
101
+ - templates/show.html.erb
102
+ - templates/solr.yml
101
103
  - tutorial.thor
102
104
  homepage: http://projecthydra.org
103
105
  licenses: []
@@ -113,7 +115,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
113
115
  version: '0'
114
116
  segments:
115
117
  - 0
116
- hash: -4225154311551487159
118
+ hash: 1291579110055489875
117
119
  required_rubygems_version: !ruby/object:Gem::Requirement
118
120
  none: false
119
121
  requirements:
@@ -122,10 +124,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
124
  version: '0'
123
125
  segments:
124
126
  - 0
125
- hash: -4225154311551487159
127
+ hash: 1291579110055489875
126
128
  requirements: []
127
129
  rubyforge_project:
128
- rubygems_version: 1.8.23
130
+ rubygems_version: 1.8.24
129
131
  signing_key:
130
132
  specification_version: 3
131
133
  summary: Hydra head tutorial walkthrough
@@ -1,888 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'rubygems'
4
- require 'thor'
5
- require 'thor/group'
6
- require 'rails/generators/actions'
7
- require 'active_support/core_ext/array/extract_options'
8
- require 'active_support/core_ext/string/inflections'
9
-
10
- $base_templates_path = File.expand_path(File.join(File.dirname(__FILE__), 'or_templates'))
11
- $application_name = ''
12
- $application_root = ''
13
-
14
- STATEMENT = Thor::Shell::Color::YELLOW
15
- QUESTION = Thor::Shell::Color::GREEN
16
- WAIT = Thor::Shell::Color::CYAN
17
-
18
- class HydraOpenRepositoriesTutorialApp < Thor::Group
19
- include Thor::Actions
20
- include Rails::Generators::Actions
21
-
22
- module TutorialActions
23
- def continue_prompt
24
- ask %Q{
25
- HIT <ENTER> KEY TO CONTINUE
26
- }, WAIT
27
- end
28
-
29
- def rails_console
30
- say %Q{
31
- We'll launch the console again. Give some of those commands a try.
32
- }, STATEMENT
33
-
34
- say %Q{
35
-
36
- Hit Ctrl-D (^D) to stop the Rails console and continue this tutorial.
37
- }, WAIT
38
-
39
- run "rails c"
40
- end
41
-
42
- def rails_server url = '/'
43
- say %Q{
44
- We'll start the Rails server for you. It should be available in
45
- your browser at:
46
-
47
- http://localhost:3000#{url}
48
- }, STATEMENT
49
-
50
- say %Q{
51
-
52
- Hit Ctrl-C (^C) to stop the Rails server and continue this tutorial.
53
- }, WAIT
54
-
55
- run "rails s"
56
- end
57
- end
58
-
59
- include TutorialActions
60
- class_option :quick, :default => false
61
- class_option :git, :default => false
62
-
63
- def setup_parameters
64
- $quick = options[:quick]
65
- $git = options[:git]
66
- end
67
-
68
- def welcome
69
- say %Q{
70
- Welcome to this Hydra tutorial. We're going to step through building a
71
- working Hydra application. We'll build the application gradually, starting
72
- by building our "business logic", wiring in HTML views, and then
73
- connecting it to our Rails application.
74
-
75
- At several points in this tutorial, as we iteratively develop our files,
76
- you may be prompted to review conflicts between versions of files. It is
77
- safe to blindly accept the changes ('y'), however you may wish to view
78
- the diff ('d') to see the things we're change.
79
-
80
- This tutorial, a README file, and our bug tracker are at:
81
-
82
- https://github.com/projecthydra/hydra-tutorial
83
-
84
- }, STATEMENT
85
-
86
- name = ask %Q{
87
- What do you want to call your application?
88
- }, QUESTION unless $quick
89
-
90
- name = name.to_s.strip
91
- name = 'hydra_tutorial_app' if name.empty?
92
-
93
-
94
- $application_name = name
95
-
96
- dir = $application_name.parameterize('_')
97
- $application_root = dir
98
-
99
- if File.exists? $application_root
100
- say %Q{
101
- #{$application_root} already exists. Either remove it or provide
102
- a different application name.
103
- }, Thor::Shell::Color::RED
104
- exit
105
- end
106
-
107
- say %Q{
108
- We'll generate a stub application #{$application_name} into the folder
109
- #{$application_root}. But, first, lets check your Ruby environment.
110
- }, STATEMENT
111
-
112
- end
113
-
114
- def prerequisites
115
- Prerequisites.start
116
- end
117
-
118
- def building_a_basic_rails_app
119
- inside $application_root do
120
- BuildingABasicRailsApp.start
121
- end
122
- end
123
-
124
- def adding_our_models
125
- inside $application_root do
126
- AddingOurModels.start
127
- end
128
- end
129
-
130
- def wiring_it_into_rails
131
- inside $application_root do
132
- WiringItIntoRails.start
133
- end
134
- end
135
-
136
- def add_blacklight_and_hydra
137
- inside $application_root do
138
- AddBlacklightAndHydra.start
139
- end
140
- end
141
-
142
- def fixup_for_hydra
143
- inside $application_root do
144
- FixupForHydra.start
145
- end
146
- end
147
-
148
- def add_tests
149
- inside $application_root do
150
- AddTests.start
151
- end
152
- end
153
-
154
- def add_file_upload
155
- inside $application_root do
156
- AddFileUpload.start
157
- end
158
- end
159
-
160
- def sprinkle_some_styling
161
- inside $application_root do
162
- SprinkeSomeStyling.start
163
- end
164
- end
165
-
166
- def cleanup
167
- inside $application_root do
168
- Cleanup.start
169
- end
170
- end
171
-
172
- class Cleanup < Thor::Group
173
-
174
- include Thor::Actions
175
- include Rails::Generators::Actions
176
- include TutorialActions
177
-
178
- def start_everything
179
- say %Q{
180
- This is the end of the tutorial. We'll give you a final chance to look
181
- at the web application.
182
- }, STATEMENT
183
- rake 'jetty:stop'
184
- rake 'jetty:start'
185
- rails_server
186
- end
187
-
188
- def stop_jetty
189
- rake 'jetty:stop'
190
- end
191
- end
192
-
193
- class Prerequisites < Thor::Group
194
- include Thor::Actions
195
- include Rails::Generators::Actions
196
- include TutorialActions
197
-
198
- def install_ruby
199
- return if $quick
200
- say %Q{
201
- Obviously, if you can run this tutorial, you have already installed ruby.
202
- }, STATEMENT
203
-
204
-
205
- ruby_executable = run 'which ruby', :capture => true
206
-
207
- say %Q{
208
- You are running this using:
209
- #{ruby_executable}
210
- }, STATEMENT
211
-
212
- if ruby_executable =~ /rvm/ or ruby_executable =~ /rbenv/ or ruby_executable =~ /home/ or ruby_executable =~ /Users/
213
- say %Q{
214
- It looks like you're using rvm/rbenv/etc. (with a gemset?) We'll use
215
- this environment to build the application.
216
- }, STATEMENT
217
-
218
- else
219
-
220
- say %Q{
221
- We checked, and it looks like you might be using a system-wide ruby.
222
- We suggest you use somethng like rvm [1], rbenv [2], etc to manage
223
- your ruby projects.
224
-
225
- You can continue and hope for the best, or go install one of these
226
- ruby managers, which may make your life easier.
227
-
228
- [1] http://rvm.io/
229
- [2] https://github.com/sstephenson/rbenv/
230
- }, Thor::Shell::Color::RED
231
-
232
- continue_prompt unless $quick
233
-
234
- end
235
-
236
- end
237
-
238
- def install_bundler_and_rails
239
- say %Q{
240
- We're going to install some prerequisite gems in order to create our
241
- skeleton Rails application.
242
- }, STATEMENT
243
- run 'gem install bundler rails'
244
- end
245
-
246
- def new_rails_app
247
- say %Q{
248
- Now we'll create the application.
249
- }, Thor::Shell::Color::YELLOW
250
- run "rails new #{$application_root}"
251
- run "cd #{$application_root}"
252
- end
253
-
254
- def out_of_the_box
255
- return if $quick
256
- say %Q{
257
- Here's a chance to look around. You can see the structure of
258
- a Rails application. In particular, look at:
259
- ./app
260
- ./config
261
- ./lib
262
- Gemfile
263
- }, STATEMENT
264
-
265
-
266
- say %Q{
267
- If we launched the Rails application server, we can see the application
268
- running in the browser and you can see if everything is working.
269
- }, STATEMENT
270
-
271
-
272
- inside $application_root do
273
- rails_server unless $quick
274
- end
275
- end
276
- end
277
-
278
- class BuildingABasicRailsApp < Thor::Group
279
- include Thor::Actions
280
- include Rails::Generators::Actions
281
- include TutorialActions
282
-
283
- def self.source_paths
284
- [File.join($base_templates_path, "building_a_basic_rails_app")]
285
- end
286
-
287
-
288
- def adding_dependencies
289
- gem 'execjs'
290
- gem 'therubyracer'
291
- end
292
-
293
- def add_fedora_and_solr_with_hydrajetty
294
-
295
- say %Q{
296
- Fedora runs as a Java servlet inside a container like Tomcat or Jetty.
297
- Hydra provides a bundled version of Fedora and Solr for
298
- testing and development.
299
- }, STATEMENT
300
-
301
- say %Q{
302
- We'll download a copy now. It may take awhile.
303
- }, STATEMENT
304
- unless File.exists? '../jetty'
305
- git :clone => '-b 4.x git://github.com/projecthydra/hydra-jetty.git ../jetty'
306
- end
307
- run 'cp -R ../jetty jetty'
308
-
309
- end
310
-
311
- def jetty_configuration
312
- say %Q{
313
- We'll add some configuration yml files with information to connect
314
- to Solr and Fedora.
315
- }, STATEMENT
316
-
317
- copy_file 'solr.yml', 'config/solr.yml'
318
- copy_file 'fedora.yml', 'config/fedora.yml'
319
-
320
- say %Q{
321
- Add the 'jettywrapper' gem, which adds Rake tasks for start and stop Jetty.
322
- }, STATEMENT
323
-
324
- gem 'jettywrapper'
325
- run 'bundle install'
326
-
327
- say %Q{
328
- Starting Jetty
329
- }, STATEMENT
330
- rake 'jetty:start'
331
-
332
- say %Q{
333
- Take a look around. Jetty should be running on port 8983. You can see
334
- the Fedora server at:
335
-
336
- http://localhost:8983/fedora/
337
-
338
- And a Solr index at:
339
-
340
- http://localhost:8983/solr/development/admin/
341
- }, STATEMENT
342
-
343
- continue_prompt unless $quick
344
-
345
- end
346
-
347
- # and then clean up some cruft
348
- def remove_public_index
349
- remove_file 'public/index.html'
350
- end
351
-
352
- end
353
-
354
- class AddingOurModels < Thor::Group
355
- include Thor::Actions
356
- include Rails::Generators::Actions
357
- include TutorialActions
358
-
359
- def self.source_paths
360
- [File.join($base_templates_path, "adding_our_models")]
361
- end
362
-
363
- def add_activefedora
364
- say %Q{
365
- The active-fedora gem provides a way to model Fedora objects within Ruby.
366
- It will help you create Ruby models for creating, updating and reading
367
- objects from Fedora using a domain-specific language (DSL) similar
368
- to the Rails' ActiveRecord.
369
-
370
- The om gem provides mechanisms for mapping XML documents into Ruby.
371
-
372
- We'll add both of these to the Gemfile.
373
- }, STATEMENT
374
-
375
- gem 'active-fedora'
376
- gem 'om'
377
- run 'bundle install'
378
- end
379
-
380
- def add_initial_model
381
- say %Q{
382
- Now we'll add a basic ActiveFedora stub model for a 'Record'.
383
- }, STATEMENT
384
-
385
- copy_file "basic_af_model.rb", "app/models/record.rb"
386
-
387
- say %Q{
388
- It looks like this:
389
- }, STATEMENT
390
-
391
- print_wrapped File.read('app/models/record.rb')
392
- end
393
-
394
- def rails_console_tour
395
-
396
- say %Q{
397
- Now we'll give you a chance to look at the Record model. If you
398
- launch the Rails interactive console (`rails c`), we can create
399
- and manipulate our object:
400
-
401
- ## CREATE
402
- > obj = Record.new
403
- # => #<Record:1571331701243443635 @pid="__DO_NOT_USE__" >
404
- > obj.descMetadata.content = e.g. '<my_xml_content />'
405
- > obj.save
406
-
407
- > obj.pid
408
- # => e.g. 'changeme:1'
409
-
410
- ## RETRIEVE
411
- > obj = Record.find('changeme:1')
412
- > ds = obj.descMetadata
413
- # => #<ActiveFedora::NokogiriDatastream:3283711306477137919 ...>
414
- > ds.content
415
- # => (should be the XML document you added before)
416
-
417
- ## UPDATE
418
- # manipulating XML:
419
- > ds.ng_xml.xpath('//my_xml_content')
420
-
421
- ## DELETE
422
- > obj.delete
423
-
424
- }, STATEMENT
425
-
426
-
427
- rails_console unless $quick
428
- end
429
-
430
- def enhance_model_with_contrieved_descmd
431
- say %Q{
432
- Instead of working with the Nokogiri XML document directly, we
433
- can use OM to make querying an XML document easier. We'll replace the
434
- previous Record with a OM-enabled document.
435
- }, STATEMENT
436
- copy_file "basic_om_model.rb", "app/models/record.rb"
437
- end
438
-
439
- def testing_the_contrieved_descmd
440
- say %Q{
441
- If you launch the Rails interactive console, we can now create and
442
- manipulate our object using methods provided by OM.
443
-
444
- > obj = Record.new
445
- > obj.descMetadata.title = "My object title"
446
- > obj.save
447
- > obj.descMetadata.content
448
- # => An XML document with the title "My object title"
449
- }, STATEMENT
450
-
451
- rails_console unless $quick
452
- end
453
-
454
- def use_the_delegate_method
455
- say %Q{
456
- We can use the #delegate method to tell the model-object how
457
- to access these attributes.
458
-
459
- > obj = Record.new
460
- > obj.title = "My object title"
461
- > obj.save
462
- > obj.descMetadata.content
463
- # => An XML document with the title "My object title"
464
- }, STATEMENT
465
-
466
- insert_into_file "app/models/record.rb", :after => %Q{has_metadata :name => "descMetadata", :type => DatastreamMetadata\n} do
467
- "delegate :title, :to => 'descMetadata'\n"
468
- end
469
- end
470
-
471
- def add_mods_model_with_mods_descmd
472
- say %Q{
473
- We'll now replace the contrieved XML metadata schema with a simple
474
- MODS-based example, using an OM terminology we prepared earlier.
475
-
476
- We'll put the MODS datastream in a separate module and file, so that
477
- it can be easily reused in other ActiveFedora-based objects.
478
- }, STATEMENT
479
-
480
- copy_file "basic_mods_model.rb", "app/models/record.rb"
481
- copy_file "mods_desc_metadata.rb", "app/models/mods_desc_metadata.rb"
482
-
483
- say %Q{
484
- If you launch the Rails interactive console, we can now create
485
- and manipulate our object using methods provided by OM.
486
-
487
- > obj = Record.new
488
- > obj.title = "My object title"
489
- > obj.save
490
- > obj.descMetadata.content
491
- # => A MODS XML document
492
- }, STATEMENT
493
-
494
- rails_console unless $quick
495
- end
496
- end
497
-
498
- class WiringItIntoRails < Thor::Group
499
- include Thor::Actions
500
- include Rails::Generators::Actions
501
- include TutorialActions
502
-
503
- def self.source_paths
504
- [File.join($base_templates_path, "wiring_it_into_rails")]
505
- end
506
-
507
- def record_generator
508
- say %Q{
509
- Now that we've set up our model and successfully added content
510
- into Fedora, now we want to connect the model to a Rails web application.
511
-
512
- We'll start by using the standard Rails generators to create
513
- a scaffold controller and views, which will give us a
514
- place to start working.
515
- }, STATEMENT
516
-
517
- generate "scaffold_controller Record --no-helper --skip-test-framework"
518
- route "resources :records"
519
-
520
- say %Q{
521
- If you look in ./app/views/records, you can see a set of
522
- Rails ERB templates.
523
-
524
- ./app/controlers/records_controller.rb contains the controller
525
- that ties the model to the views.
526
- }, STATEMENT
527
-
528
- continue_prompt unless $quick
529
- end
530
-
531
- def add_new_form
532
-
533
- say %Q{
534
- The scaffold just provided the basic outline for an application, so
535
- we need to provide the guts for the web form. Here's a simple one:
536
- }, STATEMENT
537
-
538
- copy_file "_form.html.erb", "app/views/records/_form.html.erb"
539
- copy_file "show.html.erb", "app/views/records/show.html.erb"
540
- end
541
-
542
- def check_it_out
543
-
544
- say %Q{
545
- If we start the Rails server, we should now be able to visit the records
546
- in the browser, create new records, and edit existing records.
547
-
548
- Start by creating a new record:
549
- }, STATEMENT
550
-
551
- rails_server '/records/new' unless $quick
552
- end
553
-
554
- end
555
-
556
- class AddBlacklightAndHydra < Thor::Group
557
- include Thor::Actions
558
- include Rails::Generators::Actions
559
- include TutorialActions
560
-
561
- def add_gems
562
- say %Q{
563
- Thus far, we've been using component parts of the Hydra framework, but
564
- now we'll add in the whole framework so we can take advantage of common
565
- patterns that have emerged in the Hydra community, including search,
566
- gated discovery, etc.
567
-
568
- We'll add a few new gems:
569
-
570
- - blacklight provides a discovery interface on top of the Solr index
571
-
572
- - hydra-head provides a number of common Hydra patterns
573
-
574
- - devise is a standard Ruby gem for providing user-related
575
- functions, like registration, sign-in, etc.
576
-
577
- }, STATEMENT
578
-
579
- if $git
580
- gem 'blacklight', :git => "git://github.com/projectblacklight/blacklight.git"
581
- gem 'hydra-head', :git => "git://github.com/projecthydra/hydra-head.git"
582
- else
583
- gem 'blacklight'
584
- gem 'hydra-head', ">= 4.1.1"
585
- end
586
- gem 'devise'
587
-
588
- run 'bundle install'
589
- end
590
-
591
- def run_generators
592
-
593
- say %Q{
594
- These gems provide generators for adding basic views, styles, and override
595
- points into your application. We'll run these generators now.
596
- }, STATEMENT
597
- run 'rm config/solr.yml' # avoid meaningless conflict
598
- generate 'blacklight', '--devise'
599
- run 'rm config/solr.yml' # avoid meaningless conflict
600
- generate 'hydra:head', 'User'
601
- end
602
-
603
- def db_migrate
604
- say %Q{
605
- Blacklight uses a SQL database for keeping track of user bookmarks,
606
- searches, etc. We'll run the migrations next:
607
- }, STATEMENT
608
- rake 'db:migrate'
609
- rake 'db:test:prepare'
610
- end
611
-
612
- def hydra_jetty_conf
613
- say %Q{
614
- Hydra provides some configuration for Solr and Fedora. Use them.
615
- }, STATEMENT
616
- rake 'jetty:stop'
617
- rake 'hydra:jetty:config'
618
- rake 'jetty:start'
619
- end
620
- end
621
-
622
- class FixupForHydra < Thor::Group
623
- include Thor::Actions
624
- include Rails::Generators::Actions
625
- include TutorialActions
626
-
627
- def do_it
628
-
629
- say %Q{
630
- We need to make a couple changes to our controller and model to make
631
- them fully-compliant objects by teaching them about access rights.
632
- }, STATEMENT
633
-
634
- inject_into_class "app/controllers/records_controller.rb", 'RecordsController' do
635
- " include Hydra::AssetsControllerHelper\n"
636
- end
637
-
638
- insert_into_file "app/controllers/records_controller.rb", :after => "@record = Record.new(params[:record])\n" do
639
- " apply_depositor_metadata(@record)\n"
640
- end
641
-
642
- inject_into_class "app/models/record.rb", "Record" do
643
- "
644
- include Hydra::ModelMixins::CommonMetadata
645
- include Hydra::ModelMethods
646
- "
647
- end
648
-
649
- insert_into_file "app/models/solr_document.rb", :after => "include Blacklight::Solr::Document\n" do
650
- "
651
- include Hydra::Solr::Document
652
- "
653
- end
654
- insert_into_file "app/assets/javascripts/application.js", :after => "//= require_tree .\n" do
655
- "Blacklight.do_search_context_behavior = function() { }\n"
656
- end
657
- say %Q{
658
- We'll also update our controller to provide access controls on records.
659
- }
660
-
661
- inject_into_class "app/controllers/records_controller.rb", 'RecordsController' do
662
- " include Hydra::AccessControlsEnforcement\n" +
663
- " before_filter :enforce_access_controls\n"
664
- end
665
-
666
- end
667
-
668
- def look_at_it
669
- say %Q{
670
- Blacklight and Hydra-Head have added some new functionality to the
671
- application. We can now look at a search interface (provided
672
- by Blacklight) and use gated discovery over our repository. By default,
673
- objects are only visible to their creator.
674
-
675
- Create some new objects, and then check out the search catalog at:
676
-
677
- http://localhost:3000/catalog
678
-
679
- }, STATEMENT
680
-
681
- rails_server('/records/new') unless $quick
682
- end
683
-
684
- end
685
-
686
- class AddTests < Thor::Group
687
- include Thor::Actions
688
- include Rails::Generators::Actions
689
- include TutorialActions
690
-
691
- def self.source_paths
692
- [File.join($base_templates_path, "add_tests")]
693
- end
694
-
695
-
696
- def install_rspec
697
- say %Q{
698
- One of the great things about the Rails framework is the strong
699
- testing ethic. We'll use rspec to write a couple tests for
700
- this application.
701
- }, STATEMENT
702
- gem_group :development, :test do
703
- gem 'rspec'
704
- gem 'rspec-rails'
705
- end
706
- run 'bundle install'
707
-
708
- generate 'rspec:install'
709
- end
710
-
711
- def write_our_first_test
712
- say %Q{
713
- Here's a quick example of a test.
714
- }
715
- copy_file 'records_controller_spec.rb', 'spec/controllers/records_controller_spec.rb'
716
- run 'rspec'
717
- end
718
-
719
- def a_model_test
720
- # copy_file 'record_test.rb', 'spec/models/record_test.rb'
721
- #run 'rspec'
722
- end
723
-
724
- def install_capybara
725
- say %Q{
726
- We also want to write integration tests to test the end-result that
727
- a user may see. We'll add the capybara gem to do that.
728
- }, STATEMENT
729
- gem_group :development, :test do
730
- gem 'capybara'
731
- end
732
- run 'bundle install'
733
- # inject_into_file 'spec/spec_helper.rb' do
734
- # " require 'capybara/rails'\n"
735
- # end
736
- end
737
-
738
- def an_integration_test
739
- say %Q{
740
- Here's a quick integration test that proves deposit works.
741
- }, STATEMENT
742
- copy_file 'integration_spec.rb', 'spec/integration/integration_spec.rb'
743
- end
744
-
745
- def run_tests_x3
746
- say %Q{
747
- Now that the integration spec is in place, when we try to run rspec,
748
- we'll get a test failure because it can't connect to Fedora.
749
- }, STATEMENT
750
- run 'rspec'
751
- end
752
-
753
- def add_jettywrapper_ci_task
754
- say %Q{
755
- Instead, we need to add a new Rake task that knows how to wrap the
756
- test suite -- start jetty before running the tests and stop jetty
757
- at the end. We can use a feature provided by jettywrapper to do this.
758
- }, STATEMENT
759
- copy_file 'ci.rake', 'lib/tasks/ci.rake'
760
-
761
- rake 'jetty:stop'
762
- rake 'ci'
763
- rake 'jetty:start'
764
- end
765
-
766
- def add_coverage_stats
767
- say %Q{
768
- Now that we have tests, we also want to have some coverage statistics.
769
- }, STATEMENT
770
-
771
- gem_group :development, :test do
772
- gem 'simplecov'
773
- end
774
-
775
- run 'bundle install'
776
-
777
- copy_file 'ci_with_coverage.rake', 'lib/tasks/ci.rake'
778
- insert_into_file "spec/spec_helper.rb", :after => "ENV[\"RAILS_ENV\"] ||= 'test'\n"do
779
- %Q{
780
- if ENV['COVERAGE'] == "true"
781
- require 'simplecov'
782
- SimpleCov.start do
783
- add_filter "config/"
784
- add_filter "spec/"
785
- end
786
- end
787
- }
788
- end
789
-
790
- rake 'jetty:stop'
791
- rake 'ci'
792
- rake 'jetty:start'
793
- end
794
-
795
- def coverage_prompt
796
- say %Q{
797
- Go take a look at the coverage report, open the file ./coverage/index.html
798
- in your browser.
799
- }, STATEMENT
800
- continue_prompt
801
- end
802
- end
803
-
804
- class SprinkeSomeStyling < Thor::Group
805
- include Thor::Actions
806
- include Rails::Generators::Actions
807
- include TutorialActions
808
-
809
- def self.source_paths
810
- [File.join($base_templates_path, "sprinkle_some_styling")]
811
- end
812
-
813
-
814
- def fix_add_assets_links
815
- say %Q{
816
- We'll add a little styling to the Hydra app and add a link to add a new
817
- Record in the header of the layout.
818
- }, STATEMENT
819
- copy_file "_add_assets_links.html.erb", "app/views/_add_assets_links.html.erb"
820
- end
821
-
822
-
823
- end
824
-
825
- class AddCollections
826
- def add_collection_model
827
-
828
- end
829
-
830
- def add_collection_controller
831
-
832
- end
833
-
834
- def add_collection_reference_to_record
835
-
836
- end
837
- end
838
-
839
- class AddFileUpload < Thor::Group
840
- include Thor::Actions
841
- include Rails::Generators::Actions
842
- include TutorialActions
843
-
844
- def self.source_paths
845
- [File.join($base_templates_path, "add_file_upload")]
846
- end
847
-
848
- def add_file_uploads
849
- say %Q{
850
- Now that we have a basic Hydra application working with metadata-only, we
851
- want to enhance that with the ability to upload files. Let's add a new
852
- datastream to our model.
853
- }, STATEMENT
854
- inject_into_class 'app/models/record.rb', 'Record' do
855
- "has_file_datastream :name => 'content', :type => ActiveFedora::Datastream\n"
856
- end
857
- end
858
-
859
- def add_file_upload_controller
860
- say %Q{
861
- And educate our controller for managing file objects.
862
- }, STATEMENT
863
- inject_into_class "app/controllers/records_controller.rb", "RecordsController" do
864
- " include Hydra::Controller::UploadBehavior\n"
865
- end
866
- insert_into_file "app/controllers/records_controller.rb", :after => "apply_depositor_metadata(@record)\n" do
867
- " @record.label = params[:record][:title] # this is a bad hack to work around an AF bug\n" +
868
- " add_posted_blob_to_asset(@record, params[:filedata]) if params.has_key?(:filedata)\n"
869
- end
870
- end
871
-
872
- def add_file_upload_ui
873
- say %Q{
874
- And add a file upload field on the form.
875
- }, STATEMENT
876
- copy_file "_form.html.erb", "app/views/records/_form.html.erb"
877
- end
878
- end
879
-
880
- class AddTechnicalMetadata
881
- def add_datastream_and_terminology
882
-
883
- end
884
-
885
- end
886
- end
887
-
888
- HydraOpenRepositoriesTutorialApp.start