carriercouch 0.0.1

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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in carriercouch.gemspec
4
+ gemspec
data/README ADDED
@@ -0,0 +1 @@
1
+ CarrierCouch Documentation ..... coming
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "carriercouch"
7
+ s.version = Carriercouch::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Shenouda Bertel"]
10
+ s.email = ["sbertel@arpuplus.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{Carrierwave Uploader for CouchDB with CouchrestModel}
13
+ s.description = %q{Carrierwave Uploader for CouchDB with CouchrestModel}
14
+
15
+ s.rubyforge_project = "carriercouch"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_development_dependency "rails", ["~> 3.0.5"]
23
+ s.add_development_dependency "rspec"
24
+ s.add_development_dependency "mini_magick", ["~> 2.3"]
25
+ s.add_development_dependency "carrierwave"
26
+ s.add_development_dependency "activemodel"
27
+ s.add_development_dependency "couchrest_model"
28
+ end
@@ -0,0 +1,14 @@
1
+ require 'carrierwave'
2
+ require 'carrierwave/orm/couchrest_model'
3
+ require 'carrierwave/storage/couch'
4
+ #require 'carrierwave/uploader/configuration'
5
+
6
+ #module CarrierWave
7
+ # module Storage
8
+ # autoload :Couch, 'carrierwave/storage/couch'
9
+ # end
10
+ #end
11
+
12
+ CarrierWave.configure do |config|
13
+ config.storage_engines[:couch] = 'CarrierWave::Storage::Couch'
14
+ end
@@ -0,0 +1,39 @@
1
+ # encoding: utf-8
2
+
3
+ require 'couchrest_model'
4
+ require 'carrierwave/validations/active_model'
5
+
6
+ module CarrierWave
7
+ module CouchrestModel
8
+ include CarrierWave::Mount
9
+ ##
10
+ # See +CarrierWave::Mount#mount_uploader+ for documentation
11
+ #
12
+ def mount_uploader(column, uploader, options={}, &block)
13
+ options[:mount_on] ||= "#{column}_filename"
14
+ property options[:mount_on]
15
+
16
+ super
17
+
18
+ alias_method :read_uploader, :read_attribute
19
+ alias_method :write_uploader, :write_attribute
20
+
21
+ include CarrierWave::Validations::ActiveModel
22
+
23
+ validates_integrity_of column if uploader_option(column.to_sym, :validate_integrity)
24
+ validates_processing_of column if uploader_option(column.to_sym, :validate_processing)
25
+
26
+ after_save "store_#{column}!".to_sym
27
+ before_save "write_#{column}_identifier".to_sym
28
+ after_destroy "remove_#{column}!".to_sym
29
+ end
30
+ end # CouchrestModel
31
+ end # CarrierWave
32
+
33
+ module CouchRest
34
+ module Model
35
+ class Base
36
+ extend ::CarrierWave::CouchrestModel
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,149 @@
1
+ # encoding: utf-8
2
+
3
+ require 'couchrest'
4
+ require 'couchrest_model'
5
+
6
+ module CarrierWave
7
+ module Storage
8
+
9
+ ##
10
+ # Couch storage stores file to the Couchdb (surprising, no?). There's really not much
11
+ # to it.
12
+ #
13
+ # Creating a connection looks something like this:
14
+ #
15
+ # CarrierWave.configure do |config|
16
+ # config.storage = :couch
17
+ # config.couch_host = "your-host.com"
18
+ # config.couch_port = "5984"
19
+ # config.couch_database = "your_dbs_app_name"
20
+ # config.couch_username = "user"
21
+ # config.couch_password = "verysecret"
22
+ # config.couch_access_url = "/images"
23
+ # end
24
+ #
25
+ # In the above example your documents url will look like:
26
+ #
27
+ # http://your-app.com:5984/:database/:document_id/:document-identifier-here
28
+ #
29
+ # When you already have a CouchDB connection object :
30
+ #
31
+ # CarrierWave.configure do |config|
32
+ # config.storage = :couchdb
33
+ # config.couch_connection = model.use_database
34
+ # config.couch_access_url = "/images"
35
+ # end
36
+ #
37
+ class Couch < Abstract
38
+ class File
39
+ def initialize(uploader, path)
40
+ @uploader = uploader
41
+ @path = path
42
+ end
43
+
44
+ ##
45
+ # Returns the current path of the file on S3
46
+ #
47
+ # === Returns
48
+ #
49
+ # [String] A path
50
+ #
51
+ def path
52
+ nil
53
+ end
54
+
55
+ ##
56
+ # Reads the contents of the file from S3
57
+ #
58
+ # === Returns
59
+ #
60
+ # [String] contents of the file
61
+ #
62
+ def read
63
+ result = model.fetch_attachment(@path)
64
+ @headers = result.headers
65
+ result.body
66
+ end
67
+
68
+ ##
69
+ # Remove the file from Amazon S3
70
+ #
71
+ def delete
72
+ model.delete_attachment(@path)
73
+ end
74
+
75
+ ##
76
+ # Returns the url on CouchDB
77
+ #
78
+ # === Returns
79
+ #
80
+ # [String] content's url
81
+ #
82
+ def url
83
+ @uploader.couch_connection + "/" + @uploader.couch_database + "/" + model.id + "/" + @path
84
+ end
85
+
86
+ def store(file)
87
+ content_type ||= file.content_type # this might cause problems if content type changes between read and upload (unlikely)
88
+ model.put_attachment(file.filename, file.read, {:content_type => content_type})
89
+ end
90
+
91
+ def content_type
92
+ headers["Content-Type"]
93
+ end
94
+
95
+ def content_type=(type)
96
+ headers["Content-Type"] = type
97
+ end
98
+
99
+ def size
100
+ headers['Content-Length'].to_i
101
+ end
102
+
103
+ # Headers returned from file retrieval
104
+ def headers
105
+ @headers
106
+ end
107
+
108
+ private
109
+
110
+ def model
111
+ @uploader.model
112
+ end
113
+ end
114
+
115
+ ##
116
+ # Move the file to the uploader's store path.
117
+ #
118
+ # === Parameters
119
+ #
120
+ # [file (CarrierWave::Storage::Couch::File)] the file to store
121
+ #
122
+ # === Returns
123
+ #
124
+ # [CarrierWave::Storage::Couch::File] a couch file
125
+ #
126
+ def store!(file)
127
+ f = CarrierWave::Storage::Couch::File.new(uploader, '')
128
+ f.store(file)
129
+ f
130
+ end
131
+
132
+ ##
133
+ # Retrieve the file from its store path
134
+ #
135
+ # === Parameters
136
+ #
137
+ # [identifier (String)] the filename of the file
138
+ #
139
+ # === Returns
140
+ #
141
+ # [CarrierWave::Storage::Couch::File] a couch file
142
+ #
143
+ def retrieve!(identifier)
144
+ CarrierWave::Storage::Couch::File.new(uploader, identifier)
145
+ end
146
+
147
+ end # Couch
148
+ end # Storage
149
+ end # CarrierWave
@@ -0,0 +1,27 @@
1
+ require 'carrierwave'
2
+
3
+ module CarrierWave
4
+ module Uploader
5
+ module Configuration
6
+
7
+ included do
8
+ add_config :couch_host
9
+ add_config :couch_port
10
+ add_config :couch_database
11
+ add_config :couch_username
12
+ add_config :couch_password
13
+ add_config :couch_connection
14
+ add_config :couch_access_url
15
+
16
+ configure do |config|
17
+ config.permissions = 0644
18
+ config.storage_engines = {
19
+ :couch => "CarrierWave::Storage::Couch"
20
+ }
21
+ config.couch_host = 'localhost'
22
+ config.couch_port = 5984
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,3 @@
1
+ module Carriercouch
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: carriercouch
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Shenouda Bertel
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-03-03 00:00:00 +02:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rails
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: 3.0.5
25
+ type: :development
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: "0"
36
+ type: :development
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: mini_magick
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: "2.3"
47
+ type: :development
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: carrierwave
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ type: :development
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: activemodel
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
69
+ type: :development
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: couchrest_model
73
+ prerelease: false
74
+ requirement: &id006 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: "0"
80
+ type: :development
81
+ version_requirements: *id006
82
+ description: Carrierwave Uploader for CouchDB with CouchrestModel
83
+ email:
84
+ - sbertel@arpuplus.com
85
+ executables: []
86
+
87
+ extensions: []
88
+
89
+ extra_rdoc_files: []
90
+
91
+ files:
92
+ - .gitignore
93
+ - Gemfile
94
+ - README
95
+ - Rakefile
96
+ - carriercouch.gemspec
97
+ - lib/carrierwave.rb
98
+ - lib/carrierwave/orm/couchrest_model.rb
99
+ - lib/carrierwave/storage/couch.rb
100
+ - lib/carrierwave/uploader/configuration.rb
101
+ - lib/version.rb
102
+ has_rdoc: true
103
+ homepage: ""
104
+ licenses: []
105
+
106
+ post_install_message:
107
+ rdoc_options: []
108
+
109
+ require_paths:
110
+ - lib
111
+ required_ruby_version: !ruby/object:Gem::Requirement
112
+ none: false
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: "0"
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: "0"
123
+ requirements: []
124
+
125
+ rubyforge_project: carriercouch
126
+ rubygems_version: 1.6.0
127
+ signing_key:
128
+ specification_version: 3
129
+ summary: Carrierwave Uploader for CouchDB with CouchrestModel
130
+ test_files: []
131
+