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
@@ -1,15 +1,15 @@
1
- require File.expand_path('test_orm/coverage')
2
- require File.expand_path("lib/lolita-file-upload")
3
- require "carrierwave"
4
-
5
- require "ruby-debug"
6
- current_orm=:active_record
7
- require 'carrierwave/orm/'+current_orm.to_s.gsub("_","")
8
-
9
- require File.expand_path("test_orm/#{current_orm}")
10
-
11
- require File.expand_path("test_orm/support")
12
-
13
-
14
-
15
-
1
+ require File.expand_path('test_orm/coverage')
2
+ require File.expand_path("lib/lolita-file-upload")
3
+ require "carrierwave"
4
+
5
+ require "ruby-debug"
6
+ current_orm=:active_record
7
+ require 'carrierwave/orm/'+current_orm.to_s.gsub("_","")
8
+
9
+ require File.expand_path("test_orm/#{current_orm}")
10
+
11
+ require File.expand_path("test_orm/support")
12
+
13
+
14
+
15
+
@@ -1,31 +1,31 @@
1
- Feature: convert bytes to biggest possible unit
2
-
3
- In order to show file upload errors in human understendable way
4
- There should be converter that converts bytes to kilobytes, megabytes, gigabytes.
5
- Lolita::Suport::Bytes do that think, it is create by passing bytes, and return unit and values with
6
- converted values
7
-
8
- Scenario Outline: convert bytes
9
- Given byte converter
10
- When I humanize "<size>"
11
- Then I should get "<unit>" and "<limit>"
12
-
13
- Scenarios: to bytes
14
- | size | unit | limit |
15
- | 0 | bytes | 0.0 |
16
- | 1023 | bytes | 1023.0 |
17
-
18
- Scenarios: to kilobytes
19
- | size | unit | limit |
20
- | 1024 | kilobyte | 1.0 |
21
- | 1024**2-1 | megabyte | 1.0 |
22
-
23
- Scenarios: to megabytes
24
- | size | unit | limit |
25
- | 1024**2 | megabyte | 1.0 |
26
- | 1024**3-1 | gigabyte | 1.0 |
27
-
28
- Scenarios: to gigabytes
29
- | size | unit | limit |
30
- | 1024**3 | gigabyte | 1.0 |
31
- | 1024**4-1 | gigabytes | 1024.0 |
1
+ Feature: convert bytes to biggest possible unit
2
+
3
+ In order to show file upload errors in human understendable way
4
+ There should be converter that converts bytes to kilobytes, megabytes, gigabytes.
5
+ Lolita::Suport::Bytes do that think, it is create by passing bytes, and return unit and values with
6
+ converted values
7
+
8
+ Scenario Outline: convert bytes
9
+ Given byte converter
10
+ When I humanize "<size>"
11
+ Then I should get "<unit>" and "<limit>"
12
+
13
+ Scenarios: to bytes
14
+ | size | unit | limit |
15
+ | 0 | bytes | 0.0 |
16
+ | 1023 | bytes | 1023.0 |
17
+
18
+ Scenarios: to kilobytes
19
+ | size | unit | limit |
20
+ | 1024 | kilobyte | 1.0 |
21
+ | 1024**2-1 | megabyte | 1.0 |
22
+
23
+ Scenarios: to megabytes
24
+ | size | unit | limit |
25
+ | 1024**2 | megabyte | 1.0 |
26
+ | 1024**3-1 | gigabyte | 1.0 |
27
+
28
+ Scenarios: to gigabytes
29
+ | size | unit | limit |
30
+ | 1024**3 | gigabyte | 1.0 |
31
+ | 1024**4-1 | gigabytes | 1024.0 |
@@ -1,16 +1,16 @@
1
- Feature: upload file from lolita and manage file attributes
2
-
3
- Files in lolita have name attribute. Any attributes can be changed after file is uploaded.
4
- File always is related with some ORM class object.
5
-
6
- Scenario: upload file
7
- Given a lolita
8
- And a rails
9
- And rails application
10
- And lolita-file-upload
11
- And I visit new post
12
- When I upload file normal_file.txt
13
- Then I see normal_file
14
- And I change file attribute name to my_file
15
- And save file
1
+ Feature: upload file from lolita and manage file attributes
2
+
3
+ Files in lolita have name attribute. Any attributes can be changed after file is uploaded.
4
+ File always is related with some ORM class object.
5
+
6
+ Scenario: upload file
7
+ Given a lolita
8
+ And a rails
9
+ And rails application
10
+ And lolita-file-upload
11
+ And I visit new post
12
+ When I upload file normal_file.txt
13
+ Then I see normal_file
14
+ And I change file attribute name to my_file
15
+ And save file
16
16
  Then I see my_file
