omnifiles 0.3.1 → 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aecd7d2b5661651247d9e3864e8bf14fc5907c02
4
- data.tar.gz: 7b03735324b2271ed5973eaa638182dd466facf2
3
+ metadata.gz: 7e85195309c723e547a574170371019fae992be9
4
+ data.tar.gz: 542af0dfe026d4449ec31214cbdc327c2e6b7717
5
5
  SHA512:
6
- metadata.gz: bfb7dce2edc0fa1515d4d6afdadf4de28ca65590435b3ce55b041c21ad99b59d8a30a322ade7a6c3a56d592b0a4edf9d651d0980117dd478c632ca324d52f643
7
- data.tar.gz: 98509d750f0fb451daf12e686555a4ca521f3a924bd948892514d9ca07addf4592a1a2210610dd7538987814527101162638382a9a1b6f429af53f3e62552bae
6
+ metadata.gz: 212edf1f9d30c9be442235457e983d9223683888a4de78ed8aa85d945bbbf16b4034ed750a055ac7b32a454b951cd6d6f14b826312e27726a77d3f1c524938a1
7
+ data.tar.gz: a8928a9efec1afb7d789a70e8af9627f66becd8e5a273d14aebc47b7c90e3bb7881fd469f0d0f591087472182ce8470d95662cf5eaf0cd2d82be0923fc9e0b26
data/config.ru CHANGED
@@ -1,5 +1,13 @@
1
1
  require 'omnifiles'
2
- run Rack::URLMap.new({
3
- "/f" => OmniFiles::PublicApp,
4
- "/" => OmniFiles::ProtectedApp
5
- })
2
+
3
+ map '/f' do
4
+ run OmniFiles::PublicApp
5
+ end
6
+
7
+ map OmniFiles::ProtectedApp.assets_prefix do
8
+ run OmniFiles::ProtectedApp.sprockets
9
+ end
10
+
11
+ map '/' do
12
+ run OmniFiles::ProtectedApp
13
+ end
@@ -0,0 +1,93 @@
1
+
2
+ body {
3
+ padding: 5px;
4
+ font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
5
+ }
6
+
7
+ /* From http://purecss.io */
8
+ .pure-table {
9
+ /* Remove spacing between table cells (from Normalize.css) */
10
+ border-collapse: collapse;
11
+ border-spacing: 0;
12
+ empty-cells: show;
13
+ border: 1px solid #cbcbcb;
14
+ }
15
+
16
+ .pure-table caption {
17
+ color: #000;
18
+ font: italic 85%/1 arial, sans-serif;
19
+ padding: 1em 0;
20
+ text-align: center;
21
+ }
22
+
23
+ .pure-table td, .pure-table th {
24
+ border-left: 1px solid #cbcbcb;/* inner column border */
25
+ border-width: 0 0 0 1px;
26
+ font-size: inherit;
27
+ margin: 0;
28
+ overflow: visible; /*to make ths where the title is really long work*/
29
+ padding: 0.5em 0.5em; /* cell padding */
30
+ }
31
+
32
+ /* Consider removing this next declaration block, as it causes problems when
33
+ there's a rowspan on the first cell. Case added to the tests. issue#432 */
34
+ .pure-table td:first-child, .pure-table th:first-child {
35
+ border-left-width: 0;
36
+ }
37
+
38
+ .pure-table thead {
39
+ background-color: #e0e0e0;
40
+ color: #000;
41
+ text-align: left;
42
+ vertical-align: bottom;
43
+ }
44
+
45
+ .pure-table td {
46
+ background-color: transparent;
47
+ }
48
+
49
+ /* BORDERED TABLES */
50
+ .pure-table-bordered td {
51
+ border-bottom: 1px solid #cbcbcb;
52
+ }
53
+ .pure-table-bordered tbody > tr:last-child > td {
54
+ border-bottom-width: 0;
55
+ }
56
+
57
+ .wide
58
+ {
59
+ width: 100%;
60
+ }
61
+
62
+ .delete
63
+ {
64
+ color: #ff0000;
65
+ text-align: center;
66
+ font-weight: bold;
67
+ text-decoration: none;
68
+ border: none;
69
+ background: none;
70
+ cursor: pointer;
71
+ }
72
+
73
+ .flash {
74
+ position: relative;
75
+ margin-bottom: 5px;
76
+ border-radius: 3px;
77
+ padding: 8px 20px 8px 20px;
78
+ }
79
+
80
+ .flash.notice {
81
+ color: rgb(70, 136, 71);
82
+ background-color: rgba(223, 240, 216, 0.9);
83
+ }
84
+
85
+ .flash.error {
86
+ color: rgb(185, 74, 72);
87
+ background-color: rgba(242, 222, 222, 0.9);
88
+ }
89
+
90
+ /* for stats */
91
+ .left { width: 20%; float: left; }
92
+
93
+ .right { overflow: auto; }
@@ -1,13 +1,16 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'sinatra'
3
+ require 'sinatra/base'
4
4
  require 'sinatra/flash'
5
5
  require 'filemagic'
6
6
  require 'uri'
7
7
  require 'tempfile'
8
8
  require 'settingslogic'
9
9
  require 'haml'
10
+ require 'tilt/haml'
10
11
  require 'rack'
12
+ require 'sprockets'
13
+ require 'sprockets-helpers'
11
14
 
12
15
  module OmniFiles
13
16
 
@@ -18,6 +21,21 @@ module OmniFiles
18
21
  Settings.auth_password
19
22
  end
20
23
 
24
+ set :sprockets, Sprockets::Environment.new(root)
25
+ set :assets_prefix, '/omnifiles-assets'
26
+
27
+ configure do
28
+ Sprockets::Helpers.configure do |config|
29
+ config.environment = sprockets
30
+ config.prefix = assets_prefix
31
+ config.digest = true
32
+ end
33
+ sprockets.append_path 'assets/stylesheets'
34
+ sprockets.css_compressor = :scss
35
+ end
36
+
37
+ helpers Sprockets::Helpers
38
+
21
39
  enable :sessions
22
40
  set :session_secret, Settings.session_secret
23
41
 
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'sinatra'
3
+ require 'sinatra/base'
4
4
  require 'filemagic'
5
5
  require 'uri'
6
6
  require 'settingslogic'
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'sinatra'
3
+ require 'sinatra/base'
4
4
  require 'settingslogic'
5
5
  require 'rack'
6
6
 
@@ -10,12 +10,9 @@ module OmniFiles
10
10
  class Storage
11
11
  def initialize mongo_host, mongo_port, mongo_name, logger
12
12
  @logger = logger
13
- client = Mongo::MongoClient.new(mongo_host, mongo_port)
14
- raise 'No mongo found' unless client
15
- db = client.db(mongo_name)
16
- raise 'No mongo db found' unless db
17
- @logger.info "Mongo collections " + db.collection_names.join(',')
18
- @coll = db.collection('files')
13
+ db = Mongo::Client.new([ mongo_host + ':' + mongo_port.to_s ], :database => mongo_name)
14
+ raise 'No mongo found' unless db
15
+ @coll = db[:files]
19
16
  raise 'Cannot use collection' unless @coll
20
17
 
21
18
  @shortener = UrlShortener.new(SecureRandom.hex(8), 1)
@@ -31,7 +28,7 @@ class Storage
31
28
  shortened = @shortener.shorten hashing
32
29
  counter += 1
33
30
  next if shortened.size < 5
34
- same_shortened = @coll.find_one({shortened: shortened}, :fields => [ "_id" ])
31
+ same_shortened = @coll.find(shortened: shortened).count > 0
35
32
  raise 'Something goes wrong' if counter > 100
36
33
  end while same_shortened
37
34
  shortened
@@ -40,28 +37,26 @@ class Storage
40
37
  def put_file shortened, filename, mime
41
38
  doc = { original_filename: filename, shortened: shortened, mime: mime,
42
39
  accessed: { count: 0 }, created: { time: Time.now.utc } }
43
- res = @coll.insert(doc)
40
+ res = @coll.insert_one(doc)
44
41
  @logger.info "mongo put result: #{res}"
45
42
  end
46
43
 
47
44
  # returns full url
48
45
  def get_file shortened
49
- @coll.find_one({shortened: shortened})
46
+ @coll.find(shortened: shortened).limit(1).first
50
47
  end
