dynamic_image 1.0.4 → 2.0.0.beta1

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.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/{LICENSE → MIT-LICENSE} +1 -1
  3. data/README.md +57 -80
  4. data/Rakefile +7 -30
  5. data/lib/dynamic_image/belongs_to.rb +22 -0
  6. data/lib/dynamic_image/controller.rb +94 -0
  7. data/lib/dynamic_image/digest_verifier.rb +62 -0
  8. data/lib/dynamic_image/errors.rb +10 -0
  9. data/lib/dynamic_image/helper.rb +139 -85
  10. data/lib/dynamic_image/image_sizing.rb +156 -0
  11. data/lib/dynamic_image/metadata.rb +84 -0
  12. data/lib/dynamic_image/model/dimensions.rb +95 -0
  13. data/lib/dynamic_image/model/validations.rb +94 -0
  14. data/lib/dynamic_image/model.rb +130 -0
  15. data/lib/dynamic_image/processed_image.rb +119 -0
  16. data/lib/dynamic_image/railtie.rb +18 -0
  17. data/lib/dynamic_image/routing.rb +24 -0
  18. data/lib/dynamic_image/version.rb +5 -0
  19. data/lib/dynamic_image.rb +14 -71
  20. data/lib/rails/generators/dynamic_image/resource/resource_generator.rb +74 -0
  21. metadata +130 -97
  22. data/VERSION +0 -1
  23. data/app/controllers/images_controller.rb +0 -79
  24. data/app/models/image.rb +0 -188
  25. data/config/routes.rb +0 -16
  26. data/dynamic_image.gemspec +0 -62
  27. data/dynamic_image.sublime-project +0 -9
  28. data/dynamic_image.sublime-workspace +0 -1599
  29. data/init.rb +0 -1
  30. data/install.rb +0 -1
  31. data/lib/binary_storage/active_record_extensions.rb +0 -144
  32. data/lib/binary_storage/blob.rb +0 -104
  33. data/lib/binary_storage.rb +0 -28
  34. data/lib/dynamic_image/active_record_extensions.rb +0 -60
  35. data/lib/dynamic_image/engine.rb +0 -6
  36. data/lib/dynamic_image/filterset.rb +0 -79
  37. data/lib/generators/dynamic_image/USAGE +0 -5
  38. data/lib/generators/dynamic_image/dynamic_image_generator.rb +0 -38
  39. data/lib/generators/dynamic_image/templates/migrations/create_images.rb +0 -21
  40. data/uninstall.rb +0 -1
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+
3
+ module DynamicImage
4
+ # = DynamicImage Routing
5
+ #
6
+ # Extends +ActionDispatch::Routing::Mapper+ and provides a shortcut for
7
+ # defining routes for +DynamicImage::Controller+.
8
+ module Routing
9
+ # Declares an image resource.
10
+ #
11
+ # image_resources :avatars
12
+ def image_resources(resource_name, options={})
13
+ options = {
14
+ path: "#{resource_name}/:digest(/:size)",
15
+ constraints: { size: /\d+x\d+/ },
16
+ only: [:show]
17
+ }.merge(options)
18
+ resources resource_name, options do
19
+ get :uncropped, on: :member
20
+ get :original, on: :member
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+
3
+ module DynamicImage
4
+ VERSION = "2.0.0.beta1"
5
+ end
data/lib/dynamic_image.rb CHANGED
@@ -1,78 +1,21 @@
1
- require 'tempfile'
2
- require 'digest/sha1'
3
- require 'open-uri'
1
+ # encoding: utf-8
4
2
 
5
- # Gem dependencies
6
- require 'RMagick'
3
+ require 'mini_magick'
4
+ require 'dis'
7
5
  require 'vector2d'
8
- require 'rails'
9
- require 'action_controller'
10
- require 'active_support'
11
- require 'active_record'
12
6
 
13
- require 'binary_storage'
14
-
15
- if Rails::VERSION::MAJOR >= 3
16
- # Load the engine
17
- require 'dynamic_image/engine' if defined?(Rails)
18
- end
19
-
20
- require 'dynamic_image/active_record_extensions'
21
- require 'dynamic_image/filterset'
7
+ require 'dynamic_image/belongs_to'
8
+ require 'dynamic_image/controller'
9
+ require 'dynamic_image/digest_verifier'
10
+ require 'dynamic_image/errors'
22
11
  require 'dynamic_image/helper'