@@ -1,13 +1,13 @@
1
- require 'generators/helpers/file_helper'
2
- module LolitaFileUpload
3
- module Generators
4
- class AssetsGenerator < Rails::Generators::Base
5
- include Lolita::Generators::FileHelper
6
- desc "Copy all from public directory to project public directory."
7
- def copy_all
8
- root=File.expand_path("../../../../",__FILE__)
9
- copy_dir("public",:root=>root)
10
- end
11
- end
12
- end
1
+ require 'generators/helpers/file_helper'
2
+ module LolitaFileUpload
3
+ module Generators
4
+ class AssetsGenerator < Rails::Generators::Base
5
+ include Lolita::Generators::FileHelper
6
+ desc "Copy all from public directory to project public directory."
7
+ def copy_all
8
+ root=File.expand_path("../../../../",__FILE__)
9
+ copy_dir("public",:root=>root)
10
+ end
11
+ end
12
+ end
13
13
  end
@@ -1,19 +1,19 @@
1
- module LolitaFileUpload
2
- module Generators
3
- class InstallGenerator < Rails::Generators::Base
4
- include Lolita::Generators::FileHelper
5
- source_root File.expand_path("../templates", __FILE__)
6
- desc "Copy assets and create migrations. "
7
-
8
-
9
- def copy_assets
10
- generate("lolita_file_upload:assets")
11
- end
12
-
13
- def copy_migration
14
- copy_file "migration.rb", "db/migrate/#{Time.now.strftime("%Y%m%d%H%M%S")}_create_lolita_upload_files.rb"
15
- end
16
-
17
- end
18
- end
19
- end
1
+ module LolitaFileUpload
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ include Lolita::Generators::FileHelper
5
+ source_root File.expand_path("../templates", __FILE__)
6
+ desc "Copy assets and create migrations. "
7
+
8
+
9
+ def copy_assets
10
+ generate("lolita_file_upload:assets")
11
+ end
12
+
13
+ def copy_migration
14
+ copy_file "migration.rb", "db/migrate/#{Time.now.strftime("%Y%m%d%H%M%S")}_create_lolita_upload_files.rb"
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -1,25 +1,25 @@
1
- class CreateLolitaUploadFiles < ActiveRecord::Migration
2
- class << self
3
-
4
- def up
5
- create_table :lolita_files, :force=>true do |t|
6
- t.string :asset
7
- t.string :name
8
- t.string :fileable_type
9
- t.integer :fileable_id
10
- t.string :asset_extension, :limit=>12
11
- t.integer :asset_size
12
- t.timestamps
13
- end
14
-
15
- add_index :lolita_files, [:fileable_type,:fileable_id]
16
- add_index :lolita_files, :fileable_type
17
- add_index :lolita_files,:asset_size
18
- add_index :lolita_files, :created_at
19
- end
20
-
21
- def down
22
- drop_table :lolita_files
23
- end
24
- end
1
+ class CreateLolitaUploadFiles < ActiveRecord::Migration
2
+ class << self
3
+
4
+ def up
5
+ create_table :lolita_files, :force=>true do |t|
6
+ t.string :asset
7
+ t.string :name
8
+ t.string :fileable_type
9
+ t.integer :fileable_id
10
+ t.string :asset_extension, :limit=>12
11
+ t.integer :asset_size
12
+ t.timestamps
13
+ end
14
+
15
+ add_index :lolita_files, [:fileable_type,:fileable_id]
16
+ add_index :lolita_files, :fileable_type
17
+ add_index :lolita_files,:asset_size
18
+ add_index :lolita_files, :created_at
19
+ end
20
+
21
+ def down
22
+ drop_table :lolita_files
23
+ end
24
+ end
25
25
  end
