dis 1.0.4 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 835c04f15f51b3e319654d2a8040df778c62cc8a
4
- data.tar.gz: 2dee85c2af96d2804140d449a79e1d43fc3da22a
3
+ metadata.gz: 7b2fd660ff2a6498b73046ce44d262e49440e48e
4
+ data.tar.gz: 9008b0cd219133671c8910dc5353b3a2fe665a0d
5
5
  SHA512:
6
- metadata.gz: b1f15973ebba3a27e077c3cbcfc779d3e42be633663c5fe1bc64b4662ac37af18da246aac11644e20303b440b649aa53021a5aeadfd284f1b75961c6a1a22ced
7
- data.tar.gz: dd16af7aacf26faeeaf9052acc7e7ca2a91df3c2b9ed4b526cbb7b4b85b155aa1e024e00f9f06c79ca890a0a556253ca353e3639e0849f90fbedada66c545417
6
+ metadata.gz: 98d5e2fe6406b2549902eff4ce453e747b16dae2da095feffef8c66f0b0ec454d94004d2ee0045de5915f01efed958c60d0c5f7cd23b527123c06cfe03ac7a28
7
+ data.tar.gz: 1ac6bbf53d47be0dfaf54b2be0cc596389eacb9f8cde4a42a98c77d3fa8de15b85bef305c85b08af30443836827e418409e043fbbbfb54eb580f1bfeb759a4d4
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Dis [![Build Status](https://travis-ci.org/elektronaut/dis.png)](https://travis-ci.org/elektronaut/dis) [![Code Climate](https://codeclimate.com/github/elektronaut/dis.png)](https://codeclimate.com/github/elektronaut/dis) [![Code Climate](https://codeclimate.com/github/elektronaut/dis/coverage.png)](https://codeclimate.com/github/elektronaut/dis)
1
+ # Dis [![Build Status](https://travis-ci.org/elektronaut/dis.svg?branch=master)](https://travis-ci.org/elektronaut/dis) [![Code Climate](https://codeclimate.com/github/elektronaut/dis/badges/gpa.svg)](https://codeclimate.com/github/elektronaut/dis) [![Code Climate](https://codeclimate.com/github/elektronaut/dis/badges/coverage.svg)](https://codeclimate.com/github/elektronaut/dis) [![Dependency Status](https://gemnasium.com/elektronaut/dis.svg)](https://gemnasium.com/elektronaut/dis)
2
2
 
3
3
  Dis handles file uploads for your Rails app.
4
4
  It's similar to [Paperclip](https://github.com/thoughtbot/paperclip)
data/lib/dis/errors.rb CHANGED
@@ -8,4 +8,4 @@ module Dis
8
8
  class NotFoundError < Dis::Errors::Error; end
9
9
  class NoDataError < Dis::Errors::Error; end
10
10
  end
11
- end
11
+ end
data/lib/dis/jobs.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
 
3
- require "dis/jobs/delete"
4
- require "dis/jobs/store"
3
+ require 'dis/jobs/delete'
4
+ require 'dis/jobs/store'
data/lib/dis/layer.rb CHANGED
@@ -47,7 +47,7 @@ module Dis
47
47
  class Layer
48
48
  attr_reader :connection
49
49
 
50
- def initialize(connection, options={})
50
+ def initialize(connection, options = {})
51
51
  options = default_options.merge(options)
52
52
  @connection = connection
53
53
  @delayed = options[:delayed]
@@ -101,17 +101,21 @@ module Dis
101
101
  #
102
102
  # layer.exists?("documents", hash)
103
103
  def exists?(type, hash)
104
- (directory(type, hash) &&
105
- directory(type, hash).files.head(key_component(type, hash))) ? true : false
104
+ if directory(type, hash) &&
105
+ directory(type, hash).files.head(key_component(type, hash))
106
+ true
107
+ else
108
+ false
109
+ end
106
110
  end
107
111
 
108
112
  # Retrieves a file from the store.
109
113
  #
110
114
  # layer.get("documents", hash)
111
115
  def get(type, hash)
112
- if dir = directory(type, hash)
113
- dir.files.get(key_component(type, hash))
114
- end
116
+ dir = directory(type, hash)
117
+ return unless dir
118
+ dir.files.get(key_component(type, hash))
115
119
  end
116
120
 
117
121
  # Deletes a file from the store.
@@ -138,8 +142,8 @@ module Dis
138
142
  { delayed: false, readonly: false, public: false, path: nil }
139
143
  end
140
144
 
141
- def directory_component(type, hash)
142
- path || ""
145
+ def directory_component(_type, _hash)
146
+ path || ''
143
147
  end
144
148
 
145
149
  def key_component(type, hash)
@@ -169,7 +173,7 @@ module Dis
169
173
  file.rewind if file.respond_to?(:rewind)
170
174
  directory!(type, hash).files.create(
171
175
  key: key_component(type, hash),
172
- body: (file.kind_of?(Fog::Model) ? file.body : file),
176
+ body: (file.is_a?(Fog::Model) ? file.body : file),
173
177
  public: public?
174
178
  )
175
179
  end
data/lib/dis/layers.rb CHANGED
@@ -7,7 +7,7 @@ module Dis
7
7
  class Layers
8
8
  include Enumerable
9
9
 
10
- def initialize(layers=[])
10
+ def initialize(layers = [])
11
11
  @layers = layers
12
12
  end
13
13
 
@@ -28,7 +28,7 @@ module Dis
28
28
 
29
29
  # Returns a new instance containing only the delayed layers.
30
30
  def delayed
31
- self.class.new select { |layer| layer.delayed? }
31
+ self.class.new select(&:delayed?)
32
32
  end
33
33
 
34
34
  # Returns true if one or more delayed layers exist.
@@ -38,7 +38,7 @@ module Dis
38
38
 
39
39
  # Returns a new instance containing only the immediate layers.
40
40
  def immediate
41
- self.class.new select { |layer| layer.immediate? }
41
+ self.class.new select(&:immediate?)
42
42
  end
43
43
 
44
44
  # Returns true if one or more immediate layers exist.
@@ -48,7 +48,7 @@ module Dis
48
48
 
49
49
  # Returns a new instance containing only the readonly layers.
50
50
  def readonly
51
- self.class.new select { |layer| layer.readonly? }
51
+ self.class.new select(&:readonly?)
52
52
  end
53
53
 
54
54
  # Returns true if one or more readonly layers exist.
@@ -58,7 +58,7 @@ module Dis
58
58
 
59
59
  # Returns a new instance containing only the writeable layers.
60
60
  def writeable
61
- self.class.new select { |layer| layer.writeable? }
61
+ self.class.new select(&:writeable?)
62
62
  end
63
63
 
64
64
  # Returns true if one or more writeable layers exist.
@@ -66,4 +66,4 @@ module Dis
66
66
  writeable.any?
67
67
  end
68
68
  end
69
- end
69
+ end
@@ -25,7 +25,7 @@ module Dis
25
25
  # class Document < ActiveRecord::Base; end
26
26
  # Document.dis_type # => "documents"
27
27
  def dis_type
28
- @dis_type ||= self.table_name
28
+ @dis_type ||= table_name
29
29
  end
30
30
 
31
31
  # Sets the storage type name.
@@ -7,16 +7,16 @@ module Dis
7
7
  # Facilitates communication between the model and the storage,
8
8
  # and holds any newly assigned data before the record is saved.
9
9
  class Data
10
- def initialize(record, raw=nil)
10
+ def initialize(record, raw = nil)
11
11
  @record = record
12
12
  @raw = raw
13
13
  end
14
14
 
15
15
  # Returns true if two Data objects represent the same data.
16
- def ==(comp)
16
+ def ==(other)
17
17
  # TODO: This can be made faster by
18
18
  # comparing hashes for stored objects.
19
- comp.read == read
19
+ other.read == read
20
20
  end
21
21
 
22
22
  # Returns true if data exists either in memory or in storage.
@@ -86,15 +86,19 @@ module Dis
86
86
  if object.respond_to?(:body)
87
87
  object.body
88
88
  elsif object.respond_to?(:read)
89
- object.rewind
90
- response = object.read
91
- object.rewind
92
- response
89
+ rewind_and_read(object)
93
90
  else
94
91
  object
95
92
  end
96
93
  end
97
94
 
95
+ def rewind_and_read(object)
96
+ object.rewind
97
+ response = object.read
98
+ object.rewind
99
+ response
100
+ end
101
+
98
102
  def storage_type
99
103
  @record.class.dis_type
100
104
  end
@@ -110,9 +114,7 @@ module Dis
110
114
  )
111
115
  end
112
116
 
113
- def raw
114
- @raw
115
- end
117
+ attr_reader :raw
116
118
  end
117
119
  end
118
- end
120
+ end
data/lib/dis/model.rb CHANGED
@@ -76,7 +76,7 @@ module Dis
76
76
  # If you want to validate content types, size or similar, simply use standard
77
77
  # Rails validations on the metadata attributes:
78
78
  #
79
- # validates :content_type, presence: true, format: /\Aapplication\/(x\-)?pdf\z/
79
+ # validates :content_type, presence: true, format: /\Aapplication\/pdf\z/
80
80
  # validates :filename, presence: true, format: /\A[\w_\-\.]+\.pdf\z/i
81
81
  # validates :content_length, numericality: { less_than: 5.megabytes }
82
82
  module Model
@@ -125,9 +125,9 @@ module Dis
125
125
  private
126
126
 
127
127
  def cleanup_data
128
- if previous_hash = changes[dis_attribute(:content_hash)].try(&:first)
129
- dis_data.expire(previous_hash)
130
- end
128
+ previous_hash = changes[dis_attribute(:content_hash)].try(&:first)
129
+ return unless previous_hash
130
+ dis_data.expire(previous_hash)
131
131
  end
132
132
 
133
133
  def delete_data
@@ -135,9 +135,7 @@ module Dis
135
135
  end
136
136
 
137
137
  def store_data
138
- if dis_data.changed?
139
- dis_set :content_hash, dis_data.store!
140
- end
138
+ dis_set :content_hash, dis_data.store! if dis_data.changed?
141
139
  end
142
140
 
143
141
  def dis_get(attribute_name)
@@ -158,7 +156,7 @@ module Dis
158
156
 
159
157
  # We don't want the data column when doing a partial write.
160
158
  def keys_for_partial_write
161
- super.reject { |a| a == "data" }
159
+ super.reject { |a| a == 'data' }
162
160
  end
163
161
  end
164
162
  end
data/lib/dis/storage.rb CHANGED
@@ -19,15 +19,15 @@ module Dis
19
19
  class << self
20
20
  # Returns a hex digest for a given binary. Accepts files, strings
21
21
  # and Fog models.
22
- def file_digest(file, &block)
22
+ def file_digest(file)
23
23
  hash = case file
24
- when Fog::Model
25
- digest.hexdigest(file.body)
26
- when String
27
- digest.hexdigest(file)
28
- else
29
- digest.file(file.path).hexdigest
30
- end
24
+ when Fog::Model
25
+ digest.hexdigest(file.body)
26
+ when String
27
+ digest.hexdigest(file)
28
+ else
29
+ digest.file(file.path).hexdigest
30
+ end
31
31
  yield hash if block_given?
32
32
  hash
33
33
  end
@@ -83,15 +83,15 @@ module Dis
83
83
  # Returns an instance of Fog::Model.
84
84
  def get(type, hash)
85
85
  require_layers!
86
- miss = false
87
- layers.each do |layer|
88
- if result = layer.get(type, hash)
89
- store_immediately!(type, result) if miss
86
+
87
+ layers.inject(true) do |no_misses, layer|
88
+ result = layer.get(type, hash)
89
+ if result
90
+ store_immediately!(type, result) unless no_misses
90
91
  return result
91
- else
92
- miss = true
93
92
  end
94
93
  end
94
+
95
95
  raise Dis::Errors::NotFoundError
96
96
  end
97
97
 
@@ -136,15 +136,11 @@ module Dis
136
136
  end
137
137
 
138
138
  def require_layers!
139
- unless layers.any?
140
- raise Dis::Errors::NoLayersError
141
- end
139
+ raise Dis::Errors::NoLayersError unless layers.any?
142
140
  end
143
141
 
144
142
  def require_writeable_layers!
145
- unless layers.immediate.writeable.any?
146
- raise Dis::Errors::NoLayersError
147
- end
143
+ raise Dis::Errors::NoLayersError unless layers.immediate.writeable.any?
148
144
  end
149
145
 
150
146
  def digest
@@ -8,10 +8,8 @@ module Dis
8
8
  # Validates that a record has data, either freshly assigned or
9
9
  # persisted in the storage. Adds a `:blank` error on `:data`if not.
10
10
  def validate(record)
11
- unless record.data?
12
- record.errors.add(:data, :blank)
13
- end
11
+ record.errors.add(:data, :blank) unless record.data?
14
12
  end
15
13
  end
16
14
  end
17
- end
15
+ end
data/lib/dis/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Dis
4
- VERSION = "1.0.4"
4
+ VERSION = '1.0.5'.freeze
5
5
  end
data/lib/dis.rb CHANGED
@@ -1,18 +1,18 @@
1
1
  # encoding: utf-8
2
2
 
3
- require "digest/sha1"
4
- require "fog/core"
5
- require "fog/local/storage"
6
- require "active_job"
7
- require "pmap"
8
- require "dis/engine"
9
- require "dis/errors"
10
- require "dis/jobs"
11
- require "dis/layer"
12
- require "dis/layers"
13
- require "dis/model"
14
- require "dis/storage"
15
- require "dis/validations"
3
+ require 'digest/sha1'
4
+ require 'fog/core'
5
+ require 'fog/local'
6
+ require 'active_job'
7
+ require 'pmap'
8
+ require 'dis/engine'
9
+ require 'dis/errors'
10
+ require 'dis/jobs'
11
+ require 'dis/layer'
12
+ require 'dis/layers'
13
+ require 'dis/model'
14
+ require 'dis/storage'
15
+ require 'dis/validations'
16
16
 
17
17
  module Dis
18
18
  end
@@ -6,12 +6,12 @@ require 'rails/generators/rails/model/model_generator'
6
6
  module Dis
7
7
  module Generators
8
8
  class InstallGenerator < Rails::Generators::Base
9
- desc "Creates the Dis initializer"
10
- source_root File.expand_path("../templates", __FILE__)
9
+ desc 'Creates the Dis initializer'
10
+ source_root File.expand_path('../templates', __FILE__)
11
11
 
12
12
  def create_initializer
13
13
  template 'initializer.rb', File.join('config', 'initializers', 'dis.rb')
14
14
  end
15
15
  end
16
16
  end
17
- end
17
+ end
@@ -3,7 +3,7 @@
3
3
  # Creates a local storage layer in db/dis:
4
4
 
5
5
  Dis::Storage.layers << Dis::Layer.new(
6
- Fog::Storage.new({ provider: 'Local', local_root: Rails.root.join('db', 'dis') }),
6
+ Fog::Storage.new(provider: 'Local', local_root: Rails.root.join('db', 'dis')),
7
7
  path: Rails.env
8
8
  )
9
9
 
@@ -6,14 +6,17 @@ require 'rails/generators/rails/model/model_generator'
6
6
  module Dis
7
7
  module Generators
8
8
  class ModelGenerator < Rails::Generators::ModelGenerator
9
- desc "Creates a Dis model"
9
+ desc 'Creates a Dis model'
10
10
 
11
11
  def initialize(args, *options)
12
12
  super(inject_dis_attributes(args), *options)
13
13
  end
14
14
 
15
15
  def add_model_extension
16
- inject_into_file File.join('app/models', class_path, "#{file_name}.rb"), after: "ActiveRecord::Base\n" do
16
+ inject_into_file(
17
+ File.join('app/models', class_path, "#{file_name}.rb"),
18
+ after: "ActiveRecord::Base\n"
19
+ ) do
17
20
  " include Dis::Model\n"
18
21
  end
19
22
  end
@@ -22,20 +25,20 @@ module Dis
22
25
 
23
26
  def inject_dis_attributes(args)
24
27
  if args.any?
25
- args = [args[0]] + dis_attributes + args[1..args.length]
28
+ [args[0]] + dis_attributes + args[1..args.length]
26
29
  else
27
30
  args
28
31
  end
29
32
  end
30
33
 
31
34
  def dis_attributes
32
- %w{
35
+ %w(
33
36
  content_hash:string
34
37
  content_type:string
35
38
  content_length:integer
36
39
  filename:string
37
- }
40
+ )
38
41
  end
39
42
  end
40
43
  end
41
- end
44
+ end
data/lib/tasks/dis.rake CHANGED
@@ -1,32 +1,32 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  namespace :dis do
4
- desc "Check stuff"
4
+ desc 'Check stuff'
5
5
  task consistency_check: :environment do
6
- unless ENV["MODELS"]
6
+ unless ENV['MODELS']
7
7
  puts "Usage: #{$PROGRAM_NAME} dis:consistency_check " \
8
- "MODELS=Avatar,Document"
8
+ 'MODELS=Avatar,Document'
9
9
  exit
10
10
  end
11
11
 
12
- models = ENV["MODELS"].split(",").map(&:strip).map(&:constantize)
12
+ models = ENV['MODELS'].split(',').map(&:strip).map(&:constantize)
13
13
 
14
14
  models.each do |model|
15
15
  puts "-- #{model.name} --"
16
16
 
17
17
  content_hash_attr = model.dis_attributes[:content_hash]
18
18
  objects = model
19
- .select(content_hash_attr)
20
- .uniq
21
- .map { |r| r.send(content_hash_attr) }
19
+ .select(content_hash_attr)
20
+ .uniq
21
+ .map { |r| r.send(content_hash_attr) }
22
22
 
23
23
  puts "Unique objects: #{objects.length}"
24
24
 
25
25
  Dis::Storage.layers.each do |layer|
26
26
  existing = objects
27
- .pmap { |hash| [hash, layer.exists?(model.dis_type, hash)] }
28
- .select(&:last)
29
- .map(&:first)
27
+ .pmap { |hash| [hash, layer.exists?(model.dis_type, hash)] }
28
+ .select(&:last)
29
+ .map(&:first)
30
30
  missing = objects - existing
31
31
  puts "#{layer.name}: #{existing.length} (#{missing.length} missing)"
32
32
 
metadata CHANGED
@@ -1,57 +1,77 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dis
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Inge Jørgensen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-15 00:00:00.000000000 Z
11
+ date: 2016-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 4.2.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: 5.1.0
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: 4.2.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 5.1.0
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: fog
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
37
  - - "~>"
32
38
  - !ruby/object:Gem::Version
33
- version: 1.26.0
39
+ version: '1.35'
34
40
  type: :runtime
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
44
  - - "~>"
39
45
  - !ruby/object:Gem::Version
40
- version: 1.26.0
46
+ version: '1.35'
47
+ - !ruby/object:Gem::Dependency
48
+ name: fog-local
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
41
61
  - !ruby/object:Gem::Dependency
42
62
  name: pmap
43
63
  requirement: !ruby/object:Gem::Requirement
44
64
  requirements:
45
65
  - - "~>"
46
66
  - !ruby/object:Gem::Version
47
- version: 1.0.2
67
+ version: 1.1.0
48
68
  type: :runtime
49
69
  prerelease: false
50
70
  version_requirements: !ruby/object:Gem::Requirement
51
71
  requirements:
52
72
  - - "~>"
53
73
  - !ruby/object:Gem::Version
54
- version: 1.0.2
74
+ version: 1.1.0
55
75
  - !ruby/object:Gem::Dependency
56
76
  name: sqlite3
57
77
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +92,14 @@ dependencies:
72
92
  requirements:
73
93
  - - "~>"
74
94
  - !ruby/object:Gem::Version
75
- version: 3.0.0
95
+ version: 3.5.1
76
96
  type: :development
77
97
  prerelease: false
78
98
  version_requirements: !ruby/object:Gem::Requirement
79
99
  requirements:
80
100
  - - "~>"
81
101
  - !ruby/object:Gem::Version
82
- version: 3.0.0
102
+ version: 3.5.1
83
103
  description: Dis is a Rails plugin that stores your file uploads and other binary
84
104
  blobs.
85
105
  email: