sinatra-s3 0.98 → 0.99

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. data/README +36 -18
  2. data/bin/sinatra-s3 +47 -15
  3. data/examples/wiki.rb +13 -13
  4. data/lib/sinatra-s3/admin.rb +1 -1
  5. data/lib/sinatra-s3/base.rb +1 -5
  6. data/lib/sinatra-s3/models/bit.rb +2 -2
  7. data/lib/sinatra-s3/s3.rb +11 -4
  8. data/public/js/wiki.js +35 -0
  9. data/s3.yml.example +6 -3
  10. metadata +63 -67
  11. data/examples/README +0 -9
  12. data/examples/wikicloth/MIT-LICENSE +0 -20
  13. data/examples/wikicloth/README +0 -81
  14. data/examples/wikicloth/Rakefile +0 -23
  15. data/examples/wikicloth/init.rb +0 -1
  16. data/examples/wikicloth/install.rb +0 -0
  17. data/examples/wikicloth/lib/core_ext.rb +0 -43
  18. data/examples/wikicloth/lib/wiki_buffer.rb +0 -279
  19. data/examples/wikicloth/lib/wiki_buffer/html_element.rb +0 -237
  20. data/examples/wikicloth/lib/wiki_buffer/link.rb +0 -70
  21. data/examples/wikicloth/lib/wiki_buffer/table.rb +0 -159
  22. data/examples/wikicloth/lib/wiki_buffer/var.rb +0 -77
  23. data/examples/wikicloth/lib/wiki_cloth.rb +0 -61
  24. data/examples/wikicloth/lib/wiki_link_handler.rb +0 -138
  25. data/examples/wikicloth/lib/wikicloth.rb +0 -5
  26. data/examples/wikicloth/run_tests.rb +0 -48
  27. data/examples/wikicloth/sample_documents/air_force_one.wiki +0 -170
  28. data/examples/wikicloth/sample_documents/cheatsheet.wiki +0 -205
  29. data/examples/wikicloth/sample_documents/default.css +0 -34
  30. data/examples/wikicloth/sample_documents/elements.wiki +0 -7
  31. data/examples/wikicloth/sample_documents/george_washington.wiki +0 -526
  32. data/examples/wikicloth/sample_documents/images.wiki +0 -15
  33. data/examples/wikicloth/sample_documents/lists.wiki +0 -421
  34. data/examples/wikicloth/sample_documents/pipe_trick.wiki +0 -68
  35. data/examples/wikicloth/sample_documents/random.wiki +0 -55
  36. data/examples/wikicloth/sample_documents/tv.wiki +0 -312
  37. data/examples/wikicloth/sample_documents/wiki.png +0 -0
  38. data/examples/wikicloth/sample_documents/wiki_tables.wiki +0 -410
  39. data/examples/wikicloth/tasks/wikicloth_tasks.rake +0 -0
  40. data/examples/wikicloth/test/test_helper.rb +0 -3
  41. data/examples/wikicloth/test/wiki_cloth_test.rb +0 -8
  42. data/examples/wikicloth/uninstall.rb +0 -0
  43. data/examples/wikicloth/wikicloth-0.1.3.gem +0 -0
  44. data/examples/wikicloth/wikicloth.gemspec +0 -69
  45. data/public/test.html +0 -8
data/README CHANGED
@@ -1,23 +1,41 @@
1
- An implementation of the S3 API in Sinatra. Most of the code was originaly taken from
2
- ParkPlace, another S3 clone written by _why.
1
+ Sinatra-S3 is an implementation of the Amazon S3 API. Based on the
2
+ Parkplace, written by _why, Sinatra-S3 has been extended to provide
3
+ additional support for ACLs, versioning and a bittorrent tracker.
3
4
 
4
- Requirements
5
- -------------------------------------------------------
5
+ Install
6
+ ------------------------------------------------------------------
6
7
 
7
- gem install sinatra haml aws-s3
8
+ To install or upgrade Sinatra-S3
8
9
 
9
- Optional Torrent Support
10
- -------------------------------------------------------
10
+ sudo gem install sinatra-s3
11
+ sinatra-s3 directory
12
+ cd directory
13
+ rake db:migrate
11
14
 
12
- If you are interested in using Sinatra-S3 as a Bittorrent tracker you will need a custom
13
- version of RubyTorrent found at http://github.com/nricciar/rubytorrent.
15
+ Or we could install from github (bleeding edge, may not work)
14
16
 
15
- Install
16
- -------------------------------------------------------
17
-
18
- 1) cp s3.yml.example s3.yml
19
- 2) edit s3.yml to suit your needs
20
- 3) rake db:migrate
21
- 4) rackup config.ru -p 6060
22
- 5) go to http://localhost:6060/control/ and login with the username admin and the
23
- password pass@word1
17
+ sudo gem install sinatra builder aws-s3
18
+ git clone git://github.com/nricciar/sinatra-s3.git
19
+ cd sinatra-s3/
20
+ cp s3.yml.example s3.yml
21
+ rake db:migrate
22
+
23
+ Optional Gems
24
+
25
+ ruby-git - Enable S3 versioning support.
26
+ rubytorrent* - Enable S3 torrent support.
27
+
28
+ * A custom version of rubytorrent is required to enable bittorrent
29
+ support. see http://github.com/nricciar/rubytorrent.
30
+
31
+ Setup
32
+ ------------------------------------------------------------------
33
+
34
+ Once Sinatra-S3 has been installed we can start our server and log in
35
+ with the default username admin and password pass@word1.
36
+
37
+ rackup config.ru -p 6060
38
+
39
+ Once running log in with the username admin and password pass@word1
40
+ via the control center at http://127.0.0.1:6060/control/. Make sure
41
+ to change your password!
data/bin/sinatra-s3 CHANGED
@@ -7,24 +7,56 @@ if ARGV.any? { |arg| %w(--version -v).any? { |flag| arg == flag } }
7
7
  exit 0
8
8
  end
9
9
 
10
- app_path = ARGV.last
11
- install_success = false
10
+ if ARGV.any? { |arg| %w(--help -h).any? { |flag| arg == flag } }
11
+ puts "sinatra-s3 [options] install_dir\n\n"
12
+ puts " --version -v Get version string"
13
+ puts " --help -h this"
14
+ puts " --include-wiki installs sinatra-s3 with wiki support"
15
+ exit 0
16
+ end
12
17
 
13
- unless File.exists?(app_path)
14
- FileUtils.mkdir_p(app_path)
18
+ $APP_PATH = ARGV.last
15
19
 
16
- config_ru = "require 'rubygems'\nrequire 'sinatra-s3'"
17
- if ARGV.any? { |arg| %w(--include-wiki --wiki).any? { |flag| arg == flag } }
18
- FileUtils.copy(File.join(S3::ROOT_DIR,"examples","wiki.rb"), File.join(app_path,"wiki.rb"))
19
- config_ru += "\nrequire 'wiki'"
20
+ def check_install(file,data)
21
+ file_path = File.join($APP_PATH, file)
22
+ if File.exists?(file_path)
23
+ if Digest::MD5.hexdigest(data) == Digest::MD5.hexdigest(File.read(file_path))
24
+ install_msg("identical",file)
25
+ else
26
+ if ['y','a',''].include?(verify_overwrite(file).downcase)
27
+ File.open(file_path,"w") { |f| f.write(data) }
28
+ install_msg("force",file)
29
+ else
30
+ install_msg("skip",file)
31
+ end
32
+ end
33
+ else
34
+ install_msg("create", file)
35
+ File.open(file_path,"w") { |f| f.write(data) }
20
36
  end
21
- config_ru += "\n\nuse S3::Tracker if defined?(RubyTorrent)\nuse S3::Admin\nrun S3::Application"
22
- File.open(File.join(app_path,"config.ru"),"w") { |f| f.write(config_ru) }
37
+ end
38
+ def install_msg(status, msg)
39
+ print status.rjust(10) + " #{msg}\n"
40
+ end
41
+ def verify_overwrite(file)
42
+ return 'a' if $SKIP_INSTALL_VERIFY
43
+
44
+ print "overwrite #{file} [Yna] "
45
+ resp = STDIN.gets.chomp
46
+ $SKIP_INSTALL_VERIFY = true if resp.downcase == "a"
23
47
 
24
- File.open(File.join(app_path,"Rakefile"),"w") { |f| f.write("require 'sinatra-s3/tasks'") }
25
- FileUtils.copy(File.join(S3::ROOT_DIR,"s3.yml.example"), File.join(app_path,"s3.yml"))
48
+ resp = verify_overwrite(file) unless ['y','n','a',''].include?(resp.downcase)
49
+ resp
50
+ end
26
51
 
