ecm_downloads2 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +57 -0
  4. data/Rakefile +34 -0
  5. data/app/assets/images/ecm_downloads/download_categories/last_node.png +0 -0
  6. data/app/assets/images/ecm_downloads/download_categories/node.png +0 -0
  7. data/app/assets/images/ecm_downloads/download_categories/vertical_line.png +0 -0
  8. data/app/assets/stylesheets/ecm_downloads/downloads_categories.css.erb +30 -0
  9. data/app/assets/stylesheets/ecm_downloads.css +1 -0
  10. data/app/controllers/ecm/downloads/download_categories_controller.rb +9 -0
  11. data/app/controllers/ecm/downloads/downloads_controller.rb +15 -0
  12. data/app/decorators/ecm/downloads/download_category_decorator.rb +18 -0
  13. data/app/decorators/ecm/downloads/download_decorator.rb +21 -0
  14. data/app/helpers/ecm/downloads/download_category_helper.rb +12 -0
  15. data/app/helpers/ecm/downloads/download_helper.rb +12 -0
  16. data/app/models/ecm/downloads/download.rb +89 -0
  17. data/app/models/ecm/downloads/download_category.rb +79 -0
  18. data/app/views/ecm/downloads/download_categories/_download_category.html.erb +22 -0
  19. data/app/views/ecm/downloads/download_categories/_download_category_in_index.html.erb +5 -0
  20. data/app/views/ecm/downloads/download_categories/index.html.erb +5 -0
  21. data/app/views/ecm/downloads/download_categories/show.html.erb +9 -0
  22. data/app/views/ecm/downloads/downloads/_download.html.erb +11 -0
  23. data/app/views/ecm/downloads/downloads/_download_in_table.html.erb +10 -0
  24. data/app/views/ecm/downloads/downloads/_table.html.erb +7 -0
  25. data/app/views/ecm/downloads/downloads/index.html.erb +3 -0
  26. data/app/views/ecm/downloads/downloads/show.html.erb +7 -0
  27. data/config/locales/active_admin.patch.de.yml +29 -0
  28. data/config/locales/ecm.downloads.de.yml +16 -0
  29. data/config/locales/ecm.downloads.download.de.yml +28 -0
  30. data/config/locales/ecm.downloads.download.en.yml +28 -0
  31. data/config/locales/ecm.downloads.download_category.de.yml +27 -0
  32. data/config/locales/ecm.downloads.download_category.en.yml +27 -0
  33. data/config/locales/ecm.downloads.en.yml +16 -0
  34. data/config/routes.rb +5 -0
  35. data/db/migrate/001_create_ecm_downloads_download_categories.rb +24 -0
  36. data/db/migrate/002_create_ecm_downloads_downloads.rb +31 -0
  37. data/lib/ecm/downloads/active_admin/ecm_downloads_download_categories.rb +138 -0
  38. data/lib/ecm/downloads/active_admin/ecm_downloads_downloads.rb +49 -0
  39. data/lib/ecm/downloads/configuration.rb +22 -0
  40. data/lib/ecm/downloads/engine.rb +21 -0
  41. data/lib/ecm/downloads/routing.rb +26 -0
  42. data/lib/ecm/downloads/version.rb +6 -0
  43. data/lib/ecm_downloads2.rb +20 -0
  44. data/lib/generators/ecm/downloads/install/install_generator.rb +16 -0
  45. data/lib/generators/ecm/downloads/install/templates/ecm_downloads.rb +15 -0
  46. data/lib/generators/ecm/downloads/locales/locales_generator.rb +24 -0
  47. data/lib/tasks/ecm_downloads_tasks.rake +52 -0
  48. metadata +488 -0
