lolita-file-upload 0.1.4 → 0.2.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.
Files changed (78) hide show
  1. data/.document +5 -5
  2. data/.rspec +2 -2
  3. data/Gemfile +21 -21
  4. data/LICENSE.txt +20 -20
  5. data/README.rdoc +27 -27
  6. data/Rakefile +39 -39
  7. data/VERSION +1 -1
  8. data/app/controllers/lolita/uploads_controller.rb +58 -0
  9. data/app/models/lolita/upload/file.rb +43 -43
  10. data/app/uploaders/file_uploader.rb +20 -20
  11. data/app/views/components/lolita/configuration/tab/files/_cells.html.erb +10 -4
  12. data/app/views/components/lolita/configuration/tab/files/_destroy.js.erb +2 -2
  13. data/app/views/components/lolita/configuration/tab/files/_display.html.erb +10 -11
  14. data/app/views/components/lolita/configuration/tab/files/_edit.js.erb +1 -1
  15. data/app/views/components/lolita/configuration/tab/files/_file.html.erb +5 -0
  16. data/app/views/components/lolita/configuration/tab/files/_fixed_gallery.html.haml +33 -0
  17. data/app/views/components/lolita/configuration/tab/files/_form.html.erb +7 -3
  18. data/app/views/components/lolita/configuration/tab/files/_list.html.erb +13 -13
  19. data/app/views/components/lolita/configuration/tab/files/_list_form.html.erb +5 -5
  20. data/app/views/components/lolita/configuration/tab/files/_row.html.erb +5 -2
  21. data/app/views/components/lolita/configuration/tab/files/_update.js.erb +1 -1
  22. data/app/views/components/lolita/configuration/tab/files/_upload_script.html.erb +79 -77
  23. data/config/locales/en.yml +18 -18
  24. data/features/configuration_for_tab.feature +25 -25
  25. data/features/connect_with_lolita.feature +14 -14
  26. data/features/extend_resources_with_new_routes.feature +16 -16
  27. data/features/step_definitions/lolita_steps.rb +112 -112
  28. data/features/support/env.rb +15 -15
  29. data/features/support_byte_converter.feature +31 -31
  30. data/features/upload_file.feature +15 -15
  31. data/lib/generators/lolita_file_upload/assets_generator.rb +12 -12
  32. data/lib/generators/lolita_file_upload/install_generator.rb +19 -19
  33. data/lib/generators/lolita_file_upload/templates/migration.rb +24 -24
  34. data/lib/lolita-file-upload.rb +35 -36
  35. data/lib/lolita-file-upload/configuration/tab/files.rb +108 -57
  36. data/lib/lolita-file-upload/module.rb +10 -6
  37. data/lib/lolita-file-upload/rails.rb +7 -7
  38. data/lib/lolita-file-upload/rails/file_upload_routes.rb +14 -19
  39. data/lib/support/bytes.rb +58 -58
  40. data/lolita-file-upload.gemspec +9 -13
  41. data/public/javascripts/lolita/upload/I18n/lv.js +21 -21
  42. data/public/javascripts/lolita/upload/I18n/ru.js +21 -21
  43. data/public/javascripts/lolita/upload/plupload.full.js +1 -1
  44. data/public/stylesheets/lolita/upload/jquery.ui.plupload.css +139 -139
  45. data/public/stylesheets/lolita/upload/plupload.queue.css +177 -177
  46. data/spec/configuration/tab/files_spec.rb +36 -36
  47. data/spec/lolita/support/bytes_spec.rb +35 -35
  48. data/spec/models/file_spec.rb +33 -33
  49. data/spec/spec_helper.rb +32 -29
  50. data/spec/support/post.rb +2 -2
  51. data/spec/uploaders/file_uploader_spec.rb +11 -11
  52. data/test_orm/active_record.rb +11 -11
  53. data/test_orm/active_record/news.rb +11 -11
  54. data/test_orm/active_record/post.rb +12 -12
  55. data/test_orm/active_record/tag.rb +2 -2
  56. data/test_orm/config/active_record.yml +1 -1
  57. data/test_orm/coverage.rb +18 -18
  58. data/test_orm/db/migrate/01_create_posts.rb +14 -14
  59. data/test_orm/db/migrate/02_create_files.rb +19 -19
  60. data/test_orm/db/migrate/03_create_news.rb +16 -16
  61. data/test_orm/db/migrate/04_create_tags.rb +14 -14
  62. data/test_orm/files/large_file.txt +201 -201
  63. data/test_orm/files/normal_file.txt +1 -1
  64. data/test_orm/rails/config/application.rb +7 -7
  65. data/test_orm/rails/config/enviroment.rb +4 -4
  66. data/test_orm/rails/config/routes.rb +2 -2
  67. data/test_orm/rails/log/development.log +7 -7
  68. data/test_orm/support.rb +26 -26
  69. data/test_orm/uploaders/list_image_uploader.rb +5 -5
  70. data/test_orm/uploaders/main_image_uploader.rb +5 -5
  71. metadata +19 -23
  72. data/app/controllers/lolita/upload/files_controller.rb +0 -51
  73. data/app/controllers/lolita/upload/images_controller.rb +0 -52
  74. data/lib/lolita-file-upload/configuration/tab/images.rb +0 -20
  75. data/spec/configuration/tab/images_spec.rb +0 -16
  76. data/upload/lolita/upload/file/201105/1/large_file.txt +0 -201
  77. data/upload/lolita/upload/file/201106/1/large_file.txt +0 -201
  78. data/upload/misc/large_file.txt +0 -201