51
48
 
52
49
  # returns full url and update statistics
53
50
  def get_file_and_bump shortened
54
- data = @coll.find_one({shortened: shortened})
55
- return nil unless data
56
- @coll.update({ _id: data["_id"]}, {
57
- "$inc" => { "accessed.count" => 1 },
58
- "$set" => { "accessed.time" => Time.now.utc } })
59
- @coll.find_one({ _id: data["_id"]})
51
+ @coll.find_one_and_update({ shortened: shortened },
52
+ { "$inc" => { "accessed.count" => 1 },
53
+ "$set" => { "accessed.time" => Time.now.utc } },
54
+ return_document: :after )
60
55
  end
61
56
 
62
57
  def delete_file shortened
63
- resp = @coll.remove({shortened: shortened})
64
- resp['ok'] && resp['n'] > 0
58
+ resp = @coll.delete_many(shortened: shortened)
59
+ resp.ok? && resp.n > 0
65
60
  end
66
61
 
67
62
  def enumerate_docs
@@ -1,3 +1,3 @@
1
1
  module OmniFiles
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -2,95 +2,7 @@
2
2
  %html
3
3
  %head
4
4
  %title OmniFiles files
5
- :css
6
- body {
7
- padding: 5px;
8
- font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
9
- }
10
-
11
- /* From http://purecss.io */
12
- .pure-table {
13
- /* Remove spacing between table cells (from Normalize.css) */
14
- border-collapse: collapse;
15
- border-spacing: 0;
16
- empty-cells: show;
17
- border: 1px solid #cbcbcb;
18
- }
19
-
20
- .pure-table caption {
21
- color: #000;
22
- font: italic 85%/1 arial, sans-serif;
23
- padding: 1em 0;
24
- text-align: center;
25
- }
26
-
27
- .pure-table td, .pure-table th {
28
- border-left: 1px solid #cbcbcb;/* inner column border */
29
- border-width: 0 0 0 1px;
30
- font-size: inherit;
31
- margin: 0;
32
- overflow: visible; /*to make ths where the title is really long work*/
33
- padding: 0.5em 0.5em; /* cell padding */
34
- }
35
-
36
- /* Consider removing this next declaration block, as it causes problems when
37
- there's a rowspan on the first cell. Case added to the tests. issue#432 */
38
- .pure-table td:first-child, .pure-table th:first-child {
39
- border-left-width: 0;
40
- }
41
-
42
- .pure-table thead {
43
- background-color: #e0e0e0;
44
- color: #000;
45
- text-align: left;
46
- vertical-align: bottom;
47
- }
48
-
49
- .pure-table td {
50
- background-color: transparent;
51
- }
52
-
53
- /* BORDERED TABLES */
54
- .pure-table-bordered td {
55
- border-bottom: 1px solid #cbcbcb;
56
- }
57
- .pure-table-bordered tbody > tr:last-child > td {
58
- border-bottom-width: 0;
59
- }
60
-
61
- .wide
62
- {
63
- width: 100%;
64
- }
65
-
66
- .delete
67
- {
68
- color: #ff0000;
69
- text-align: center;
70
- font-weight: bold;
71
- text-decoration: none;
72
- border: none;
73
- background: none;
74
- cursor: pointer;
75
- }
76
-
77
- .flash {
78
- position: relative;
79
- margin-bottom: 5px;
80
- border-radius: 3px;
81
- padding: 8px 20px 8px 20px;
82
- }
83
-
84
- .flash.notice {
85
- color: rgb(70, 136, 71);
86
- background-color: rgba(223, 240, 216, 0.9);
87
- }
88
-
89
- .flash.error {
90
- color: rgb(185, 74, 72);
91
- background-color: rgba(242, 222, 222, 0.9);
92
- }
93
-
5
+ =stylesheet_tag 'application'
94
6
  %body
95
7
  %h1 Files
96
8
  %table.pure-table.pure-table-bordered.wide
@@ -2,16 +2,7 @@
2
2
  %html
3
3
  %head
4
4
  %title OmniFiles statistics
