refinerycms-videojs 0.5.5

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 (45) hide show
  1. data/app/assets/images/refinery/admin/add_video_icon.png +0 -0
  2. data/app/assets/javascripts/refinery/admin/wymeditor_monkeypatch.js +13 -0
  3. data/app/assets/stylesheets/refinery/admin/video.css +95 -0
  4. data/app/controllers/refinery/videos/admin/video_files_controller.rb +16 -0
  5. data/app/controllers/refinery/videos/admin/videos_controller.rb +59 -0
  6. data/app/models/refinery/videos/video.rb +119 -0
  7. data/app/models/refinery/videos/video_file.rb +63 -0
  8. data/app/views/refinery/admin/dashboard/_additional_dashboard_menu_items.html.erb +4 -0
  9. data/app/views/refinery/videos/admin/videos/_actions.html.erb +23 -0
  10. data/app/views/refinery/videos/admin/videos/_embed_video_fields.html.erb +45 -0
  11. data/app/views/refinery/videos/admin/videos/_file_fields.html.erb +94 -0
  12. data/app/views/refinery/videos/admin/videos/_form.html.erb +44 -0
  13. data/app/views/refinery/videos/admin/videos/_form_option_fields.html.erb +17 -0
  14. data/app/views/refinery/videos/admin/videos/_new_file_field.html.erb +75 -0
  15. data/app/views/refinery/videos/admin/videos/_preview_form.html.erb +16 -0
  16. data/app/views/refinery/videos/admin/videos/_records.html.erb +18 -0
  17. data/app/views/refinery/videos/admin/videos/_sortable_list.html.erb +5 -0
  18. data/app/views/refinery/videos/admin/videos/_video.html.erb +23 -0
  19. data/app/views/refinery/videos/admin/videos/_videojs_dependencies.html.erb +2 -0
  20. data/app/views/refinery/videos/admin/videos/_videos.html.erb +2 -0
  21. data/app/views/refinery/videos/admin/videos/append_to_wym.js.erb +4 -0
  22. data/app/views/refinery/videos/admin/videos/dialog_preview.js.erb +2 -0
  23. data/app/views/refinery/videos/admin/videos/edit.html.erb +1 -0
  24. data/app/views/refinery/videos/admin/videos/index.html.erb +7 -0
  25. data/app/views/refinery/videos/admin/videos/insert.html.erb +34 -0
  26. data/app/views/refinery/videos/admin/videos/new.html.erb +3 -0
  27. data/app/views/refinery/videos/admin/videos/show.html.erb +4 -0
  28. data/app/views/sitemap/index.xml.builder +25 -0
  29. data/config/initializers/refinery/core.rb +11 -0
  30. data/config/locales/en.yml +76 -0
  31. data/config/locales/ru.yml +77 -0
  32. data/config/routes.rb +24 -0
  33. data/db/migrate/1_create_videos_videos.rb +29 -0
  34. data/db/migrate/2_create_video_file.rb +25 -0
  35. data/lib/generators/refinery/videos/templates/assets/javascripts/videojs_loader.js +7 -0
  36. data/lib/generators/refinery/videos/templates/config/initializers/refinery/videos.rb.erb +20 -0
  37. data/lib/generators/refinery/videos_generator.rb +18 -0
  38. data/lib/refinery/videos/configuration.rb +42 -0
  39. data/lib/refinery/videos/dragonfly.rb +53 -0
  40. data/lib/refinery/videos/engine.rb +32 -0
  41. data/lib/refinery/videos/validators/file_size_validator.rb +19 -0
  42. data/lib/refinery/videos/validators.rb +7 -0
  43. data/lib/refinery/videos.rb +28 -0
  44. data/lib/refinerycms-videojs.rb +1 -0
  45. metadata +138 -0
