hydra-derivatives 3.5.0 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +14 -7
  3. data/Gemfile +3 -2
  4. data/README.md +6 -1
  5. data/Rakefile +1 -1
  6. data/VERSION +1 -1
  7. data/hydra-derivatives.gemspec +9 -6
  8. data/lib/hydra/derivatives/config.rb +1 -1
  9. data/lib/hydra/derivatives/processors/document.rb +4 -1
  10. data/lib/hydra/derivatives/processors/full_text.rb +5 -3
  11. data/solr/config/xslt/example.xsl +1 -1
  12. data/solr/config/xslt/luke.xsl +1 -1
  13. metadata +132 -92
  14. data/spec/fixtures/FlashPix.ppt +0 -0
  15. data/spec/fixtures/adobe1998.tif +0 -0
  16. data/spec/fixtures/countdown.avi +0 -0
  17. data/spec/fixtures/jpeg2k_config.yml +0 -20
  18. data/spec/fixtures/piano_note.wav +0 -0
  19. data/spec/fixtures/sample.rtf +0 -68
  20. data/spec/fixtures/test.dng +0 -0
  21. data/spec/fixtures/test.doc +0 -0
  22. data/spec/fixtures/test.docx +0 -0
  23. data/spec/fixtures/test.pdf +0 -0
  24. data/spec/fixtures/test.pptx +0 -0
  25. data/spec/fixtures/test.tif +0 -0
  26. data/spec/fixtures/test.xls +0 -0
  27. data/spec/fixtures/test.xlsx +0 -0
  28. data/spec/fixtures/world.png +0 -0
  29. data/spec/processors/active_encode_spec.rb +0 -132
  30. data/spec/processors/document_spec.rb +0 -41
  31. data/spec/processors/full_text_spec.rb +0 -127
  32. data/spec/processors/image_spec.rb +0 -124
  33. data/spec/processors/jpeg2k_spec.rb +0 -82
  34. data/spec/processors/processor_spec.rb +0 -53
  35. data/spec/processors/shell_based_processor_spec.rb +0 -28
  36. data/spec/processors/video_spec.rb +0 -59
  37. data/spec/runners/active_encode_derivatives_spec.rb +0 -38
  38. data/spec/runners/runner_spec.rb +0 -9
  39. data/spec/services/audio_derivatives_spec.rb +0 -78
  40. data/spec/services/persist_basic_contained_output_file_service_spec.rb +0 -42
  41. data/spec/services/persist_external_file_output_file_service_spec.rb +0 -26
  42. data/spec/services/persist_output_file_service_spec.rb +0 -47
  43. data/spec/services/remote_source_file_spec.rb +0 -33
  44. data/spec/services/retrieve_source_file_service_spec.rb +0 -60
  45. data/spec/services/tempfile_service_spec.rb +0 -54
  46. data/spec/spec_helper.rb +0 -40
  47. data/spec/units/audio_encoder_spec.rb +0 -34
  48. data/spec/units/config_spec.rb +0 -50
  49. data/spec/units/derivatives_spec.rb +0 -70
  50. data/spec/units/io_decorator_spec.rb +0 -45
  51. data/spec/units/logger_spec.rb +0 -27
  52. data/spec/units/transcoding_spec.rb +0 -354