data/.document CHANGED
@@ -1,5 +1,5 @@
1
- lib/**/*.rb
2
- bin/*
3
- -
4
- features/**/*.feature
5
- LICENSE.txt
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rspec CHANGED
@@ -1,2 +1,2 @@
1
- --color
2
- --format d
1
+ --color
2
+ --format d
data/Gemfile CHANGED
@@ -1,21 +1,21 @@
1
- source "http://rubygems.org"
2
-
3
- gem "lolita", "~>3.1.8"
4
- gem "carrierwave", "~> 0.5.2"
5
- group :test do
6
- gem "rspec-rails", "~> 2.6"
7
- gem "ffaker"
8
- gem "factory_girl"
9
- gem "sqlite3"
10
- gem "rspec", "~> 2.6"
11
- gem 'cover_me', '>= 1.0.0.rc6'
12
- gem 'activerecord', "~> 3.0.7"
13
- end
14
-
15
- group :development do
16
- gem "cucumber", "~> 0.10"
17
- gem "cucumber-rails", "~> 0.5.2"
18
- gem "bundler", "~> 1.0"
19
- gem "jeweler", "~> 1.5"
20
- end
21
-
1
+ source "http://rubygems.org"
2
+
3
+ gem "lolita", "~>3.1.9"
4
+ gem "carrierwave", "~> 0.5.2"
5
+ group :test do
6
+ gem "rspec-rails", "~> 2.6"
7
+ gem "ffaker"
8
+ gem "factory_girl"
9
+ gem "sqlite3"
10
+ gem "rspec", "~> 2.6"
11
+ gem 'cover_me', '>= 1.0.0.rc6'
12
+ gem 'rails', "~> 3.0.9"
13
+ end
14
+
15
+ group :development do
16
+ gem "cucumber", "~> 0.10"
17
+ gem "cucumber-rails", "~> 0.5.2"
18
+ gem "bundler", "~> 1.0"
19
+ gem "jeweler", "~> 1.5"
20
+ end
21
+
@@ -1,20 +1,20 @@
1
- Copyright (c) 2011 Arturs Meisters
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1
+ Copyright (c) 2011 Arturs Meisters
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,27 +1,27 @@
1
- = Lolita file upload
2
-
3
- File upload gem for Lolita.
4
-
5
- ==Instalation
6
- * gem install lolita-file-upload
7
- * include in gemfile like this:
8
- gem "lolita-file-upload", ">=0.1.0"
9
- * cd your_project_path
10
- * rails g lolita_file_upload:install
11
-
12
- Install will copy all assets and migrations to your project.
13
- If you update to newest version of gem, than run <i>rails g lolita_file_upload:assets</i>
14
-
15
- ==Configuration
16
-
17
- Gem will not used until any of lolita configuration blocks define tab with type :files. Like this
18
- class Post
19
- include Lolita::Configuration
20
- has_many :files, :as=>:fileable, :class_name=>"Lolita::Upload::File"
21
-
22
- lolita do
23
- tab(:content)
24
- tab(:files)
25
- end
26
- end
27
-
1
+ = Lolita file upload
2
+
3
+ File upload gem for Lolita.
4
+
5
+ ==Instalation
6
+ * gem install lolita-file-upload
7
+ * include in gemfile like this:
8
+ gem "lolita-file-upload", ">=0.1.0"
9
+ * cd your_project_path
10
+ * rails g lolita_file_upload:install
11
+
12
+ Install will copy all assets and migrations to your project.
13
+ If you update to newest version of gem, than run <i>rails g lolita_file_upload:assets</i>
14
+
15
+ ==Configuration
16
+
17
+ Gem will not used until any of lolita configuration blocks define tab with type :files. Like this
18
+ class Post
19
+ include Lolita::Configuration
20
+ has_many :files, :as=>:fileable, :class_name=>"Lolita::Upload::File"
21
+
22
+ lolita do
23
+ tab(:content)
24
+ tab(:files)
25
+ end
26
+ end
27
+
data/Rakefile CHANGED
@@ -1,39 +1,39 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- begin
4
- Bundler.setup(:default, :development)
5
- rescue Bundler::BundlerError => e
6
- $stderr.puts e.message
7
- $stderr.puts "Run `bundle install` to install missing gems"
8
- exit e.status_code
9
- end
10
- require 'rake'
11
-
12
- require 'jeweler'
13
- Jeweler::Tasks.new do |gem|
14
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
15
- gem.name = "lolita-file-upload"
16
- gem.homepage = "http://github.com/ithouse/lolita-file-upload"
17
- gem.license = "MIT"
18
- gem.summary = %Q{File upload gem for Lolita CMS}
19
- gem.description = %Q{File upload gem for Lolita with with fulll integration - models, controller, views}
20
- gem.email = "support@ithouse.lv"
21
- gem.authors = ["ITHouse","Arturs Meisters"]
22
- # Include your dependencies below. Runtime dependencies are required when using your gem,
23
- # and development dependencies are only needed for development (ie running rake tasks, tests, etc)
24
- # gem.add_runtime_dependency 'jabber4r', '> 0.1'
25
- # gem.add_development_dependency 'rspec', '> 1.2.3'
26
- end
27
- Jeweler::RubygemsDotOrgTasks.new
28
-
29
- task :default => :test
30
-
31
- require 'rake/rdoctask'
32
- Rake::RDocTask.new do |rdoc|
33
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
34
-
35
- rdoc.rdoc_dir = 'rdoc'
36
- rdoc.title = "lolita-file-upload #{version}"
37
- rdoc.rdoc_files.include('README*')
38
- rdoc.rdoc_files.include('lib/**/*.rb')
39
- end
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'rake'
11
+
12
+ require 'jeweler'
13
+ Jeweler::Tasks.new do |gem|
14
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
15
+ gem.name = "lolita-file-upload"
16
+ gem.homepage = "http://github.com/ithouse/lolita-file-upload"
17
+ gem.license = "MIT"
18
+ gem.summary = %Q{File upload gem for Lolita CMS}
19
+ gem.description = %Q{File upload gem for Lolita with with fulll integration - models, controller, views}
20
+ gem.email = "support@ithouse.lv"
21
+ gem.authors = ["ITHouse","Arturs Meisters"]
22
+ # Include your dependencies below. Runtime dependencies are required when using your gem,
23
+ # and development dependencies are only needed for development (ie running rake tasks, tests, etc)
24
+ # gem.add_runtime_dependency 'jabber4r', '> 0.1'
25
+ # gem.add_development_dependency 'rspec', '> 1.2.3'
26
+ end
27
+ Jeweler::RubygemsDotOrgTasks.new
28
+
29
+ task :default => :test
30
+
31
+ require 'rake/rdoctask'
32
+ Rake::RDocTask.new do |rdoc|
33
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
34
+
35
+ rdoc.rdoc_dir = 'rdoc'
36
+ rdoc.title = "lolita-file-upload #{version}"
37
+ rdoc.rdoc_files.include('README*')
38
+ rdoc.rdoc_files.include('lib/**/*.rb')
39
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.4
1
+ 0.2.0
@@ -0,0 +1,58 @@
1
+ class Lolita::UploadsController < ApplicationController
2
+ include Lolita::Controllers::UserHelpers
3
+ include Lolita::Controllers::InternalHelpers
4
+ before_filter :authenticate_lolita_user!
5
+ before_filter :set_tab, :only=>[:edit,:update,:destroy,:create]
6
+ before_filter :set_resource, :only=>[:create,:edit,:update,:destroy]
7
+ before_filter :set_file, :only=>[:edit,:update,:destroy,:create]
8
+
9
+ respond_to :js,:html
10
+
11
+ def create
12
+ @file.send(:"#{@tab.uploader}=",params[:file])
13
+ @file.save!
14
+ render_component *@tab.build("",:row,:file=>@file)
15
+ end
16
+
17
+ def edit
18
+ render_component *@tab.build("",:edit,:file=>@file)
19
+ end
20
+
21
+ def update
22
+ @file.update_attributes!(params[:file])
23
+ render_component *@tab.build("",:update,:file=>@file)
24
+ end
25
+
26
+ def destroy
27
+ @file.destroy
28
+ render_component *@tab.build("",:destroy,:file=>@file)
29
+ end
30
+
31
+ private
32
+
33
+ def set_resource
34
+ association_id = params["#{lolita_mapping.singular}_id"] || params[:upload]["#{lolita_mapping.singular}_id"] || params[:upload]["#{@tab.association.options[:as]}_id"]
35
+ self.resource = resource_class.find_by_id(association_id)
36
+ end
37
+
38
+ def build_file
39
+ @file = @tab.association.klass.new
40
+ params[:upload].each do |k,v|
41
+ @file[k] = v
42
+ end
43
+ @file
44
+ end
45
+
46
+ def set_file
47
+ dbi=Lolita::DBI::Base.new(@tab.association.klass)
48
+ @file = dbi.find_by_id(params[:id]) || build_file
49
+ end
50
+
51
+ def set_tab
52
+ @tab=tab_by_association(params[:association])
53
+ end
54
+
55
+ def tab_by_association name
56
+ resource_class.lolita.tabs.detect{|tab| tab.type == :files && (tab.try(:association) && tab.association.name == name.to_sym)}
57
+ end
58
+ end
@@ -1,43 +1,43 @@
1
- module Lolita
2
- module Upload
3
- class File < ActiveRecord::Base
4
- set_table_name :lolita_files
5
-
6
- mount_uploader :asset, FileUploader
7
- belongs_to :fileable, :polymorphic=>true
8
-
9
- validate :size_limit
10
- before_save :set_metadata
11
- before_create :singularize_files
12
-
13
-
14
- private
15
-
16
- def singularize_files
17
- if self.fileable && lolita = self.fileable.class.lolita
18
- if lolita.tabs.by_type(:files).association_type == :one
19
- self.class.destroy_all(["fileable_type = :type AND fileable_id = :id AND fileable_id > 0",:type => fileable_type,:id => fileable_id])
20
- end
21
- end
22
- end
23
-
24
- def size_limit
25
- if self.fileable && lolita=self.fileable.class.lolita
26
- maxsize=lolita.tabs.by_type(:files).maxfilesize
27
- if maxsize.to_i>0 && self.asset.file.size>maxsize
28
- bytes=Lolita::Support::Bytes.new(maxsize)
29
- self.errors.add(:asset,I18n.t("lolita.upload.errors.file too big",:value=>bytes.value,:unit=>bytes.unit))
30
- end
31
- end
32
- end
33
-
34
- def set_metadata
35
- self.name||=::File.basename(self.asset.store_path)
36
- self.asset_size=self.asset.file.size
37
- self.asset_extension=::File.extname(self.asset.store_path).gsub(".","")
38
- end
39
-
40
- end
41
- end
42
- end
43
-
1
+ module Lolita
2
+ module Upload
3
+ class File < ActiveRecord::Base
4
+ set_table_name :lolita_files
5
+
6
+ mount_uploader :asset, FileUploader
7
+ belongs_to :fileable, :polymorphic=>true
8
+
9
+ validate :size_limit
10
+ before_save :set_metadata
11
+ before_create :singularize_files
12
+
13
+
14
+ private
15
+
16
+ def singularize_files
17
+ if self.fileable && lolita = self.fileable.class.lolita
18
+ if lolita.tabs.by_type(:files).association_type == :one
19
+ self.class.destroy_all(["fileable_type = :type AND fileable_id = :id AND fileable_id > 0",:type => fileable_type,:id => fileable_id])
20
+ end
21
+ end
22
+ end
23
+
24
+ def size_limit
25
+ if self.fileable && lolita=self.fileable.class.lolita
26
+ maxsize=lolita.tabs.by_type(:files).maxfilesize
27
+ if maxsize.to_i>0 && self.asset.file.size>maxsize
28
+ bytes=Lolita::Support::Bytes.new(maxsize)
29
+ self.errors.add(:asset,I18n.t("lolita.upload.errors.file too big",:value=>bytes.value,:unit=>bytes.unit))
30
+ end
31
+ end
32
+ end
33
+
34
+ def set_metadata
35
+ self.name||=::File.basename(self.asset.store_path)
36
+ self.asset_size=self.asset.file.size
37
+ self.asset_extension=::File.extname(self.asset.store_path).gsub(".","")
38
+ end
39
+
40
+ end
41
+ end
42
+ end
43
+
@@ -1,21 +1,21 @@
1
- class FileUploader < CarrierWave::Uploader::Base
2
- storage :file
3
- def timestamp
4
- time=if model
5
- model.created_at || Time.now
6
- else
7
- Time.now
8
- end
9
- time.strftime("%Y%m")
10
- end
11
-
12
- # With slash in first place it will be absolute url, otherwise relative to Rails.root+"/public"
13
- def store_dir
14
- if model
15
- "upload/#{model.class.to_s.underscore}/#{timestamp}/#{model.id}"
16
- else
17
- "upload/misc"
18
- end
19
- end
20
-
1
+ class FileUploader < CarrierWave::Uploader::Base
2
+ storage :file
3
+ def timestamp
4
+ time=if model
5
+ model.created_at || Time.now
6
+ else
7
+ Time.now
8
+ end
9
+ time.strftime("%Y%m")
10
+ end
11
+
12
+ # With slash in first place it will be absolute url, otherwise relative to Rails.root+"/public"
13
+ def store_dir
14
+ if model
15
+ "upload/#{model.class.to_s.underscore}/#{timestamp}/#{model.id}"
16
+ else
17
+ "upload/misc"
18
+ end
19
+ end
20
+
21
21
  end
