enju_oai 0.2.0.beta.2 → 0.2.0.beta.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/oai_controller.rb +1 -0
  3. data/app/views/oai/_record_dcndl.xml.builder +164 -54
  4. data/lib/enju_oai/oai_controller.rb +1 -1
  5. data/lib/enju_oai/version.rb +1 -1
  6. data/spec/cassette_library/oai/list_records_xml_builder/when_metadataPrefix_is_dcndl/renders_well-formed_XML.yml +280 -0
  7. data/spec/controllers/oai_controller_spec.rb +8 -1
  8. data/spec/dummy/app/models/user.rb +4 -0
  9. data/spec/dummy/config/application.rb +1 -0
  10. data/spec/dummy/db/migrate/149_create_message_templates.rb +18 -0
  11. data/spec/dummy/db/migrate/154_create_messages.rb +23 -0
  12. data/spec/dummy/db/migrate/20080819181903_create_message_requests.rb +18 -0
  13. data/spec/dummy/db/migrate/20110913115320_add_lft_and_rgt_to_message.rb +11 -0
  14. data/spec/dummy/db/migrate/20120125050502_add_depth_to_message.rb +6 -0
  15. data/spec/dummy/db/migrate/20140518111006_create_message_transitions.rb +18 -0
  16. data/spec/dummy/db/migrate/20140518135713_create_message_request_transitions.rb +18 -0
  17. data/spec/dummy/db/migrate/20160703185015_add_most_recent_to_message_transitions.rb +9 -0
  18. data/spec/dummy/db/migrate/20160813191647_add_max_number_of_results_to_library_group.rb +5 -0
  19. data/spec/dummy/db/migrate/20160813191733_add_family_name_first_to_library_group.rb +5 -0
  20. data/spec/dummy/db/migrate/20160813192542_add_pub_year_facet_range_interval_to_library_group.rb +5 -0
  21. data/spec/dummy/db/migrate/20160813203039_add_user_id_to_library_group.rb +5 -0
  22. data/spec/dummy/db/migrate/20160814165332_add_most_recent_to_message_request_transitions.rb +9 -0
  23. data/spec/dummy/db/schema.rb +78 -5
  24. data/spec/fixtures/library_groups.yml +1 -6
  25. data/spec/rails_helper.rb +66 -0
  26. data/spec/spec_helper.rb +82 -47
  27. data/spec/views/oai/get_record.xml.builder +1 -1
  28. data/spec/views/oai/identify.xml.builder_spec.rb +1 -1
  29. data/spec/views/oai/list_identifiers.xml.builder_spec.rb +1 -1
  30. data/spec/views/oai/list_metadata_formats.xml.builder_spec.rb +1 -1
  31. data/spec/views/oai/list_records.xml.builder_spec.rb +30 -1
  32. metadata +360 -278
  33. data/spec/dummy/config/initializers/enju_leaf.rb +0 -2
  34. data/spec/dummy/db/migrate/20160813130535_add_email_to_library_group.rb +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 328bd3be1f0de895dc62fe0af4fd666ea0fcb55a
4
- data.tar.gz: 62f6aa1220faa8d7a239c5730a7dca972565724a
3
+ metadata.gz: 55b6718033fbd86ed2a0f09fe92ebc36248c0b10
4
+ data.tar.gz: 206d37c1ed22ee28ac26455c2e5e3b108e742bad
5
5
  SHA512:
6
- metadata.gz: e156fc49edc35a863b1e0dbaecd0022b137931872b7d9c750485d8ce427df3412374bcfdf4d9b64cdd96e11aa0c4d862407a33ec3ced2e5fb703573391c514dd
7
- data.tar.gz: 5d8ec84ed2afd8fa3c888642284da00131e3219a64f051173e8596dd201aceed718c8b79f5bea8920672ac81f8e5ceea83dc3b561c8a92740d31fc315aa4bb68
6
+ metadata.gz: e38dfee2edc5aadd5891e4683079578f5fbbfb88f91cef1887cd2b617b999c4e8c45ce9b4ba31d19c91cdd4d262364d02cf82fd8aaca8ab70df3ac0f384dcf6a
7
+ data.tar.gz: 0ec947d28b285b4022448edfc0aab2e33b93aa8f6d6bb0882ed30e977bf72c14bff7d9f1e2fa0280a9b19a909f09b9c48315e8b23eeffcd1ae91ba13c58cb510
@@ -21,6 +21,7 @@ class OaiController < ApplicationController
21
21
  search = Manifestation.search do
22
22
  order_by :updated_at, :desc
23
23
  paginate cursor: token, per_page: oai_per_page
24
+ with(:updated_at).between(from_time..until_time)
24
25
  end
25
26
  @manifestations = search.execute!.results
26
27
 
@@ -1,26 +1,29 @@
1
1
  xml_builder.tag! "rdf:RDF",
2
- "xmlns:rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
3
- "xmlns:dcterms": "http://purl.org/dc/terms/",
4
- "xmlns:dcndl": "http://ndl.go.jp/dcndl/terms/",
5
- "xmlns:dc": "http://purl.org/dc/elements/1.1/",
6
- "xmlns:rdfs": "http://www.w3.org/2000/01/rdf-schema#",
7
- "xmlns:owl": "http://www.w3.org/2002/07/owl#",
8
- "xmlns:foaf": "http://xmlns.com/foaf/0.1/" do
9
- get_record_url = manifestations_url format: "oai", verb: 'GetRecord', metadataPrefix: 'dcndl', identifier: manifestation.oai_identifier
10
- xml_builder.tag! "dcndl:BibAdminResource", "rdf:about": get_record_url do
11
- xml_builder.tag! "dcndl:record", "rdf:resource": get_record_url
2
+ "xmlns:rdf" => "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
3
+ "xmlns:dcterms" => "http://purl.org/dc/terms/",
4
+ "xmlns:dcndl" => "http://ndl.go.jp/dcndl/terms/",
5
+ "xmlns:dc" => "http://purl.org/dc/elements/1.1/",
6
+ "xmlns:rdfs" => "http://www.w3.org/2000/01/rdf-schema#",
7
+ "xmlns:owl" => "http://www.w3.org/2002/07/owl#",
8
+ "xmlns:foaf" => "http://xmlns.com/foaf/0.1/" do
9
+ get_record_url = oai_provider_url format: "xml", verb: 'GetRecord', metadataPrefix: 'dcndl', identifier: manifestation.oai_identifier
10
+ xml_builder.tag! "dcndl:BibAdminResource", "rdf:about" => get_record_url do
11
+ xml_builder.tag! "dcndl:record", "rdf:resource" => get_record_url + "#material"
12
12
  xml_builder.tag! "dcndl:bibRecordCategory", ENV['DCNDL_BIBRECORDCATEGORY']
