has_image 0.3.0 → 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.
data/FAQ DELETED
@@ -1,25 +0,0 @@
1
- = Frequently Asked Questions
2
-
3
- HasImage is too new to have many FAQ items yet. {Ask
4
- me}[mailto:norman@randomba.org] and they will be included; this is a work in
5
- progress.
6
-
7
- = How do I validate the mime type of my uploaded images?
8
-
9
- You don't. Rather than examine the mime type, HasImage runs the "identify"
10
- command on the file to determine if it is processable by ImageMagick, and if
11
- it is, converts it to the format you specify, which defaults to JPEG.
12
-
13
- This is better than checking for mime types, because your users may upload
14
- exotic image types that you didn't even realize would work, such as Truevision
15
- Targa images, or Seattle Film Works files.
16
-
17
- If you wish to give users a list of file types they can upload, a good start
18
- would be jpeg, png, bmp, and maybe gif and ttf if your installation of
19
- ImageMagick understands them. You can find out what image types your
20
- ImageMagick understands by running:
21
-
22
- identify -list format
23
-
24
- Ideally, if your users just upload files that "look like" images on their
25
- computers, it HasImage should "just work."
data/README.textile DELETED
@@ -1,193 +0,0 @@
1
- h1. "HasImage":http://github.com/norman/has_image
2
-
3
- Image attachment gem/plugin for Ruby on Rails
4
-
5
- HasImage allows Ruby on Rails applications to have attached images. It is very
6
- small and lightweight: it only requires one column in your model to store the
7
- uploaded image's file name.
8
-
9
- HasImage was created as a smaller, simpler, lighter alternative to
10
- "attachment_fu":http://github.com/technoweenie/attachment_fu for applications
11
- that need to handle uploaded images.
12
-
13
- It is, by design, very simplistic: It only supports using a filesystem for
14
- storage, and only supports
15
- "MiniMagick":http://github.com/probablycorey/mini_magick as an image
16
- processor. However, its code is very small, clean and hackable, so adding
17
- support for other backends or processors should be fairly easy.
18
-
19
- Some typical use cases are: websites that want to create photo galleries with
20
- fixed-dimension thumbnails, or that want to store user profile pictures
21
- without creating a separate model for the images.
22
-
23
- It creates only one database record per image, and uses ImageMagick's
24
- "crop":http://www.imagemagick.org/script/command-line-options.php#crop and
25
- "center gravity":http://www.imagemagick.org/script/command-line-options.php#gravity
26
- functions to produce thumbnails that generally look acceptable, unless the
27
- image is a panorama, or the subject matter is close to one of the margins,
28
- etc. For most sites where people upload pictures of themselves the generated
29
- thumbnails will look good almost all the time.
30
-
31
- h2. Another image attachment library? Why?
32
-
33
- <blockquote>
34
- The three chief virtues of a programmer are: Laziness, Impatience and Hubris. - "Larry Wall":http://en.wikipedia.org/wiki/Larry_Wall
35
- </blockquote>
36
-
37
- Attachment_fu is too large and general for some of the places I want to use
38
- images. I sometimes found myself writing more code to hack attachment_fu than
39
- it took to create this gem. In fact, most of the code here has been plucked
40
- from my various projects that use attachment_fu.
41
-
42
- The other image attachment libraries I found fell short of my needs for
43
- various other reasons, so I decided to roll my own.
44
-
45
- h2. HasImage vs. attachment_fu
46
-
47
- h3. Advantages
48
-
49
- * Simpler, smaller, more easily hackable codebase - and specialized for
50
- images only.
51
- * Installable via Ruby Gems. This makes version dependencies easy when using
52
- Rails 2.1.
53
- * Creates only one database record per image.
54
- * Has built-in facilities for making distortion-free, fixed-size thumbnails.
55
- * Doesn't regenerate the thumbnails every time you save your model. This means
56
- you can easily use it, for example, inside a Member model to store member
57
- avatars.
58
-
59
- h3. Disadvantages
60
-
61
- * Doesn't save image dimensions in the database. However, if you're using
62
- fixed-sized images, you can read the size from MyModel.thumbnails[:my_size].
63
- * No support for AWS or DBFile storage, only filesystem.
64
- * Only supports "MiniMagick":http://github.com/probablycorey/mini_magick/tree as an image processor, no RMagick, GD, CoreImage, etc.
65
- * No support for anything other than image attachments.
66
- * Not as popular as attachment_fu, but then again if you use it you'll be cooler (until HasImage becomes popular).
67
-
68
- h2. Examples
69
-
70
- Point-and-drool use case. It's probably not what you want, but it may be
71
- useful for bootstrapping.
72
-
73
- class Member < ActiveRecord::Base
74
- has_image
75
- end
76
-
77
- Single image, no thumbnails, with some size limits:
78
-
79
- class Picture < ActiveRecord::Base
80
- has_image :resize_to => "200x200",
81
- :max_size => 3.megabytes,
82
- :min_size => 4.kilobytes
83
- end
84
-
85
- Image with some thumbnails:
86
-
87
- class Photo < ActiveRecord::Base
88
- has_image :resize_to => "640x480",
89
- :thumbnails => {
90
- :square => "200x200",
91
- :medium => "320x240"
92
- },
93
- :max_size => 3.megabytes,
94
- :min_size => 4.kilobytes
95
- end
96
-
97
- It also provides a view helper to make displaying the images extremely simple:
98
-
99
- <%= image_tag_for(@photo) # show the full-sized image %>
100
- <%= image_tag_for(@photo, :thumb => :square) # show the square thumbnail %>
101
-
102
- The image_tag_for helper calls Rails' image_tag, so you can pass in all the
103
- regular options to set the alt property, CSS class, etc:
104
-
105
- <%= image_tag_for(@photo, :alt => "my cool picture", :class => "photo") %>
106
-
107
- Setting up forms for HasImage is simple, too:
108
-
109
- <pre>
110
- <% form_for(@photo, :html => {:multipart => true}) do |f| %>
111
- <p>
112
- <%= f.label :image_data %>
113
- <%= f.file_field :image_data %>
114
- </p>
115
- <p>
116
- <%= f.submit %>
117
- </p>
118
- <% end %>
119
- </pre>
120
-
121
- h2. Getting it
122
-
123
- Has image can be installed as a gem, or as a Rails plugin. Gem installation
124
- is easiest, and recommended:
125
-
126
- gem install has_image
127
-
128
- and add
129
-
130
- require 'has_image'
131
-
132
- to your environment.rb file.
133
-
134
- Alternatively, you can install it as a Rails plugin:
135
-
136
- ./script plugin install git://github.com/norman/has_image.git
137
-
138
- Rails versions before 2.1 do not support plugin installation using Git, so if
139
- you're on 2.0 (or earlier), then please install the gem rather than the
140
- plugin.
141
-
142
- Then, make sure the model has a column named "has_image_file."
143
-
144
- "Git repository":http://github.com/norman/has_image: git://github.com/norman/has_image.git
145
-
146
- h2. Hacking it
147
-
148
- Don't like the way it makes images? Want to pipe the images through some
149
- "crazy fast seam carving library written in OCaml":http://eigenclass.org/hiki/seam-carving-in-ocaml, or watermark them
150
- with your corporate logo? Happiness is just a "monkey-patch":http://en.wikipedia.org/wiki/Monkey_patch away:
151
-
152
- module HasImage
153
- class Processor
154
- def resize_image(size)
155
- # your new-and-improved thumbnailer code goes here.
156
- end
157
- end
158
- end
159
-
160
- HasImage follows a philosophy of ""skinny model, fat plugin":http://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model."
161
- This means that it tries to pollute your ActiveRecord model with as little
162
- functionality as possible, so that in a sense, the model is acts like a
163
- "controller" and the plugin like a "model" as regards the image handling
164
- functionality. This makes it easier to test, hack, and reuse, because the
165
- storage and processing functionality is largely independent of your model, and
166
- of Rails.
167
-
168
- My goal for HasImage is to keep it very small. If you need *a lot* of
169
- functionality that's not here, instead of patching this code, you will likely
170
- be better off using attachment_fu, which is more powerful, but also more
171
- complex.
172
-
173
- h2. Bugs
174
-
175
- Please report them on "Lighthouse":http://randomba.lighthouseapp.com/projects/14674-has_image.
176
-
177
- Copyright (c) 2008 "Norman Clarke":mailto:norman@randomba.org, released under
178
- the MIT license
179
-
180
- h2. Is anyone using this thing?
181
-
182
- HasImage powers "FotoBlog":http://fotoblog.ciudad.com.ar, one of the largest
183
- Rails sites in Argentina. If you're using it in your project let me know and
184
- I'll add your link here.
185
-
186
- h2. Acknowledgements
187
-
188
- I'd like to thank the following contributors:
189
-
190
- * "Adrian Mugnolo":http://github.com/xymbol
191
- * "Gerrit Keiser":http://github.com/gerrit
192
- * the folks from "Tricycle Developments":http://github.com/tricycle
193
- * "Dima Sabanin":http://github.com/railsmonk
data/init.rb DELETED
@@ -1 +0,0 @@
1
- require 'has_image'
@@ -1,3 +0,0 @@
1
- sqlite3:
2
- adapter: sqlite3
3
- database: ":memory:"
data/test_rails/schema.rb DELETED
@@ -1,15 +0,0 @@
1
- ActiveRecord::Schema.define(:version => 1) do
2
-
3
- create_table "pics", :force => true do |t|
4
- t.string :has_image_file
5
- t.datetime :created_at
6
- t.datetime :updated_at
7
- end
8
-
9
- create_table 'complex_pics', :force => true do |t|
10
- t.string :filename
11
- t.integer :width, :height
12
- t.timestamps
13
- end
14
-
15
- end
@@ -1,52 +0,0 @@
1
- ENV['RAILS_ENV'] = 'test'
2
-
3
- require 'test/unit'
4
- require File.expand_path(File.join(File.dirname(__FILE__), '/../../../../config/environment.rb'))
5
- $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
6
- require 'active_record/fixtures'
7
- require 'action_controller/test_process'
8
-
9
- config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
10
- ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
11
-
12
- db_adapter = ENV['DB']
13
-
14
- # no db passed, try one of these fine config-free DBs before bombing.
15
- db_adapter ||=
16
- begin
17
- require 'rubygems'
18
- require 'sqlite3'
19
- 'sqlite3'
20
- rescue MissingSourceFile
21
- begin
22
- require 'sqlite'
23
- 'sqlite'
24
- rescue MissingSourceFile
25
- end
26
- end
27
-
28
- if db_adapter.nil?
29
- raise "No DB Adapter selected. Pass the DB= option to pick one, or install Sqlite3 or Sqlite."
30
- end
31
-
32
- ActiveRecord::Base.establish_connection(config[db_adapter])
33
-
34
- load(File.dirname(__FILE__) + "/schema.rb")
35
-
36
- Test::Unit::TestCase.fixture_path = File.dirname(__FILE__) + "/fixtures"
37
- $LOAD_PATH.unshift(Test::Unit::TestCase.fixture_path)
38
-
39
- class Test::Unit::TestCase #:nodoc:
40
- include ActionController::TestProcess
41
- def create_fixtures(*table_names)
42
- if block_given?
43
- Fixtures.create_fixtures(Test::Unit::TestCase.fixture_path, table_names) { yield }
44
- else
45
- Fixtures.create_fixtures(Test::Unit::TestCase.fixture_path, table_names)
46
- end
47
- end
48
-
49
- self.use_transactional_fixtures = true
50
- self.use_instantiated_fixtures = false
51
-
52
- end