ds_media_library 0.1.0 → 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.
- 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
|
|