13
13
  end
14
- xml_builder.tag! "dcndl:BibResource", "rdf:about": get_record_url + "#material" do
14
+ xml_builder.tag! "dcndl:BibResource", "rdf:about" => get_record_url + "#material" do
15
+ xml_builder.tag! "rdfs:seeAlso", "rdf:resource" => manifestation_url(manifestation)
15
16
  manifestation.identifiers.each do |identifier|
16
17
  case identifier.identifier_type.try(:name)
17
18
  when 'isbn'
18
- xml_builder.tag! "rdfs:seeAlso", "rdf:resource": "http://iss.ndl.go.jp/isbn/#{ identifier.body }"
19
- xml_builder.tag! "dcterms:identifier", identifier.body, "rdf:datatype": "http://ndl.go.jp/dcndl/terms/ISBN"
19
+ xml_builder.tag! "rdfs:seeAlso", "rdf:resource" => "http://iss.ndl.go.jp/isbn/#{ identifier.body }"
20
+ xml_builder.tag! "dcterms:identifier", identifier.body, "rdf:datatype" => "http://ndl.go.jp/dcndl/terms/ISBN"
20
21
  when 'issn'
21
- xml_builder.tag! "dcterms:identifier", identifier.body, "rdf:datatype": "http://ndl.go.jp/dcndl/terms/ISSN"
22
+ xml_builder.tag! "dcterms:identifier", identifier.body, "rdf:datatype" => "http://ndl.go.jp/dcndl/terms/ISSN"
23
+ when 'doi'
24
+ xml_builder.tag! "dcterms:identifier", identifier.body, "rdf:datatype" => "http://ndl.go.jp/dcndl/terms/DOI"
22
25
  when 'ncid'
23
- xml_builder.tag! "dcterms:identifier", identifier.body, "rdf:datatype": "http://ndl.go.jp/dcndl/terms/NIIBibID"
26
+ xml_builder.tag! "dcterms:identifier", identifier.body, "rdf:datatype" => "http://ndl.go.jp/dcndl/terms/NIIBibID"
24
27
  end
25
28
  end
26
29
  xml_builder.tag! "dcterms:title", manifestation.original_title
@@ -32,54 +35,161 @@ xml_builder.tag! "rdf:RDF",
32
35
  end
33
36
  end
34
37
  end
35
- xml_builder.tag! "dcterms:creator" do
38
+ if manifestation.title_alternative?
39
+ xml_builder.tag! "dcndl:alternative" do
40
+ xml_builder.tag! "rdf:Description" do
41
+ xml_builder.tag! "rdf:value", manifestation.title_alternative
42
+ if manifestation.title_alternative_transcription?
43
+ xml_builder.tag! "dcndl:transcription", manifestation.title_alternative_transcription
44
+ end
45
+ end
46
+ end
47
+ end
48
+ if manifestation.volume_number_string?
49
+ xml_builder.tag! "dcndl:volume" do
50
+ xml_builder.tag! "rdf:Description" do
51
+ xml_builder.tag! "rdf:value", manifestation.volume_number_string
52
+ end
53
+ end
54
+ elsif manifestation.volume_number?
55
+ xml_builder.tag! "dcndl:volume" do
56
+ xml_builder.tag! "rdf:Description" do
57
+ xml_builder.tag! "rdf:value", manifestation.volume_number
58
+ end
59
+ end
60
+ end
61
+ manifestation.series_statements.each do |series_statement|
62
+ xml_builder.tag! "dcndl:seriesTitle" do
63
+ xml_builder.tag! "rdf:Description" do
64
+ xml_builder.tag! "rdf:value", series_statement.original_title
65
+ if series_statement.title_transcription?
66
+ xml_builder.tag! "dcndl:transcription", series_statement.title_transcription
67
+ end
68
+ end
69
+ end
70
+ end
71
+ if manifestation.edition_string?
72
+ xml_builder.tag! "dcndl:edition", manifestation.edition_string
73
+ elsif manifestation.edition?
74
+ xml_builder.tag! "dcndl:edition", manifestation.edition
75
+ end
76
+ unless manifestation.creators.empty?
36
77
  manifestation.creators.each do |creator|
37
- xml_builder.tag! "foaf:Agent" do
38
- xml_builder.tag! "foaf:name", creator.full_name
78
+ xml_builder.tag! "dcterms:creator" do
79
+ xml_builder.tag! "foaf:Agent" do
80
+ xml_builder.tag! "foaf:name", creator.full_name
81
+ if creator.full_name_transcription?
82
+ xml_builder.tag! "dcndl:transcription", creator.full_name_transcription
83
+ end
84
+ end
39
85
  end
40
86
  end
41
- xml_builder.tag! "dc:creator", manifestation.statement_of_responsibility
42
87
  end
43
- xml_builder.tag! "dcterms:publisher" do
44
- manifestation.publishers.each do |publisher|
88
+ xml_builder.tag! "dc:creator", manifestation.statement_of_responsibility unless manifestation.statement_of_responsibility.blank?
89
+ manifestation.series_statements.each do |series_statement|
90
+ xml_builder.tag! "dcndl:seriesCreator", series_statement.creator_string
91
+ end
92
+ manifestation.contributors.each do |contributor|
93
+ xml_builder.tag! "dcndl:contributor", contributor.full_name
94
+ end
95
+ manifestation.publishers.each do |publisher|
96
+ xml_builder.tag! "dcterms:publisher" do
45
97
  xml_builder.tag! "foaf:Agent" do
46
- xml_builder.tag! "foaf:name", publisher.full_name
98
+ if publisher.corporate_name
99
+ xml_builder.tag! "foaf:name", publisher.corporate_name
100
+ xml_builder.tag! "dcndl:transcription", publisher.corporate_name_transcription if publisher.corporate_name_transcription?
101
+ elsif publisher.full_name
102
+ xml_builder.tag! "foaf:name", publisher.full_name
103
+ xml_builder.tag! "dcndl:transcription", publisher.full_name_transcription if publisher.full_name_transcription?
104
+ end
105
+ xml_builder.tag! "dcterms:description", publisher.note if publisher.note?
106
+ xml_builder.tag! "dcndl:location", publisher.place if publisher.place?
47
107
  end
48
108
  end
49
109
  end