12
+ require 'dynamic_image/image_sizing'
13
+ require 'dynamic_image/metadata'
14
+ require 'dynamic_image/model'
15
+ require 'dynamic_image/processed_image'
16
+ require 'dynamic_image/railtie'
17
+ require 'dynamic_image/routing'
23
18
 
24
19
  module DynamicImage
25
- @@dirty_memory = false
26
- @@page_caching = true
27
-
28
- class << self
29
-
30
- def dirty_memory=(flag)
31
- @@dirty_memory = flag
32
- end
33
-
34
- def dirty_memory
35
- @@dirty_memory
36
- end
37
-
38
- def page_caching=(flag)
39
- @@page_caching = flag
40
- end
41
-
42
- def page_caching
43
- @@page_caching
44
- end
45
-
46
- def max_size
47
- @@max_size ||= "2000x2000"
48
- end
49
-
50
- def max_size=(new_max_size)
51
- @@max_size = new_max_size
52
- end
53
-
54
- def crash_size
55
- @@crash_size ||= "10000x10000"
56
- end
57
-
58
- def crash_size=(new_crash_size)
59
- @@crash_size = new_crash_size
60
- end
61
-
62
- # RMagick stores image data internally, Ruby doesn't see the used memory.
63
- # This method performs garbage collection if @@dirty_memory has been flagged.
64
- # More details here: http://rubyforge.org/forum/message.php?msg_id=1995
65
- def clean_dirty_memory(options={})
66
- options.symbolize_keys!
67
- if @@dirty_memory || options[:force]
68
- gc_disabled = GC.enable
69
- GC.start
70
- GC.disable if gc_disabled
71
- @@dirty_memory = false
72
- true
73
- else
74
- false
75
- end
76
- end
77
- end
20
+ cattr_accessor :digest_verifier
78
21
  end
@@ -0,0 +1,74 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rails/generators'
4
+ require 'rails/generators/rails/resource/resource_generator'
5
+
6
+ module DynamicImage
7
+ module Generators
8
+ class ResourceGenerator < Rails::Generators::ResourceGenerator
9
+ desc "Creates a DynamicImage resource"
10
+
11
+ def initialize(args, *options)
12
+ super(inject_dynamic_image_attributes(args), *options)
13
+ end
14
+
15
+ def add_controller_extension
16
+ inject_into_file(
17
+ File.join('app/controllers', class_path, "#{file_name.pluralize}_controller.rb"),
18
+ after: "ApplicationController\n"
19
+ ) do
20
+ " include DynamicImage::Controller\n\n" +
21
+ " private\n\n" +
22
+ " def model\n" +
23
+ " #{class_name}\n" +
24
+ " end\n"
25
+ end
26
+ end
27
+
28
+ def add_model_extension
29
+ inject_into_file(
30
+ File.join('app/models', class_path, "#{file_name}.rb"),
31
+ after: "ActiveRecord::Base\n"
32
+ ) do
33
+ " include DynamicImage::Model\n"
34
+ end
35
+ end
36
+
37
+ def alter_resource_routes
38
+ gsub_file(
39
+ File.join('config', 'routes.rb'),
40
+ " resources :#{file_name.pluralize}",
41
+ " image_resources :#{file_name.pluralize}"
42
+ )
43
+ end
44
+
45
+ private
46
+
47
+ def inject_dynamic_image_attributes(args)
48
+ if args.any?
49
+ args = [args[0]] + dynamic_image_attributes + args[1..args.length]
50
+ else
51
+ args
52
+ end
53
+ end
54
+
55
+ def dynamic_image_attributes
56
+ %w{
57
+ content_hash:string
58
+ content_type:string
59
+ content_length:integer
60
+ filename:string
61
+ colorspace:string
62
+ real_width:integer
63
+ real_height:integer
64
+ crop_width:integer
65
+ crop_height:integer
66
+ crop_start_x:integer
67
+ crop_start_y:integer
68
+ crop_gravity_x:integer
69
+ crop_gravity_y:integer
70
+ }
71
+ end
72
+ end
73
+ end
74
+ end
metadata CHANGED
@@ -1,120 +1,153 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: dynamic_image
3
- version: !ruby/object:Gem::Version
4
- hash: 31
5
- prerelease:
6
- segments:
7
- - 1
8
- - 0
9
- - 4
10
- version: 1.0.4
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0.beta1
11
5
  platform: ruby
