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

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 (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