50
- xml_builder.tag! "dcterms:issued", manifestation.pub_date, "rdf:datatype": "http://purl.org/dc/terms/W3CDTF"
51
- xml_builder.tag! "dcndl:materialType", "rdf:resource": "http://ndl.go.jp/ndltype/Book"
52
- end
53
- unless manifestation.attachment.blank?
54
- xml_builder.fulltextURL manifestation_url(id: manifestation.id, format: :download)
55
- end
56
- %w( ISBN ISSN NCID ).each do |identifier|
57
- manifestation.identifier_contents(identifier.downcase).each do |val|
58
- xml_builder.tag! identifier, val
110
+ manifestation.publishers.each do |publisher|
111
+ xml_builder.tag! "dcndl:publicationPlace", publisher.country.alpha_2 if publisher.country.try(:name) != "unknown"
59
112
  end
60
- end
61
- if manifestation.root_series_statement
62
- xml_builder.jtitle manifestation.root_series_statement.original_title
63
- end
64
- xml_builder.volume manifestation.volume_number_string
65
- xml_builder.issue manifestation.issue_number_string
66
- xml_builder.spage manifestation.start_page
67
- xml_builder.epage manifestation.end_page
68
- xml_builder.dateofissued manifestation.pub_date
69
- #TODO: junii2: source
70
- if manifestation.language.blank? or manifestation.language.name == 'unknown'
71
- xml_builder.language "und"
72
- else
73
- xml_builder.language manifestation.language.iso_639_2
74
- end
75
- %w( pmid doi NAID ichushi ).each do |identifier|
76
- manifestation.identifier_contents(identifier.downcase).each do |val|
77
- xml_builder.tag! identifier, val
113
+ xml_builder.tag! "dcterms:issued", manifestation.pub_date, "rdf:datatype" => "http://purl.org/dc/terms/W3CDTF" if manifestation.pub_date?
114
+ xml_builder.tag! "dcterms:description", manifestation.description if manifestation.description?
115
+ manifestation.subjects.each do |subject|
116
+ xml_builder.tag! "dcterms:subject" do
117
+ xml_builder.tag! "rdf:Description" do
118
+ xml_builder.tag! "rdf:value", subject.term
119
+ xml_builder.tag! "dcndl:transcription", subject.term_transcription if subject.term_transcription?
120
+ end
121
+ end
122
+ end
123
+ manifestation.classifications.each do |classification|
124
+ case classification.classification_type.name
125
+ when 'ndlc'
126
+ xml_builder.tag! "dcterms:subject", "rdf:resource" => "http://id.ndl.go.jp/class/ndlc/"+classification.category
127
+ when 'ndc9'
128
+ xml_builder.tag! "dcterms:subject", "rdf:resource" => "http://id.ndl.go.jp/class/ndc9/"+classification.category
129
+ when 'ddc'
130
+ xml_builder.tag! "dcterms:subject", "rdf:resource" => "http://dewey.info/class/"+classification.category
131
+ when 'ndc8'
132
+ xml_builder.tag! "dc:subject", classification.category, "rdf:datatype" => "http://ndl.go.jp/dcndl/terms/NDC8"
133
+ when 'ndc'
134
+ xml_builder.tag! "dc:subject", classification.category, "rdf:datatype" => "http://ndl.go.jp/dcndl/terms/NDC"
135
+ when 'lcc'
136
+ xml_builder.tag! "dc:subject", classification.category, "rdf:datatype" => "http://ndl.go.jp/dcndl/terms/LCC"
137
+ when 'udc'
138
+ xml_builder.tag! "dc:subject", classification.category, "rdf:datatype" => "http://ndl.go.jp/dcndl/terms/UDC"
139
+ end
140
+ end
141
+ xml_builder.tag! "dcterms:language", manifestation.language.iso_639_2, "rdf:datatype" => "http://purl.org/dc/terms/ISO639-2"
142
+ xml_builder.tag! "dcndl:price", manifestation.price if manifestation.price?
143
+ if manifestation.extent? or manifestation.dimensions?
144
+ xml_builder.tag! "dcterms:extent", [ manifestation.extent, manifestation.dimensions ].compact.join(" ; ")
145
+ end
146
+ material_type = nil
147
+ case manifestation.carrier_type.name
148
+ when "volume"
149
+ material_type = :book
150
+ when "online_resource"
151
+ material_type = :electronic_resource
152
+ end
153
+ case manifestation.manifestation_content_type.name
154
+ when "text"
155
+ material_type = :book
156
+ when "tactile_text"
157
+ material_type = :braille
158
+ when "cartographic_image"
159
+ material_type = :map
160
+ when "performed_music"
161
+ material_type = :music
162
+ when "notated_music"
163
+ material_type = :music_score
164
+ when "still_image"
165
+ material_type = :still_image
166
+ when "two_dimensional_moving_image"
167
+ material_type = :moving_image
168
+ when "sounds"
169
+ material_type = :sound
170
+ end
171
+ case material_type
172
+ when :book
173
+ xml_builder.tag! "dcndl:materialType", "rdf:resource" => "http://ndl.go.jp/ndltype/Book", "rdfs:label" => "図書"
174
+ when :electronic_resource
175
+ xml_builder.tag! "dcndl:materialType", "rdf:resource" => "http://ndl.go.jp/ndltype/ElectronicResource", "rdfs:label" => "電子資料"
176
+ when :braille
177
+ xml_builder.tag! "dcndl:materialType", "rdf:resource" => "http://ndl.go.jp/ndltype/Braille", "rdfs:label" => "点字"
178
+ when :map
179
+ xml_builder.tag! "dcndl:materialType", "rdf:resource" => "http://ndl.go.jp/ndltype/Map", "rdfs:label" => "地図"
180
+ when :music
181
+ xml_builder.tag! "dcndl:materialType", "rdf:resource" => "http://ndl.go.jp/ndltype/Music", "rdfs:label" => "音楽"
182
+ when :music_score
183
+ xml_builder.tag! "dcndl:materialType", "rdf:resource" => "http://ndl.go.jp/ndltype/MusicScore", "rdfs:label" => "楽譜"
184
+ when :still_image
185
+ xml_builder.tag! "dcndl:materialType", "rdf:resource" => "http://purl.org/dc/dcmitype/StillImage", "rdfs:label" => "静止画資料"
186
+ when :moving_image
187
+ xml_builder.tag! "dcndl:materialType", "rdf:resource" => "http://purl.org/dc/dcmitype/MovingImage", "rdfs:label" => "映像資料"
188
+ when :sound
189
+ xml_builder.tag! "dcndl:materialType", "rdf:resource" => "http://purl.org/dc/dcmitype/Sound", "rdfs:label" => "録音資料"
190
+ end
191
+ if manifestation.serial and manifestation.frequency
192
+ xml_builder.tag! "dcndl:publicationPeriodicity", manifestation.frequency.name
78
193
  end