27
- puts "Sinatra-S3 installed in #{app_path}."
28
- else
29
- puts "Unable to install Sinatra-S3. Install dir already exists."
52
+ FileUtils.mkdir_p($APP_PATH)
53
+ FileUtils.mkdir_p(File.join($APP_PATH, "public"))
54
+ config_ru = "require 'rubygems'\nrequire 'sinatra-s3'"
55
+ if ARGV.any? { |arg| %w(--include-wiki --wiki).any? { |flag| arg == flag } }
56
+ check_install("wiki.rb", File.read(File.join(S3::ROOT_DIR,"examples","wiki.rb")))
57
+ config_ru += "\nrequire 'wiki'"
30
58
  end
59
+ config_ru += "\n\nuse S3::Tracker if defined?(RubyTorrent)\nuse S3::Admin\nrun S3::Application"
60
+ check_install("config.ru", config_ru)
61
+ check_install("Rakefile", "require 'sinatra-s3/tasks'")
62
+ check_install("s3.yml", File.read(File.join(S3::ROOT_DIR,"s3.yml.example")))
data/examples/wiki.rb CHANGED
@@ -6,9 +6,7 @@ S3::Application.callback :mime_type => 'text/wiki' do
6
6
  if params.has_key?('edit')
7
7
  r :edit, "Editing #{@slot.name.gsub(/_/,' ')}"
8
8
  elsif params.has_key?('diff')
9
- @from = Bit.find_by_version(params[:diff])
10
- @to = Bit.find_by_version(params[:to])
11
- @diff = @from.diff(@to)
9
+ @diff = Bit.diff(params[:diff],params[:to])
12
10
  r :diff, "Changes to #{@slot.name.gsub(/_/,' ')}"
13
11
  elsif params.has_key?('history')
14
12
  @history = Slot.find(:all, :conditions => [ 'name = ? AND parent_id = ?', @slot.name, @slot.parent_id ], :order => "id DESC", :limit => 20)
@@ -116,10 +114,10 @@ __END__
116
114
  %html
117
115
  %head
118
116
  %title #{@title}
119
- %style{:type => "text/css"}
120
- @import '/control/s/css/control.css';
121
- %style{:type => "text/css"}
122
- @import '/control/s/css/wiki.css';
117
+ %style{:type => "text/css"} @import '/control/s/css/control.css';
118
+ %style{:type => "text/css"} @import '/control/s/css/wiki.css';
119
+ %script{ :type => "text/javascript", :language => "JavaScript", :src => "/control/s/js/prototype.js" }
120
+ %script{ :type => "text/javascript", :language => "JavaScript", :src => "/control/s/js/wiki.js" }
123
121
  %body
124
122
  %div#header
125
123
  %h1
@@ -167,7 +165,7 @@ __END__
167
165
 
168
166
  @@ edit
169
167
  %h2 #{@slot.nil? ? "Edit Page" : "Editing #{@slot.name.gsub(/_/,' ')}"}
170
- %form.create{ :method => "POST", :action => env['PATH_INFO'] }
168
+ %form#edit_page_form.create{ :method => "POST", :action => env['PATH_INFO'] }
171
169
  %input{ :type => "hidden", :name => "redirect", :value => env['PATH_INFO'] }
172
170
  %input{ :type => "hidden", :name => "Content-Type", :value => "text/wiki" }
173
171
  %div.required
@@ -185,14 +183,16 @@ __END__
185
183
  %table#revision_history
186
184
  - @history.each_with_index do |rev, count|
187
185
  %tr
188
- %td.check
189
- %input{ :type => "radio", :name => "diff", :value => rev.version }
190
- %td.check
191
- %input{ :type => "radio", :name => "to", :value => rev.version }
186
+ - if @history.length > 1
187
+ %td.check
188
+ %input.from{ :type => "radio", :name => "diff", :value => rev.version, :checked => (count == 1 ? true : false), :style => (count > 0 ? nil : "display:none") }
189
+ %td.check
190
+ %input.to{ :type => "radio", :name => "to", :value => rev.version, :checked => (count == 0 ? true : false) }
192
191
  %td
193
192
  %a{ :href => "#{env['PATH_INFO']}?version-id=#{rev.version}" } #{rev.meta['comment']}
194
193
  on #{rev.updated_at}
195
- %input{ :type => "submit", :value => "Compare Revisions" }
194
+ - if @history.length > 1
195
+ %input{ :type => "submit", :value => "Compare Revisions" }
196
196
 
197
197
  @@ wiki
198
198
  %div#wiki_page
@@ -22,7 +22,7 @@ module S3
22
22
  end
23
23
 
24
24
  get %r{^/control/s/(.*)} do
25
- open(File.join(PUBLIC_PATH, params[:captures].first))
25
+ open(File.join(ROOT_DIR, 'public', params[:captures].first))
26
26
  end
27
27
 
28
28
  get '/control/login' do
@@ -1,14 +1,10 @@
1
1
  module S3
2
2
 
3
- def self.config
4
- @config ||= YAML.load_file("s3.yml")[S3::Application.environment] rescue { :db => { :adapter => 'sqlite3', :database => "db/s3.db" } }
5
- end
6
-
7
3
  class Application < Sinatra::Base
8
4
 
9
5
  enable :static
10
6
  disable :raise_errors, :show_exceptions
11
- set :environment, :production
7
+ set :environment, S3_ENV
12
8
  set :public, PUBLIC_PATH
13
9
 
14
10
  helpers do
@@ -42,8 +42,8 @@ class Bit < ActiveRecord::Base
42
42
  end
43
43
 
44
44
  def self.diff(from,to)
45
- from = Bit.find_by_version(from)
46
- to = Bit.find_by_version(to)
45
+ from = Bit.find_by_version(from) if from.instance_of?(String)
46
+ to = Bit.find_by_version(to) if to.instance_of?(String)
47
47
  from.git_repository.diff(from.objectish, to.objectish)
48
48
  end
49
49
 
data/lib/sinatra-s3/s3.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'rubygems'
2
- require 'activerecord'
2
+ require 'active_record'
3
3
 
4
+ require 'fileutils'
4
5
  require 'sinatra/base'
5
6
  require 'openssl'
6
7
  require 'digest/sha1'
@@ -29,13 +30,19 @@ rescue LoadError
29
30
  end
30
31
 
31
32
  module S3
32
- VERSION = "0.98"
33
+ S3_ENV = :production
34
+
35
+ def self.config
36
+ @config ||= YAML.load_file("s3.yml")[S3_ENV] rescue { :db => { :adapter => 'sqlite3', :database => "db/s3.db" } }
37
+ end
38
+
39
+ VERSION = "0.99"
33
40
  DEFAULT_PASSWORD = 'pass@word1'
34
41
 
35
42
  BUFSIZE = (4 * 1024)
36
43
  ROOT_DIR = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
37
- PUBLIC_PATH = File.join(ROOT_DIR, 'public')
38
- STORAGE_PATH = File.expand_path('storage') unless defined?(STORAGE_PATH)
44
+ PUBLIC_PATH = File.expand_path(S3.config[:public_path] || File.join(ROOT_DIR, 'public'))
45
+ STORAGE_PATH = File.expand_path(S3.config[:storage_path] || 'storage') unless defined?(STORAGE_PATH)
39
46
  RESOURCE_TYPES = %w[acl versioning torrent]
40
47
  CANNED_ACLS = {
41
48
  'private' => 0600,
data/public/js/wiki.js ADDED
@@ -0,0 +1,35 @@
1
+ window.onload = function ()
2
+ {
3
+ if ($('revision_history') != null) {
4
+ update_rev_checkboxes();
5
+ $$('input.from').each(function (e) {
6
+ e.onchange = update_rev_checkboxes;
7
+ })
8
+ }
9
+ if ($('edit_page_form') != null) {
10
+ $('edit_page_form').onsubmit = submit_edit_page;
11
+ }
12
+ }
13
+ function submit_edit_page()
14
+ {
15
+ if ($('page_comment').value == '') {
16
+ alert('Please provide a comment describing the changes you made to the page.');
17
+ return false;
18
+ }
19
+ }
20
+ function update_rev_checkboxes()
21
+ {
22
+ hide_to = false;
23
+ rows = $$('#revision_history tr');
24
+ rows.each(function (e) {
25
+ f = e.getElementsBySelector('.from')[0]
26
+ t = e.getElementsBySelector('.to')[0]
27
+ if (f.checked == true)
28
+ hide_to = true;
29
+
30
+ if (hide_to == true)
31
+ t.style.display = 'none';
32
+ else
33
+ t.style.display = 'inline';
34
+ })
35
+ }
data/s3.yml.example CHANGED
@@ -1,17 +1,20 @@
1
1
  :development:
2
- :storage: storage
2
+ :public_path: public
3
+ :storage_path: storage
3
4
  :db:
4
5
  :database: db/development.db
5
6
  :adapter: sqlite3
6
7
 
7
8
  :test:
8
- :storage: test/storage
9
+ :public_path: public
10
+ :storage_path: test/storage
9
11
  :db:
10
12
  :database: db/test.db
11
13
  :adapter: sqlite3
12
14
 
13
15
  :production:
14
- :storage: storage
16
+ :public_path: public
17
+ :storage_path: storage
15
18
  :db:
16
19
  :database: db/production.db
17
20
  :adapter: sqlite3
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-s3
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.98"
4
+ hash: 205
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 99
9
+ version: "0.99"
5
10
  platform: ruby
6
11
  authors:
7
12
  - David Ricciardi
@@ -9,39 +14,56 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-07-29 00:00:00 -04:00
17
+ date: 2010-07-30 00:00:00 -04:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: sinatra
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
20
25
  requirements:
21
26
  - - ">="
22
27
  - !ruby/object:Gem::Version
28
+ hash: 15
29
+ segments:
30
+ - 1
31
+ - 0
23
32
  version: "1.0"
24
- version:
33
+ type: :runtime
34
+ version_requirements: *id001
25
35
  - !ruby/object:Gem::Dependency
26
36
  name: aws-s3
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
30
40
  requirements:
31
41
  - - ">="
32
42
  - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ - 6
47
+ - 2
33
48
  version: 0.6.2
34
- version:
49
+ type: :runtime
50
+ version_requirements: *id002
35
51
  - !ruby/object:Gem::Dependency
36
52
  name: haml
37
- type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
40
56
  requirements:
41
57
  - - ">="
42
58
  - !ruby/object:Gem::Version
59
+ hash: 25
60
+ segments:
61
+ - 2
62
+ - 2
63
+ - 15
43
64
  version: 2.2.15
44
- version:
65
+ type: :runtime
66
+ version_requirements: *id003
45
67
  description:
46
68
  email: nricciar@gmail.com
47
69
  executables:
@@ -52,76 +74,44 @@ extra_rdoc_files:
52
74
  - README
53
75
  files:
54
76
  - bin/sinatra-s3
77
+ - lib/sinatra-s3/admin.rb
55
78
  - lib/sinatra-s3/base.rb
56
79
  - lib/sinatra-s3/errors.rb
80
+ - lib/sinatra-s3/ext.rb
81
+ - lib/sinatra-s3/helpers/acp.rb
82
+ - lib/sinatra-s3/helpers/admin.rb
83
+ - lib/sinatra-s3/helpers/tracker.rb
84
+ - lib/sinatra-s3/helpers/versioning.rb
85
+ - lib/sinatra-s3/helpers.rb
57
86
  - lib/sinatra-s3/models/bit.rb
87
+ - lib/sinatra-s3/models/bucket.rb
88
+ - lib/sinatra-s3/models/file_info.rb
58
89
  - lib/sinatra-s3/models/git_bucket.rb
59
90
  - lib/sinatra-s3/models/slot.rb
91
+ - lib/sinatra-s3/models/torrent.rb
60
92
  - lib/sinatra-s3/models/torrent_peer.rb
61
- - lib/sinatra-s3/models/file_info.rb
62
93
  - lib/sinatra-s3/models/user.rb
63
- - lib/sinatra-s3/models/bucket.rb
64
- - lib/sinatra-s3/models/torrent.rb
65
- - lib/sinatra-s3/helpers.rb
94
+ - lib/sinatra-s3/s3.rb
66
95
  - lib/sinatra-s3/tasks.rb
67
- - lib/sinatra-s3/admin.rb
68
- - lib/sinatra-s3/ext.rb
69
96
  - lib/sinatra-s3/tracker.rb
70
- - lib/sinatra-s3/helpers/acp.rb
71
- - lib/sinatra-s3/helpers/admin.rb
72
- - lib/sinatra-s3/helpers/tracker.rb
73
- - lib/sinatra-s3/helpers/versioning.rb
74
- - lib/sinatra-s3/s3.rb
75
97
  - lib/sinatra-s3.rb
76
- - public/test.html
77
- - public/images/external-link.gif
78
- - public/css/wiki.css
79
98
  - public/css/control.css
99
+ - public/css/wiki.css
100
+ - public/images/external-link.gif
80
101
  - public/js/prototype.js
81
102
  - public/js/upload_status.js
82
- - examples/wiki.ru
103
+ - public/js/wiki.js
83
104
  - examples/wiki.rb
84
- - examples/README
85
- - examples/wikicloth/wikicloth-0.1.3.gem
86
- - examples/wikicloth/install.rb
87
- - examples/wikicloth/wikicloth.gemspec
88
- - examples/wikicloth/run_tests.rb
89
- - examples/wikicloth/README
90
- - examples/wikicloth/MIT-LICENSE
91
- - examples/wikicloth/sample_documents/george_washington.wiki
92
- - examples/wikicloth/sample_documents/pipe_trick.wiki
93
- - examples/wikicloth/sample_documents/default.css
94
- - examples/wikicloth/sample_documents/random.wiki
95
- - examples/wikicloth/sample_documents/tv.wiki
96
- - examples/wikicloth/sample_documents/air_force_one.wiki
97
- - examples/wikicloth/sample_documents/lists.wiki
98
- - examples/wikicloth/sample_documents/images.wiki
99
- - examples/wikicloth/sample_documents/elements.wiki
100
- - examples/wikicloth/sample_documents/wiki_tables.wiki
101
- - examples/wikicloth/sample_documents/wiki.png
102
- - examples/wikicloth/sample_documents/cheatsheet.wiki
103
- - examples/wikicloth/init.rb
104
- - examples/wikicloth/lib/wiki_buffer.rb
105
- - examples/wikicloth/lib/wikicloth.rb
106
- - examples/wikicloth/lib/wiki_cloth.rb
107
- - examples/wikicloth/lib/core_ext.rb
108
- - examples/wikicloth/lib/wiki_buffer/table.rb
109
- - examples/wikicloth/lib/wiki_buffer/html_element.rb
110
- - examples/wikicloth/lib/wiki_buffer/var.rb
111
- - examples/wikicloth/lib/wiki_buffer/link.rb
112
- - examples/wikicloth/lib/wiki_link_handler.rb
113
- - examples/wikicloth/tasks/wikicloth_tasks.rake
114
- - examples/wikicloth/uninstall.rb
115
- - examples/wikicloth/Rakefile
116
- - examples/wikicloth/test/wiki_cloth_test.rb
117
- - examples/wikicloth/test/test_helper.rb
105
+ - examples/wiki.ru
118
106
  - db/migrate/001_create_bits.rb
107
+ - db/migrate/002_create_users.rb
119
108
  - db/migrate/003_create_bits_users.rb
120
109
  - db/migrate/004_create_torrents.rb
121
- - db/migrate/002_create_users.rb
122
110
  - db/migrate/005_create_torrent_peers.rb
123
111
  - Rakefile
124
112
  - s3.yml.example
113
+ - test/s3api_test.rb
114
+ - test/test_helper.rb
125
115
  - README
126
116
  has_rdoc: true
127
117
  homepage: http://github.com/nricciar/sinatra-s3
@@ -133,21 +123,27 @@ rdoc_options: []
133
123
  require_paths:
134
124
  - lib
135
125
  required_ruby_version: !ruby/object:Gem::Requirement
126
+ none: false
136
127
  requirements:
137
128
  - - ">="
138
129
  - !ruby/object:Gem::Version
130
+ hash: 3
131
+ segments:
132
+ - 0
139
133
  version: "0"
140
- version:
141
134
  required_rubygems_version: !ruby/object:Gem::Requirement
135
+ none: false
142
136
  requirements:
143
137
  - - ">="
144
138
  - !ruby/object:Gem::Version
139
+ hash: 3
140
+ segments:
141
+ - 0
145
142
  version: "0"
146
- version:
147
143
  requirements: []
148
144
 
149
145
  rubyforge_project:
150
- rubygems_version: 1.3.5
146
+ rubygems_version: 1.3.7
151
147
  signing_key:
152
148
  specification_version: 3
153
149
  summary: An implementation of the Amazon S3 API in Ruby