@@ -1,37 +1,36 @@
1
- #TODO add exception if lolita not found, show exception and msg that user should install this gem
2
- # if files tab is defined, but there no tab for that, maybe check that through gem.
3
- if !defined?(Lolita)
4
- require "lolita"
5
- end
6
- $:<<File.dirname(__FILE__) unless $:.include?(File.dirname(__FILE__))
7
-
8
- I18n.load_path += Dir[File.expand_path("config/locales")+"/**/*.yml"] if defined?(I18n)
9
-
10
- module Lolita
11
- module FileUpload
12
- end
13
- module Support
14
- autoload :Bytes, "support/bytes"
15
- end
16
-
17
- module Configuration
18
- module Tab
19
- autoload :Files, "lolita-file-upload/configuration/tab/files"
20
- autoload :Images, "lolita-file-upload/configuration/tab/images"
21
- end
22
- # module Field
23
- # autoload :Upload, "lolita-file-upload/configuration/field/upload"
24
- # end
25
- end
26
- end
27
-
28
- require 'lolita-file-upload/module'
29
-
30
- if defined?(Rails)
31
- require "lolita-file-upload/rails"
32
- end
33
-
34
- # How to connect multimedia engine with lolita resources
35
- # Detecting from tabs will not be very good idea because it will load many thing
36
- # There should be the way to connect it on demand when realy multimedia tab is used for resource like
1
+ #TODO add exception if lolita not found, show exception and msg that user should install this gem
2
+ # if files tab is defined, but there no tab for that, maybe check that through gem.
3
+ if !defined?(Lolita)
4
+ require "lolita"
5
+ end
6
+ $:<<File.dirname(__FILE__) unless $:.include?(File.dirname(__FILE__))
7
+
8
+ I18n.load_path += Dir[File.expand_path("config/locales")+"/**/*.yml"] if defined?(I18n)
9
+
10
+ module Lolita
11
+ module FileUpload
12
+ end
13
+ module Support
14
+ autoload :Bytes, "support/bytes"
15
+ end
16
+
17
+ module Configuration
18
+ module Tab
19
+ autoload :Files, "lolita-file-upload/configuration/tab/files"
20
+ end
21
+ # module Field
22
+ # autoload :Upload, "lolita-file-upload/configuration/field/upload"
23
+ # end
24
+ end
25
+ end
26
+
27
+ require 'lolita-file-upload/module'
28
+
29
+ if defined?(Rails)
30
+ require "lolita-file-upload/rails"
31
+ end
32
+
33
+ # How to connect multimedia engine with lolita resources
34
+ # Detecting from tabs will not be very good idea because it will load many thing
35
+ # There should be the way to connect it on demand when realy multimedia tab is used for resource like
37
36
  # lolita/posts/files/new[create,destroy,update, index]
