hydra-tutorial 0.0.2 → 0.0.3
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.
data/hydra-tutorial.gemspec
CHANGED
@@ -41,7 +41,8 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
41
41
|
|
42
42
|
def rails_server url = '/'
|
43
43
|
say %Q{
|
44
|
-
We'll start the Rails server for you. It should be available in
|
44
|
+
We'll start the Rails server for you. It should be available in
|
45
|
+
your browser at:
|
45
46
|
|
46
47
|
http://localhost:3000#{url}
|
47
48
|
}, STATEMENT
|
@@ -57,19 +58,24 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
57
58
|
|
58
59
|
include TutorialActions
|
59
60
|
class_option :quick, :default => false
|
61
|
+
class_option :git, :default => false
|
60
62
|
|
61
|
-
def
|
63
|
+
def setup_parameters
|
62
64
|
$quick = options[:quick]
|
65
|
+
$git = options[:git]
|
66
|
+
end
|
67
|
+
|
68
|
+
def welcome
|
63
69
|
say %Q{
|
64
|
-
Welcome to this Hydra tutorial. We're going to step through building a
|
65
|
-
Hydra application. We'll build the application gradually, starting
|
66
|
-
our "business logic", wiring in HTML views, and then
|
67
|
-
Rails application.
|
68
|
-
|
69
|
-
At several points in this tutorial, as we iteratively develop our files,
|
70
|
-
be prompted to review conflicts between versions of files. It is
|
71
|
-
accept the changes ('y'), however you may wish to view
|
72
|
-
things we're change.
|
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.
|
73
79
|
}, STATEMENT
|
74
80
|
|
75
81
|
name = ask %Q{
|
@@ -87,8 +93,8 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
87
93
|
|
88
94
|
if File.exists? $application_root
|
89
95
|
say %Q{
|
90
|
-
|
91
|
-
|
96
|
+
#{$application_root} already exists. Either remove it or provide
|
97
|
+
a different application name.
|
92
98
|
}, Thor::Shell::Color::RED
|
93
99
|
exit
|
94
100
|
end
|
@@ -96,7 +102,7 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
96
102
|
say %Q{
|
97
103
|
We'll generate a stub application #{$application_name} into the folder
|
98
104
|
#{$application_root}. But, first, lets check your Ruby environment.
|
99
|
-
}
|
105
|
+
}, STATEMENT
|
100
106
|
|
101
107
|
end
|
102
108
|
|
@@ -140,6 +146,13 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
140
146
|
end
|
141
147
|
end
|
142
148
|
|
149
|
+
|
150
|
+
def sprinkle_some_styling
|
151
|
+
inside $application_root do
|
152
|
+
SprinkeSomeStyling.start
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
143
156
|
def cleanup
|
144
157
|
inside $application_root do
|
145
158
|
Cleanup.start
|
@@ -154,7 +167,8 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
154
167
|
|
155
168
|
def start_everything
|
156
169
|
say %Q{
|
157
|
-
|
170
|
+
This is the end of the tutorial. We'll give you a final chance to look
|
171
|
+
at the web application.
|
158
172
|
}, STATEMENT
|
159
173
|
rake 'jetty:stop'
|
160
174
|
rake 'jetty:start'
|
@@ -187,16 +201,19 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
187
201
|
|
188
202
|
if ruby_executable =~ /rvm/ or ruby_executable =~ /rbenv/ or ruby_executable =~ /home/ or ruby_Executable =~ /Users/
|
189
203
|
say %Q{
|
190
|
-
It looks like you're using rvm/rbenv/etc. (with a gemset?) We'll use
|
204
|
+
It looks like you're using rvm/rbenv/etc. (with a gemset?) We'll use
|
205
|
+
this environment to build the application.
|
191
206
|
}, STATEMENT
|
192
207
|
|
193
208
|
else
|
194
209
|
|
195
210
|
say %Q{
|
196
|
-
We checked, and it looks like you might be using a system-wide ruby.
|
197
|
-
you use somethng like rvm [1], rbenv [2], etc to manage
|
211
|
+
We checked, and it looks like you might be using a system-wide ruby.
|
212
|
+
We suggest you use somethng like rvm [1], rbenv [2], etc to manage
|
213
|
+
your ruby projects.
|
198
214
|
|
199
|
-
You can continue and hope for the best, or go install one of these
|
215
|
+
You can continue and hope for the best, or go install one of these
|
216
|
+
ruby managers, which may make your life easier.
|
200
217
|
|
201
218
|
[1] http://rvm.io/
|
202
219
|
[2] https://github.com/sstephenson/rbenv/
|
@@ -210,7 +227,8 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
210
227
|
|
211
228
|
def install_bundler_and_rails
|
212
229
|
say %Q{
|
213
|
-
We're going to install some prerequisite gems in order to create our
|
230
|
+
We're going to install some prerequisite gems in order to create our
|
231
|
+
skeleton Rails application.
|
214
232
|
}, STATEMENT
|
215
233
|
run 'gem install bundler rails'
|
216
234
|
end
|
@@ -226,8 +244,8 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
226
244
|
def out_of_the_box
|
227
245
|
return if $quick
|
228
246
|
say %Q{
|
229
|
-
Here's a chance to look around. You can see the structure of
|
230
|
-
In particular, look at:
|
247
|
+
Here's a chance to look around. You can see the structure of
|
248
|
+
a Rails application. In particular, look at:
|
231
249
|
./app
|
232
250
|
./config
|
233
251
|
./lib
|
@@ -236,8 +254,8 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
236
254
|
|
237
255
|
|
238
256
|
say %Q{
|
239
|
-
If we launched the Rails application server, we can see the application
|
240
|
-
and you can see if everything is working.
|
257
|
+
If we launched the Rails application server, we can see the application
|
258
|
+
running in the browser and you can see if everything is working.
|
241
259
|
}, STATEMENT
|
242
260
|
|
243
261
|
|
@@ -260,8 +278,9 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
260
278
|
def adding_dependencies
|
261
279
|
|
262
280
|
say %Q{
|
263
|
-
Fedora runs as a Java servlet inside a container like Tomcat or Jetty.
|
264
|
-
version of Fedora and Solr for
|
281
|
+
Fedora runs as a Java servlet inside a container like Tomcat or Jetty.
|
282
|
+
Hydra provides a bundled version of Fedora and Solr for
|
283
|
+
testing and development.
|
265
284
|
}, STATEMENT
|
266
285
|
|
267
286
|
say %Q{
|
@@ -276,7 +295,8 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
276
295
|
|
277
296
|
def jetty_configuration
|
278
297
|
say %Q{
|
279
|
-
We'll add some configuration yml files with information to connect
|
298
|
+
We'll add some configuration yml files with information to connect
|
299
|
+
to Solr and Fedora.
|
280
300
|
}, STATEMENT
|
281
301
|
|
282
302
|
copy_file 'solr.yml', 'config/solr.yml'
|
@@ -295,11 +315,12 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
295
315
|
rake 'jetty:start'
|
296
316
|
|
297
317
|
say %Q{
|
298
|
-
Take a look around. Jetty should be running on port 8983. You can see
|
318
|
+
Take a look around. Jetty should be running on port 8983. You can see
|
319
|
+
the Fedora server at:
|
299
320
|
|
300
321
|
http://localhost:8983/fedora/
|
301
322
|
|
302
|
-
And a Solr index at
|
323
|
+
And a Solr index at:
|
303
324
|
|
304
325
|
http://localhost:8983/solr/development/admin/
|
305
326
|
}, STATEMENT
|
@@ -326,9 +347,10 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
326
347
|
|
327
348
|
def add_activefedora
|
328
349
|
say %Q{
|
329
|
-
The active-fedora gem provides a way to model Fedora objects within Ruby.
|
330
|
-
you create Ruby models for creating, updating and reading
|
331
|
-
domain-specific language (DSL) similar
|
350
|
+
The active-fedora gem provides a way to model Fedora objects within Ruby.
|
351
|
+
It will help you create Ruby models for creating, updating and reading
|
352
|
+
objects from Fedora using a domain-specific language (DSL) similar
|
353
|
+
to the Rails' ActiveRecord.
|
332
354
|
|
333
355
|
The om gem provides mechanisms for mapping XML documents into Ruby.
|
334
356
|
|
@@ -357,31 +379,32 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
357
379
|
def rails_console_tour
|
358
380
|
|
359
381
|
say %Q{
|
360
|
-
|
361
|
-
|
382
|
+
Now we'll give you a chance to look at the Record model. If you
|
383
|
+
launch the Rails interactive console (`rails c`), we can create
|
384
|
+
and manipulate our object:
|
362
385
|
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
386
|
+
## CREATE
|
387
|
+
> obj = Record.new
|
388
|
+
# => #<Record:1571331701243443635 @pid="__DO_NOT_USE__" >
|
389
|
+
> obj.descMetadata.content = 'e.g. <my_xml_content />'
|
390
|
+
> obj.save
|
368
391
|
|
369
|
-
|
370
|
-
|
392
|
+
> obj.pid
|
393
|
+
# => e.g. 'changeme:1'
|
371
394
|
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
395
|
+
## RETRIEVE
|
396
|
+
> obj = Record.find('changeme:1')
|
397
|
+
> ds = obj.descMetadata
|
398
|
+
# => #<ActiveFedora::NokogiriDatastream:3283711306477137919 ...>
|
399
|
+
> ds.content
|
400
|
+
# => (should be the XML document you added before)
|
378
401
|
|
379
|
-
|
380
|
-
|
381
|
-
|
402
|
+
## UPDATE
|
403
|
+
# manipulating XML:
|
404
|
+
> ds.ng_xml.xpath('//my_xml_content')
|
382
405
|
|
383
|
-
|
384
|
-
|
406
|
+
## DELETE
|
407
|
+
> obj.delete
|
385
408
|
|
386
409
|
}, STATEMENT
|
387
410
|
|
@@ -391,17 +414,17 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
391
414
|
|
392
415
|
def enhance_model_with_contrieved_descmd
|
393
416
|
say %Q{
|
394
|
-
Instead of working with the Nokogiri XML document directly, we
|
395
|
-
make querying an XML document easier. We'll replace the
|
396
|
-
OM-enabled document.
|
417
|
+
Instead of working with the Nokogiri XML document directly, we
|
418
|
+
can use OM to make querying an XML document easier. We'll replace the
|
419
|
+
previous Record with a OM-enabled document.
|
397
420
|
}
|
398
421
|
copy_file "basic_om_model.rb", "app/models/record.rb"
|
399
422
|
end
|
400
423
|
|
401
424
|
def testing_the_contrieved_descmd
|
402
425
|
say %Q{
|
403
|
-
If you launch the Rails interactive console, we can now create and
|
404
|
-
using methods provided by OM.
|
426
|
+
If you launch the Rails interactive console, we can now create and
|
427
|
+
manipulate our object using methods provided by OM.
|
405
428
|
|
406
429
|
> obj = Record.new
|
407
430
|
> obj.descMetadata.title = "My object title"
|
@@ -415,7 +438,8 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
415
438
|
|
416
439
|
def use_the_delegate_method
|
417
440
|
say %Q{
|
418
|
-
We can use the #delegate method to tell the model-object how
|
441
|
+
We can use the #delegate method to tell the model-object how
|
442
|
+
to access these attributes.
|
419
443
|
|
420
444
|
> obj = Record.new
|
421
445
|
> obj.title = "My object title"
|
@@ -442,8 +466,8 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
442
466
|
copy_file "mods_desc_metadata.rb", "app/models/mods_desc_metadata.rb"
|
443
467
|
|
444
468
|
say %Q{
|
445
|
-
If you launch the Rails interactive console, we can now create
|
446
|
-
using methods provided by OM.
|
469
|
+
If you launch the Rails interactive console, we can now create
|
470
|
+
and manipulate our object using methods provided by OM.
|
447
471
|
|
448
472
|
> obj = Record.new
|
449
473
|
> obj.title = "My object title"
|
@@ -467,20 +491,23 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
467
491
|
|
468
492
|
def record_generator
|
469
493
|
say %Q{
|
470
|
-
Now that we've set up our model and successfully added content
|
471
|
-
connect the model to a Rails web application.
|
494
|
+
Now that we've set up our model and successfully added content
|
495
|
+
into Fedora, now we want to connect the model to a Rails web application.
|
472
496
|
|
473
|
-
We'll start by using the standard Rails generators to create
|
474
|
-
which will give us a
|
497
|
+
We'll start by using the standard Rails generators to create
|
498
|
+
a scaffold controller and views, which will give us a
|
499
|
+
place to start working.
|
475
500
|
}, STATEMENT
|
476
501
|
|
477
502
|
generate "scaffold_controller Record --no-helper --skip-test-framework"
|
478
503
|
route "resources :records"
|
479
504
|
|
480
505
|
say %Q{
|
481
|
-
If you look in ./app/views/records, you can see a set of
|
506
|
+
If you look in ./app/views/records, you can see a set of
|
507
|
+
Rails ERB templates.
|
482
508
|
|
483
|
-
./app/controlers/records_controller.rb contains the controller
|
509
|
+
./app/controlers/records_controller.rb contains the controller
|
510
|
+
that ties the model to the views.
|
484
511
|
}, STATEMENT
|
485
512
|
|
486
513
|
continue_prompt unless $quick
|
@@ -489,8 +516,8 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
489
516
|
def add_new_form
|
490
517
|
|
491
518
|
say %Q{
|
492
|
-
The scaffold just provided the basic outline for an application, so
|
493
|
-
web form. Here's a simple one:
|
519
|
+
The scaffold just provided the basic outline for an application, so
|
520
|
+
we need to provide the guts for the web form. Here's a simple one:
|
494
521
|
}, STATEMENT
|
495
522
|
|
496
523
|
copy_file "_form.html.erb", "app/views/records/_form.html.erb"
|
@@ -500,8 +527,10 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
500
527
|
def check_it_out
|
501
528
|
|
502
529
|
say %Q{
|
503
|
-
If we start the Rails server, we should now be able to visit the records
|
504
|
-
and edit existing records.
|
530
|
+
If we start the Rails server, we should now be able to visit the records
|
531
|
+
in the browser, create new records, and edit existing records.
|
532
|
+
|
533
|
+
Start by creating a new record:
|
505
534
|
}, STATEMENT
|
506
535
|
|
507
536
|
rails_server '/records/new' unless $quick
|
@@ -516,19 +545,29 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
516
545
|
|
517
546
|
def add_gems
|
518
547
|
say %Q{
|
519
|
-
Thus far, we've been using component parts of the Hydra framework, but
|
520
|
-
we
|
521
|
-
|
548
|
+
Thus far, we've been using component parts of the Hydra framework, but
|
549
|
+
now we'll add in the whole framework so we can take advantage of common
|
550
|
+
patterns that have emerged in the Hydra community, including search,
|
551
|
+
gated discovery, etc.
|
522
552
|
|
523
553
|
We'll add a few new gems:
|
524
554
|
|
525
555
|
- blacklight provides a discovery interface on top of the Solr index
|
556
|
+
|
526
557
|
- hydra-head provides a number of common Hydra patterns
|
527
|
-
|
558
|
+
|
559
|
+
- devise is a standard Ruby gem for providing user-related
|
560
|
+
functions, like registration, sign-in, etc.
|
528
561
|
|
529
562
|
}, STATEMENT
|
530
|
-
|
531
|
-
|
563
|
+
|
564
|
+
if $git
|
565
|
+
gem 'blacklight', :git => "git://github.com/projectblacklight/blacklight.git"
|
566
|
+
gem 'hydra-head', :git => "git://github.com/projecthydra/hydra-head.git"
|
567
|
+
else
|
568
|
+
gem 'blacklight'
|
569
|
+
gem 'hydra-head'
|
570
|
+
end
|
532
571
|
gem 'devise'
|
533
572
|
|
534
573
|
run 'bundle install'
|
@@ -537,8 +576,8 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
537
576
|
def run_generators
|
538
577
|
|
539
578
|
say %Q{
|
540
|
-
These gems provide generators for adding basic views, styles, and override
|
541
|
-
generators now.
|
579
|
+
These gems provide generators for adding basic views, styles, and override
|
580
|
+
points into your application. We'll run these generators now.
|
542
581
|
}, STATEMENT
|
543
582
|
run 'rm config/solr.yml' # avoid meaningless conflict
|
544
583
|
generate 'blacklight', '--devise'
|
@@ -548,7 +587,8 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
548
587
|
|
549
588
|
def db_migrate
|
550
589
|
say %Q{
|
551
|
-
Blacklight uses a SQL database for keeping track of user bookmarks,
|
590
|
+
Blacklight uses a SQL database for keeping track of user bookmarks,
|
591
|
+
searches, etc. We'll run the migrations next:
|
552
592
|
}, STATEMENT
|
553
593
|
rake 'db:migrate'
|
554
594
|
rake 'db:test:prepare'
|
@@ -572,8 +612,8 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
572
612
|
def do_it
|
573
613
|
|
574
614
|
say %Q{
|
575
|
-
We need to make a couple changes to our controller and model to make
|
576
|
-
teaching them about access rights.
|
615
|
+
We need to make a couple changes to our controller and model to make
|
616
|
+
them fully-compliant objects by teaching them about access rights.
|
577
617
|
}, STATEMENT
|
578
618
|
|
579
619
|
inject_into_class "app/controllers/records_controller.rb", 'RecordsController' do
|
@@ -591,13 +631,23 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
591
631
|
"
|
592
632
|
end
|
593
633
|
|
634
|
+
say %Q{
|
635
|
+
We'll also update our controller to provide access controls on records.
|
636
|
+
}
|
637
|
+
|
638
|
+
inject_into_class "app/controllers/records_controller.rb", 'RecordsController' do
|
639
|
+
" include Hydra::AccessControlsEnforcement\n" +
|
640
|
+
" before_filter :enforce_access_controls\n"
|
641
|
+
end
|
642
|
+
|
594
643
|
end
|
595
644
|
|
596
645
|
def look_at_it
|
597
646
|
say %Q{
|
598
|
-
Blacklight and Hydra-Head have added some new functionality to the
|
599
|
-
|
600
|
-
|
647
|
+
Blacklight and Hydra-Head have added some new functionality to the
|
648
|
+
application. We can now look at a search interface (provided
|
649
|
+
by Blacklight) and use gated discovery over our repository. By default,
|
650
|
+
objects are only visible to their creator.
|
601
651
|
|
602
652
|
Create some new objects, and then check out the search catalog at:
|
603
653
|
|
@@ -644,11 +694,32 @@ class HydraOpenRepositoriesTutorialApp < Thor::Group
|
|
644
694
|
|
645
695
|
end
|
646
696
|
|
647
|
-
class AddFileAssets
|
697
|
+
class AddFileAssets < Thor::Group
|
698
|
+
include Thor::Actions
|
699
|
+
include Rails::Generators::Actions
|
700
|
+
include TutorialActions
|
701
|
+
|
702
|
+
def self.source_paths
|
703
|
+
[File.join($base_templates_path, "add_tests")]
|
704
|
+
end
|
705
|
+
|
648
706
|
|
649
707
|
end
|
650
708
|
|
651
|
-
class
|
709
|
+
class SprinkeSomeStyling < Thor::Group
|
710
|
+
include Thor::Actions
|
711
|
+
include Rails::Generators::Actions
|
712
|
+
include TutorialActions
|
713
|
+
|
714
|
+
def self.source_paths
|
715
|
+
[File.join($base_templates_path, "sprinkle_some_styling")]
|
716
|
+
end
|
717
|
+
|
718
|
+
|
719
|
+
def fix_add_assets_links
|
720
|
+
copy_file "_add_assets_links.html.erb", "app/views/_add_assets_links.html.erb"
|
721
|
+
end
|
722
|
+
|
652
723
|
|
653
724
|
end
|
654
725
|
|
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.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- or_templates/building_a_basic_rails_app/fedora.yml
|
83
83
|
- or_templates/building_a_basic_rails_app/solr.yml
|
84
84
|
- or_templates/records_controller.rb
|
85
|
+
- or_templates/sprinkle_some_styling/_add_assets_links.html.erb
|
85
86
|
- or_templates/wiring_it_into_rails/_form.html.erb
|
86
87
|
- or_templates/wiring_it_into_rails/show.html.erb
|
87
88
|
- templates/application/dataset_hydra_mods_om.rb
|
@@ -108,7 +109,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
108
109
|
version: '0'
|
109
110
|
segments:
|
110
111
|
- 0
|
111
|
-
hash:
|
112
|
+
hash: -1217986211987918299
|
112
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
114
|
none: false
|
114
115
|
requirements:
|
@@ -117,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
118
|
version: '0'
|
118
119
|
segments:
|
119
120
|
- 0
|
120
|
-
hash:
|
121
|
+
hash: -1217986211987918299
|
121
122
|
requirements: []
|
122
123
|
rubyforge_project:
|
123
124
|
rubygems_version: 1.8.24
|