Binary file
Binary file
Binary file
@@ -1,20 +0,0 @@
1
- defaults: &defaults
2
- jp2_recipes:
3
- # note that these aren't real recipes, just enough to test configuration options
4
- :myrecipe_color: >
5
- -rate 2.4
6
- -jp2_space sRGB
7
- Stiles=\{1024,1024\}
8
- :myrecipe_grey: >
9
- -rate 2.4
10
- -jp2_space sLUM
11
- Stiles=\{1024,1024\}
12
-
13
- development:
14
- <<: *defaults
15
-
16
- test:
17
- <<: *defaults
18
-
19
- production:
20
- <<: *defaults
Binary file
@@ -1,68 +0,0 @@
1
- {\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
2
- {\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}
3
- {\f121\froman\fcharset238\fprq2 Times New Roman CE;}{\f122\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f124\froman\fcharset161\fprq2 Times New Roman Greek;}{\f125\froman\fcharset162\fprq2 Times New Roman Tur;}
4
- {\f126\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f127\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f128\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f129\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
5
- {\f131\fswiss\fcharset238\fprq2 Arial CE;}{\f132\fswiss\fcharset204\fprq2 Arial Cyr;}{\f134\fswiss\fcharset161\fprq2 Arial Greek;}{\f135\fswiss\fcharset162\fprq2 Arial Tur;}{\f136\fswiss\fcharset177\fprq2 Arial (Hebrew);}
6
- {\f137\fswiss\fcharset178\fprq2 Arial (Arabic);}{\f138\fswiss\fcharset186\fprq2 Arial Baltic;}{\f139\fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f141\fmodern\fcharset238\fprq1 Courier New CE;}{\f142\fmodern\fcharset204\fprq1 Courier New Cyr;}
7
- {\f144\fmodern\fcharset161\fprq1 Courier New Greek;}{\f145\fmodern\fcharset162\fprq1 Courier New Tur;}{\f146\fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f147\fmodern\fcharset178\fprq1 Courier New (Arabic);}
8
- {\f148\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f149\fmodern\fcharset163\fprq1 Courier New (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;
9
- \red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{
10
- \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{\s1\ql \li0\ri0\sb240\sa60\keepn\widctlpar\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0
11
- \b\f1\fs32\lang1033\langfe1033\kerning32\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid2294299 heading 1;}{\*\cs10 \additive \ssemihidden Default Paragraph Font;}{\*
12
- \ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv
13
- \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}{\*\ts15\tsrowd\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10
14
- \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv
15
- \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \sbasedon11 \snext15 \styrsid2294299 Table Grid;}{
16
- \s16\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext16 \ssemihidden \styrsid1792631 footnote text;}{\*\cs17 \additive \super
17
- \sbasedon10 \ssemihidden \styrsid1792631 footnote reference;}}{\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\listtable{\list\listtemplateid-767292450\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
18
- \levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
19
- \leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693
20
- \'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers
21
- ;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600
22
- \jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }
23
- {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23
24
- \levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
25
- \levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid687222349}}{\*\listoverridetable{\listoverride\listid687222349
26
- \listoverridecount0\ls1}}{\*\rsidtbl \rsid1792631\rsid2294299}{\*\generator Microsoft Word 11.0.6113;}{\info{\title This is a test RTF}{\author Nate}{\operator Nate}{\version2}}\widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1800\dgvorigin1440
27
- \dghshow1\dgvshow1\jexpand\viewkind1\viewscale80\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct
28
- \asianbrkrule\rsidroot2294299\newtblstyruls\nogrowautofit \fet0{\*\ftnsep \pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid1792631 \chftnsep
29
- \par }}{\*\ftnsepc \pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid1792631 \chftnsepc
30
- \par }}{\*\aftnsep \pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid1792631 \chftnsep
31
- \par }}{\*\aftnsepc \pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid1792631 \chftnsepc
32
- \par }}\sectd \linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}
33
- {\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang
34
- {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain
35
- \s1\ql \li0\ri0\sb240\sa60\keepn\widctlpar\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid2294299 \b\f1\fs32\lang1033\langfe1033\kerning32\cgrid\langnp1033\langfenp1033 {\insrsid2294299 This is a test RTF
36
- \par }\pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2294299 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid2294299 Hi! I\rquote m a test file. This is some }{\b\insrsid2294299 bold}{
37
- \insrsid2294299 text, and some }{\i\insrsid2294299 italic}{\insrsid2294299 text, as well as some }{\ul\insrsid2294299 underline}{\insrsid2294299 text. And a bit of }{\v\insrsid2294299\charrsid2294299 hidden}{\insrsid2294299 text. So we\rquote
38
- re going to end this paragraph here and go on to a nice little list:
39
- \par
40
- \par {\listtext\pard\plain\f3\insrsid2294299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ql \fi-360\li720\ri0\widctlpar\jclisttab\tx720\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid2294299 {\insrsid2294299 Item 1
41
- \par {\listtext\pard\plain\f3\insrsid2294299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Item 2
42
- \par {\listtext\pard\plain\f3\insrsid2294299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Item 3
43
- \par {\listtext\pard\plain\f3\insrsid2294299 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Item 4
44
- \par }\pard \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2294299 {\insrsid2294299
45
- \par And now comes a fun table:
46
- \par
47
- \par }\trowd \irow0\irowband0\ts15\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
48
- \trftsWidth1\trftsWidthB3\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tbllkhdrrows\tbllklastrow\tbllkhdrcols\tbllklastcol \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
49
- \cltxlrtb\clftsWidth3\clwWidth2952\clshdrawnil \cellx2844\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2952\clshdrawnil \cellx5796\clvertalt\clbrdrt\brdrs\brdrw10
50
- \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2952\clshdrawnil \cellx8748\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2294299\yts15
51
- \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid2294299 Cell 1\cell Cell 2
52
- \par More in cell 2\cell Cell 3\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid2294299 \trowd \irow0\irowband0\ts15\trgaph108\trleft-108\trbrdrt
53
- \brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
54
- \trftsWidth1\trftsWidthB3\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tbllkhdrrows\tbllklastrow\tbllkhdrcols\tbllklastcol \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
55
- \cltxlrtb\clftsWidth3\clwWidth2952\clshdrawnil \cellx2844\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2952\clshdrawnil \cellx5796\clvertalt\clbrdrt\brdrs\brdrw10
56
- \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2952\clshdrawnil \cellx8748\row }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\pararsid2294299\yts15
57
- \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid2294299 Next row\cell Next row \cell Next row\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0
58
- \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\insrsid2294299 \trowd \irow1\irowband1\lastrow \ts15\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv
59
- \brdrs\brdrw10 \trftsWidth1\trftsWidthB3\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tbllkhdrrows\tbllklastrow\tbllkhdrcols\tbllklastcol \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr
60
- \brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2952\clshdrawnil \cellx2844\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2952\clshdrawnil \cellx5796\clvertalt\clbrdrt
61
- \brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2952\clshdrawnil \cellx8748\row }\pard \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2294299 {
62
- \insrsid2294299
63
- \par A page break:
64
- \par \page And here we\rquote re on the next page.}{\insrsid1792631 }{\insrsid2294299
65
- \par }{\insrsid1792631 This para has a }{\cs17\super\insrsid1792631 \chftn {\footnote \pard\plain \s16\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs17\super\insrsid1792631
66
- \chftn }{\insrsid1792631 This is the actual content of the footnote.}}}{\insrsid1792631 footnote.
67
- \par And here\rquote s yet another paragraph. }{\insrsid1792631\charrsid2294299
68
- \par }}
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,132 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Hydra::Derivatives::Processors::ActiveEncode do
4
- let(:file_path) { File.join(fixture_path, 'videoshort.mp4') }
5
- let(:directives) { { url: '12345/derivative' } }
6
- let(:output_file_service) { Hydra::Derivatives::PersistExternalFileOutputFileService }
7
- let(:options) { { output_file_service: output_file_service } }
8
- let(:processor) { described_class.new(file_path, directives, options) }
9
-
10
- describe '#process' do
11
- subject { processor.process }
12
-
13
- # Mock out the actual encoding, just pretend that the
14
- # encode finished and returned a certain status.
15
- let(:failed_status) { false }
16
- let(:cancelled_status) { false }
17
- let(:completed_status) { false }
18
- let(:state) { :completed }
19
- let(:errors) { [] }
20
- let(:external_url) { 'http://www.example.com/external/content' }
21
- let(:output) { [{ url: external_url }] }
22
- let(:encode_job_double) do
23
- enc = instance_double('encode_job',
24
- state: state,
25
- errors: errors,
26
- output: output,
27
- running?: false,
28
- completed?: completed_status,
29
- failed?: failed_status,
30
- cancelled?: cancelled_status)
31
- allow(enc).to receive(:reload).and_return(enc)
32
- enc
33
- end
34
-
35
- context 'with a custom encode class' do
36
- before do
37
- class TestEncode < ::ActiveEncode::Base; end
38
-
39
- # For this spec we don't care what happens with output,
40
- # so stub it out to speed up the spec.
41
- allow(output_file_service).to receive(:call)
42
- end
43
-
44
- after { Object.send(:remove_const, :TestEncode) }
45
-
46
- let(:completed_status) { true }
47
- let(:state) { :completed }
48
- let(:options) do
49
- {
50
- encode_class: TestEncode,
51
- output_file_service: output_file_service
52
- }
53
- end
54
-
55
- it 'uses the configured encode class' do
56
- expect(TestEncode).to receive(:create).and_return(encode_job_double)
57
- subject
58
- end
59
- end
60
-
61
- context 'when the encoding failed' do
62
- let(:state) { :failed }
63
- let(:failed_status) { true }
64
- let(:errors) { ['error 1', 'error 2'] }
65
-
66
- before do
67
- # Don't really encode the file during specs
68
- allow(::ActiveEncode::Base).to receive(:create).and_return(encode_job_double)
69
- end
70
-
71
- it 'raises an exception' do
72
- expect { subject }.to raise_error(Hydra::Derivatives::Processors::ActiveEncodeError, "ActiveEncode status was \"failed\" for #{file_path}: error 1 ; error 2")
73
- end
74
- end
75
-
76
- context 'when the encoding was cancelled' do
77
- let(:state) { :cancelled }
78
- let(:cancelled_status) { true }
79
-
80
- before do
81
- # Don't really encode the file during specs
82
- allow(::ActiveEncode::Base).to receive(:create).and_return(encode_job_double)
83
- end
84
-
85
- it 'raises an exception' do
86
- expect { subject }.to raise_error(Hydra::Derivatives::Processors::ActiveEncodeError, "ActiveEncode status was \"cancelled\" for #{file_path}")
87
- end
88
- end
89
-
90
- context 'when the timeout is set' do
91
- before do
92
- processor.timeout = 0.01
93
- allow(processor).to receive(:wait_for_encode_job) { sleep 0.1 }
94
- end
95
-
96
- it 'raises a timeout exception' do
97
- msg = "Unable to process ActiveEncode derivative: The command took longer than 0.01 seconds to execute. Encoding will be cancelled."
98
- expect { processor.process }.to raise_error Hydra::Derivatives::TimeoutError, msg
99
- end
100
- end
101
-
102
- context 'when the timeout is not set' do
103
- before do
104
- processor.timeout = nil
105
- # Don't really encode the file during specs
106
- allow(::ActiveEncode::Base).to receive(:create).and_return(encode_job_double)
107
- end
108
-
109
- it 'processes the encoding without a timeout' do
110
- expect(processor).not_to receive(:wait_for_encode_job_with_timeout)
111
- expect(processor).to receive(:wait_for_encode_job).once
112
- processor.process
113
- end
114
- end
115
-
116
- context 'when error occurs during timeout cleanup' do
117
- let(:error) { StandardError.new('some error message') }
118
-
119
- before do
120
- processor.timeout = 0.01
121
- allow(processor).to receive(:wait_for_encode_job) { sleep 0.1 }
122
- allow(::ActiveEncode::Base).to receive(:create).and_return(encode_job_double)
123
- allow(encode_job_double).to receive(:cancel!).and_raise(error)
124
- end
125
-
126
- it 'doesnt lose the timeout error, but adds the new error message' do
127
- msg = "Unable to process ActiveEncode derivative: The command took longer than 0.01 seconds to execute. Encoding will be cancelled. An error occurred while trying to cancel encoding: some error message"
128
- expect { processor.process }.to raise_error Hydra::Derivatives::TimeoutError, msg
129
- end
130
- end
131
- end
132
- end
@@ -1,41 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Hydra::Derivatives::Processors::Document do
4
- subject { described_class.new(source_path, directives) }
5
-
6
- let(:source_path) { File.join(fixture_path, "test.doc") }
7
- let(:output_service) { Hydra::Derivatives::PersistBasicContainedOutputFileService }
8
-
9
- before { allow(subject).to receive(:converted_file).and_return(converted_file) }
10
-
11
- describe "#encode_file" do
12
- context "when converting to jpg" do
13
- let(:directives) { { format: "jpg" } }
14
- let(:converted_file) { "path/to/pdf/created/from/original" }
15
- let(:mock_processor) { double }
16
-
17
- before do
18
- allow(Hydra::Derivatives::Processors::Image).to receive(:new).with(converted_file, directives).and_return(mock_processor)
19
- end
20
-
21
- it "creates a thumbnail of the document using a pdf created from the original" do
22
- expect(mock_processor).to receive(:process)
23
- expect(File).to receive(:unlink).with(converted_file)
24
- subject.encode_file("jpg")
25
- end
26
- end
27
-
28
- context "when converting to another format" do
29
- let(:directives) { { format: "png" } }
30
- let(:converted_file) { "path/to/converted.png" }
31
- let(:mock_content) { "mocked png content" }
32
-
33
- before { allow(File).to receive(:read).with(converted_file).and_return(mock_content) }
34
- it "creates a thumbnail of the document" do
35
- expect(output_service).to receive(:call).with(mock_content, directives)
36
- expect(File).to receive(:unlink).with(converted_file)
37
- subject.encode_file("png")
38
- end
39
- end
40
- end
41
- end
@@ -1,127 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Hydra::Derivatives::Processors::FullText do
4
- let(:file_path) { File.join(fixture_path, 'test.docx') }
5
- let(:directives) { { format: 'txt', url: RDF::URI('http://localhost:8983/fedora/rest/dev/1234/ogg') } }
6
- let(:processor) { described_class.new(file_path, directives) }
7
-
8
- describe "#process" do
9
- it 'extracts fulltext and stores the results' do
10
- expect(processor.output_file_service).to receive(:call) do |first, second|
11
- expect(first).to match(/Project Charter for E-Content Delivery Platform Review/)
12
- expect(second).to eq directives
13
- end
14
- processor.process
15
- end
16
- end
17
-
18
- describe "fetch" do
19
- subject { processor.send(:fetch) }
20
-
21
- let(:response_body) { 'returned by Solr' }
22
- let(:uri) { URI('https://example.com:99/solr/update') }
23
- let(:req) do
24
- Net::HTTP::Post.new(
25
- '/solr/update',
26
- "Content-Type" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "Content-Length" => "24244"
27
- )
28
- end
29
-
30
- before do
31
- allow(processor).to receive(:uri).and_return(uri)
32
- end
33
-
34
- context "when that is successful" do
35
- let(:resp) { double(code: '200', type_params: {}, body: response_body) }
36
-
37
- it "calls the extraction service" do
38
- expect(processor).to receive(:check_for_ssl)
39
- expect(Net::HTTP).to receive(:start).with('example.com', 99).and_yield(req)
40
- expect(Net::HTTP::Post).to receive(:new).with('/solr/update', "Content-Type" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "Content-Length" => "24244").and_return(req)
41
- expect(req).to receive(:request).and_return(resp)
42
- expect(subject).to eq response_body
43
- end
44
- end
45
-
46
- context "when that is successful with UTF-8 content" do
47
- let(:response_utf8) { "returned by “Solr”" }
48
- let(:response_ascii) { response_utf8.dup.force_encoding("ASCII-8BIT") }
49
- let(:resp) { double(code: '200', type_params: { "charset" => "UTF-8" }, body: response_ascii) }
50
-
51
- it "calls the extraction service" do
52
- expect(processor).to receive(:check_for_ssl)
53
- expect(Net::HTTP).to receive(:start).with('example.com', 99).and_yield(req)
54
- expect(Net::HTTP::Post).to receive(:new).with('/solr/update', "Content-Type" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "Content-Length" => "24244").and_return(req)
55
- expect(req).to receive(:request).and_return(resp)
56
- expect(subject).to eq response_utf8
57
- end
58
- end
59
-
60
- context "when that fails" do
61
- let(:resp) { double(code: '500', body: response_body) }
62
-
63
- it "raises an error" do
64
- expect(processor).to receive(:check_for_ssl)
65
- expect(Net::HTTP).to receive(:start).with('example.com', 99).and_yield(req)
66
- expect(Net::HTTP::Post).to receive(:new).with('/solr/update', "Content-Type" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "Content-Length" => "24244").and_return(req)
67
- expect(req).to receive(:request).and_return(resp)
68
- expect { subject }.to raise_error(RuntimeError, %r{^Solr Extract service was unsuccessful. 'https://example\.com:99/solr/update' returned code 500})
69
- end
70
- end
71
-
72
- context "with basic_auth" do
73
- let(:resp) { double(code: '200', type_params: {}, body: response_body) }
74
- let(:uri) { URI('https://user:password@example.com:99/solr/update') }
75
-
76
- it "calls the extraction service with basic auth" do
77
- expect(processor).to receive(:check_for_ssl)
78
- expect(Net::HTTP).to receive(:start).with('example.com', 99).and_yield(req)
79
- expect(Net::HTTP::Post).to receive(:new).with('/solr/update', "Content-Type" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "Content-Length" => "24244").and_return(req)
80
- expect(req).to receive(:basic_auth).with('user', 'password')
81
- expect(req).to receive(:request).and_return(resp)
82
- expect(subject).to eq response_body
83
- end
84
- end
85
-
86
- context "with no basic_auth credentials" do
87
- let(:resp) { double(code: '401', type_params: {}, body: response_body) }
88
- let(:uri) { URI('https://user:password@example.com:99/solr/update') }
89
-
90
- it "raises a 401 error" do
91
- req.basic_auth(nil, nil)
92
- expect(processor).to receive(:check_for_ssl)
93
- expect(Net::HTTP).to receive(:start).with('example.com', 99).and_yield(req)
94
- expect(req).to receive(:request).and_return(resp)
95
- expect { subject }.to raise_error(RuntimeError, %r{^Solr Extract service was unsuccessful. 'https://user:password@example.com:99/solr/update' returned code 401})
96
- end
97
- end
98
- end
99
-
100
- describe "uri" do
101
- subject { processor.send(:uri) }
102
-
103
- let(:root) { URI('https://example.com/solr/myCollection/') }
104
-
105
- before do
106
- allow(ActiveFedora::SolrService.instance.conn).to receive(:uri).and_return(root)
107
- end
108
-
109
- it "points at the extraction service" do
110
- expect(subject).to be_kind_of URI
111
- expect(subject.to_s).to eq 'https://example.com/solr/myCollection/update/extract?extractOnly=true&wt=json&extractFormat=text'
112
- end
113
- end
114
-
115
- describe "check_for_ssl" do
116
- subject { processor.send(:check_for_ssl) }
117
-
118
- it "returns false if uri.scheme is http" do
119
- allow(processor).to receive(:uri).and_return(URI('http://example.com:99/solr/update'))
120
- expect(subject).to be false
121
- end
122
- it "returns true if uri.scheme is https" do
123
- allow(processor).to receive(:uri).and_return(URI('https://example.com:99/solr/update'))
124
- expect(subject).to be true
125
- end
126
- end
127
- end
@@ -1,124 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Hydra::Derivatives::Processors::Image do
4
- subject { described_class.new(file_name, directives) }
5
-
6
- let(:file_name) { "file_name" }
7
-
8
- context "when arguments are passed as a hash" do
9
- before { allow(subject).to receive(:load_image_transformer).and_return(mock_image) }
10
-
11
- context "with a multi-page pdf source file" do
12
- let(:first_page) { instance_double("MockPage") }
13
- let(:second_page) { instance_double("MockPage") }
14
- let(:mock_image) { instance_double("MockImageOfPdf", layers: [first_page, second_page]) }
15
-
16
- before { allow(mock_image).to receive(:type).and_return("PDF") }
17
-
18
- context "when default" do
19
- let(:directives) { { label: :thumb, size: "200x300>", format: 'png', quality: 75 } }
20
-
21
- it "uses the first page" do
22
- expect(first_page).to receive(:flatten)
23
- expect(second_page).not_to receive(:flatten)
24
- expect(first_page).to receive(:resize).with("200x300>")
25
- expect(second_page).not_to receive(:resize)
26
- expect(first_page).to receive(:format).with("png")
27
- expect(second_page).not_to receive(:format)
28
- expect(first_page).to receive(:quality).with("75")
29
- expect(second_page).not_to receive(:quality)
30
- expect(subject).to receive(:write_image).with(first_page)
31
- subject.process
32
- end
33
- end
34
-
35
- context "when specifying a layer" do
36
- let(:directives) { { label: :thumb, size: "200x300>", format: 'png', quality: 75, layer: 1 } }
37
-
38
- it "uses the second page" do
39
- expect(second_page).to receive(:flatten)
40
- expect(first_page).not_to receive(:flatten)
41
- expect(second_page).to receive(:resize).with("200x300>")
42
- expect(first_page).not_to receive(:resize)
43
- expect(second_page).to receive(:format).with("png")
44
- expect(first_page).not_to receive(:format)
45
- expect(second_page).to receive(:quality).with("75")
46
- expect(first_page).not_to receive(:quality)
47
- expect(subject).to receive(:write_image).with(second_page)
48
- subject.process
49
- end
50
- end
51
- end
52
-
53
- context "with an image source file" do
54
- before { allow(mock_image).to receive(:type).and_return("JPEG") }
55
-
56
- context "when default" do
57
- let(:mock_image) { instance_double("MockImage") }
58
- let(:directives) { { label: :thumb, size: "200x300>", format: 'png', quality: 75 } }
59
-
60
- it "uses the image file" do
61
- expect(mock_image).not_to receive(:layers)
62
- expect(mock_image).to receive(:flatten)
63
- expect(mock_image).to receive(:resize).with("200x300>")
64
- expect(mock_image).to receive(:format).with("png")
65
- expect(mock_image).to receive(:quality).with("75")
66
- expect(subject).to receive(:write_image).with(mock_image)
67
- subject.process
68
- end
69
- end
70
-
71
- context "when specifying a layer" do
72
- let(:first_layer) { instance_double("MockPage") }
73
- let(:second_layer) { instance_double("MockPage") }
74
- let(:mock_image) { instance_double("MockImage", layers: [first_layer, second_layer]) }
75
- let(:directives) { { label: :thumb, size: "200x300>", format: 'png', quality: 75, layer: 1 } }
76
-
77
- it "uses the layer" do
78
- expect(second_layer).to receive(:flatten)
79
- expect(first_layer).not_to receive(:flatten)
80
- expect(second_layer).to receive(:resize).with("200x300>")
81
- expect(first_layer).not_to receive(:resize)
82
- expect(second_layer).to receive(:format).with("png")
83
- expect(first_layer).not_to receive(:format)
84
- expect(second_layer).to receive(:quality).with("75")
85
- expect(first_layer).not_to receive(:quality)
86
- expect(subject).to receive(:write_image).with(second_layer)
87
- subject.process
88
- end
89
- end
90
- end
91
- end
92
-
93
- describe "#process" do
94
- let(:directives) { { size: "100x100>", format: "png" } }
95
-
96
- context "when a timeout is set" do
97
- before do
98
- subject.timeout = 0.1
99
- allow(subject).to receive(:create_resized_image) { sleep 0.2 }
100
- end
101
- it "raises a timeout exception" do
102
- expect { subject.process }.to raise_error Hydra::Derivatives::TimeoutError
103
- end
104
- end
105
-
106
- context "when not set" do
107
- before { subject.timeout = nil }
108
- it "processes without a timeout" do
109
- expect(subject).to receive(:process_with_timeout).never
110
- expect(subject).to receive(:create_resized_image).once
111
- subject.process
112
- end
113
- end
114
-
115
- context "when running the complete command", requires_imagemagick: true do
116
- let(:file_name) { File.join(fixture_path, "test.tif") }
117
-
118
- it "converts the image" do
119
- expect(Hydra::Derivatives::PersistBasicContainedOutputFileService).to receive(:call).with(kind_of(StringIO), directives)
120
- subject.process
121
- end
122
- end
123
- end
124
- end