79
194
  end
80
- #TODO: junii2: isVersionOf, hasVersion, isReplaceBy, replaces, isRequiredBy, requires, isPartOf, hasPart, isReferencedBy, references, isFormatOf, hasFormat
81
- #TODO: junii2: coverage, spatial, NIIspatial, temporal, NIItemporal
82
- #TODO: junii2: rights
83
- #TODO: junii2: textversion
84
- #TODO: junii2: grantid, dateofgranted, degreename, grantor
85
195
  end
@@ -87,7 +87,7 @@ module EnjuOai
87
87
  times[:from] = Time.zone.parse(from_t)
88
88
  end
89
89
  if /^[12]\d{3}-(0?[1-9]|1[0-2])-(0?[1-9]|[12]\d|3[01])$/ =~ until_t
90
- times[:until] = Time.zone.parse(until_t).beginning_of_day
90
+ times[:until] = Time.zone.parse(until_t).end_of_day
91
91
  else
92
92
  times[:until] = Time.zone.parse(until_t)
93
93
  end
@@ -1,3 +1,3 @@
1
1
  module EnjuOai
2
- VERSION = "0.2.0.beta.2"
2
+ VERSION = "0.2.0.beta.4"
3
3
  end
@@ -0,0 +1,280 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://iss.ndl.go.jp/api/sru?maximumRecords=1&onlyBib=true&operation=searchRetrieve&query=(itemno=R100000002-I000008369884-00)&recordSchema=dcndl
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.9.2
12
+ Accept-Encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ Accept:
15
+ - "*/*"
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Sun, 18 Sep 2016 04:54:45 GMT
23
+ Etag:
24
+ - '"4e9fd394f0b81a7266e04bf44415452d"'
25
+ X-Runtime:
26
+ - '0.198450'
27
+ Cache-Control:
28
+ - max-age=0, private, must-revalidate
29
+ X-Ua-Compatible:
30
+ - IE=Edge,chrome=1
31
+ Status:
32
+ - '200'
33
+ Content-Type:
34
+ - application/xml; charset=utf-8
35
+ Set-Cookie:
36
+ - ROUTEID=.ps25; path=/
37
+ - TS01cb7804=011338590a0cb2c03b61db464ffc9673495ac0b88a40261a87a5e9d395a6f2aa09f17a348ac974ed75c561f1c3b51baebf40f36b74;
38
+ path=/; domain=.iss.ndl.go.jp
39
+ - TS01f3cfdf=011338590a752f9a56daa620c1a0261fe9fcdf06dc8c4d9a310f81b45f6b792d11e792feaba9d4a2ffd5944cb1f7114b939a1cca92abcac93b08a22f87c916da056e99611d04139bb85ff7c1863f037b0caddf7abc;
40
+ Path=/
41
+ - _front_session_id=54f274d513496bd24506018c477d22be; domain=.iss.ndl.go.jp;
42
+ path=/; expires=Sun, 18-Sep-2016 05:54:45 GMT; HttpOnly
43
+ - ndl.go.jp=rd2o00000000000000000000ffff0a024f68o80; path=/
44
+ - serverid=1101; path=/
45
+ Vary:
46
+ - Accept-Encoding,User-Agent
47
+ X-Content-Type-Options:
48
+ - nosniff
49
+ X-Frame-Options:
50
+ - SAMEORIGIN
51
+ Content-Length:
52
+ - '2107'
53
+ Connection:
54
+ - close
55
+ body:
56
+ encoding: ASCII-8BIT
57
+ string: !binary |-
58
+ PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNlYXJj
59
+ aFJldHJpZXZlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly93d3cubG9jLmdvdi96
60
+ aW5nL3Nydy8iPgogIDx2ZXJzaW9uPjEuMjwvdmVyc2lvbj4KICA8bnVtYmVy
61
+ T2ZSZWNvcmRzPjE8L251bWJlck9mUmVjb3Jkcz4KICA8bmV4dFJlY29yZFBv
62
+ c2l0aW9uPjA8L25leHRSZWNvcmRQb3NpdGlvbj4KICA8ZXh0cmFSZXNwb25z
63
+ ZURhdGE+CiZsdDtmYWNldHMmZ3Q7CiAgJmx0O2xzdCBuYW1lPSZxdW90O1JF
64
+ UE9TSVRPUllfTk8mcXVvdDsmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q7
65
+ UjEwMDAwMDAwMSZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50
66
+ IG5hbWU9JnF1b3Q7UjEwMDAwMDAwMiZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7
67
+ CiAgJmx0Oy9sc3QmZ3Q7CiAgJmx0O2xzdCBuYW1lPSZxdW90O05EQyZxdW90
68
+ OyZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDswJnF1b3Q7Jmd0OzEmbHQ7
69
+ L2ludCZndDsKICAmbHQ7L2xzdCZndDsKICAmbHQ7bHN0IG5hbWU9JnF1b3Q7
70
+ SVNTVUVEX0RBVEUmcXVvdDsmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q7
71
+ MjAwNiZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgJmx0Oy9sc3QmZ3Q7CiAg
72
+ Jmx0O2xzdCBuYW1lPSZxdW90O0xJQlJBUlkmcXVvdDsmZ3Q7CiAgICAmbHQ7
73
+ aW50IG5hbWU9JnF1b3Q75LiJ6YeN55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0
74
+ OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvkuqzpg73l
75
+ upznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0
76
+ O2ludCBuYW1lPSZxdW90O+S9kOizgOecjOeri+Wbs+abuOmkqCZxdW90OyZn
77
+ dDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75YW15bqr
78
+ 55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZs
79
+ dDtpbnQgbmFtZT0mcXVvdDvljJfmtbfpgZPnq4vlm7Pmm7jppKgmcXVvdDsm
80
+ Z3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+WNg+iR
81
+ ieW4guS4reWkruWbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAg
82
+ ICAmbHQ7aW50IG5hbWU9JnF1b3Q75Y2D6JGJ55yM56uL5p2x6YOo5Zuz5pu4
83
+ 6aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0m
84
+ cXVvdDvlkozmrYzlsbHnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsv
85
+ aW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+Wbveeri+WbveS8muWb
86
+ s+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5h
87
+ bWU9JnF1b3Q75Z+8546J55yM56uL54aK6LC35Zuz5pu46aSoJnF1b3Q7Jmd0
88
+ OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvlpKfliIbn
89
+ nIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0
90
+ O2ludCBuYW1lPSZxdW90O+Wkp+mYquW4gueri+Wbs+abuOmkqCZxdW90OyZn
91
+ dDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75aSn6Ziq
92
+ 5bqc56uL5Lit5aSu5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsK
93
+ ICAgICZsdDtpbnQgbmFtZT0mcXVvdDvlpYjoia/nnIznq4vlm7Pmm7jmg4Xl
94
+ oLHppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1l
95
+ PSZxdW90O+WuruWfjuecjOWbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQm
96
+ Z3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75a6u5bSO55yM56uL5Zuz5pu4
97
+ 6aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0m
98
+ cXVvdDvlr4zlsbHnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50
99
+ Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+WxseWPo+ecjOeri+WxseWP
100
+ o+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50
101
+ IG5hbWU9JnF1b3Q75bGx5qKo55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEm
102
+ bHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvlspDpmJznnIzl
103
+ m7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBu
104
+ YW1lPSZxdW90O+WyoeWxseecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0
105
+ Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75bKp5omL55yM56uL
106
+ 5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQg
107
+ bmFtZT0mcXVvdDvls7bmoLnnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZs
108
+ dDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+W3neW0juW4guer
109
+ i+S4reWOn+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAm
110
+ bHQ7aW50IG5hbWU9JnF1b3Q75bqD5bO25biC56uL5Lit5aSu5Zuz5pu46aSo
111
+ JnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVv
112
+ dDvlvrPls7bnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0
113
+ OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+aEm+efpeecjOWbs+abuOmkqCZx
114
+ dW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q7
115
+ 5paw5r2f55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsK
116
+ ICAgICZsdDtpbnQgbmFtZT0mcXVvdDvmnbHkuqzpg73nq4vkuK3lpK7lm7Pm
117
+ m7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1l
118
+ PSZxdW90O+agg+acqOecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9p
119
+ bnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75qiq5rWc5biC5Lit5aSu
120
+ 5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQg
121
+ bmFtZT0mcXVvdDvmspbnuITnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZs
122
+ dDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+a7i+izgOecjOer
123
+ i+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50
124
+ IG5hbWU9JnF1b3Q754aK5pys55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEm
125
+ bHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvnnIznq4vplbfp
126
+ h47lm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2lu
127
+ dCBuYW1lPSZxdW90O+efs+W3neecjOeri+Wbs+abuOmkqCZxdW90OyZndDsx
128
+ Jmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q756aP5LqV55yM
129
+ 56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtp
130
+ bnQgbmFtZT0mcXVvdDvnpo/lsqHluILnt4/lkIjlm7Pmm7jppKgmcXVvdDsm
131
+ Z3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+emj+Wy
132
+ oeecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAm
133
+ bHQ7aW50IG5hbWU9JnF1b3Q756aP5bO255yM56uL5Zuz5pu46aSoJnF1b3Q7
134
+ Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvnp4vn
135
+ lLDnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAg
136
+ Jmx0O2ludCBuYW1lPSZxdW90O+e+pOmmrOecjOeri+Wbs+abuOmkqCZxdW90
137
+ OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q76Iyo
138
+ 5Z+O55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAg
139
+ ICZsdDtpbnQgbmFtZT0mcXVvdDvpnZLmo67nnIznq4vlm7Pmm7jppKgmcXVv
140
+ dDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+md
141
+ meWyoeW4gueri+S4reWkruWbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQm
142
+ Z3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q76Z2Z5bKh55yM56uL5Lit5aSu
143
+ 5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQg
144
+ bmFtZT0mcXVvdDvpppnlt53nnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZs
145
+ dDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+mrmOefpeecjOer
146
+ i+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50
147
+ IG5hbWU9JnF1b3Q76bOl5Y+W55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEm
148
+ bHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvpub/lhZDls7bn
149
+ nIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICZsdDsv
150
+ bHN0Jmd0OwombHQ7L2ZhY2V0cyZndDsKICA8L2V4dHJhUmVzcG9uc2VEYXRh
151
+ PgogIDxyZWNvcmRzPgogICAgPHJlY29yZD4KICAgICAgPHJlY29yZFNjaGVt
152
+ YT5pbmZvOnNydy9zY2hlbWEvMS9kYy12MS4xPC9yZWNvcmRTY2hlbWE+CiAg
153
+ ICAgIDxyZWNvcmRQYWNraW5nPnN0cmluZzwvcmVjb3JkUGFja2luZz4KICAg
154
+ ICAgPHJlY29yZERhdGE+CiZsdDtyZGY6UkRGIHhtbG5zOnJkZnM9JnF1b3Q7
155
+ aHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hIyZxdW90OyB4
156
+ bWxuczpkYz0mcXVvdDtodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4x
157
+ LyZxdW90OyB4bWxuczpkY3Rlcm1zPSZxdW90O2h0dHA6Ly9wdXJsLm9yZy9k
158
+ Yy90ZXJtcy8mcXVvdDsgeG1sbnM6cmRmPSZxdW90O2h0dHA6Ly93d3cudzMu
159
+ b3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMmcXVvdDsgeG1sbnM6b3ds
160
+ PSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsIyZxdW90OyB4
161
+ bWxuczpkY25kbD0mcXVvdDtodHRwOi8vbmRsLmdvLmpwL2RjbmRsL3Rlcm1z
162
+ LyZxdW90OyB4bWxuczpmb2FmPSZxdW90O2h0dHA6Ly94bWxucy5jb20vZm9h
163
+ Zi8wLjEvJnF1b3Q7Jmd0OwogICZsdDtkY25kbDpCaWJBZG1pblJlc291cmNl
164
+ IHJkZjphYm91dD0mcXVvdDtodHRwOi8vaXNzLm5kbC5nby5qcC9ib29rcy9S
165
+ MTAwMDAwMDAyLUkwMDAwMDgzNjk4ODQtMDAmcXVvdDsmZ3Q7CiAgICAmbHQ7
166
+ ZGNuZGw6Y2F0YWxvZ2luZ1N0YXR1cyZndDtDNyZsdDsvZGNuZGw6Y2F0YWxv
167
+ Z2luZ1N0YXR1cyZndDsKICAgICZsdDtkY25kbDpiaWJSZWNvcmRDYXRlZ29y
168
+ eSZndDtSMTAwMDAwMDAyJmx0Oy9kY25kbDpiaWJSZWNvcmRDYXRlZ29yeSZn
169
+ dDsKICAgICZsdDtkY25kbDpyZWNvcmQgcmRmOnJlc291cmNlPSZxdW90O2h0
170
+ dHA6Ly9pc3MubmRsLmdvLmpwL2Jvb2tzL1IxMDAwMDAwMDItSTAwMDAwODM2
171
+ OTg4NC0wMCNtYXRlcmlhbCZxdW90Oy8mZ3Q7CiAgJmx0Oy9kY25kbDpCaWJB
172
+ ZG1pblJlc291cmNlJmd0OwogICZsdDtkY25kbDpCaWJSZXNvdXJjZSByZGY6
173
+ YWJvdXQ9JnF1b3Q7aHR0cDovL2lzcy5uZGwuZ28uanAvYm9va3MvUjEwMDAw
174
+ MDAwMi1JMDAwMDA4MzY5ODg0LTAwI21hdGVyaWFsJnF1b3Q7Jmd0OwogICAg
175
+ Jmx0O2RjdGVybXM6aWRlbnRpZmllciByZGY6ZGF0YXR5cGU9JnF1b3Q7aHR0
176
+ cDovL25kbC5nby5qcC9kY25kbC90ZXJtcy9KUE5PJnF1b3Q7Jmd0OzIxMTQz
177
+ Njg4Jmx0Oy9kY3Rlcm1zOmlkZW50aWZpZXImZ3Q7CiAgICAmbHQ7ZGN0ZXJt
178
+ czppZGVudGlmaWVyIHJkZjpkYXRhdHlwZT0mcXVvdDtodHRwOi8vbmRsLmdv
179
+ LmpwL2RjbmRsL3Rlcm1zL0lTQk4mcXVvdDsmZ3Q7NC04ODM2Ny0xMzEtMyZs
180
+ dDsvZGN0ZXJtczppZGVudGlmaWVyJmd0OwogICAgJmx0O3JkZnM6c2VlQWxz
181
+ byByZGY6cmVzb3VyY2U9JnF1b3Q7aHR0cDovL2lkLm5kbC5nby5qcC9qcG5v
182
+ LzIxMTQzNjg4JnF1b3Q7LyZndDsKICAgICZsdDtyZGZzOnNlZUFsc28gcmRm
183
+ OnJlc291cmNlPSZxdW90O2h0dHA6Ly9pc3MubmRsLmdvLmpwL2lzYm4vNDg4
184
+ MzY3MTMxMyZxdW90Oy8mZ3Q7CiAgICAmbHQ7ZGN0ZXJtczp0aXRsZSZndDvm
185
+ g4XloLHmpJzntKLmvJTnv5ImbHQ7L2RjdGVybXM6dGl0bGUmZ3Q7CiAgICAm
186
+ bHQ7ZGM6dGl0bGUmZ3Q7CiAgICAgICZsdDtyZGY6RGVzY3JpcHRpb24mZ3Q7
187
+ CiAgICAgICAgJmx0O3JkZjp2YWx1ZSZndDvmg4XloLHmpJzntKLmvJTnv5Im
188
+ bHQ7L3JkZjp2YWx1ZSZndDsKICAgICAgICAmbHQ7ZGNuZGw6dHJhbnNjcmlw
189
+ dGlvbiZndDvjgrjjg6fjgqbjg5vjgqYg44Kx44Oz44K144KvIOOCqOODs+OC
190
+ t+ODpeOCpiZsdDsvZGNuZGw6dHJhbnNjcmlwdGlvbiZndDsKICAgICAgJmx0
191
+ Oy9yZGY6RGVzY3JpcHRpb24mZ3Q7CiAgICAmbHQ7L2RjOnRpdGxlJmd0Owog
192
+ ICAgJmx0O2RjbmRsOnNlcmllc1RpdGxlJmd0OwogICAgICAmbHQ7cmRmOkRl
193
+ c2NyaXB0aW9uJmd0OwogICAgICAgICZsdDtyZGY6dmFsdWUmZ3Q75paw44O7
194
+ 5Zuz5pu46aSo5a2m44K344Oq44O844K6IDsgNiZsdDsvcmRmOnZhbHVlJmd0
195
+ OwogICAgICAgICZsdDtkY25kbDp0cmFuc2NyaXB0aW9uJmd0O+OCt+ODsyDj
196
+ g4jjgrfjg6fjgqvjg7Pjgqzjgq8g44K344Oq44O844K6Jmx0Oy9kY25kbDp0
197
+ cmFuc2NyaXB0aW9uJmd0OwogICAgICAmbHQ7L3JkZjpEZXNjcmlwdGlvbiZn
198
+ dDsKICAgICZsdDsvZGNuZGw6c2VyaWVzVGl0bGUmZ3Q7CiAgICAmbHQ7ZGNu
199
+ ZGw6ZWRpdGlvbiZndDsz6KiCJmx0Oy9kY25kbDplZGl0aW9uJmd0OwogICAg
200
+ Jmx0O2RjdGVybXM6Y3JlYXRvciZndDsKICAgICAgJmx0O2ZvYWY6QWdlbnQg
201
+ cmRmOmFib3V0PSZxdW90O2h0dHA6Ly9pZC5uZGwuZ28uanAvYXV0aC9lbnRp
202
+ dHkvMDA5ODU5ODYmcXVvdDsmZ3Q7CiAgICAgICAgJmx0O2ZvYWY6bmFtZSZn
203
+ dDvljp/nlLAsIOaZuuWtkCwgMTk0Ny0mbHQ7L2ZvYWY6bmFtZSZndDsKICAg
204
+ ICAgICAmbHQ7ZGNuZGw6dHJhbnNjcmlwdGlvbiZndDvjg4/jg6njg4AsIOOD
205
+ iOODouOCsyZsdDsvZGNuZGw6dHJhbnNjcmlwdGlvbiZndDsKICAgICAgJmx0
206
+ Oy9mb2FmOkFnZW50Jmd0OwogICAgJmx0Oy9kY3Rlcm1zOmNyZWF0b3ImZ3Q7
207
+ CiAgICAmbHQ7ZGN0ZXJtczpjcmVhdG9yJmd0OwogICAgICAmbHQ7Zm9hZjpB
208
+ Z2VudCByZGY6YWJvdXQ9JnF1b3Q7aHR0cDovL2lkLm5kbC5nby5qcC9hdXRo
209
+ L2VudGl0eS8wMTA2ODUxMCZxdW90OyZndDsKICAgICAgICAmbHQ7Zm9hZjpu
210
+ YW1lJmd0O+axn+iNiSwg55Sx5L2zJmx0Oy9mb2FmOm5hbWUmZ3Q7CiAgICAg
211
+ ICAgJmx0O2RjbmRsOnRyYW5zY3JpcHRpb24mZ3Q744Ko44Kw44K1LCDjg6bj
212
+ gqsmbHQ7L2RjbmRsOnRyYW5zY3JpcHRpb24mZ3Q7CiAgICAgICZsdDsvZm9h
213
+ ZjpBZ2VudCZndDsKICAgICZsdDsvZGN0ZXJtczpjcmVhdG9yJmd0OwogICAg
214
+ Jmx0O2RjdGVybXM6Y3JlYXRvciZndDsKICAgICAgJmx0O2ZvYWY6QWdlbnQg
215
+ cmRmOmFib3V0PSZxdW90O2h0dHA6Ly9pZC5uZGwuZ28uanAvYXV0aC9lbnRp
216
+ dHkvMDEwNTk0NjAmcXVvdDsmZ3Q7CiAgICAgICAgJmx0O2ZvYWY6bmFtZSZn
217
+ dDvlsI/lsbEsIOaGsuWPuCwgMTk3MS0mbHQ7L2ZvYWY6bmFtZSZndDsKICAg
218
+ ICAgICAmbHQ7ZGNuZGw6dHJhbnNjcmlwdGlvbiZndDvjgrPjg6Tjg54sIOOC
219
+ seODs+OCuCZsdDsvZGNuZGw6dHJhbnNjcmlwdGlvbiZndDsKICAgICAgJmx0
220
+ Oy9mb2FmOkFnZW50Jmd0OwogICAgJmx0Oy9kY3Rlcm1zOmNyZWF0b3ImZ3Q7
221
+ CiAgICAmbHQ7ZGN0ZXJtczpjcmVhdG9yJmd0OwogICAgICAmbHQ7Zm9hZjpB
222
+ Z2VudCByZGY6YWJvdXQ9JnF1b3Q7aHR0cDovL2lkLm5kbC5nby5qcC9hdXRo
223
+ L2VudGl0eS8wMDE0Nzk3OCZxdW90OyZndDsKICAgICAgICAmbHQ7Zm9hZjpu
224
+ YW1lJmd0O+mrmOWxsSwg5q2j5LmfLCAxOTQxLSZsdDsvZm9hZjpuYW1lJmd0
225
+ OwogICAgICAgICZsdDtkY25kbDp0cmFuc2NyaXB0aW9uJmd0O+OCv+OCq+OD
226
+ pOODniwg44Oe44K144OkJmx0Oy9kY25kbDp0cmFuc2NyaXB0aW9uJmd0Owog
227
+ ICAgICAmbHQ7L2ZvYWY6QWdlbnQmZ3Q7CiAgICAmbHQ7L2RjdGVybXM6Y3Jl
228
+ YXRvciZndDsKICAgICZsdDtkY3Rlcm1zOmNyZWF0b3ImZ3Q7CiAgICAgICZs
229
+ dDtmb2FmOkFnZW50IHJkZjphYm91dD0mcXVvdDtodHRwOi8vaWQubmRsLmdv
230
+ LmpwL2F1dGgvZW50aXR5LzAwMTQ2MTYzJnF1b3Q7Jmd0OwogICAgICAgICZs
231
+ dDtmb2FmOm5hbWUmZ3Q75qSN5p2+LCDosp7lpKssIDE5NDgtJmx0Oy9mb2Fm
232
+ Om5hbWUmZ3Q7CiAgICAgICAgJmx0O2RjbmRsOnRyYW5zY3JpcHRpb24mZ3Q7
233
+ 44Km44Ko44Oe44OELCDjgrXjg4DjgqombHQ7L2RjbmRsOnRyYW5zY3JpcHRp
234
+ b24mZ3Q7CiAgICAgICZsdDsvZm9hZjpBZ2VudCZndDsKICAgICZsdDsvZGN0
235
+ ZXJtczpjcmVhdG9yJmd0OwogICAgJmx0O2RjOmNyZWF0b3ImZ3Q75Y6f55Sw
236
+ 5pm65a2QIOe3qCZsdDsvZGM6Y3JlYXRvciZndDsKICAgICZsdDtkYzpjcmVh
237
+ dG9yJmd0O+WOn+eUsOaZuuWtkCwg5rGf6I2J55Sx5L2zLCDlsI/lsbHmhrLl
238
+ j7gsIOa+pOS6lea4hSDlhbHokZcmbHQ7L2RjOmNyZWF0b3ImZ3Q7CiAgICAm
239
+ bHQ7ZGNuZGw6c2VyaWVzQ3JlYXRvciZndDvpq5jlsbHmraPkuZ8sIOakjead
240
+ vuiynuWkqyDnm6Pkv64mbHQ7L2RjbmRsOnNlcmllc0NyZWF0b3ImZ3Q7CiAg
241
+ ICAmbHQ7ZGN0ZXJtczpwdWJsaXNoZXImZ3Q7CiAgICAgICZsdDtmb2FmOkFn
242
+ ZW50Jmd0OwogICAgICAgICZsdDtmb2FmOm5hbWUmZ3Q75qi55p2R5oi/Jmx0
243
+ Oy9mb2FmOm5hbWUmZ3Q7CiAgICAgICAgJmx0O2RjbmRsOnRyYW5zY3JpcHRp
244
+ b24mZ3Q744K444Ol44K944Oz44Oc44KmJmx0Oy9kY25kbDp0cmFuc2NyaXB0
245
+ aW9uJmd0OwogICAgICAgICZsdDtkY25kbDpsb2NhdGlvbiZndDvmnbHkuqwm
246
+ bHQ7L2RjbmRsOmxvY2F0aW9uJmd0OwogICAgICAmbHQ7L2ZvYWY6QWdlbnQm
247
+ Z3Q7CiAgICAmbHQ7L2RjdGVybXM6cHVibGlzaGVyJmd0OwogICAgJmx0O2Rj
248
+ bmRsOnB1YmxpY2F0aW9uUGxhY2UgcmRmOmRhdGF0eXBlPSZxdW90O2h0dHA6
249
+ Ly9wdXJsLm9yZy9kYy90ZXJtcy9JU08zMTY2JnF1b3Q7Jmd0O0pQJmx0Oy9k
250
+ Y25kbDpwdWJsaWNhdGlvblBsYWNlJmd0OwogICAgJmx0O2RjdGVybXM6ZGF0
251
+ ZSZndDsyMDA2LjEwJmx0Oy9kY3Rlcm1zOmRhdGUmZ3Q7CiAgICAmbHQ7ZGN0
252
+ ZXJtczppc3N1ZWQgcmRmOmRhdGF0eXBlPSZxdW90O2h0dHA6Ly9wdXJsLm9y
253
+ Zy9kYy90ZXJtcy9XM0NEVEYmcXVvdDsmZ3Q7MjAwNiZsdDsvZGN0ZXJtczpp
254
+ c3N1ZWQmZ3Q7CiAgICAmbHQ7ZGN0ZXJtczpzdWJqZWN0Jmd0OwogICAgICAm
255
+ bHQ7cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0mcXVvdDtodHRwOi8vaWQu
256
+ bmRsLmdvLmpwL2F1dGgvbmRsc2gvMDA1NzUwMTAmcXVvdDsmZ3Q7CiAgICAg
257
+ ICAgJmx0O3JkZjp2YWx1ZSZndDvmg4XloLHmpJzntKImbHQ7L3JkZjp2YWx1
258
+ ZSZndDsKICAgICAgJmx0Oy9yZGY6RGVzY3JpcHRpb24mZ3Q7CiAgICAmbHQ7
259
+ L2RjdGVybXM6c3ViamVjdCZndDsKICAgICZsdDtkY3Rlcm1zOnN1YmplY3Qg
260
+ cmRmOnJlc291cmNlPSZxdW90O2h0dHA6Ly9pZC5uZGwuZ28uanAvY2xhc3Mv
261
+ bmRsYy9VTDQxJnF1b3Q7LyZndDsKICAgICZsdDtkY3Rlcm1zOnN1YmplY3Qg
262
+ cmRmOnJlc291cmNlPSZxdW90O2h0dHA6Ly9pZC5uZGwuZ28uanAvY2xhc3Mv
263
+ bmRjOS8wMDcuNTgmcXVvdDsvJmd0OwogICAgJmx0O2RjdGVybXM6bGFuZ3Vh
264
+ Z2UgcmRmOmRhdGF0eXBlPSZxdW90O2h0dHA6Ly9wdXJsLm9yZy9kYy90ZXJt
265
+ cy9JU082MzktMiZxdW90OyZndDtqcG4mbHQ7L2RjdGVybXM6bGFuZ3VhZ2Um
266
+ Z3Q7CiAgICAmbHQ7ZGN0ZXJtczpleHRlbnQmZ3Q7MjAzcCA7IDIxY20mbHQ7
267
+ L2RjdGVybXM6ZXh0ZW50Jmd0OwogICAgJmx0O2RjbmRsOnByaWNlJmd0OzE5
268
+ MDDlhoYmbHQ7L2RjbmRsOnByaWNlJmd0OwogICAgJmx0O2RjdGVybXM6YXVk
269
+ aWVuY2UmZ3Q75LiA6IisJmx0Oy9kY3Rlcm1zOmF1ZGllbmNlJmd0OwogICAg
270
+ Jmx0O2RjbmRsOm1hdGVyaWFsVHlwZSByZGY6cmVzb3VyY2U9JnF1b3Q7aHR0
271
+ cDovL25kbC5nby5qcC9uZGx0eXBlL0Jvb2smcXVvdDsgcmRmczpsYWJlbD0m
272
+ cXVvdDvlm7Pmm7gmcXVvdDsvJmd0OwogICAgJmx0O2RjdGVybXM6YWNjZXNz
273
+ UmlnaHRzJmd0O1MwMVA5OVU5OSZsdDsvZGN0ZXJtczphY2Nlc3NSaWdodHMm
274
+ Z3Q7CiAgJmx0Oy9kY25kbDpCaWJSZXNvdXJjZSZndDsKJmx0Oy9yZGY6UkRG
275
+ Jmd0OwogICAgICA8L3JlY29yZERhdGE+CiAgICAgIDxyZWNvcmRQb3NpdGlv
276
+ bj4xPC9yZWNvcmRQb3NpdGlvbj4KICAgIDwvcmVjb3JkPgogIDwvcmVjb3Jk
277
+ cz4KPC9zZWFyY2hSZXRyaWV2ZVJlc3BvbnNlPgo=
278
+ http_version:
279
+ recorded_at: Sun, 18 Sep 2016 04:54:45 GMT
280
+ recorded_with: VCR 3.0.3
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'rails_helper'
2
2
 