12
- authors:
13
- - "Inge J\xC3\xB8rgensen"
6
+ authors:
7
+ - Inge Jørgensen
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2014-07-30 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: rmagick
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ~>
27
- - !ruby/object:Gem::Version
28
- hash: 63
29
- segments:
30
- - 2
31
- - 13
32
- - 2
33
- version: 2.13.2
11
+ date: 2014-09-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 4.1.0
34
20
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 4.1.0
27
+ - !ruby/object:Gem::Dependency
37
28
  name: vector2d
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 2.0.2
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '2.0'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 2.0.2
47
+ - !ruby/object:Gem::Dependency
48
+ name: mini_magick
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: 3.8.1
54
+ type: :runtime
38
55
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
- requirements:
42
- - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 23
45
- segments:
46
- - 1
47
- - 0
48
- - 0
49
- version: 1.0.0
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: 3.8.1
61
+ - !ruby/object:Gem::Dependency
62
+ name: dis
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 0.9.0
50
68
  type: :runtime
51
- version_requirements: *id002
52
- description:
53
- email: inge@elektronaut.no
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 0.9.0
75
+ - !ruby/object:Gem::Dependency
76
+ name: sqlite3
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: rspec-rails
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: 3.0.0
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: 3.0.0
103
+ description: DynamicImage is a Rails plugin that simplifies image uploading and processing
104
+ email:
105
+ - inge@elektronaut.no
54
106
  executables: []
55
-
56
107
  extensions: []
57
-
58
- extra_rdoc_files:
59
- - LICENSE
60
- - README.md
61
- files:
62
- - LICENSE
108
+ extra_rdoc_files: []
109
+ files:
110
+ - MIT-LICENSE
63
111
  - README.md
64
112
  - Rakefile
65
- - VERSION
66
- - app/controllers/images_controller.rb
67
- - app/models/image.rb
68
- - config/routes.rb
69
- - dynamic_image.gemspec
70
- - dynamic_image.sublime-project
71
- - dynamic_image.sublime-workspace
72
- - init.rb
73
- - install.rb
74
- - lib/binary_storage.rb
75
- - lib/binary_storage/active_record_extensions.rb
76
- - lib/binary_storage/blob.rb
77
113
  - lib/dynamic_image.rb
78
- - lib/dynamic_image/active_record_extensions.rb
79
- - lib/dynamic_image/engine.rb
80
- - lib/dynamic_image/filterset.rb
114
+ - lib/dynamic_image/belongs_to.rb
115
+ - lib/dynamic_image/controller.rb
116
+ - lib/dynamic_image/digest_verifier.rb
117
+ - lib/dynamic_image/errors.rb
81
118
  - lib/dynamic_image/helper.rb
82
- - lib/generators/dynamic_image/USAGE
83
- - lib/generators/dynamic_image/dynamic_image_generator.rb
84
- - lib/generators/dynamic_image/templates/migrations/create_images.rb
85
- - uninstall.rb
86
- homepage: http://github.com/elektronaut/dynamic_image
87
- licenses: []
88
-
119
+ - lib/dynamic_image/image_sizing.rb
120
+ - lib/dynamic_image/metadata.rb
121
+ - lib/dynamic_image/model.rb
122
+ - lib/dynamic_image/model/dimensions.rb
123
+ - lib/dynamic_image/model/validations.rb
124
+ - lib/dynamic_image/processed_image.rb
125
+ - lib/dynamic_image/railtie.rb
126
+ - lib/dynamic_image/routing.rb
127
+ - lib/dynamic_image/version.rb
128
+ - lib/rails/generators/dynamic_image/resource/resource_generator.rb
129
+ homepage: https://github.com/elektronaut/dynamic_image
130
+ licenses:
131
+ - MIT
132
+ metadata: {}
89
133
  post_install_message:
90
134
  rdoc_options: []
91
-
92
- require_paths:
135
+ require_paths:
93
136
  - lib
94
- required_ruby_version: !ruby/object:Gem::Requirement
95
- none: false
96
- requirements:
97
- - - ">="
98
- - !ruby/object:Gem::Version
99
- hash: 3
100
- segments:
101
- - 0
102
- version: "0"
103
- required_rubygems_version: !ruby/object:Gem::Requirement
104
- none: false
105
- requirements:
137
+ required_ruby_version: !ruby/object:Gem::Requirement
138
+ requirements:
106
139
  - - ">="
107
- - !ruby/object:Gem::Version
108
- hash: 3
109
- segments:
110
- - 0
111
- version: "0"
140
+ - !ruby/object:Gem::Version
141
+ version: 1.9.2
142
+ required_rubygems_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">"
145
+ - !ruby/object:Gem::Version
146
+ version: 1.3.1
112
147
  requirements: []
113
-
114
148
  rubyforge_project:
115
- rubygems_version: 1.8.24
149
+ rubygems_version: 2.4.1
116
150
  signing_key:
117
- specification_version: 3
118
- summary: DynamicImage is a rails plugin providing transparent uploading and processing of image files.
151
+ specification_version: 4
152
+ summary: Rails plugin that simplifies image uploading and processing
119
153
  test_files: []
120
-
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 1.0.4
@@ -1,79 +0,0 @@
1
- class ImagesController < ActionController::Base
2
-
3
- after_filter :cache_dynamic_image
4
- after_filter :run_garbage_collection_for_dynamic_image_controller
5
-
6
- unloadable
7
-
8
- public
9
-
10
- # Return the requested image. Rescale, filter and cache it where appropriate.
11
- def render_dynamic_image
12
-
13
- render_missing_image and return unless Image.exists?(params[:id])
14
- image = Image.find(params[:id])
15
-
16
- minTime = Time.rfc2822(request.env["HTTP_IF_MODIFIED_SINCE"]) rescue nil
17
- if minTime && image.created_at? && image.created_at <= minTime
18
- render :text => '304 Not Modified', :status => 304
19
- return
20
- end
21
-
22
- unless image.data?
23
- logger.warn "Image #{image.id} exists, but has no data"
24
- render_missing_image and return
25
- end
26
-
27
- if size = params[:size]
28
- if size =~ /^x[\d]+$/ || size =~ /^[\d]+x$/
29
- if params[:original]
30
- image.cropped = false
31
- end
32
- size = Vector2d.new(size)
33
- image_size = Vector2d.new(image.size)
34
- size = image_size.constrain_both(size).round.to_s
35
- end
36
- imagedata = image.get_processed(size, params[:filterset])
37
- else
38
- imagedata = image
39
- end
40
-
41
- DynamicImage.dirty_memory = true # Flag memory for GC
42
-
43
- if image
44
- response.headers['Cache-Control'] = nil
45
- response.headers['Last-Modified'] = imagedata.created_at.httpdate if imagedata.created_at?
46
- send_data(
47
- imagedata.data,
48
- :filename => image.filename,
49
- :type => image.content_type,
50
- :disposition => 'inline'
51
- )
52
- end
53
-
54
- end
55
-
56
- protected
57
-
58
- def render_missing_image
59
- if self.respond_to?(:render_error)
60
- render_error 404
61
- else
62
- render :status => 404, :text => "404: Image not found"
63
- end
64
- end
65
-
66
- # Enforce caching of dynamic images, even if caching is turned off
67
- def cache_dynamic_image
68
- cache_setting = ActionController::Base.perform_caching
69
- ActionController::Base.perform_caching = true
70
- cache_page
71
- ActionController::Base.perform_caching = cache_setting
72
- end
73
-
74
- # Perform garbage collection if necessary
75
- def run_garbage_collection_for_dynamic_image_controller
76
- DynamicImage.clean_dirty_memory
77
- end
78
-
79
- end