5
- :css
6
- body {
7
- padding: 5px;
8
- font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
9
- }
10
-
11
- .left { width: 20%; float: left; }
12
-
13
- .right { overflow: auto; }
14
-
5
+ =stylesheet_tag 'application'
15
6
  %body
16
7
  %h1 Statistics for #{@hdata[:shortened]}
17
8
  #container
data/omnifiles.gemspec CHANGED
@@ -18,15 +18,17 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.7"
22
- spec.add_development_dependency "rake", "~> 10.0"
23
- spec.add_runtime_dependency "sinatra", "~> 1.4.5"
24
- spec.add_runtime_dependency "ruby-filemagic", "~> 0.6.0"
25
- spec.add_runtime_dependency "mongo", "~> 1.12.0"
26
- spec.add_runtime_dependency "bson_ext", "~> 1.12.0"
21
+ spec.add_development_dependency "bundler", "~> 1"
22
+ spec.add_development_dependency "rake", "~> 10"
23
+ spec.add_runtime_dependency "sinatra", "~> 1.4"
24
+ spec.add_runtime_dependency "ruby-filemagic", "~> 0.7"
25
+ spec.add_runtime_dependency "mongo", "~> 2.2"
26
+ spec.add_runtime_dependency "bson_ext", "~> 1.5"
27
27
  spec.add_runtime_dependency "haml", "~> 4.0.0"
28
- spec.add_runtime_dependency "settingslogic", "~> 2.0.0"
28
+ spec.add_runtime_dependency "settingslogic", "~> 2"
29
29
  spec.add_runtime_dependency "psych", "~> 2.0.0"
30
30
  spec.add_runtime_dependency "thin", "~> 1.6.0"
31
- spec.add_runtime_dependency "sinatra-flash", "~> 0.3.0"
31
+ spec.add_runtime_dependency "sinatra-flash", "~> 0.3"
32
+ spec.add_runtime_dependency "sprockets-helpers", "~> 1.2"
33
+ spec.add_runtime_dependency "sass", "~> 3.4"
32
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omnifiles
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - theirix
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-23 00:00:00.000000000 Z
11
+ date: 2016-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,84 +16,84 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: '1'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.7'
26
+ version: '1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '10'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '10'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: sinatra
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.4.5
47
+ version: '1.4'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.4.5
54
+ version: '1.4'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: ruby-filemagic
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.6.0
61
+ version: '0.7'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.6.0
68
+ version: '0.7'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mongo
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 1.12.0
75
+ version: '2.2'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 1.12.0
82
+ version: '2.2'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: bson_ext
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 1.12.0
89
+ version: '1.5'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 1.12.0
96
+ version: '1.5'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: haml
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -114,14 +114,14 @@ dependencies:
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 2.0.0
117
+ version: '2'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 2.0.0
124
+ version: '2'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: psych
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -156,14 +156,42 @@ dependencies:
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: 0.3.0
159
+ version: '0.3'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '0.3'
167
+ - !ruby/object:Gem::Dependency
168
+ name: sprockets-helpers
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '1.2'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '1.2'
181
+ - !ruby/object:Gem::Dependency
182
+ name: sass
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '3.4'
160
188
  type: :runtime
161
189
  prerelease: false
162
190
  version_requirements: !ruby/object:Gem::Requirement
163
191
  requirements:
164
192
  - - "~>"
165
193
  - !ruby/object:Gem::Version
166
- version: 0.3.0
194
+ version: '3.4'
167
195
  description: File storage and URL shortener.
168
196
  email:
169
197
  - theirix@gmail.com
@@ -181,6 +209,7 @@ files:
181
209
  - config.ru
182
210
  - config/settings.yaml.example
183
211
  - lib/omnifiles.rb
212
+ - lib/omnifiles/assets/stylesheets/application.css
184
213
  - lib/omnifiles/protectedapp.rb
185
214
  - lib/omnifiles/publicapp.rb
186
215
  - lib/omnifiles/server.rb
@@ -211,7 +240,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
211
240
  version: '0'
212
241
  requirements: []
213
242
  rubyforge_project:
214
- rubygems_version: 2.4.5
243
+ rubygems_version: 2.5.1
215
244
  signing_key:
216
245
  specification_version: 4
217
246
  summary: File storage and URL shortener.