@@ -0,0 +1,16 @@
1
+ <%= render "videojs_dependencies" unless @embedded%>
2
+ <%= form_for @video, url: refinery.videos_admin_video_append_to_wym_path(@video.id), :remote => true, :method => :post do |f| %>
3
+ <div class='dimensions'>
4
+ <div class='field'>
5
+ <%= f.label t('.width') %>
6
+ <%= f.text_field :width %>
7
+ </div>
8
+ <div class='field'>
9
+ <%= f.label t('.height') %>
10
+ <%= f.text_field :height %>
11
+ </div>
12
+ </div>
13
+ <div class="options">
14
+ <%= render('form_option_fields', :f => f) unless @embedded %>
15
+ </div>
16
+ <% end %>
@@ -0,0 +1,18 @@
1
+ <% if searching? %>
2
+ <h2><%= t('results_for', :scope => 'refinery.admin.search', :query => params[:search]) %></h2>
3
+ <% end %>
4
+ <div class='pagination_container'>
5
+ <% if @videos.any? %>
6
+ <%= render 'videos' %>
7
+ <% else %>
8
+ <p>
9
+ <% unless searching? %>
10
+ <strong>
11
+ <%= t('.no_items_yet') %>
12
+ </strong>
13
+ <% else %>
14
+ <%= t('no_results', :scope => 'refinery.admin.search') %>
15
+ <% end %>
16
+ </p>
17
+ <% end %>
18
+ </div>
@@ -0,0 +1,5 @@
1
+ <ul id='sortable_list'>
2
+ <%= render :partial => 'video', :collection => @videos %>
3
+ </ul>
4
+ <%= render '/refinery/admin/sortable_list',
5
+ :continue_reordering => (local_assigns.keys.include?(:continue_reordering)) ? continue_reordering : true %>
@@ -0,0 +1,23 @@
1
+ <li style="min-height: 35px" class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= dom_id(video) -%>">
2
+ <span class='title'>
3
+ <%= video.title %>
4
+ <span class='short_info'>(
5
+ <% video.short_info.each do |info| %>
6
+ <%= "#{t(info[0])}: #{info[1]}" %>
7
+ <% end %>)</span>
8
+ </span>
9
+ <% unless action_name =~ /insert/ %>
10
+ <span class='actions'>
11
+ <%= link_to refinery_icon_tag('eye.png'), refinery.videos_admin_video_path(video, :dialog => true),
12
+ :title => t('.view_live_html'),
13
+ :target => "_blank" %>
14
+ <%= link_to refinery_icon_tag("application_edit.png"), refinery.edit_videos_admin_video_path(video),
15
+ :title => t('.edit') %>
16
+ <%= link_to refinery_icon_tag("delete.png"), refinery.videos_admin_video_path(video),
17
+ :class => "cancel confirm-delete",
18
+ :title => t('.delete'),
19
+ :confirm => t('message', :scope => 'refinery.admin.delete', :title => video.title),
20
+ :method => :delete %>
21
+ </span>
22
+ <% end %>
23
+ </li>
@@ -0,0 +1,2 @@
1
+ <link href="http://vjs.zencdn.net/c/video-js.css" rel="stylesheet">
2
+ <script src="http://vjs.zencdn.net/c/video.js"></script>
@@ -0,0 +1,2 @@
1
+ <%= will_paginate @videos %>
2
+ <%= render 'sortable_list' %>
@@ -0,0 +1,4 @@
1
+ wym = parent.$.wymeditors(0);
2
+ wym.html(wym.html() + '<%= escape_javascript(@html_for_wym) %>');
3
+ wym.update();
4
+ close_dialog();
@@ -0,0 +1,2 @@
1
+ $('#dialog_preview').html('<%= escape_javascript(@preview_html) %>');
2
+ $('#preview_form').html('<%= escape_javascript(render("preview_form")) %>');
@@ -0,0 +1 @@
1
+ <%= render 'form' %>
@@ -0,0 +1,7 @@
1
+ <section id='records'>
2
+ <%= render 'records' %>
3
+ </section>
4
+ <aside id='actions'>
5
+ <%= render 'actions' %>
6
+ </aside>
7
+ <%= render '/refinery/admin/make_sortable', :tree => false if !searching? and ::Refinery::Videos::Admin::VideosController.sortable? and ::Refinery::Videos::Video.count > 1 %>
@@ -0,0 +1,34 @@
1
+ <div id='dialog_list'>
2
+ <%= render '/refinery/admin/search', :url => refinery.insert_videos_admin_videos_path %>
3
+ <div id='records'>
4
+ <%= render 'videos' %>
5
+ </div>
6
+ <%= render '/refinery/admin/form_actions', :f => nil,
7
+ :cancel_url => '',
8
+ :hide_delete => true,
9
+ :submit_button_text => t('.insert'),
10
+ :cancel_button_text => t('cancel', :scope => 'refinery.admin.form_actions'),
11
+ :cancel_title => nil %>
12
+ </div>
13
+
14
+ <div id='dialog_preview'></div>
15
+ <div id="preview_form"></div>
16
+
17
+ <script type="text/javascript">
18
+ $(function(){
19
+ $('#submit_button').on('click', function(){
20
+ $('#preview_form form').submit();
21
+ })
22
+ });
23
+
24
+ $(function(){
25
+ $videos = $('#sortable_list li');
26
+ $videos.attr('style', 'cursor:pointer');
27
+ $videos.on('click', function(){
28
+ $videos.removeClass('selected');
29
+ $(this).addClass('selected');
30
+ var id = $(this).attr('id');
31
+ $.get('<%= refinery.dialog_preview_videos_admin_videos_path %>', {'id' : id}, null, 'script')
32
+ })
33
+ })
34
+ </script>
@@ -0,0 +1,3 @@
1
+ <%= link_to t('.use_files'), refinery.new_videos_admin_video_path, :class => 'select_video_type' << (@embedded ? '' : ' selected') %>
2
+ <%= link_to t('.use_embedded_video'), refinery.new_videos_admin_video_path(:embedded => true), :class => 'select_video_type' << (@embedded ? ' selected' : '') %>
3
+ <%= render 'form' %>
@@ -0,0 +1,4 @@
1
+ <%= render "videojs_dependencies" %>
2
+ <div class="video_container">
3
+ <%= @video.to_html %>
4
+ </div>
@@ -0,0 +1,25 @@
1
+ xml.instruct!
2
+
3
+ xml.urlset "xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9" do
4
+
5
+ @locales.each do |locale|
6
+ ::I18n.locale = locale
7
+ ::Refinery::Page.live.in_menu.includes(:parts).each do |page|
8
+ # exclude sites that are external to our own domain.
9
+ page_url = if page.url.is_a?(Hash)
10
+ # This is how most pages work without being overriden by link_url
11
+ page.url.merge({:only_path => false})
12
+ elsif page.url.to_s !~ /^http/
13
+ # handle relative link_url addresses.
14
+ [request.protocol, request.host_with_port, page.url].join
15
+ end
16
+
17
+ # Add XML entry only if there is a valid page_url found above.
18
+ xml.url do
19
+ xml.loc url_for(page_url)
20
+ xml.lastmod page.updated_at.to_date
21
+ end if page_url.present? and page.show_in_menu?
22
+ end
23
+ end
24
+
25
+ end
@@ -0,0 +1,11 @@
1
+ Refinery::Core.configure do |config|
2
+
3
+ # Add extra tags to the wymeditor whitelist e.g. = {'tag' => {'attributes' => {'1' => 'href'}}} or just {'tag' => {}}
4
+ config.wymeditor_whitelist_tags = {'video' => {'attributes' => {'1' => 'poster', '2' => 'width', '3' => 'height', '4' => 'source', '5' => 'controls'} },
5
+ 'source' => {'attributes' => {'1' => 'src', '2' => 'type'}}}
6
+ # Register extra javascript for backend
7
+ config.register_javascript "refinery/admin/wymeditor_monkeypatch.js"
8
+
9
+ #Register extra stylesheet for backend (optional options)
10
+ config.register_stylesheet "refinery/admin/video.css"
11
+ end
@@ -0,0 +1,76 @@
1
+ en:
2
+ refinery:
3
+ admin:
4
+ dashboard:
5
+ additional_dashboard_menu_items:
6
+ create_new: Add New Video
7
+ plugins:
8
+ videos:
9
+ title: Videos
10
+ videos:
11
+ admin:
12
+ videos:
13
+ actions:
14
+ create_new: Add New Video
15
+ reorder: Reorder Videos
16
+ reorder_done: Done Reordering Videos
17
+ records:
18
+ title: Videos
19
+ sorry_no_results: Sorry! There are no results found.
20
+ no_items_yet: There are no Videos yet. Click "Add New Video" to add your first video.
21
+ video:
22
+ view_live_html: View this video live <br/><em>(opens in a new window)</em>
23
+ edit: Edit this video
24
+ delete: Remove this video forever
25
+ file: File
26
+ link: Link
27
+ shared_source: Embedded
28
+ new:
29
+ use_files: Use files
30
+ use_embedded_video: Use embedded video
31
+ form:
32
+ title: Title
33
+ poster: Poster
34
+ width: Width
35
+ height: Height
36
+ file_fields:
37
+ files: Files
38
+ file_tip: Add files (or links to files) of 'mp4', 'webm', 'flv', 'ogg' types for full browser compability
39
+ use_file: Use file
40
+ use_external_source: Use external source
41
+ add_file: Add file
42
+ add_source: Add source
43
+ delete_source: Delete source
44
+ link_to_source: Link to source
45
+ download_current: Use current video
46
+ or: or
47
+ replace: replace with this one
48
+ maximum_file_size: "Maximum file size: %{bytes}"
49
+ new_file_field:
50
+ use_file: Use file
51
+ use_external_source: Use external source
52
+ add_file: Add file
53
+ add_source: Add source
54
+ delete_source: Delete source
55
+ embed_video_fields:
56
+ copy_embed_tag_here: Copy HTML here
57
+ form_option_fields:
58
+ options: Options
59
+ autoplay: Autoplay
60
+ show_ontrols: Show controls
61
+ preload_video: Preload video
62
+ loop_video: Loop video
63
+ insert:
64
+ insert: Insert
65
+ preview_form:
66
+ width: Width
67
+ height: Height
68
+ videos:
69
+ show:
70
+ other: Other Videos
71
+ activerecord:
72
+ attributes:
73
+ 'refinery/videos/video':
74
+ file_name: File Name
75
+ file_size: File Size
76
+ file_ext: File Ext
@@ -0,0 +1,77 @@
1
+ ru:
2
+ refinery:
3
+ admin:
4
+ dashboard:
5
+ additional_dashboard_menu_items:
6
+ create_new: Добавить видео
7
+ plugins:
8
+ videos:
9
+ title: Видео
10
+ videos:
11
+ admin:
12
+ videos:
13
+ actions:
14
+ create_new: Добавить видео
15
+ reorder: Изменить порядок
16
+ reorder_done: Закончить редактирование
17
+ records:
18
+ title: Видео
19
+ sorry_no_results: Извините, ничего не найдено.
20
+ no_items_yet: Видео отсутствуют. Нажмине "Добавить видео"
21
+ video:
22
+ view_live_html: Предварительный просмотр <br/><em>(открывается в новом окне)</em>
23
+ edit: Редактировать видео
24
+ delete: Удалить видео
25
+ file: Файл
26
+ link: Ссылка
27
+ shared_source: Встроенное
28
+ new:
29
+ use_files: Использовать файлы
30
+ use_embedded_video: Ислользовать встроенное видео
31
+ form:
32
+ title: Название
33
+ poster: Постер
34
+ width: Ширина
35
+ height: Высота
36
+ file_fields:
37
+ files: Файлы
38
+ file_tip: "Для полной совместимости, добавтье файлы (или ссылки на файлы) следующих форматов: 'mp4', 'webm', 'flv', 'ogg'"
39
+ use_file: Использовать файл
40
+ use_external_source: Использовать ссылку
41
+ add_file: Добавить файл
42
+ add_source: Добавить источник
43
+ delete_source: Удалить источник
44
+ link_to_source: Ссылка на источник
45
+ download_current: Использовать текущее видео
46
+ or: или
47
+ replace: загрузить новое
48
+ maximum_file_size: "Максимальный размер файла: %{bytes}"
49
+ new_file_field:
50
+ use_file: Использовать файл
51
+ use_external_source: Использовать ссылку
52
+ add_file: Добавить файл
53
+ add_source: Добавить источник
54
+ delete_source: Удалить источник
55
+ embed_video_fields:
56
+ copy_embed_tag_here: Скопируйте HMTL код
57
+ form_option_fields:
58
+ options: Настройки
59
+ autoplay: Автоматическое воспроизведение
60
+ show_ontrols: Панель управления
61
+ preload_video: Загружать автоматически
62
+ loop_video: Повтор
63
+ insert:
64
+ insert: Вставить
65
+ preview_form:
66
+ width: Ширина
67
+ height: Высота
68
+
69
+ videos:
70
+ show:
71
+ other: Другие видео
72
+ activerecord:
73
+ attributes:
74
+ 'refinery/videos/video':
75
+ file_name: Имя файла
76
+ file_size: Размер файла
77
+ file_ext: Расширение файла
data/config/routes.rb ADDED
@@ -0,0 +1,24 @@
1
+ Refinery::Core::Engine.routes.append do
2
+ match '/system/videos/*dragonfly', :to => Dragonfly[:refinery_videos]
3
+
4
+ # Frontend routes
5
+ namespace :videos do
6
+ resources :videos, :path => '', :only => [:index, :show]
7
+ end
8
+
9
+ # Admin routes
10
+ namespace :videos, :path => '' do
11
+ namespace :admin, :path => 'refinery' do
12
+ resources :videos do
13
+ post :append_to_wym
14
+ collection do
15
+ post :update_positions
16
+ get :insert
17
+ get :dialog_preview
18
+ end
19
+ end
20
+ resources :video_files, :only => [:destroy]
21
+ end
22
+ end
23
+
24
+ end
@@ -0,0 +1,29 @@
1
+ class CreateVideosVideos < ActiveRecord::Migration
2
+
3
+ def up
4
+ create_table "refinery_videos", :force => true do |t|
5
+ t.integer "position"
6
+ t.datetime "created_at", :null => false
7
+ t.datetime "updated_at", :null => false
8
+ t.string "config"
9
+ t.string "title"
10
+ t.integer "poster_id"
11
+ t.boolean "use_shared"
12
+ t.text "embed_tag"
13
+ end
14
+ end
15
+
16
+ def down
17
+ if defined?(::Refinery::UserPlugin)
18
+ ::Refinery::UserPlugin.destroy_all({:name => "refinerycms-videos"})
19
+ end
20
+
21
+ if defined?(::Refinery::Page)
22
+ ::Refinery::Page.delete_all({:link_url => "/videos/videos"})
23
+ end
24
+
25
+ drop_table :refinery_videos
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,25 @@
1
+ class CreateVideoFile < ActiveRecord::Migration
2
+
3
+ def up
4
+ create_table "refinery_video_files", :force => true do |t|
5
+ t.string "file_name"
6
+ t.integer "file_size"
7
+ t.string "file_ext"
8
+ t.string "file_uid"
9
+ t.string "file_mime_type"
10
+ t.integer "video_id"
11
+ t.datetime "created_at", :null => false
12
+ t.datetime "updated_at", :null => false
13
+ t.string "external_url"
14
+ t.boolean "use_external"
15
+ end
16
+
17
+ end
18
+
19
+ def down
20
+
21
+ drop_table :refinery_videos
22
+
23
+ end
24
+
25
+ end
@@ -0,0 +1,7 @@
1
+ window.onload = function ()
2
+ {
3
+ if ($('video').is('*')) {
4
+ $('body').append('<link href="http://vjs.zencdn.net/c/video-js.css" rel="stylesheet">')
5
+ $('body').append('<script src="http://vjs.zencdn.net/c/video.js"></script>')
6
+ }
7
+ };
@@ -0,0 +1,20 @@
1
+ Refinery::Videos.configure do |config|
2
+ #Configures the maximum allowed upload size (in bytes) for an video file
3
+ #config.max_file_size = <%= Refinery::Videos.max_file_size %>
4
+
5
+ # Configure how many videos per page should be displayed in the list of images in the admin area
6
+ #config.pages_per_admin_index = <%= Refinery::Videos.pages_per_admin_index %>
7
+
8
+ # Configure white-listed mime types for validation
9
+ #config.whitelisted_mime_types = <%= Refinery::Videos.whitelisted_mime_types %>
10
+
11
+ # Configure Dragonfly
12
+ # This is where in the middleware stack to insert the Dragonfly middleware
13
+ # config.dragonfly_insert_before = <%= Refinery::Videos.dragonfly_insert_before %>
14
+ # config.dragonfly_secret = <%= Refinery::Videos.dragonfly_secret %>
15
+ # If you decide to trust file extensions replace :ext below with :format
16
+ # config.dragonfly_url_format = <%= Refinery::Videos.dragonfly_url_format %>
17
+ # config.datastore_root_path = <%= Refinery::Videos.datastore_root_path %>
18
+ # config.trust_file_extensions = <%= Refinery::Videos.trust_file_extensions %>
19
+
20
+ end
@@ -0,0 +1,18 @@
1
+ module Refinery
2
+ class VideosGenerator < Rails::Generators::Base
3
+ source_root File.expand_path('../videos/templates', __FILE__)
4
+
5
+ def rake_db
6
+ rake("refinery_videos:install:migrations")
7
+ end
8
+
9
+ def generate_videos_initializer
10
+ template "config/initializers/refinery/videos.rb.erb", File.join(destination_root, "config", "initializers", "refinery", "videos.rb")
11
+ end
12
+
13
+ def generate_videojs_loader
14
+ template "assets/javascripts/videojs_loader.js", File.join(destination_root, "app", "assets", "javascripts", "videojs_loader.js")
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,42 @@
1
+ module Refinery
2
+ module Videos
3
+ include ActiveSupport::Configurable
4
+
5
+ config_accessor :dragonfly_insert_before, :dragonfly_secret, :dragonfly_url_format,
6
+ :max_file_size, :pages_per_dialog, :pages_per_admin_index,
7
+ :s3_backend, :s3_bucket_name, :s3_region,
8
+ :s3_access_key_id, :s3_secret_access_key,
9
+ :datastore_root_path, :trust_file_extensions, :whitelisted_mime_types
10
+
11
+ self.dragonfly_insert_before = 'ActionDispatch::Callbacks'
12
+ self.dragonfly_secret = Refinery::Core.dragonfly_secret
13
+ self.dragonfly_url_format = '/system/videos/:job/:basename.:format'
14
+ self.trust_file_extensions = false
15
+ self.max_file_size = 524288000
16
+ self.pages_per_dialog = 7
17
+ self.pages_per_admin_index = 20
18
+ self.whitelisted_mime_types = %w(video/mp4 video/x-flv application/ogg video/webm video/flv video/ogg)
19
+
20
+ class << self
21
+ def datastore_root_path
22
+ config.datastore_root_path || (Rails.root.join('public', 'system', 'refinery', 'videos').to_s if Rails.root)
23
+ end
24
+
25
+ def s3_backend
26
+ config.s3_backend.nil? ? Refinery::Core.s3_backend : config.s3_backend
27
+ end
28
+
29
+ def s3_bucket_name
30
+ config.s3_bucket_name.nil? ? Refinery::Core.s3_bucket_name : config.s3_bucket_name
31
+ end
32
+
33
+ def s3_access_key_id
34
+ config.s3_access_key_id.nil? ? Refinery::Core.s3_access_key_id : config.s3_access_key_id
35
+ end
36
+
37
+ def s3_secret_access_key
38
+ config.s3_secret_access_key.nil? ? Refinery::Core.s3_secret_access_key : config.s3_secret_access_key
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,53 @@
1
+ require 'dragonfly'
2
+
3
+ module Refinery
4
+ module Videos
5
+ module Dragonfly
6
+
7
+ class << self
8
+ def setup!
9
+ app_videos = ::Dragonfly[:refinery_videos]
10
+
11
+ app_videos.define_macro(::Refinery::Videos::VideoFile, :video_accessor)
12
+
13
+ app_videos.analyser.register(::Dragonfly::Analysis::FileCommandAnalyser)
14
+ app_videos.content_disposition = :attachment
15
+ end
16
+
17
+ def configure!
18
+ app_videos = ::Dragonfly[:refinery_videos]
19
+ app_videos.configure_with(:rails) do |c|
20
+ #c.datastore = ::Dragonfly::DataStorage::MongoDataStore.new(:db => MongoMapper.database)
21
+ c.datastore.root_path = Refinery::Videos.datastore_root_path
22
+ c.url_format = Refinery::Videos.dragonfly_url_format
23
+ c.secret = Refinery::Videos.dragonfly_secret
24
+ end
25
+
26
+ if ::Refinery::Videos.s3_backend
27
+ app_videos.datastore = ::Dragonfly::DataStorage::S3DataStore.new
28
+ app_videos.datastore.configure do |s3|
29
+ s3.bucket_name = Refinery::Videos.s3_bucket_name
30
+ s3.access_key_id = Refinery::Videos.s3_access_key_id
31
+ s3.secret_access_key = Refinery::Videos.s3_secret_access_key
32
+ # S3 Region otherwise defaults to 'us-east-1'
33
+ s3.region = Refinery::Videos.s3_region if Refinery::Videos.s3_region
34
+ end
35
+ end
36
+ end
37
+
38
+ def attach!(app)
39
+ ### Extend active record ###
40
+ app.config.middleware.insert_before Refinery::Videos.dragonfly_insert_before,
41
+ 'Dragonfly::Middleware', :refinery_videos
42
+
43
+ app.config.middleware.insert_before 'Dragonfly::Middleware', 'Rack::Cache', {
44
+ :verbose => Rails.env.development?,
45
+ :metastore => "file:#{URI.encode(Rails.root.join('tmp', 'dragonfly', 'cache', 'meta').to_s)}",
46
+ :entitystore => "file:#{URI.encode(Rails.root.join('tmp', 'dragonfly', 'cache', 'body').to_s)}"
47
+ }
48
+ end
49
+ end
50
+
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,32 @@
1
+ module Refinery
2
+ module Videos
3
+ class Engine < Rails::Engine
4
+ include Refinery::Engine
5
+ isolate_namespace Refinery::Videos
6
+
7
+ engine_name :refinery_videos
8
+
9
+ initializer 'attach-refinery-videos-with-dragonfly', :after => :load_config_initializers do |app|
10
+ ::Refinery::Videos::Dragonfly.configure!
11
+ ::Refinery::Videos::Dragonfly.attach!(app)
12
+ end
13
+
14
+ initializer "register refinerycms_videos plugin" do
15
+ Refinery::Plugin.register do |plugin|
16
+ plugin.name = "videos"
17
+ plugin.url = proc { Refinery::Core::Engine.routes.url_helpers.videos_admin_videos_path }
18
+ plugin.pathname = root
19
+ plugin.activity = {
20
+ :class_name => :'refinery/videos/video',
21
+ :title => 'title'
22
+ }
23
+
24
+ end
25
+ end
26
+
27
+ config.after_initialize do
28
+ Refinery.register_extension(Refinery::Videos)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,19 @@
1
+ module Refinery
2
+ module Videos
3
+ module Validators
4
+ class ImageSizeValidator < ActiveModel::Validator
5
+
6
+ def validate(record)
7
+ file = record.file
8
+
9
+ if file.respond_to?(:length) && file.length > Refinery::Videos.max_image_size
10
+ record.errors[:file] << ::I18n.t('too_big',
11
+ :scope => 'activerecord.errors.models.refinery/image',
12
+ :size => Refinery::Videos.max_image_size)
13
+ end
14
+ end
15
+
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,7 @@
1
+ module Refinery
2
+ module Videos
3
+ module Validators
4
+ autoload :FileSizeValidator, 'refinery/videos/validators/file_size_validator'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,28 @@
1
+ require 'refinerycms-core'
2
+ require 'dragonfly'
3
+ require 'rack/cache'
4
+
5
+
6
+ module Refinery
7
+ autoload :VideosGenerator, 'generators/refinery/videos_generator'
8
+
9
+ module Videos
10
+ require 'refinery/videos/engine'
11
+ require 'refinery/videos/configuration'
12
+ autoload :Dragonfly, 'refinery/videos/dragonfly'
13
+ autoload :Validators, 'refinery/videos/validators'
14
+
15
+ class << self
16
+ attr_writer :root
17
+
18
+ def root
19
+ @root ||= Pathname.new(File.expand_path('../../../', __FILE__))
20
+ end
21
+
22
+ def factory_paths
23
+ @factory_paths ||= [ root.join('spec', 'factories').to_s ]
24
+ end
25
+ end
26
+ end
27
+ end
28
+
@@ -0,0 +1 @@
1
+ require 'refinery/videos'