ds_media_library 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.DS_Store +0 -0
- data/.gitignore +1 -0
- data/README.md +1 -1
- data/app/assets/javascripts/ds_media_library.coffee +66 -16
- data/app/assets/stylesheets/_breadcrumb-nav.sass +25 -0
- data/app/assets/stylesheets/_help-text.sass +5 -0
- data/app/assets/stylesheets/_media-tree.sass +194 -0
- data/app/assets/stylesheets/_modal.sass +65 -0
- data/app/assets/stylesheets/_placeholders.sass +43 -0
- data/app/assets/stylesheets/_preview-media.sass +88 -0
- data/app/assets/stylesheets/ds_media_library.sass +139 -0
- data/app/assets/stylesheets/mixins/_buttons.sass +57 -0
- data/app/assets/stylesheets/mixins/_icons.sass +36 -0
- data/app/assets/stylesheets/mixins/_notification-text.sass +23 -0
- data/app/controllers/ds_media_library/folders_controller.rb +7 -2
- data/app/controllers/ds_media_library/resources_controller.rb +3 -2
- data/{lib → app/helpers}/ds_media_library/form_helper.rb +24 -17
- data/app/views/ds_media_library/form_helper/_folder.html.slim +10 -0
- data/app/views/ds_media_library/form_helper/_media_library_helper.html.slim +46 -0
- data/app/views/ds_media_library/form_helper/_resource.html.slim +6 -0
- data/app/views/ds_media_library/form_helper/show.html.slim +10 -0
- data/app/views/{shared → ds_media_library/manage}/_submit.html.slim +0 -0
- data/app/views/ds_media_library/manage/folders/_folder.html.slim +14 -0
- data/app/views/ds_media_library/{resources/folder_form.html.slim → manage/folders/form.html.slim} +4 -4
- data/app/views/ds_media_library/manage/index.html.slim +30 -0
- data/app/views/{shared → ds_media_library/manage/resources}/_image_preview.html.slim +2 -2
- data/app/views/ds_media_library/manage/resources/_resource.html.slim +12 -0
- data/app/views/ds_media_library/{resources → manage/resources}/form.html.slim +3 -3
- data/bin/server +1 -1
- data/bin/setup +1 -2
- data/ds_media_library.gemspec +1 -0
- data/dummy/app.rb +1 -48
- data/dummy/config.rb +55 -0
- data/dummy/database.rb +6 -0
- data/dummy/views.rb +14 -65
- data/lib/ds_media_library/engine.rb +4 -2
- data/lib/ds_media_library/version.rb +1 -1
- data/lib/ds_media_library.rb +0 -1
- metadata +40 -15
- data/app/assets/javascripts/toggle_all_checkboxes.coffee +0 -6
- data/app/views/ds_media_library/_folder.html.slim +0 -11
- data/app/views/ds_media_library/_form_helper.html.slim +0 -30
- data/app/views/ds_media_library/_image_preview.html.slim +0 -17
- data/app/views/ds_media_library/_resource.html.slim +0 -27
- data/app/views/ds_media_library/resources/_folder.html.slim +0 -14
- data/app/views/ds_media_library/resources/_resource.html.slim +0 -12
- data/app/views/ds_media_library/resources/index.html.slim +0 -28
@@ -0,0 +1,57 @@
|
|
1
|
+
=dsml-button( $bg: $primaryColor, $text-color: #fcfcfc, $font-size: 1.2em, $hover: true, $fa: false )
|
2
|
+
display: inline-block
|
3
|
+
font-size: $font-size
|
4
|
+
font-weight: 700
|
5
|
+
line-height: 3.0em
|
6
|
+
color: $text-color
|
7
|
+
border: 1px solid darken( $bg, 6% )
|
8
|
+
background-color: $bg
|
9
|
+
background: linear-gradient( $bg, darken( $bg, 5% ) )
|
10
|
+
border-radius: 2px
|
11
|
+
padding: 0 15px
|
12
|
+
cursor: pointer
|
13
|
+
text-align: center
|
14
|
+
text-decoration: none
|
15
|
+
margin: 0px
|
16
|
+
cursor: default
|
17
|
+
text-transform: uppercase
|
18
|
+
@if $hover
|
19
|
+
cursor: pointer
|
20
|
+
&:hover
|
21
|
+
background: darken( $bg, 4% )
|
22
|
+
box-shadow: darken( $bg, 10% ) 0 0 5px 0 inset
|
23
|
+
color: lighten( $text-color, 6% )
|
24
|
+
@if $fa
|
25
|
+
@extend .fa-#{$fa}
|
26
|
+
&:before
|
27
|
+
@extend .fa
|
28
|
+
margin-right: 10px
|
29
|
+
|
30
|
+
// input wrapper buttons
|
31
|
+
|
32
|
+
=dsml-input-button($bg: $primaryColor, $text-color: #fcfcfc, $fa: false, $size: 1.2em, $fa-size: 1.2em)
|
33
|
+
+dsml-button($bg, $text-color)
|
34
|
+
padding: 0
|
35
|
+
line-height: 1
|
36
|
+
input, button
|
37
|
+
font-size: $size
|
38
|
+
border: none
|
39
|
+
background: none
|
40
|
+
padding: 0 20px
|
41
|
+
line-height: 3.0em
|
42
|
+
cursor: pointer
|
43
|
+
color: $text-color
|
44
|
+
font-weight: 700
|
45
|
+
text-transform: uppercase
|
46
|
+
@if $fa
|
47
|
+
@extend .fa
|
48
|
+
@extend .fa-#{$fa}
|
49
|
+
input, button
|
50
|
+
padding-left: 45px
|
51
|
+
&:before
|
52
|
+
@extend .fa
|
53
|
+
position: absolute
|
54
|
+
top: 50%
|
55
|
+
margin-top: -0.5em
|
56
|
+
left: 20px
|
57
|
+
font-size: $fa-size
|
@@ -0,0 +1,36 @@
|
|
1
|
+
// Icons with hidden text
|
2
|
+
|
3
|
+
=dsml-icon($fa, $size: 1.4em)
|
4
|
+
display: inline-block
|
5
|
+
margin: 0 6px
|
6
|
+
text-align: left
|
7
|
+
position: relative
|
8
|
+
font-size: $size
|
9
|
+
width: 1em
|
10
|
+
text-indent: -9999px
|
11
|
+
color: #4f4f4f
|
12
|
+
@extend .fa
|
13
|
+
@extend .fa-#{$fa}
|
14
|
+
&:before
|
15
|
+
text-indent: 0
|
16
|
+
position: absolute
|
17
|
+
top: 50%
|
18
|
+
right: 50%
|
19
|
+
margin: -0.5em -0.5em 0 0
|
20
|
+
z-index: 2
|
21
|
+
&:hover
|
22
|
+
&:before
|
23
|
+
color: $primaryColor
|
24
|
+
|
25
|
+
|
26
|
+
// Icons with text
|
27
|
+
|
28
|
+
=dsml-icon_text($fa, $font-size: 1.3em)
|
29
|
+
display: inline-block
|
30
|
+
margin: 0 20px 0 0
|
31
|
+
@extend .fa-#{$fa}
|
32
|
+
font-size: $font-size
|
33
|
+
&:before
|
34
|
+
margin-right: 4px
|
35
|
+
@extend .fa
|
36
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
=notification-text( $color, $fa )
|
2
|
+
margin: 10px 0
|
3
|
+
position: relative
|
4
|
+
clear: both
|
5
|
+
padding: 10px 10px 10px 40px
|
6
|
+
border: 1px dashed $color
|
7
|
+
color: $color
|
8
|
+
font-size: 1.3em
|
9
|
+
font-style: italic
|
10
|
+
line-height: 1.4em
|
11
|
+
border-radius: 2px
|
12
|
+
@extend .fa-#{$fa}
|
13
|
+
&:before
|
14
|
+
@extend .fa
|
15
|
+
font-size: 1.8em
|
16
|
+
position: absolute
|
17
|
+
left: 10px
|
18
|
+
top: 50%
|
19
|
+
margin-top: -0.5em
|
20
|
+
ul
|
21
|
+
font-size: 1em
|
22
|
+
list-style: inside circle
|
23
|
+
|
@@ -2,9 +2,14 @@ module DSMediaLibrary
|
|
2
2
|
class FoldersController < ApplicationController
|
3
3
|
expose :folder
|
4
4
|
|
5
|
+
def index
|
6
|
+
helper = FormHelper::MediaLibrary.from_params(params)
|
7
|
+
render "ds_media_library/form_helper/show", locals: { helper: helper}, layout: false
|
8
|
+
end
|
9
|
+
|
5
10
|
def new
|
6
11
|
@folder = DSMediaLibrary::Folder.new
|
7
|
-
render "ds_media_library/
|
12
|
+
render "ds_media_library/manage/folders/form"
|
8
13
|
end
|
9
14
|
|
10
15
|
def create
|
@@ -14,7 +19,7 @@ module DSMediaLibrary
|
|
14
19
|
|
15
20
|
def edit
|
16
21
|
@folder = DSMediaLibrary::Folder.find(params[:id])
|
17
|
-
render "ds_media_library/
|
22
|
+
render "ds_media_library/manage/folders/form"
|
18
23
|
end
|
19
24
|
|
20
25
|
def update
|
@@ -5,11 +5,12 @@ module DSMediaLibrary
|
|
5
5
|
def index
|
6
6
|
@root = DSMediaLibrary::Folder.root
|
7
7
|
@folders = folders_with_children
|
8
|
+
render "ds_media_library/manage/index"
|
8
9
|
end
|
9
10
|
|
10
11
|
def new
|
11
12
|
@resource = DSNode::Resource.new
|
12
|
-
render
|
13
|
+
render "ds_media_library/manage/resources/form"
|
13
14
|
end
|
14
15
|
|
15
16
|
def create
|
@@ -20,7 +21,7 @@ module DSMediaLibrary
|
|
20
21
|
end
|
21
22
|
|
22
23
|
def edit
|
23
|
-
render
|
24
|
+
render "ds_media_library/manage/resources/form"
|
24
25
|
end
|
25
26
|
|
26
27
|
def update
|
@@ -3,13 +3,28 @@ require "active_support/number_helper"
|
|
3
3
|
module DSMediaLibrary
|
4
4
|
module FormHelper
|
5
5
|
def media_library field, label: field.to_s.humanize, multiple: false, optional: false, dimensions: nil, helptext: nil, preview: true, required: false, &block
|
6
|
-
|
7
|
-
|
6
|
+
selected_ids = Array(object.send(field)).map(&:id)
|
7
|
+
helper = MediaLibrary.new(selected_ids, field, label, multiple, optional, dimensions, helptext, preview, required)
|
8
|
+
@template.render "ds_media_library/form_helper/media_library_helper", form: self, helper: helper, &block
|
8
9
|
end
|
9
10
|
|
10
|
-
class MediaLibrary < Struct.new(:
|
11
|
-
def
|
12
|
-
|
11
|
+
class MediaLibrary < Struct.new(:ids, :field, :label, :multiple, :optional, :dimensions, :helptext, :preview, :required)
|
12
|
+
def self.from_params params
|
13
|
+
new(
|
14
|
+
Array(params[:ids] || []).map(&:to_i),
|
15
|
+
params[:field],
|
16
|
+
params[:label],
|
17
|
+
params[:multiple] == "true",
|
18
|
+
params[:optional] == "true",
|
19
|
+
params[:dimensions],
|
20
|
+
params[:helptext],
|
21
|
+
params[:preview] == "true",
|
22
|
+
params[:required] == "true",
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
def selected_resources
|
27
|
+
DSNode::Resource.find(ids)
|
13
28
|
end
|
14
29
|
|
15
30
|
def single_field
|
@@ -24,14 +39,6 @@ module DSMediaLibrary
|
|
24
39
|
end
|
25
40
|
end
|
26
41
|
|
27
|
-
def remove_field_name
|
28
|
-
if multiple
|
29
|
-
:"remove_#{single_field}_ids"
|
30
|
-
else
|
31
|
-
:"remove_#{field}"
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
42
|
def field_id_name
|
36
43
|
if multiple
|
37
44
|
:"#{single_field}_ids"
|
@@ -40,6 +47,10 @@ module DSMediaLibrary
|
|
40
47
|
end
|
41
48
|
end
|
42
49
|
|
50
|
+
def field_type
|
51
|
+
multiple ? "checkbox" : "radio"
|
52
|
+
end
|
53
|
+
|
43
54
|
def html_id
|
44
55
|
"media-modal-#{field}"
|
45
56
|
end
|
@@ -72,10 +83,6 @@ module DSMediaLibrary
|
|
72
83
|
root.resources
|
73
84
|
end
|
74
85
|
|
75
|
-
def original_file_name
|
76
|
-
object.original_file_name if object.present?
|
77
|
-
end
|
78
|
-
|
79
86
|
private
|
80
87
|
|
81
88
|
def number_with_delimiter number
|
@@ -0,0 +1,10 @@
|
|
1
|
+
li
|
2
|
+
input.dsml-expand-input type="checkbox" id="#{helper.field}-folder-#{folder.id}"
|
3
|
+
.dsml-media-container
|
4
|
+
label.dsml-expand-label.dsml-folder-link for="#{helper.field}-folder-#{folder.id}" = folder.name
|
5
|
+
|
6
|
+
- if folder.children.any? || folder.resources.any?
|
7
|
+
ul.dsml-media-nest
|
8
|
+
= render collection: folder.children, partial: "ds_media_library/form_helper/folder", as: :folder, locals: { helper: helper }
|
9
|
+
= render collection: folder.resources, partial: "ds_media_library/form_helper/resource", as: :resource, locals: { helper: helper }
|
10
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
.media-library data-media-library=helper.html_id data-media-library-ids=helper.ids required=helper.required
|
2
|
+
= form.label helper.file_field_name, helper.label, class: helper.label_css_class
|
3
|
+
|
4
|
+
- if helper.helptext
|
5
|
+
.ratio-text = helper.helptext
|
6
|
+
|
7
|
+
label.dsml-media-button for=helper.html_id Media library
|
8
|
+
em or
|
9
|
+
= form.file_field helper.file_field_name, multiple: helper.multiple
|
10
|
+
|
11
|
+
input.dsml-modal-input type="checkbox" id=helper.html_id
|
12
|
+
.dsml-modal-wrapper
|
13
|
+
.dsml-modal-bg
|
14
|
+
.dsml-modal-content
|
15
|
+
label.dsml-modal-close for=helper.html_id
|
16
|
+
.borders
|
17
|
+
.media-wrapper data-load-url=ds_media_library.folders_path(helper.to_h)
|
18
|
+
p Loading...
|
19
|
+
- helper.selected_resources.each do |resource|
|
20
|
+
input.hidden name="ds_media_library" type="checkbox" value=resource.id checked=true data=resource.attributes
|
21
|
+
|
22
|
+
dl.dsml-playlist-media id="dsml-selected-media-#{helper.html_id}"
|
23
|
+
|
24
|
+
script#dsml-media-preview-template type="text/x-html-template"
|
25
|
+
dfn.dsml-preview-form
|
26
|
+
.dsml-preview-wrapper
|
27
|
+
- if helper.preview
|
28
|
+
| <{{type}} src="{{url}}" controls=true />
|
29
|
+
|
30
|
+
- if helper.multiple
|
31
|
+
= form.check_box helper.field_id_name, { multiple: true, checked: true, id: "#{helper.field_id_name}_{{id}}" }, "{{id}}", nil
|
32
|
+
label for="#{helper.field_id_name}_{{id}}"
|
33
|
+
span Remove #{helper.label.downcase.singularize} {{index}}
|
34
|
+
|
35
|
+
- else
|
36
|
+
= form.check_box helper.field_id_name, { checked: true }, "{{id}}", ""
|
37
|
+
- if helper.optional
|
38
|
+
= form.label helper.field_id_name do
|
39
|
+
span Remove #{helper.label.downcase}
|
40
|
+
|
41
|
+
= yield if block_given?
|
42
|
+
|
43
|
+
dt
|
44
|
+
figcaption
|
45
|
+
| {{resourcesoriginalfilename}}
|
46
|
+
|
@@ -0,0 +1,6 @@
|
|
1
|
+
li.dsml-resource class=("hidden" if resource.hidden?)
|
2
|
+
.dsml-media-container
|
3
|
+
label.dsml-expand-label
|
4
|
+
input.dsml-modal-input.media-choice name="ds_media_library" type=helper.field_type value=resource.id checked=helper.ids.include?(resource.id) data=resource.attributes
|
5
|
+
span.dsml-media-link alt=resource.original_file_name = resource.original_file_name
|
6
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
.dsml-info-text Choose a media file below to associate with this field. You can manage media in the <a href="/media_library">Media Library</a>. <br />Note that changing a file in the library will update it across all associated media fields in this app.
|
2
|
+
|
3
|
+
= link_to "Open all folders", "#", class: "dsml-open-all-label", data: { "dsml-toggle-all-checkboxes" => ".dsml-expand-input" }
|
4
|
+
|
5
|
+
label.hidden for="dsml-search-media" Search media library
|
6
|
+
input.dsml-text#dsml-search-media type="text" placeholder="Type keywords to search media" data-dsml-search-media=".dsml-resource"
|
7
|
+
ul.dsml-media-nav#dsml-media-tree
|
8
|
+
= render collection: helper.root_folders, partial: "ds_media_library/form_helper/folder", as: :folder, locals: { helper: helper }
|
9
|
+
= render collection: helper.root_resources, partial: "ds_media_library/form_helper/resource", as: :resource, locals: { helper: helper }
|
10
|
+
|
File without changes
|
@@ -0,0 +1,14 @@
|
|
1
|
+
li.dsml-folder
|
2
|
+
input type="checkbox" class="dsml-expand-input" id="folder-#{folder.id}"
|
3
|
+
.dsml-media-container
|
4
|
+
label.dsml-expand-label.dsml-folder-link for="folder-#{folder.id}" = folder.name
|
5
|
+
.dsml-media-links
|
6
|
+
= link_to "Edit folder", [:edit, folder], class: "dsml-edit-icon", title: "Edit folder"
|
7
|
+
= link_to "Delete folder", folder, method: :delete, class: "dsml-delete-icon", title: "Delete folder",
|
8
|
+
data: { confirm: "Are you sure you want to delete this folder? This will move any folders and resources it may contain up into its parent folder." }
|
9
|
+
|
10
|
+
- if folder.children.any? || folder.resources.any?
|
11
|
+
ul.dsml-media-nest
|
12
|
+
= render collection: folder.children, partial: "ds_media_library/manage/folders/folder"
|
13
|
+
= render collection: folder.resources, partial: "ds_media_library/manage/resources/resource"
|
14
|
+
|
data/app/views/ds_media_library/{resources/folder_form.html.slim → manage/folders/form.html.slim}
RENAMED
@@ -1,5 +1,5 @@
|
|
1
1
|
= content_for :breadcrumbs do
|
2
|
-
ul.breadcrumb-nav
|
2
|
+
ul.dsml-breadcrumb-nav
|
3
3
|
li = link_to "Media Library", :root
|
4
4
|
li
|
5
5
|
= folder.new_record? ? "New" : "Edit"
|
@@ -9,11 +9,11 @@
|
|
9
9
|
= form_for folder do |form|
|
10
10
|
fieldset
|
11
11
|
.field
|
12
|
-
= form.label :parent_id, "Parent folder", class: "optional"
|
12
|
+
= form.label :parent_id, "Parent folder", class: "dsml-optional"
|
13
13
|
= form.collection_select :parent_id, form.object.all_folders, :id, :name, include_blank: " -- none -- "
|
14
14
|
.field
|
15
15
|
= form.label :name, "Folder name"
|
16
|
-
= form.text_field :name, class: "name-input"
|
16
|
+
= form.text_field :name, class: "dsml-name-input"
|
17
17
|
|
18
|
-
= render "
|
18
|
+
= render "ds_media_library/manage/submit", name: "folder"
|
19
19
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
.dsml
|
2
|
+
= content_for :breadcrumbs do
|
3
|
+
ul.dsml-breadcrumb-nav
|
4
|
+
li Media Library
|
5
|
+
|
6
|
+
= form_tag nil, method: :put do
|
7
|
+
input type="checkbox" id="dsml-select-media"
|
8
|
+
.dsml-table-buttons-flex
|
9
|
+
.dsml-buttons-left
|
10
|
+
= link_to "Open all folders", "#", class: "dsml-open-all-label", data: { "dsml-toggle-all-checkboxes" => ".dsml-expand-input" }
|
11
|
+
label.dsml-select-media-button for="dsml-select-media" Select multiple media
|
12
|
+
.field.dsml-move-selected
|
13
|
+
label.dsml-move-selected-label for="dsml-folder-id" Move selected to:
|
14
|
+
select#dsml-folder-id name="folder_id"
|
15
|
+
- folders.each do |folder|
|
16
|
+
option value=folder.id
|
17
|
+
= "- " * folder.depth
|
18
|
+
= folder.name
|
19
|
+
button.dsml-move-button Move
|
20
|
+
|
21
|
+
.dsml-buttons-right
|
22
|
+
= link_to "Add new folder", [:new, :folder], class: "dsml-add-button"
|
23
|
+
= link_to "Add new media", [:new, :resource], class: "dsml-add-button"
|
24
|
+
|
25
|
+
label.hidden for="dsml-search-media" Search media library
|
26
|
+
input.dsml-text#dsml-search-media type="text" placeholder="Type keywords to search media" data-dsml-search-media=".dsml-resource"
|
27
|
+
ul.dsml-media-nav#dsml-media-tree
|
28
|
+
= render collection: root.children, partial: "ds_media_library/manage/folders/folder"
|
29
|
+
= render collection: root.resources, partial: "ds_media_library/manage/resources/resource"
|
30
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
li.dsml-resource class=("hidden" if resource.hidden?)
|
2
|
+
.dsml-media-container
|
3
|
+
input.dsml-move-input type="checkbox" name="resource_ids[]" id="media-#{resource.id}" value=resource.id
|
4
|
+
label.dsml-expand-label for="media-#{resource.id}"
|
5
|
+
= link_to resource.original_file_name, edit_resource_path(resource), class: resource.css_class, alt: resource.original_file_name
|
6
|
+
span.dsml-move-span.dsml-media-link alt=resource.original_file_name = resource.original_file_name
|
7
|
+
|
8
|
+
.dsml-media-links
|
9
|
+
= link_to "Edit media", edit_resource_path(resource), class: "dsml-edit-icon", title: "Edit media"
|
10
|
+
= link_to "Delete media", resource_path(resource), method: :delete, class: "dsml-delete-icon", title: "Delete media",
|
11
|
+
data: { confirm: "Are you sure you want to delete this media item? Note that this will just remove it from the media library." }
|
12
|
+
|
@@ -1,5 +1,5 @@
|
|
1
1
|
= content_for :breadcrumbs do
|
2
|
-
ul.breadcrumb-nav
|
2
|
+
ul.dsml-breadcrumb-nav
|
3
3
|
li = link_to "Media Library", :root
|
4
4
|
li
|
5
5
|
= resource.new_record? ? "New" : "Edit"
|
@@ -25,7 +25,7 @@
|
|
25
25
|
= form.label :file, "Upload media"
|
26
26
|
= form.file_field :file, multiple: resource.new_record?
|
27
27
|
- unless form.object.new_record?
|
28
|
-
= render "
|
28
|
+
= render "ds_media_library/manage/resources/image_preview", image: form.object
|
29
29
|
|
30
|
-
= render "
|
30
|
+
= render "ds_media_library/manage/submit", name: "media"
|
31
31
|
|
data/bin/server
CHANGED
data/bin/setup
CHANGED
data/ds_media_library.gemspec
CHANGED
data/dummy/app.rb
CHANGED
@@ -1,53 +1,6 @@
|
|
1
1
|
require 'bundler/setup'
|
2
2
|
require "rails/all"
|
3
3
|
require "ds_media_library"
|
4
|
-
|
5
|
-
module Dummy; end
|
6
|
-
|
7
|
-
class Dummy::App < Rails::Application
|
8
|
-
config.secret_key_base = "test"
|
9
|
-
config.eager_load = false
|
10
|
-
config.logger = Logger.new("/dev/stdout")
|
11
|
-
config.logger = Logger.new("/dev/null")
|
12
|
-
end
|
13
|
-
|
14
|
-
ENV["DATABASE_URL"] = "sqlite3:tmp/test.sqlite3"
|
15
|
-
|
16
|
-
Dummy::App.initialize!
|
17
|
-
|
18
|
-
class ApplicationController < ActionController::Base
|
19
|
-
def self.expose *methods
|
20
|
-
methods.each do |method|
|
21
|
-
attr_reader method
|
22
|
-
helper_method method
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
layout "test"
|
27
|
-
|
28
|
-
def show
|
29
|
-
@widget = Widget.first_or_create!
|
30
|
-
end
|
31
|
-
|
32
|
-
def update
|
33
|
-
Widget.first_or_create!.update! params.require(:widget).permit!
|
34
|
-
redirect_to "/", notice: "Widget updated"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
Dummy::App.routes.draw do
|
39
|
-
mount DSMediaLibrary::Engine => "/media_library"
|
40
|
-
root to: "application#show"
|
41
|
-
patch "/" => "application#update"
|
42
|
-
end
|
43
|
-
|
44
|
-
# app's soft delete leaves files in place, so clean them up
|
45
|
-
at_exit do
|
46
|
-
begin
|
47
|
-
Rails.public_path.rmtree
|
48
|
-
rescue Errno::ENOENT
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
4
|
+
require_relative "./config"
|
52
5
|
require_relative "./database"
|
53
6
|
require_relative "./views"
|
data/dummy/config.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
module Dummy; end
|
2
|
+
|
3
|
+
class Dummy::App < Rails::Application
|
4
|
+
config.secret_key_base = "test"
|
5
|
+
config.eager_load = false
|
6
|
+
config.logger = Logger.new("/dev/stdout")
|
7
|
+
|
8
|
+
initializer "log level" do
|
9
|
+
Rails.logger.level = Logger::WARN
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
ENV["DATABASE_URL"] = "sqlite3:tmp/test.sqlite3"
|
14
|
+
|
15
|
+
Dummy::App.initialize!
|
16
|
+
|
17
|
+
class ApplicationController < ActionController::Base
|
18
|
+
def self.expose *methods
|
19
|
+
methods.each do |method|
|
20
|
+
attr_reader method
|
21
|
+
helper_method method
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
layout "test"
|
26
|
+
|
27
|
+
def show
|
28
|
+
@widget = Widget.first_or_create!
|
29
|
+
end
|
30
|
+
|
31
|
+
def update
|
32
|
+
widget = Widget.first_or_create!
|
33
|
+
widget_params = params.require(:widget).permit!
|
34
|
+
widget.update! widget_params
|
35
|
+
|
36
|
+
DSNode::Resource.update(params[:resources].keys, params[:resources].values) if params[:resources]
|
37
|
+
|
38
|
+
redirect_to "/", notice: "Widget updated"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
Dummy::App.routes.draw do
|
43
|
+
mount DSMediaLibrary::Engine => "/media_library"
|
44
|
+
root to: "application#show"
|
45
|
+
patch "/" => "application#update"
|
46
|
+
end
|
47
|
+
|
48
|
+
# app's soft delete leaves files in place, so clean them up
|
49
|
+
at_exit do
|
50
|
+
begin
|
51
|
+
Rails.public_path.rmtree
|
52
|
+
rescue Errno::ENOENT
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
data/dummy/database.rb
CHANGED
@@ -13,6 +13,9 @@ ActiveRecord::Migration.suppress_messages do
|
|
13
13
|
create_table "widgets", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
|
14
14
|
t.integer "cat_picture_id"
|
15
15
|
t.string "dog_picture_ids"
|
16
|
+
t.string "baby_picture_id"
|
17
|
+
t.string "baby_name"
|
18
|
+
t.string "embarassing_picture_ids"
|
16
19
|
end
|
17
20
|
|
18
21
|
create_table "folders", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
|
@@ -44,6 +47,7 @@ ActiveRecord::Migration.suppress_messages do
|
|
44
47
|
t.datetime "updated_at", null: false
|
45
48
|
t.integer "folder_id"
|
46
49
|
t.boolean "hidden", default: false
|
50
|
+
t.string "context"
|
47
51
|
end
|
48
52
|
end
|
49
53
|
end
|
@@ -51,5 +55,7 @@ end
|
|
51
55
|
class Widget < ActiveRecord::Base
|
52
56
|
ds_resource :cat_picture
|
53
57
|
belongs_to_many_ds_resources :dog_pictures
|
58
|
+
ds_resource :baby_picture
|
59
|
+
belongs_to_many_ds_resources :embarassing_pictures
|
54
60
|
end
|
55
61
|
|