- Make sure tempfiles are created with paths matching the meta name
- Allow method signified by symbol in storage_options to take an attachment object
- Allow passing in "input_args" to convert processor Fixes
- correct Rack version
- Remove sha parameter being echoed back on error for better security
- Job#close re-added, so that tempfiles are immediately removed after each request
- Specs passing for 1.8.7, 1.9.2 (i18n gem version specified)
- Job#sha uses better algorithm
- renamed
protect_from_dos_attacks
->verify_urls
and turn on by default
- env can be accessed by routed endpoint blocks
- analyser cache doesn't get stored in meta for a given piece of meta - can mess with stringifying analyser return values
- removed default secret, forcing user to specify one explicitly
- deal with "[" character problems in urls markevans#337
- fetch_url wasn't correctly getting https endpoints on Ruby approx < 2
- fetch_url is more forgiving - assume escaped, if not escape
- changing meta on a job (e.g.
fetch('blah').encode('jpg')
) was interfering with meta on its parent job (e.g.fetch('blah')
)
- more secure generation of secret in rails generator
- ensure popen3 doesn't hang
- FileDataStore doesn't use hours_minutes_seconds in its path - it uses a random string instead (12_15_59_saf4fs_file.png -> sdf4c2G_file.png)
- model attribute
xxx_changed?
method (useful e.g. in validations)
- proper support for Ruby 1.8.7 and JRuby (version 1.7.8)
- routed endpoints can deal with returned
Attachment
objects (rather than returnedJob
objects) and return 404 if the endpoint proc returns nil - default Content-Disposition header doesn't url-encode filename unless the request is from IE
fetch_url
deals with urls that redirect to https (previously was blowing up)
- configuration
Dragonfly[:images]
->Dragonfly.app
andDragonfly.app(:named_app)
- configuration block DSL overhaul
- Rails is set up using a generator, not by requiring the file "dragonfly/rails/images"
- Rack::Cache is not inserted by Dragonfly - this is up to the user
- data store spec
store
/retrieve
->read
/write
write
takes aContent
, not aTempObject
(though the interface is much the same)- return nil on
read
to signify not found instead of raising
- S3, Couch and Mongo data stores extracted into separate gems
- models
- easier and simpler to include in custom models using
Dragonfly::Model
image_accessor
,asset_accessor
,xxx_accessor
, etc. -> singledragonfly_accessor
- user needs to extend
Dragonfly::Model::Validations
manually to use dragonfly validations
- easier and simpler to include in custom models using
- Custom processors, datastores, generators and analysers are made easier by
Content
object which has convenience methods - Removed "encoders" - these are covered by processors now
- Removed "job" shortcuts - they are not needed as processors can invoke other processors
- No "smart" determination of mime-type - just use file extension (anything more than that can be done by the user)
- metadata is required to be serializable to/from JSON
- removed
allow_fetch_file
andallow_fetch_url
in favour of more fine-control withfetch_file_whitelist
andfetch_url_whitelist
- switch off dealing with legacy urls by default
- proper requires throughout the code instead of autoloading
- simple 500 response for unknown errors
- model attachment default (by specifying a path to a e.g. a default image)
convert
andthumb
processors take a'frame'
optionthumb
takes a'format'
optionfetch_file
andmodel.attachment_url=
accept a data uri stringAttachment#xxx_stored
, e.g.my_model.my_attachment_stored?
(my_attachment
here being the attachment name)define
for creating custom methods onJob
/Attachment
objectsurl_path_prefix
for when mounted in Rack with a "SCRIPT_NAME"- when customizing response headers, ability to remove headers by setting to
nil
- better logging
- for each response
- for shell commands
- inserting CookieMonster doesn't depend on existence of
ActionDispatch::Cookies
image?
returns false for pdfsfetch_url
raises more usefulErrorResponse
on error- shell commands don't print warnings to stderr
- ability to assign attachment/job from other app
- Allow turning off support of legacy urls
- More conservative URL escaping - back to Rack::Utils.escape_path
- Don't check for malicious strings when deserializing from datastores (they're to be trusted)
- Attachment#b64_data
- Fix '+' character being converted to ' ' (revert to URI.escape instead of Rack::Utils.escape)
- Support old-style deprecated urls (with a check for malicious ones)
- Handle case where uid is an empty string
- URLS are encoded/decoded with JSON, not with Marshal
- Allow using a mongo replica set with mongo datastore
define_macro_on_include
was giving a stack error with multiple accessors on same app
- Allow the S3 base URL to be customised with
url_host
(or per-request) - Added App#name (name as per
Dragonfly[:app_name]
)
- Better inspect for App, Processor, Analyser, Encoder, Generator, Job, TempObject, RoutedEndpoint, JobEndpoint
- Rescue from Excon::Errors::Conflict which apparently gets raised sometimes (don't know why - see markevans#167)
- Alias portrait and landscape without question marks, so magic_attributes can be used with them
- Fixed stack error when using
define_macro_on_include
twice - Use fog's
sync_clock
to overcome potential S3 time skew problems - Using :name in urls was causing problems when filenames had dashes in them
- FileDataStore was causing errors when the storage path was flat (not in a directory structure)
- Created tempfiles use the original file extension if known
- Added
:case_sensitive
option tovalidates_property
for dealing with upper-case extensions and mime-types. - Github Markup syntax on readme for code highlighting
- S3DataStore can use https for remote urls (either configurable or per-url)
to_file
can take:mode
option for setting custom permissionsto_file
creates intermediate subdirs by default, can be turned off with:mkdirs => false
option- Added some more S3 regions
- Datastores now use
temp_object.meta
, not the second arg passed in tostore
meta
,name
, etc. now lazily load the job on an attachment - previously you'd have to callapply
to get the meta from the datastore- When assigning an image via the activemodel extensions, mark that uid attribute will change
validates_property
uses Rails 3 validators- Deprecated saved 'heroku' config, in favour of configuring S3 explicitly
- Model attachment urls are consistent now - the name is appended to the url (with format "/:job/:name") ONLY if it has the "name" magic attribute
identify
wasn't working properly for files with capital letter extensions- S3 datastore sets content mime_type by default
- File extensions with numbers like JP2 weren't being processed/analysed properly
- Protect against object_ids being recycled and messing with analyser cache
- All url segments are correctly url-escaped now
- Fixed TempObject File.open mode
- S3DataStore was breaking on bucket_exists? when using AWS IAM
- Put CookieMonster before ActionDispatch::Cookies in rack middleware stack - that way Rack::Cache won't come between them and mess things up
- Regenerated gemspec again with ruby 1.8.7 - didn't seem to be fixed
- Regenerated gemspec to overcome annoying yaml issue (http://blog.rubygems.org/2011/08/31/shaving-the-yaml-yacc.html)
- Allow setting
content_type
when storing in Mongo GridFS
- Tests use Rails 3.1
- Moved from fog's deprecated
get_object_url
toget_object_https_url
- Allow initializing a TempObject with Rack::Test::UploadedFile
- Tests working in Windows (except feature that uses FileCommandAnalyser)
- Better shell quoting
- Added reflection method
app.analyser_methods
- Fixed
convert
andidentify
for files with spaces - Fixed size validations for Rails 3.0.7
- Made use of Rack calling
close
on the response body to clean up tempfiles. The response body is now the job, which delegateseach
to the temp_object.
- TempObject#to_file sets file permissions 644 - copying wasn't previously guaranteeing this
- Added TempObject#close and closed?, which Rack uses to clean up tempfiles
- replaced '/' characters with '~' in base64 encoded urls (they were confusing url recognition)
- Added env['dragonfly.job'] for use in other Rack middlewares
- Added CookieMonster middleware for removing 'Set-Cookie' headers
- Remove 'Set-Cookie' header from any requests coming from a rails route
- Added reflection methods
app.processor_methods
,app.generator_methods
andapp.job_methods
- Improved performance of
resize_and_crop
method, using imagemagick built-in '^' operator - Improved server security validations
- Deal with Excon::Errors::SocketError: EOFError errors which get thrown sometimes from S3 connection
- Allow files with '..' (but not '../') in the middle of their name in file data store
- Model accessors are configurable
- added
after_assign
callback - added
after_unassign
callback - added
copy_to
for e.g. up-front thumbnailing - added
storage_opts
andstorage_xxx
- added
- Added model
remove_xxxxx
for using with checkboxes - Added model
xxxx_url
for assigning content from a url - Added job step
fetch_url
- Added
retain!
and modelretained_xxxxx
for avoiding multiple uploads when validations fail - Added
image?
to imagemagick analyser - Added imagemagick
plain
generator - Added
strip
to imagemagick processor - Added CouchDataStore that uses a CouchDB as a data storage engine
- Added
before_serve
callback - Allowed for configurable response headers
- Made url re-definable with
define_url
validates_property
can take a proc for the message- Saved configs can be registered now so they can be used with
configure_with(:symbol)
- Configurable objects can fallback to a parent configuration, so e.g. the server can be configured through the parent app's configure block.
- Allowed initializing data by using a pathname
convert_command
andidentify_command
can be configured on a per-app basis- Added
remote_url
and ability for datastores to form urls- Added for File, Couch and S3 datastores
- Models automatically copy magic attributes into meta
- S3DataStore configurable headers
- 'dragonfly/rails/images' slightly smarter and added
file_accessor
for more semantic use of non-image attachments - Made dragonfly response configurable
- Mongo datastore can reuse an existing connection/db
- FileDataStore can be configured not to store meta (save on extra file)
- Removed
url_path_prefix
andurl_suffix
in favour ofurl_format
- Middleware doesn't need mount point argument now
- Removed support for rails 2.3
- Removed RMagick support (and extracted into a plugin)
- ImageMagick processors etc. moved into the ImageMagick namespace
- moved from aws/s3 -> fog for S3 support
- Renamed SimpleEndpoint -> Server
- moved name and meta into Job, simplified, and now they don't cause the job to be applied
- FileDataStore stores metadata in xxx.meta now, not xxx.extra
- removed Job methods
uid_basename
,uid_extname
,encoded_format
andencoded_extname
as they are now unnecessary
- Performance tweaks regarding temp_objects model accessors and job objects
- Allow filenames that have '..' in them (but not '../') in the filedatastore
- Better security for server
- Security fix for file data store
- Renamed ActiveModel methods like 'attachments' to avoid name clashes
- Respond properly to HEAD, POST, PUT and DELETE requests
- Got it working with jRuby and Rubinius
- Made DOS protection SHA (and ETag) consistent
Removed runtime dependencies that Jeweler automatically takes from the Gemfile
- New ImageMagick generator, processor, encoder and analyser, which are now defaults (thanks to Henry Phan for work on this)
- Works with Rails 3.0.2 uploaded files (which has a changed API)
- Added username/password authentication to mongo data store
- Fixes for Windows, inc. tempfile binmode and closing files
- "IOError: closed stream" fix (hopefully!)
- Added methods for querying job steps, and Job#uid, Job#uid_basename, etc.
- Added Job#b64_data
- Added configurable url_suffix
- Added configurable content_disposition and content_filename
- Can pass extra GET params to url_for
- Can manually set uid on FileDataStore and S3DataStore (not yet documented because attachments have no way to pass it on yet)
- Model attachments store meta info about themselves
- Configurable module doesn't implicitly call 'call' if attribute set as proc
- Refactored Endpoint module -> Response object
- Ruby 1.9.2-p0 was raising encoding errors due to Tempfiles not being in binmode
- RMagick processor, encoder, analyser and generator all use the filesystem now They can be configured to use in-memory strings with the use_filesystem config option.
- Upgraded support from Rails 3.0.0.rc -> Rails.3.0.0
- Gave model accessors bang methods process! and encode!
- Seems as though inserting after Rails' Rack::Lock was worth it after all
- S3DataStore was breaking if previous data hadn't stored meta
- SimpleEndpoint was modifying env path_info so wasn't creating proper cache keys
- to_response accepts env, so can use if-not-modified, etc.
- Doc tweaks: Added mongo page, notes about Capistrano
- ETags generated by hash of job.serialize - was getting a bit long
- Ability to chain processing, encoding
- Added Generators for arbitrary content generation
- 'fetch_file' method for easily getting local files
- ActiveModel support
- Mongoid support
- Better Sinatra, etc. support (using 'to_response')
- Data stores now store meta, name and format information too
- Added Mongo Data Store
- temp_objects maintain name, meta, etc. across processing, encoding, etc.
- added portrait? and landscape? to RMagick analyser
- Ability to add single custom processor/encoder/analyser/generator
- added flip and flop to RMagick processor
- ability to configure whether it trusts the file extension
- nice text response for root path
- ability to configure url host
- ability to override path_prefix/host when calling url
- routed endpoints
- simple endpoints
- more intelligent working out of Content-Type to send back
- proper use of ETags
- remove whitespace from file/s3 datastore uids
- dragonfly/rails/images url-encodes rack-cache config for windows users
- Ruby 1.9.2 support
- Better RMagick memory management using image.destroy!
- Dragonfly::App[:images] -> Dragonfly[:images]
- Moved text/plasma generation into Generator
- Use of lazy 'Job' objects
- simplified shortcuts interface
- changed interface for attaching to ActiveRecord
- simplified saved configurations and allow referring to them as symbols
- Removed need for Base class for datastores, processors, analysers and encoders
- FileCommandAnalyser included in Rails config, not RMagick
- better use of logging module for sharing logs between classes
- mounting the app is down the middleware/elsewhere, not the app itself
- DOS protection off by default
- encoded urls
- got rid of unnecessary configurable sha_length
- Added ability for custom error messages in validations
- STI was breaking when the model had a mixin too
- Added 'scale factor' for text generation, which gives better quality font rendering for smaller fonts
- Configurable objects allow for passing args, and passing a block for extra config
- Added more 'saved configurations', for easier setting up on e.g. Heroku
- Added RMagickAnalyser#format
- Added greyscale to RMagickProcessor
- S3DataStore is configurable as to whether it uses the filesystem or not (to save a tempfile)
- Some specs refactoring, including making text processing specs less brittle
- RMagickEncoder::SUPPORTED_FORMATS was proving problematic - now we use a configurable list instead
- Got Rails 3 beta3 cucumber features working
- Added check to see if bucket already exists in S3DataStore - apparently this was problematic in EU
- temp_object.tempfile now returns a closed tempfile, which temp_object.file returns an open file. Can also pass a block to temp_object.file which closes the file automatically
- Processors/Analysers/Encoders know about app now so can log to app's log
- Imagemagick errors in RMagick processor/analyser/encoder now throw unable_to_handle and log a warning
- Removed Rails generators - better being more explicit with saved configurations which are more concise now
- Strip file command mime_type value because some versions of file command were appending a line-break
- Wasn't working properly with Single-Table Inheritance
- Rails 3 has changed 'metaclass' -> 'singleton_class' so adapt accordingly
- Allow setting the uid manually
- Assigning an accessor to nil wasn't working properly
- Assigning an accessor to nil wasn't working properly
- Added 'registered mime-types'
- Enhanced docs
- RMagickEncoder only encodes if not already in that format
- Fixed 'broken pipe' errors in FileCommandAnalyser due to outputting loads of stuff to the command line stdin
- support for Rails 3
Better late than never to start logging change history...
- added aspect_ratio to rmagick_analyser
- support for ruby 1.9
- added development dependencies to gemspec for easier setting up