@@ -1,58 +1,109 @@
1
- module Lolita
2
- module Configuration
3
- module Tab
4
- # FileTab extend Lolita default tab with new lolita accessors.
5
- # * <tt>extensions</tt> - Array of extension white list
6
- # * <tt>maxfilesize</tt> - uploaded file maximums size
7
- class Files < Lolita::Configuration::Tab::Base
8
-
9
- lolita_accessor :extensions,:maxfilesize
10
- attr_reader :association, :association_type
11
-
12
- # As any other Lolita::Configuration::Tab this should receive _dbi_ object.
13
- # Additional _args_ that may represent methods, for details see Lolita::Configuration::Tab.
14
- # And block.
15
- def initialize(dbi,*args,&block)
16
- @type=:files
17
- @extensions=[]
18
- @dbi=dbi
19
- set_association
20
- super
21
- end
22
-
23
- # Add another extension to #extensions white list.
24
- # ====Example
25
- # # using in lolita configuration definition
26
- # lolita do
27
- # tab(:file) do
28
- # extension "Images", "png,jpg"
29
- # end
30
- # end
31
- #
32
- # # using for object
33
- # Lolita::Configuration.FileTab.new(dbi).extension("pdf")
34
- def extension(title, extensions)
35
- @extensions << {:title => title, :extensions => extensions}
36
- end
37
-
38
- private
39
-
40
- def set_association
41
- @association=self.dbi.associations.detect{|k,assoc| assoc.class_name=="Lolita::Upload::File"}
42
- if @association
43
- @association=@association.last
44
- @association_type = self.dbi.association_macro(@association)
45
- end
46
- end
47
-
48
- def validate
49
- super
50
- unless self.association
51
- raise Lolita::AssociationError, "#{self.dbi.klass} has no association with Lolita::Upload::File. Put has_many :files, :class_name=>'Lolita::Upload::File' to have one."
52
- end
53
- end
54
-
55
- end
56
- end
57
- end
1
+ module Lolita
2
+ module Configuration
3
+ module Tab
4
+ # FileTab extend Lolita default tab with new lolita accessors.
5
+ # * <tt>extensions</tt> - Array of extension white list
6
+ # * <tt>maxfilesize</tt> - uploaded file maximums size
7
+ class Files < Lolita::Configuration::Tab::Base
8
+
9
+ lolita_accessor :extensions, :maxfilesize, :filters
10
+ attr_reader :association, :uploader, :association_type, :editable_fields
11
+
12
+ # As any other Lolita::Configuration::Tab this should receive _dbi_ object.
13
+ # Additional _args_ that may represent methods, for details see Lolita::Configuration::Tab.
14
+ # And block.
15
+ def initialize(dbi,*args,&block)
16
+ @type=:files
17
+ @filters=[]
18
+ @dbi=dbi
19
+ @editable_fields=[]
20
+ set_default_uploader
21
+ super
22
+ end
23
+
24
+ # NOTE: Filters only limit frontend, backend limit is set in Uploader
25
+ #
26
+ # Add another filter or just title for uploader's extension_white_list
27
+ # ====Example
28
+ # # using in lolita configuration definition
29
+ # lolita do
30
+ # tab(:file) do
31
+ # title "Pictures"
32
+ # filters "Images", "png,jpg"
33
+ # # OR
34
+ # filters "Pictures"
35
+ # end
36
+ # end
37
+ #
38
+ def filters(title=nil, extensions=nil)
39
+ @filters << {:title => title, :extensions => extensions || self.extension_white_list} if title
40
+ (@filters.empty? && self.extension_white_list) ? [{:title => self.title, :extensions => self.extension_white_list}] : @filters
41
+ end
42
+
43
+ def uploader name=nil
44
+ if name
45
+ @uploader = name.to_sym
46
+ @association = self.dbi.klass
47
+ @association_type = :self
48
+ end
49
+ @uploader
50
+ end
51
+
52
+ def association name=nil
53
+ if name
54
+ @association = self.dbi.associations[name]
55
+ @association_type = self.dbi.association_macro(@association)
56
+ @uploader = @association.klass.uploaders.keys.first
57
+ end
58
+ @association
59
+ end
60
+
61
+ def association_dbi
62
+ Lolita::DBI::Base.new self.association.klass
63
+ end
64
+
65
+ def editable_fields *names
66
+ @editable_fields = names unless names.empty?
67
+ @editable_fields.empty? ? all_text_fields : @editable_fields
68
+ end
69
+
70
+ def extension_white_list
71
+ self.association.klass.uploaders[self.uploader].new.extension_white_list
72
+ end
73
+
74
+ private
75
+
76
+ def all_text_fields
77
+ self.association_dbi.fields.collect{|field| field[:name] if field[:type] == "string"}.compact
78
+ end
79
+
80
+ def set_default_uploader
81
+ unless self.dbi.klass.uploaders.empty?
82
+ @uploader = self.dbi.klass.uploaders.keys.first
83
+ @association = self.dbi.klass
84
+ @association_type = :self
85
+ else
86
+ set_default_association
87
+ end
88
+ end
89
+
90
+ def set_default_association
91
+ @association=self.dbi.associations.detect{|k,assoc| !assoc.klass.uploaders.empty? }
92
+ if @association
93
+ @association=@association.last
94
+ @association_type = self.dbi.association_macro(@association)
95
+ @uploader = @association.klass.uploaders.keys.first
96
+ end
97
+ end
98
+
99
+ def validate
100
+ super
101
+ unless self.uploader
102
+ raise "#{self.dbi.klass} has no uploader. Add your custom uploader or use Lolita's built in `has_many :files, :class_name=>'Lolita::Upload::File'`."
103
+ end
104
+ end
105
+
106
+ end
107
+ end
108
+ end
58
109
  end