thingfish 0.5.0.pre20160707192835
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 +7 -0
- data/.simplecov +7 -0
- data/History.rdoc +5 -0
- data/LICENSE +29 -0
- data/Manifest.txt +39 -0
- data/Procfile +4 -0
- data/README.rdoc +92 -0
- data/Rakefile +92 -0
- data/bin/tfprocessord +6 -0
- data/bin/thingfish +10 -0
- data/etc/thingfish.conf.example +26 -0
- data/lib/strelka/app/metadata.rb +38 -0
- data/lib/strelka/httprequest/metadata.rb +70 -0
- data/lib/thingfish.rb +43 -0
- data/lib/thingfish/behaviors.rb +263 -0
- data/lib/thingfish/datastore.rb +55 -0
- data/lib/thingfish/datastore/memory.rb +93 -0
- data/lib/thingfish/handler.rb +728 -0
- data/lib/thingfish/metastore.rb +55 -0
- data/lib/thingfish/metastore/memory.rb +201 -0
- data/lib/thingfish/mixins.rb +57 -0
- data/lib/thingfish/processor.rb +79 -0
- data/lib/thingfish/processor/mp3.rb +167 -0
- data/lib/thingfish/processordaemon.rb +16 -0
- data/lib/thingfish/spechelpers.rb +165 -0
- data/spec/data/APIC-1-image.mp3 +0 -0
- data/spec/data/APIC-2-images.mp3 +0 -0
- data/spec/data/PIC-1-image.mp3 +0 -0
- data/spec/data/PIC-2-images.mp3 +0 -0
- data/spec/helpers.rb +67 -0
- data/spec/spec.opts +4 -0
- data/spec/thingfish/datastore/memory_spec.rb +19 -0
- data/spec/thingfish/datastore_spec.rb +64 -0
- data/spec/thingfish/handler_spec.rb +838 -0
- data/spec/thingfish/metastore/memory_spec.rb +17 -0
- data/spec/thingfish/metastore_spec.rb +96 -0
- data/spec/thingfish/mixins_spec.rb +63 -0
- data/spec/thingfish/processor/mp3_spec.rb +50 -0
- data/spec/thingfish/processor_spec.rb +65 -0
- data/spec/thingfish_spec.rb +23 -0
- metadata +244 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative '../../helpers'
|
4
|
+
|
5
|
+
require 'securerandom'
|
6
|
+
require 'rspec'
|
7
|
+
require 'thingfish/metastore/memory'
|
8
|
+
require 'thingfish/behaviors'
|
9
|
+
|
10
|
+
|
11
|
+
describe Thingfish::Metastore::Memory do
|
12
|
+
|
13
|
+
it_behaves_like "a Thingfish metastore"
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
# vim: set nosta noet ts=4 sw=4 ft=rspec:
|
@@ -0,0 +1,96 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative '../helpers'
|
4
|
+
|
5
|
+
require 'rspec'
|
6
|
+
require 'thingfish/metastore'
|
7
|
+
|
8
|
+
class TestingMetastore < Thingfish::Metastore
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
describe Thingfish::Metastore do
|
13
|
+
|
14
|
+
before( :all ) do
|
15
|
+
setup_logging()
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
it "is abstract" do
|
20
|
+
expect { described_class.new }.to raise_error( NoMethodError, /private/i )
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
it "acts as a factory for its concrete derivatives" do
|
25
|
+
expect( described_class.create('testing') ).to be_a( TestingMetastore )
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
describe "an instance of a concrete derivative" do
|
30
|
+
|
31
|
+
let( :store ) { described_class.create('testing') }
|
32
|
+
|
33
|
+
it "raises an error if it doesn't implement #oids" do
|
34
|
+
expect { store.oids }.to raise_error( NotImplementedError, /oids/ )
|
35
|
+
end
|
36
|
+
|
37
|
+
it "raises an error if it doesn't implement #each_oid" do
|
38
|
+
expect { store.each_oid }.to raise_error( NotImplementedError, /each_oid/ )
|
39
|
+
end
|
40
|
+
|
41
|
+
it "raises an error if it doesn't implement #fetch" do
|
42
|
+
expect { store.fetch(TEST_UUID) }.to raise_error( NotImplementedError, /fetch/ )
|
43
|
+
end
|
44
|
+
|
45
|
+
it "raises an error if it doesn't implement #fetch_value" do
|
46
|
+
expect { store.fetch_value(TEST_UUID, :format) }.
|
47
|
+
to raise_error( NotImplementedError, /fetch_value/ )
|
48
|
+
end
|
49
|
+
|
50
|
+
it "raises an error if it doesn't implement #search" do
|
51
|
+
expect { store.search(limit: 100) }.to raise_error( NotImplementedError, /search/ )
|
52
|
+
end
|
53
|
+
|
54
|
+
it "raises an error if it doesn't implement #save" do
|
55
|
+
expect {
|
56
|
+
store.save( TEST_UUID, {name: 'foo'} )
|
57
|
+
}.to raise_error( NotImplementedError, /save/ )
|
58
|
+
end
|
59
|
+
|
60
|
+
it "raises an error if it doesn't implement #merge" do
|
61
|
+
expect {
|
62
|
+
store.merge( TEST_UUID, {name: 'foo'} )
|
63
|
+
}.to raise_error( NotImplementedError, /merge/ )
|
64
|
+
end
|
65
|
+
|
66
|
+
it "raises an error if it doesn't implement #include?" do
|
67
|
+
expect { store.include?(TEST_UUID) }.to raise_error( NotImplementedError, /include\?/ )
|
68
|
+
end
|
69
|
+
|
70
|
+
it "raises an error if it doesn't implement #remove" do
|
71
|
+
expect { store.remove(TEST_UUID) }.to raise_error( NotImplementedError, /remove/ )
|
72
|
+
end
|
73
|
+
|
74
|
+
it "raises an error if it doesn't implement #remove_except" do
|
75
|
+
expect { store.remove_except(TEST_UUID, :format) }.
|
76
|
+
to raise_error( NotImplementedError, /remove_except/ )
|
77
|
+
end
|
78
|
+
|
79
|
+
it "raises an error if it doesn't implement #size" do
|
80
|
+
expect { store.size }.to raise_error( NotImplementedError, /size/ )
|
81
|
+
end
|
82
|
+
|
83
|
+
it "raises an error if it doesn't implement #fetch_related_oids" do
|
84
|
+
expect {
|
85
|
+
store.fetch_related_oids( TEST_UUID )
|
86
|
+
}.to raise_error( NotImplementedError, /fetch_related_oids/i )
|
87
|
+
end
|
88
|
+
|
89
|
+
it "provides a transactional block method" do
|
90
|
+
expect {|block| store.transaction(&block) }.to yield_with_no_args
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
# vim: set nosta noet ts=4 sw=4 ft=rspec:
|
@@ -0,0 +1,63 @@
|
|
1
|
+
#!/usr/bin/env rspec -cfd -b
|
2
|
+
# vim: set noet nosta sw=4 ts=4 :
|
3
|
+
|
4
|
+
require_relative '../helpers'
|
5
|
+
|
6
|
+
require 'rspec'
|
7
|
+
|
8
|
+
require 'thingfish/mixins'
|
9
|
+
|
10
|
+
|
11
|
+
describe Thingfish, 'mixins' do
|
12
|
+
|
13
|
+
# A collection of functions for dealing with object IDs.
|
14
|
+
describe 'Normalization' do
|
15
|
+
|
16
|
+
it 'can generate a new object ID' do
|
17
|
+
expect( Thingfish::Normalization.make_object_id ).to match( UUID_PATTERN )
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'can normalize an object ID' do
|
21
|
+
expect(
|
22
|
+
Thingfish::Normalization.normalize_oid( TEST_UUID.upcase )
|
23
|
+
).to_not match( /[A-Z]/ )
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'can normalize Hash metadata keys' do
|
27
|
+
metadata = { :pork => 1, :sausaged => 2 }
|
28
|
+
expect( Thingfish::Normalization.normalize_keys(metadata) ).
|
29
|
+
to eq({ 'pork' => 1, 'sausaged' => 2 })
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'can normalize an Array of metadata keys' do
|
33
|
+
values = [ :pork, :sausaged ]
|
34
|
+
expect( Thingfish::Normalization.normalize_keys(values) ).
|
35
|
+
to eq([ 'pork', 'sausaged' ])
|
36
|
+
expect( values.first ).to be( :pork )
|
37
|
+
end
|
38
|
+
|
39
|
+
it "won't modify the original array of metadata keys" do
|
40
|
+
values = [ :pork, :sausaged ]
|
41
|
+
normalized = Thingfish::Normalization.normalize_keys( values )
|
42
|
+
|
43
|
+
expect( values.first ).to be( :pork )
|
44
|
+
expect( normalized ).to_not be( values )
|
45
|
+
end
|
46
|
+
|
47
|
+
it "replaces non metadata key characters with underscores" do
|
48
|
+
expect( Thingfish::Normalization::normalize_key('Sausaged!') ).to eq( 'sausaged_' )
|
49
|
+
expect( Thingfish::Normalization::normalize_key('SO sausaged') ).to eq( 'so_sausaged' )
|
50
|
+
expect( Thingfish::Normalization::normalize_key('*/porky+-') ).to eq( '_porky_' )
|
51
|
+
end
|
52
|
+
|
53
|
+
it "preserves colons in metadata keys" do
|
54
|
+
expect( Thingfish::Normalization::normalize_key('pork:sausaged') ).
|
55
|
+
to eq( 'pork:sausaged' )
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
end # module Normalization
|
60
|
+
|
61
|
+
|
62
|
+
end
|
63
|
+
|
@@ -0,0 +1,50 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative '../../helpers'
|
4
|
+
|
5
|
+
require 'rspec'
|
6
|
+
require 'thingfish/processor'
|
7
|
+
|
8
|
+
require 'strelka/httprequest/metadata'
|
9
|
+
|
10
|
+
|
11
|
+
describe Thingfish::Processor, "MP3" do
|
12
|
+
|
13
|
+
before( :all ) do
|
14
|
+
Strelka::HTTPRequest.class_eval { include Strelka::HTTPRequest::Metadata }
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
let( :processor ) { described_class.create(:mp3) }
|
19
|
+
|
20
|
+
let( :factory ) do
|
21
|
+
Mongrel2::RequestFactory.new(
|
22
|
+
:route => '/',
|
23
|
+
:headers => {:accept => '*/*'})
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
it "extracts metadata from uploaded MP3 ID3 tags" do
|
28
|
+
req = factory.post( '/tf', fixture_data('APIC-1-image.mp3'), 'Content-type' => 'audio/mp3' )
|
29
|
+
|
30
|
+
processor.process_request( req )
|
31
|
+
|
32
|
+
expect( req.metadata ).to include( 'mp3:artist', 'mp3:bitrate', 'mp3:comments' )
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
it "attaches album art as a related resource" do
|
37
|
+
req = factory.post( '/tf', fixture_data('APIC-1-image.mp3'), 'Content-type' => 'audio/mp3' )
|
38
|
+
|
39
|
+
processor.process_request( req )
|
40
|
+
|
41
|
+
related = req.related_resources
|
42
|
+
expect( related.size ).to eq( 1 )
|
43
|
+
expect( related.values.first ).
|
44
|
+
to include( 'format' => 'image/jpeg', 'extent' => 7369, 'relationship' => 'album-art' )
|
45
|
+
expect( related.keys.first ).to respond_to( :read )
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
# vim: set nosta noet ts=4 sw=4 ft=rspec:
|
@@ -0,0 +1,65 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative '../helpers'
|
4
|
+
|
5
|
+
require 'rspec'
|
6
|
+
require 'thingfish/processor'
|
7
|
+
|
8
|
+
|
9
|
+
describe Thingfish::Processor do
|
10
|
+
|
11
|
+
before( :all ) do
|
12
|
+
setup_logging()
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
it "has pluggability" do
|
17
|
+
expect( described_class.plugin_type ).to eq( 'Processor' )
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
it "defines a (no-op) method for handling requests" do
|
22
|
+
expect {
|
23
|
+
described_class.new.on_request( nil )
|
24
|
+
}.to_not raise_error
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
it "defines a (no-op) method for handling responses" do
|
29
|
+
expect {
|
30
|
+
described_class.new.on_response( nil )
|
31
|
+
}.to_not raise_error
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
describe "a subclass" do
|
36
|
+
|
37
|
+
let!( :subclass ) { Class.new(described_class) }
|
38
|
+
|
39
|
+
it "can declare a list of media types it handles" do
|
40
|
+
subclass.handled_types( 'image/*', 'video/*' )
|
41
|
+
expect( subclass.handled_types.size ).to be( 2 )
|
42
|
+
expect( subclass.handled_types[0] ).to be_a( Strelka::HTTPRequest::MediaType )
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "instance" do
|
46
|
+
|
47
|
+
let!( :instance ) do
|
48
|
+
subclass.handled_types( 'audio/mpeg', 'audio/mpg', 'audio/mp3' )
|
49
|
+
subclass.new
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
it "knows that it doesn't handle a type it hasn't registered" do
|
54
|
+
expect( instance ).to_not be_handled_type( 'image/png' )
|
55
|
+
expect( instance ).to be_handled_type( 'audio/mp3' )
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
# vim: set nosta noet ts=4 sw=4 ft=rspec:
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative 'helpers'
|
4
|
+
|
5
|
+
require 'rspec'
|
6
|
+
require 'thingfish'
|
7
|
+
|
8
|
+
|
9
|
+
describe Thingfish do
|
10
|
+
|
11
|
+
it "returns a version string if asked" do
|
12
|
+
expect( described_class.version_string ).to match( /\w+ [\d.]+/ )
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
it "returns a version string with a build number if asked" do
|
17
|
+
expect( described_class.version_string(true) ).
|
18
|
+
to match(/\w+ [\d.]+ \(build [[:xdigit:]]+\)/)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
# vim: set nosta noet ts=4 sw=4 ft=rspec:
|
metadata
ADDED
@@ -0,0 +1,244 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: thingfish
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.0.pre20160707192835
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Michael Granger
|
8
|
+
- Mahlon E. Smith
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain:
|
12
|
+
- |
|
13
|
+
-----BEGIN CERTIFICATE-----
|
14
|
+
MIIDMDCCAhigAwIBAgIBAjANBgkqhkiG9w0BAQUFADA+MQwwCgYDVQQDDANnZWQx
|
15
|
+
GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
|
16
|
+
HhcNMTYwNjAyMDE1NTQ2WhcNMTcwNjAyMDE1NTQ2WjA+MQwwCgYDVQQDDANnZWQx
|
17
|
+
GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
|
18
|
+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDb92mkyYwuGBg1oRxt2tkH
|
19
|
+
+Uo3LAsaL/APBfSLzy8o3+B3AUHKCjMUaVeBoZdWtMHB75X3VQlvXfZMyBxj59Vo
|
20
|
+
cDthr3zdao4HnyrzAIQf7BO5Y8KBwVD+yyXCD/N65TTwqsQnO3ie7U5/9ut1rnNr
|
21
|
+
OkOzAscMwkfQxBkXDzjvAWa6UF4c5c9kR/T79iA21kDx9+bUMentU59aCJtUcbxa
|
22
|
+
7kcKJhPEYsk4OdxR9q2dphNMFDQsIdRO8rywX5FRHvcb+qnXC17RvxLHtOjysPtp
|
23
|
+
EWsYoZMxyCDJpUqbwoeiM+tAHoz2ABMv3Ahie3Qeb6+MZNAtMmaWfBx3dg2u+/WN
|
24
|
+
AgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBSZ0hCV
|
25
|
+
qoHr122fGKelqffzEQBhszANBgkqhkiG9w0BAQUFAAOCAQEAF2XCzjfTFxkcVvuj
|
26
|
+
hhBezFkZnMDYtWezg4QCkR0RHg4sl1LdXjpvvI59SIgD/evD1hOteGKsXqD8t0E4
|
27
|
+
OPAWWv/z+JRma72zeYsBZLSDRPIUvBoul6qCpvY0MiWTh496mFwOxT5lvSAUoh+U
|
28
|
+
pQ/MQeH/yC6hbGp7IYska6J8T4z5XkYqafYZ3eKQ8H+xPd/z+gYx+jd0PfkWf1Wk
|
29
|
+
QQdziL01SKBHf33OAH/p/puCpwS+ZDfgnNx5oMijWbc671UXkrt7zjD0kGakq+9I
|
30
|
+
hnfm736z8j1wvWddqf45++gwPpDr1E4zoAq2PgRl/WBNyR0hfoZLpi3TnHu3eC0x
|
31
|
+
uALKNA==
|
32
|
+
-----END CERTIFICATE-----
|
33
|
+
date: 2016-07-08 00:00:00.000000000 Z
|
34
|
+
dependencies:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: strelka
|
37
|
+
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0.9'
|
42
|
+
type: :runtime
|
43
|
+
prerelease: false
|
44
|
+
version_requirements: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0.9'
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: mongrel2
|
51
|
+
requirement: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0.43'
|
56
|
+
type: :runtime
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0.43'
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: hoe-mercurial
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.4'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '1.4'
|
77
|
+
- !ruby/object:Gem::Dependency
|
78
|
+
name: hoe-deveiate
|
79
|
+
requirement: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0.8'
|
84
|
+
type: :development
|
85
|
+
prerelease: false
|
86
|
+
version_requirements: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - "~>"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0.8'
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: hoe-highline
|
93
|
+
requirement: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - "~>"
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0.2'
|
98
|
+
type: :development
|
99
|
+
prerelease: false
|
100
|
+
version_requirements: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - "~>"
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0.2'
|
105
|
+
- !ruby/object:Gem::Dependency
|
106
|
+
name: rdoc
|
107
|
+
requirement: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - "~>"
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '4.0'
|
112
|
+
type: :development
|
113
|
+
prerelease: false
|
114
|
+
version_requirements: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - "~>"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '4.0'
|
119
|
+
- !ruby/object:Gem::Dependency
|
120
|
+
name: simplecov
|
121
|
+
requirement: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0.7'
|
126
|
+
type: :development
|
127
|
+
prerelease: false
|
128
|
+
version_requirements: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - "~>"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0.7'
|
133
|
+
- !ruby/object:Gem::Dependency
|
134
|
+
name: ruby-mp3info
|
135
|
+
requirement: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - "~>"
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0.8'
|
140
|
+
type: :development
|
141
|
+
prerelease: false
|
142
|
+
version_requirements: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - "~>"
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0.8'
|
147
|
+
- !ruby/object:Gem::Dependency
|
148
|
+
name: hoe
|
149
|
+
requirement: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - "~>"
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '3.15'
|
154
|
+
type: :development
|
155
|
+
prerelease: false
|
156
|
+
version_requirements: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - "~>"
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '3.15'
|
161
|
+
description: |-
|
162
|
+
Thingfish is a extensible, web-based digital asset manager. It can be used to
|
163
|
+
store chunks of data on the network in an application-independent way, link the
|
164
|
+
chunks together with metadata, and then search for the chunk you need later and
|
165
|
+
fetch it, all through a REST API.
|
166
|
+
email:
|
167
|
+
- ged@FaerieMUD.org
|
168
|
+
- mahlon@martini.nu
|
169
|
+
executables:
|
170
|
+
- tfprocessord
|
171
|
+
- thingfish
|
172
|
+
extensions: []
|
173
|
+
extra_rdoc_files:
|
174
|
+
- History.rdoc
|
175
|
+
- Manifest.txt
|
176
|
+
- README.rdoc
|
177
|
+
files:
|
178
|
+
- ".simplecov"
|
179
|
+
- History.rdoc
|
180
|
+
- LICENSE
|
181
|
+
- Manifest.txt
|
182
|
+
- Procfile
|
183
|
+
- README.rdoc
|
184
|
+
- Rakefile
|
185
|
+
- bin/tfprocessord
|
186
|
+
- bin/thingfish
|
187
|
+
- etc/thingfish.conf.example
|
188
|
+
- lib/strelka/app/metadata.rb
|
189
|
+
- lib/strelka/httprequest/metadata.rb
|
190
|
+
- lib/thingfish.rb
|
191
|
+
- lib/thingfish/behaviors.rb
|
192
|
+
- lib/thingfish/datastore.rb
|
193
|
+
- lib/thingfish/datastore/memory.rb
|
194
|
+
- lib/thingfish/handler.rb
|
195
|
+
- lib/thingfish/metastore.rb
|
196
|
+
- lib/thingfish/metastore/memory.rb
|
197
|
+
- lib/thingfish/mixins.rb
|
198
|
+
- lib/thingfish/processor.rb
|
199
|
+
- lib/thingfish/processor/mp3.rb
|
200
|
+
- lib/thingfish/processordaemon.rb
|
201
|
+
- lib/thingfish/spechelpers.rb
|
202
|
+
- spec/data/APIC-1-image.mp3
|
203
|
+
- spec/data/APIC-2-images.mp3
|
204
|
+
- spec/data/PIC-1-image.mp3
|
205
|
+
- spec/data/PIC-2-images.mp3
|
206
|
+
- spec/helpers.rb
|
207
|
+
- spec/spec.opts
|
208
|
+
- spec/thingfish/datastore/memory_spec.rb
|
209
|
+
- spec/thingfish/datastore_spec.rb
|
210
|
+
- spec/thingfish/handler_spec.rb
|
211
|
+
- spec/thingfish/metastore/memory_spec.rb
|
212
|
+
- spec/thingfish/metastore_spec.rb
|
213
|
+
- spec/thingfish/mixins_spec.rb
|
214
|
+
- spec/thingfish/processor/mp3_spec.rb
|
215
|
+
- spec/thingfish/processor_spec.rb
|
216
|
+
- spec/thingfish_spec.rb
|
217
|
+
homepage: http://bitbucket.org/ged/thingfish
|
218
|
+
licenses:
|
219
|
+
- BSD
|
220
|
+
- BSD
|
221
|
+
metadata: {}
|
222
|
+
post_install_message:
|
223
|
+
rdoc_options:
|
224
|
+
- "--main"
|
225
|
+
- README.rdoc
|
226
|
+
require_paths:
|
227
|
+
- lib
|
228
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
229
|
+
requirements:
|
230
|
+
- - ">="
|
231
|
+
- !ruby/object:Gem::Version
|
232
|
+
version: 2.0.0
|
233
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
234
|
+
requirements:
|
235
|
+
- - ">"
|
236
|
+
- !ruby/object:Gem::Version
|
237
|
+
version: 1.3.1
|
238
|
+
requirements: []
|
239
|
+
rubyforge_project:
|
240
|
+
rubygems_version: 2.4.8
|
241
|
+
signing_key:
|
242
|
+
specification_version: 4
|
243
|
+
summary: Thingfish is a extensible, web-based digital asset manager
|
244
|
+
test_files: []
|