couch_photo 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +16 -3
- data/lib/couch_photo/couch_photo.rb +13 -1
- data/lib/couch_photo/variations.rb +9 -4
- metadata +3 -3
data/README.markdown
CHANGED
@@ -36,14 +36,14 @@ First, define an Image document and set the versions on it:
|
|
36
36
|
Next, create an instance of the image document and set the "original" image on it.
|
37
37
|
|
38
38
|
i = Image.new
|
39
|
-
i.original "avatar.jpg"
|
39
|
+
i.original = "avatar.jpg"
|
40
40
|
i.save
|
41
41
|
|
42
42
|
By calling the original method with a string, CouchPhoto will attempt to open a file with the same name and use that as the original image. If you don't have
|
43
43
|
an actual file (e.g., maybe this was a form upload), then simply pass a blob as the second parameter. For example,
|
44
44
|
|
45
45
|
blob = File.read "avatar.jpg"
|
46
|
-
i.original "avatar.jpg", blob
|
46
|
+
i.original = ["avatar.jpg", blob]
|
47
47
|
|
48
48
|
Now, if you look in your image document in CouchDB, you'd see the following attachments:
|
49
49
|
|
@@ -79,6 +79,19 @@ The previous variations were all simple image resizings. What if we wanted to do
|
|
79
79
|
|
80
80
|
The `original_image` variable in the blocks is simply the MiniMagick::Image instance of your original image.
|
81
81
|
|
82
|
+
### Accessing the Original Image
|
83
|
+
|
84
|
+
How do you access the the original image? Let me count the ways:
|
85
|
+
|
86
|
+
@image.original.original_filename # ==> "avatar.jpg"
|
87
|
+
@image.original.filename # ==> "original.jpg"
|
88
|
+
@image.original.path # ==> "/your_image_database/avatar.jpg/original.jpg"
|
89
|
+
@image.original.url # ==> "http://your_couch_server/your_image_database/avatar.jpg/original.jpg"
|
90
|
+
@image.original.basename # ==> "original.jpg"
|
91
|
+
@image.original.filetype # ==> "jpg"
|
92
|
+
@image.original.mimetype # ==> "image/jpg"
|
93
|
+
@image.original.data # ==> BINARY BLOB
|
94
|
+
|
82
95
|
### Accessing Variations
|
83
96
|
|
84
97
|
So, now that you've got some variations, how do you access them? Simple!
|
@@ -99,7 +112,7 @@ Let's go back to our original image example:
|
|
99
112
|
end
|
100
113
|
|
101
114
|
i = Image.new
|
102
|
-
i.original "avatar.jpg"
|
115
|
+
i.original = "avatar.jpg"
|
103
116
|
i.save
|
104
117
|
|
105
118
|
We can access our variations in one of three ways:
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module CouchPhoto
|
2
2
|
def self.included(base)
|
3
3
|
base.extend ClassMethods
|
4
|
+
base.property :original_filename
|
4
5
|
end
|
5
6
|
|
6
7
|
def update_or_create_attachment(attachment)
|
@@ -16,12 +17,23 @@ module CouchPhoto
|
|
16
17
|
@variations.variations.values
|
17
18
|
end
|
18
19
|
|
20
|
+
def original
|
21
|
+
raise "You do not have an original attachment" unless original_attachment_name
|
22
|
+
@original ||= Variation.new self, original_attachment_name
|
23
|
+
end
|
24
|
+
|
25
|
+
def original_attachment_name
|
26
|
+
@original_attachment_name ||= self["_attachments"].keys.select {|a| a.match /original\.[^\.]+/}.first
|
27
|
+
end
|
28
|
+
|
19
29
|
def variation(variation_name=nil)
|
20
30
|
variation_name ? @variations.send(variation_name) : @variations
|
21
31
|
end
|
22
32
|
|
23
|
-
def original(filepath, blob=nil
|
33
|
+
def original=(*args)#filepath, blob=nil
|
34
|
+
filepath, blob = args[0], args[1]
|
24
35
|
self["_id"] = File.basename filepath if self.class.override_id?
|
36
|
+
self.original_filename = File.basename filepath
|
25
37
|
blob ||= File.read filepath
|
26
38
|
image_format = filepath.match(/^.*\.([^\.]*)$/)[1]
|
27
39
|
attachment_name = "original.#{image_format}"
|
@@ -56,21 +56,26 @@ module CouchPhoto
|
|
56
56
|
end
|
57
57
|
|
58
58
|
class Variation
|
59
|
-
attr_reader :name, :path, :filename, :basename, :filetype, :mimetype
|
59
|
+
attr_reader :name, :url, :path, :filename, :basename, :filetype, :mimetype
|
60
60
|
|
61
61
|
def initialize(document, attachment_name)
|
62
|
-
@path = [document.database.
|
62
|
+
@path = "/" + [document.database.name, document.id, attachment_name].join("/")
|
63
|
+
@url = [document.database.to_s, document.id, attachment_name].join "/"
|
63
64
|
@attachment_name = attachment_name
|
64
|
-
@name = attachment_name.gsub(/variations\/(.+)\.[^\.]+/) {$1}
|
65
|
+
@name = attachment_name.gsub(/(?:variations\/)?(.+)\.[^\.]+/) {$1}
|
65
66
|
@filename = attachment_name
|
66
67
|
@basename = File.basename attachment_name
|
67
68
|
@document = document
|
68
|
-
@filetype = attachment_name.gsub(/variations
|
69
|
+
@filetype = attachment_name.gsub(/(?:variations\/)?.+\.([^\.]+)/) {$1}
|
69
70
|
@mimetype = document["_attachments"][attachment_name]["content_type"]
|
70
71
|
end
|
71
72
|
|
72
73
|
def data
|
73
74
|
@document.read_attachment @attachment_name
|
74
75
|
end
|
76
|
+
|
77
|
+
def original_filename
|
78
|
+
@document.original_filename
|
79
|
+
end
|
75
80
|
end
|
76
81
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: couch_photo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 4
|
10
|
+
version: 0.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Matt Parker
|