3
3
  RSpec.describe OaiController, type: :controller do
4
4
  fixtures :all
@@ -31,6 +31,13 @@ RSpec.describe OaiController, type: :controller do
31
31
  response.should render_template("oai/list_records")
32
32
  end
33
33
 
34
+ it "should limit from/until parameter with ListRecords" do
35
+ FactoryGirl.create(:manifestation, updated_at: DateTime.new(2016,5,1))
36
+ get :provider, format: 'xml', verb: 'ListRecords', metadataPrefix: 'junii2', from: '2016-05-01', until: '2016-05-02'
37
+ expect(assigns(:manifestations)).not_to be_blank
38
+ expect(assigns(:manifestations).size).to eq 1
39
+ end
40
+
34
41
  it "should not assign all manifestations as @manifestations in oai format with ListIdentifiers without metadataPrefix" do
35
42
  get :provider, format: 'xml', :verb => 'ListIdentifiers'
36
43
  assigns(:manifestations).should_not be_nil
@@ -5,3 +5,7 @@ class User < ActiveRecord::Base
5
5
 
6
6
  include EnjuSeed::EnjuUser
7
7
  end
8
+
9
+ Item.include(EnjuLibrary::EnjuItem)
10
+ Manifestation.include(EnjuOai::OaiModel)
11
+ Manifestation.include(EnjuSubject::EnjuManifestation)
@@ -5,6 +5,7 @@ require 'rails/all'
5
5
  Bundler.require(*Rails.groups)