@@ -1,5 +1,11 @@
1
- <td><%=file.name || "-"%></td>
2
- <td>
3
- <%=link_to "E",send(:"edit_lolita_upload_#{tab.type.to_s.singularize}_path",:id=>file.id),:remote=>true %>
4
- <%= link_to "D",send(:"lolita_upload_#{tab.type.to_s.singularize}_path",:id=>file.id),:method=>:delete,:remote=>true,:confirm=>"Are you sure?" %>
1
+ <td style="margin-top: 3px; border-bottom: 2px solid #E1E1E1; width: 600px;font-weight: bold; color: #737373; font-size: 14px; padding: 7px 20px; vertical-align: middle;">
2
+ <% if file.send(tab.uploader).to_s =~ /(jpg|jpeg|png|gif)$/i %>
3
+ <%= link_to image_tag(file.send(tab.uploader).url, :style=>"width:300px; height 160px;"), file.send(tab.uploader).url %>
4
+ <% else %>
5
+ <%= link_to file.send(tab.uploader).url, file.send(tab.uploader).url %>
6
+ <% end %>
7
+ </td>
8
+ <td style="margin-top: 3px; border-bottom: 2px solid #E1E1E1; width: 55px;text-align: center; font-size: 14px; padding: 7px 20px; vertical-align: middle;">
9
+ <%= link_to image_tag("edit.png"),send(:"edit_lolita_#{tab.dbi.klass.model_name.singular}_upload_path", "#{tab.dbi.klass.model_name.singular}_id" => resource.nil? ? 0 : resource.id, :association => tab.association.name, :id=>file),:remote=>true %>
10
+ <%= link_to image_tag("delete_picture.png"),send(:"lolita_#{tab.dbi.klass.model_name.singular}_upload_path", "#{tab.dbi.klass.model_name.singular}_id" => resource.nil? ? 0 : resource.id, :association => tab.association.name, :id=>file.id),:method=>:delete,:remote=>true,:confirm=>"Are you sure?" %>
5
11
  </td>
@@ -1,2 +1,2 @@
1
- $("#upload_<%=tab.type%>_row_<%=file.id%>").remove()
2
- $("input.<%=tab.type%>-ids[value=<%=file.id%>]").remove()
1
+ $("#upload_<%=tab.association.name%>_row_<%=file.id%>").remove()
2
+ $("input.<%=tab.association.name%>-ids[value=<%=file.id%>]").remove()