@@ -0,0 +1,27 @@
1
+ ---
2
+ en:
3
+ activerecord:
4
+ attributes:
5
+ ecm/downloads/download_category:
6
+ children: children
7
+ created_at: created at
8
+ depth: depth
9
+ description: description
10
+ ecm_downloads_downloads: downloads
11
+ ecm_downloads_downloads_count: downloads
12
+ lft: left
13
+ locale: locale
14
+ name: name
15
+ parent: parent
16
+ parent_id: parent
17
+ position: position
18
+ rgt: right
19
+ slug: friendly id
20
+ updated_at: updated at
21
+ models:
22
+ ecm/downloads/download_category:
23
+ one: download category
24
+ other: download categories
25
+ routes:
26
+ ecm_downloads_download_categories: download-categories
27
+
@@ -0,0 +1,16 @@
1
+ en:
2
+ ecm:
3
+ downloads:
4
+ active_admin:
5
+ menu: "Downloads"
6
+ download:
7
+ actions:
8
+ start_download: "Download now"
9
+ messages:
10
+ not_found: "Download \"%{name}\" not found."
11
+ download_category:
12
+ actions:
13
+ back_to_index: "Back to the index"
14
+ messages:
15
+ not_found: "Download category \"%{name}\" not found."
16
+ no_downloads_available: "There are now downloads in this category."
data/config/routes.rb ADDED
@@ -0,0 +1,5 @@
1
+ ## Rails.application.routes.draw do
2
+ #Ecm::Downloads::Engine.routes.draw do
3
+ # resources :ecm_downloads_download_categories, :only => [ :index, :show ], :controller => 'ecm/downloads/download_categories'
4
+ # resources :ecm_downloads_downloads, :only => [ :index, :show ], :controller => 'ecm/downloads/downloads'
5
+ #end
@@ -0,0 +1,24 @@
1
+ class CreateEcmDownloadsDownloadCategories < ActiveRecord::Migration
2
+ def change
3
+ create_table :ecm_downloads_download_categories do |t|
4
+ t.string :name
5
+ t.text :description
6
+ t.string :locale
7
+ t.integer :position
8
+
9
+ # references
10
+ t.integer :ecm_downloads_downloads_count, :default => 0, :null => false
11
+
12
+ # awesome nested set
13
+ t.integer :parent_id
14
+ t.integer :lft
15
+ t.integer :rgt
16
+ t.integer :depth
17
+
18
+ # frienldy id
19
+ t.string :slug
20
+
21
+ t.timestamps
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,31 @@
1
+ class CreateEcmDownloadsDownloads < ActiveRecord::Migration
2
+ def change
3
+ create_table :ecm_downloads_downloads do |t|
4
+ t.string :name
5
+ t.text :description
6
+ t.timestamp :published_at
7
+
8
+ # references
9
+ t.references :ecm_downloads_download_category
10
+
11
+ # acts as list
12
+ t.integer :position
13
+
14
+ # friendly id
15
+ t.string :slug
16
+
17
+ # paperclip
18
+ # t.attachment :asset
19
+ t.string :asset_file_name
20
+ t.integer :asset_file_size
21
+ t.string :asset_content_type
22
+ t.timestamp :asset_updated_at
23
+ t.string :asset_fingerprint
24
+
25
+ t.timestamps
26
+ end
27
+ add_index :ecm_downloads_downloads,
28
+ :ecm_downloads_download_category_id,
29
+ :name => 'index_ecm_downloads_downloads_on_download_category_id'
30
+ end
31
+ end
@@ -0,0 +1,138 @@
1
+ if defined?(ActiveAdmin)
2
+ include ActiveAdmin::ActsAsList::Helper
3
+ include ActiveAdmin::AwesomeNestedSet::Helper
4
+
5
+ ActiveAdmin.register Ecm::Downloads::DownloadCategory do
6
+ # menu entry settings
7
+ menu :parent => I18n.t('ecm.downloads.active_admin.menu')
8
+
9
+ permit_params :description,
10
+ :ecm_downloads_downloads_count,
11
+ :locale,
12
+ :name,
13
+ :parent_id,
14
+ :position,
15
+ :slug,
16
+ ecm_downloads_downloads_attributes: [
17
+ :asset,
18
+ :description,
19
+ :ecm_downloads_download_category_id,
20
+ :name,
21
+ :published
22
+ ]
23
+
24
+ # sorting
25
+ config.sort_order = 'lft_asc'
26
+
27
+ # awesome nested set
28
+ sortable_tree_member_actions
29
+
30
+ # scopes
31
+ scope :all
32
+ scope :roots
33
+ I18n.available_locales.each do |locale|
34
+ self.send(:scope, locale.to_s) do |klass|
35
+ klass.where(:locale => locale)
36
+ # klass.where(klass.arel_table[:locale].eq(locale).or(klass.arel_table[:locale].eq(nil)))
37
+ end
38
+ end
39
+
40
+ form do |f|
41
+ f.inputs do
42
+ f.semantic_errors *f.object.errors.keys
43
+ end
44
+
45
+ f.inputs do
46
+ f.input :parent, :as => :select,
47
+ :collection => nested_set_options(Ecm::Downloads::DownloadCategory, f.object) { |dc| "#{'-' * dc.depth} #{dc.name}" }
48
+ f.input :locale, :as => :select,
49
+ :collection => I18n.available_locales.map(&:to_s)
50
+ f.input :name
51
+ f.input :description
52
+ end
53
+
54
+ f.inputs do
55
+ f.has_many :ecm_downloads_downloads do |d|
56
+ if d.object.persisted?
57
+ d.input :_destroy, :as => :boolean, :label => I18n.t('active_admin.delete')
58
+ end
59
+ d.input :asset, :as => :file
60
+ d.input :name
61
+ d.input :published, :as => :boolean
62
+ d.input :description
63
+ end
64
+ end
65
+
66
+ f.actions
67
+ end
68
+
69
+ index do
70
+ selectable_column
71
+ sortable_tree_columns
72
+ column :locale
73
+ column :name do |dc|
74
+ span(:style => "margin-left: #{25 * dc.level}px") { dc.name }
75
+ end
76
+ column(:description) do |dc|
77
+ truncate(dc.description, :length => 100 , :separator => ' ')
78
+ end
79
+ column :ecm_downloads_downloads_count
80
+ actions
81
+ end
82
+
83
+ show :title => :to_s do
84
+ attributes_table do
85
+ row :parent
86
+ row :locale
87
+ row :name
88
+ row :ecm_downloads_downloads_count
89
+ row :created_at
90
+ row :updated_at
91
+ end
92
+
93
+ panel Ecm::Downloads::DownloadCategory.human_attribute_name(:description) do
94
+ div do
95
+ ecm_downloads_download_category.description
96
+ end
97
+ end
98
+
99
+ panel Ecm::Downloads::DownloadCategory.human_attribute_name(:display_code) do
100
+ div do
101
+ ecm_downloads_download_category.display_code
102
+ end
103
+ end
104
+
105
+ panel Ecm::Downloads::DownloadCategory.human_attribute_name(:link) do
106
+ div do
107
+ ecm_downloads_download_category_path(I18n.locale, ecm_downloads_download_category)
108
+ end
109
+ end
110
+
111
+ panel Ecm::Downloads::DownloadCategory.human_attribute_name(:children) do
112
+ table_for ecm_downloads_download_category.children, :i18n => Ecm::Downloads::DownloadCategory do
113
+ sortable_tree_columns
114
+ column(:index_name) do |ecm_downloads_download_category|
115
+ link_to ecm_downloads_download_category, [:admin, ecm_downloads_download_category]
116
+ end
117
+ column :description
118
+ column :ecm_downloads_downloads_count
119
+ end
120
+ end
121
+
122
+ panel Ecm::Downloads::DownloadCategory.human_attribute_name(:ecm_downloads_downloads) do
123
+ table_for ecm_downloads_download_category.ecm_downloads_downloads, :i18n => Ecm::Downloads::Download do
124
+ sortable_columns
125
+ column(:name) do |ecm_downloads_download|
126
+ link_to ecm_downloads_download, [:admin, ecm_downloads_download]
127
+ end
128
+ acts_as_published_columns
129
+ column :asset_file_name
130
+ column :asset_file_size, :sortable => :asset_file_size do |download|
131
+ number_to_human_size(download.asset_file_size)
132
+ end
133
+ column :created_at
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,49 @@
1
+ include ActiveAdmin::ActsAsList::Helper
2
+ include ActsAsPublished::ActiveAdminHelper
3
+
4
+ ActiveAdmin.register Ecm::Downloads::Download do
5
+ # acts as list
6
+ sortable_member_actions
7
+
8
+ # acts as published
9
+ acts_as_published_actions
10
+
11
+ # config
12
+ menu :parent => I18n.t('ecm.downloads.active_admin.menu')
13
+
14
+ permit_params :asset,
15
+ :description,
16
+ :ecm_downloads_download_category_id,
17
+ :name
18
+
19
+ # scopes
20
+ scope :all
21
+ scope :published
22
+ scope :unpublished
23
+
24
+ form :html => { :enctype => "multipart/form-data" } do |f|
25
+ f.inputs do
26
+ f.input :ecm_downloads_download_category, :as => :select,
27
+ :collection => nested_set_options(Ecm::Downloads::DownloadCategory) { |dc| "#{'-' * dc.level} #{dc.name}" }
28
+ f.input :asset, :as => :file
29
+ f.input :name
30
+ f.input :published, :as => :boolean
31
+ f.input :description
32
+ end
33
+
34
+ f.actions
35
+ end
36
+
37
+ index do
38
+ selectable_column
39
+ column :ecm_downloads_download_category
40
+ column :name
41
+ acts_as_published_columns
42
+ column :asset_file_name
43
+ column :asset_file_size, :sortable => :asset_file_size do |download|
44
+ number_to_human_size(download.asset_file_size)
45
+ end
46
+ column :created_at
47
+ actions
48
+ end
49
+ end if defined?(ActiveAdmin)
@@ -0,0 +1,22 @@
1
+ require 'active_support/core_ext/module/delegation'
2
+ require 'active_support/core_ext/module/attribute_accessors'
3
+ require 'active_support/hash_with_indifferent_access'
4
+
5
+ module Ecm
6
+ module Downloads
7
+ module Configuration
8
+ def configure
9
+ yield self
10
+ end
11
+
12
+ mattr_accessor :paperclip_options do
13
+ {}
14
+ end
15
+
16
+
17
+ mattr_accessor :base_controller do
18
+ 'ApplicationController'
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,21 @@
1
+ module Ecm
2
+ module Downloads
3
+ class Engine < Rails::Engine
4
+ # active admin
5
+ initializer :ecm_courses_engine do
6
+ ::ActiveAdmin.setup do |active_admin_config|
7
+ active_admin_config.load_paths += Dir[File.dirname(__FILE__) + '/active_admin']
8
+ end
9
+ end if defined?(::ActiveAdmin)
10
+
11
+ # helpers
12
+ config.to_prepare do
13
+ ApplicationController.helper(Ecm::Downloads::DownloadCategoryHelper)
14
+ ApplicationController.helper(Ecm::Downloads::DownloadHelper)
15
+ end
16
+
17
+ # locales
18
+ paths["config/locales"] << File.dirname(__FILE__) + '/../../../config/locales'
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,26 @@
1
+ module Ecm
2
+ module Downloads
3
+ class Routing
4
+ # Creates the routes for downloads and categories. You can pass options to
5
+ # specify the actions for both downloads and/or categories.
6
+ #
7
+ # Ecm::Downloads::Routing.routes(self, { :download_category_actions => [ :show ]})
8
+ #
9
+ # This will only create the show action for download categories, but omit the index action.
10
+ def self.routes(router, options = {})
11
+ options.reverse_merge!(
12
+ { :download_category_actions => [:index, :show],
13
+ :download_actions => [:index, :show],
14
+ :add_download_member_action => false
15
+ }
16
+ )
17
+
18
+ router.resources :ecm_downloads_download_categories, :only => options[:download_category_actions], :controller => 'ecm/downloads/download_categories'
19
+ router.resources :ecm_downloads_downloads, :only => options[:download_actions], :controller => 'ecm/downloads/downloads' do
20
+ router.get :download, :on => :member, :if => options[:add_download_member_action]
21
+ end # router.resources :ecm_downloads_downloads
22
+ end # def
23
+ end # class Routing
24
+ end # module Downloads
25
+ end # module Ecm
26
+
@@ -0,0 +1,6 @@
1
+ module Ecm
2
+ module Downloads
3
+ VERSION = "1.0.0"
4
+ end
5
+ end
6
+
@@ -0,0 +1,20 @@
1
+ require 'active_admin-acts_as_list'
2
+ require 'active_admin-awesome_nested_set'
3
+ require 'acts_as_list'
4
+ require 'acts_as_published'
5
+ require 'awesome_nested_set'
6
+ require 'awesome_nested_set-tools'
7
+ require 'friendly_id'
8
+ require 'paperclip'
9
+ require 'draper'
10
+
11
+ require 'ecm/downloads/engine'
12
+ require 'ecm/downloads/configuration'
13
+ require 'ecm/downloads/routing'
14
+
15
+ module Ecm
16
+ module Downloads
17
+ extend Configuration
18
+ end
19
+ end
20
+
@@ -0,0 +1,16 @@
1
+ module Ecm
2
+ module Downloads
3
+ module Generators
4
+ class InstallGenerator < Rails::Generators::Base
5
+ desc "Generates the intializer"
6
+
7
+ source_root File.expand_path('../templates', __FILE__)
8
+
9
+ def generate_intializer
10
+ copy_file "ecm_downloads.rb", "config/initializers/ecm_downloads.rb"
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+
@@ -0,0 +1,15 @@
1
+ Ecm::Downloads.configure do |config|
2
+ # Paperclip options
3
+ #
4
+ # default: config.paperclip_options = {
5
+ # }
6
+ config.paperclip_options = {
7
+ }
8
+
9
+ # Set the base controller for the contact form
10
+ #
11
+ # Default: config.base_controller = 'ApplicationController'
12
+ #
13
+ config.base_controller = 'ApplicationController'
14
+ end
15
+
@@ -0,0 +1,24 @@
1
+ module Ecm
2
+ module Downloads
3
+ module Generators
4
+ class LocalesGenerator < Rails::Generators::Base
5
+ desc "Copies the locale files to your application"
6
+
7
+ source_root File.expand_path('../../../../../../config/locales', __FILE__)
8
+
9
+ def generate_locales
10
+ copy_file "ecm.downloads.en.yml", "config/locales/ecm.downloads.en.yml"
11
+ copy_file "ecm.downloads.de.yml", "config/locales/ecm.downloads.de.yml"
12
+
13
+ copy_file "ecm.downloads.download_category.en.yml", "config/locales/ecm.downloads.download_category.en.yml"
14
+ copy_file "ecm.downloads.download_category.de.yml", "config/locales/ecm.downloads.download_category.de.yml"
15
+
16
+
17
+ copy_file "ecm.downloads.download.en.yml", "config/locales/ecm.downloads.download.en.yml"
18
+ copy_file "ecm.downloads.download.de.yml", "config/locales/ecm.downloads.download.de.yml"
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+
@@ -0,0 +1,52 @@
1
+ namespace :ecm_downloads do
2
+ namespace :db do
3
+ desc "Purges and creates example data"
4
+ task :populate!, [] => [:environment] do |t, args|
5
+
6
+ Rake::Task["ecm_downloads:db:clear!"].execute
7
+ Rake::Task["ecm_downloads:db:populate"].execute
8
+ end
9
+
10
+ desc "Clears all data!"
11
+ task :clear!, [] => [:environment] do |t, args|
12
+ Ecm::Downloads::DownloadCategory.delete_all
13
+ Ecm::Downloads::Download.delete_all
14
+ end
15
+
16
+ desc "Creates example_data"
17
+ task :populate, [] => [:environment] do |t, args|
18
+ require "ffaker"
19
+ require "forgery"
20
+
21
+ # Create example download category roots
22
+ 10.times do
23
+ Ecm::Downloads::DownloadCategory.create! do |dc|
24
+ dc.locale = I18n.available_locales.choice.to_s
25
+ dc.name = Faker::Product.brand
26
+ dc.description = Faker::Lorem.paragraph(rand(10))
27
+ end
28
+ end
29
+
30
+ # Create example download sub-categories
31
+ 10.times do
32
+ Ecm::Downloads::DownloadCategory.create! do |dc|
33
+ dc.parent = Ecm::Downloads::DownloadCategory.all.choice
34
+ dc.name = Faker::Product.brand
35
+ dc.description = Faker::Lorem.paragraph(rand(10))
36
+ end
37
+ end
38
+
39
+ # Create example downloads
40
+ download_categories = Ecm::Downloads::DownloadCategory.all
41
+ 100.times do
42
+ Ecm::Downloads::Download.create! do |d|
43
+ d.ecm_downloads_download_category = download_categories.choice
44
+ d.name = Faker::Product.product_name
45
+ d.asset = File.open(Ecm::Downloads::Engine.root + "spec/fixtures/download/example.txt")
46
+ d.published = [true, false].choice
47
+ d.description = Faker::Lorem.paragraph(rand(10))
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end