6
6
  require 'enju_oai'
7
7
  require 'enju_nii'
8
+ require 'enju_ndl'
8
9
  require 'enju_leaf'
9
10
  require 'globalize'
10
11
  require 'globalize-accessors'
@@ -0,0 +1,18 @@
1
+ class CreateMessageTemplates < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :message_templates do |t|
4
+ t.string :status, :null => false
5
+ t.text :title, :null => false
6
+ t.text :body, :null => false
7
+ t.integer :position
8
+ t.string :locale, :default => I18n.default_locale.to_s
9
+
10
+ t.timestamps
11
+ end
12
+ add_index :message_templates, :status, :unique => true
13
+ end
14
+
15
+ def self.down
16
+ drop_table :message_templates
17
+ end
18
+ end
@@ -0,0 +1,23 @@
1
+ class CreateMessages < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :messages, :force => true do |t|
4
+ t.datetime :read_at
5
+ t.integer :receiver_id, :sender_id
6
+ t.string :subject, :null => false
7
+ t.text :body
8
+ t.integer :message_request_id
9
+ t.integer :parent_id
10
+
11
+ t.timestamps
12
+ end
13
+
14
+ add_index :messages, :sender_id
15
+ add_index :messages, :receiver_id
16
+ add_index :messages, :message_request_id
17
+ add_index :messages, :parent_id
18
+ end
19
+
20
+ def self.down
21
+ drop_table :messages
22
+ end
23
+ end