cpee-dstore 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8565fd0d82cc60e0cc39a6d9cca4c6011d31bbcfef17c17427fba14d5c27a5b8
4
- data.tar.gz: 49fcff4f955f6f4cff454d7be564280eab481ebad8127315933bfaf91b8f2a47
3
+ metadata.gz: 75baa34a4f5437990eed51d114c3999b99d83aa7c1d6e42205c03cd2e190a636
4
+ data.tar.gz: bf865576879899e840543199b30db3a6e9eeed7fd6468340c10b95946da5b84d
5
5
  SHA512:
6
- metadata.gz: 32e69af41a4408044b05acbd36008c1235ee7fb2cf9dd06ae15288d6c18465f2f9a591e46ccf625bac2cc6974954c2f5719705d8bdf91b0a21a87217f2a2fff2
7
- data.tar.gz: de8170a3d81098df17bffbce8a0468f06baa9d961ceb7c37b7cd34f0d3cdb9721e89d41629cb3dcc0e984b5fc12ea588295075cf44644442253832a2adb065e9
6
+ metadata.gz: 31bfe60b19838fd78a9d12b76ab609d2d05dc6cb0c20e33e895c75a2b9803c8b78b639791ef662036b97e9dbeb736232248cd23dfd13dd8d6c565f5308affed2
7
+ data.tar.gz: ef0922179bed1072bcd03ecf16b7f404ed8c4b405a3dbf9c03fe2ba4026d90113c29823165ca26762c337f695e1d7a497bdc1005313b5464df89c0859d050a60
data/cpee-dstore.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "cpee-dstore"
3
- s.version = "1.0.1"
3
+ s.version = "1.0.3"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.license = "LGPL-3.0-or-later"
6
6
  s.summary = "Generic document store for the cloud process execution engine (cpee.org)"
@@ -20,6 +20,27 @@ require 'mimemagic'
20
20
  require 'riddl/server'
21
21
  require 'fileutils'
22
22
 
23
+ class File
24
+ def tail(n)
25
+ buffer = 1024
26
+ idx = [size - buffer, 0].max
27
+ chunks = []
28
+ lines = 0
29
+
30
+ begin
31
+ seek(idx)
32
+ chunk = read(buffer)
33
+ lines += chunk.count("\n")
34
+ chunks.unshift chunk
35
+ idx -= buffer
36
+ end while lines < ( n + 1 ) && pos != 0
37
+
38
+ tail_of_file = chunks.join('')
39
+ ary = tail_of_file.split("\n")
40
+ ary[ ary.size - n, ary.size - 1 ].join("\n")
41
+ end
42
+ end
43
+
23
44
  module CPEE
24
45
  module DStore
25
46
  SERVER = File.expand_path(File.join(__dir__,'implementation.xml'))
@@ -29,7 +50,12 @@ module CPEE
29
50
  file = File.join(@a[0],@r[-2],@r[-1])
30
51
  meta = file + '.mimetype'
31
52
  if File.exist?(file) && File.exist?(meta)
32
- Riddl::Parameter::Complex.new('file',File.read(meta).strip,File.open(file,'rb'))
53
+ f = File.open(file,'rb')
54
+ if @p.length > 0 && @p[0].name == 'tail'
55
+ Riddl::Parameter::Complex.new('file',File.read(meta).strip,f.tail(@p[0].value.to_i))
56
+ else
57
+ Riddl::Parameter::Complex.new('file',File.read(meta).strip,f)
58
+ end
33
59
  else
34
60
  @status = 404
35
61
  nil
@@ -39,11 +65,17 @@ module CPEE
39
65
 
40
66
  class DoPut < Riddl::Implementation #{{{
41
67
  def response
68
+ if @p[0].name == 'append'
69
+ mode = 'ab'
70
+ @p.shift
71
+ else
72
+ mode = 'wb'
73
+ end
42
74
  name = @r[-1]
43
75
  dir = File.join(@a[0],@r[-2])
44
76
  FileUtils.mkdir_p(dir)
45
77
 
46
- File.open(File.join(dir,name),'wb') do |f|
78
+ File.open(File.join(dir,name),mode) do |f|
47
79
  IO.copy_stream(@p[0].value,f)
48
80
  mime = MimeMagic.by_magic(@p[0].value.read)
49
81
  mt = if mime.nil?
@@ -58,15 +90,30 @@ module CPEE
58
90
  end
59
91
  end #}}}
60
92
 
93
+ class DoDel < Riddl::Implementation #{{{
94
+ def response
95
+ file = File.join(@a[0],@r[-2],@r[-1])
96
+ meta = file + '.mimetype'
97
+ if File.exist?(file) && File.exist?(meta)
98
+ File.unlink(file)
99
+ File.unlink(meta)
100
+ else
101
+ @status = 404
102
+ nil
103
+ end
104
+ end
105
+ end #}}}
106
+
61
107
  def self::implementation(opts)
62
108
  opts[:data_dir] ||= File.expand_path(File.join(__dir__,'data'))
63
109
 
64
110
  Proc.new do
65
- on resource do # "/"
66
- on resource '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' do # uuid
67
- on resource '[a-z_][a-zA-Z0-9_]*' do # name
68
- run DoGet, opts[:data_dir] if get
69
- run DoPut, opts[:data_dir] if put 'file'
111
+ on resource do
112
+ on resource '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' do
113
+ on resource '[a-z_][a-zA-Z0-9_]*' do
114
+ run DoGet, opts[:data_dir] if get 'rfile'
115
+ run DoPut, opts[:data_dir] if put 'ifile'
116
+ run DoDel, opts[:data_dir] if delete
70
117
  end
71
118
  end
72
119
  end
@@ -17,15 +17,27 @@
17
17
  -->
18
18
 
19
19
  <description xmlns="http://riddl.org/ns/description/1.0" xmlns:ann="http://riddl.org/ns/annotation/1.0" xmlns:xi="http://www.w3.org/2001/XInclude" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
20
- <message name="file">
20
+ <message name="ifile">
21
+ <optional>
22
+ <parameter name="append" type="string"/>
23
+ </optional>
24
+ <parameter name="file" mimetype="*"/>
25
+ </message>
26
+ <message name="rfile">
27
+ <optional>
28
+ <parameter name="tail" type="integer"/>
29
+ </optional>
30
+ </message>
31
+ <message name="ofile">
21
32
  <parameter name="file" mimetype="*"/>
22
33
  </message>
23
34
 
24
35
  <resource>
25
36
  <resource relative="[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}">
26
37
  <resource relative='[a-z_][a-zA-Z0-9_]*'>
27
- <get out="file"/>
28
- <put in="file"/>
38
+ <get in="rfile" out="ofile"/>
39
+ <put in="ifile"/>
40
+ <delete/>
29
41
  </resource>
30
42
  </resource>
31
43
  </resource>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cpee-dstore
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juergen eTM Mangler