refinerycms-slideshow 2.0.10.2 → 2.0.10.3
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.
- data/CHANGELOG.md +17 -0
- data/README.md +55 -2
- data/app/models/refinery/slideshow/slideshow.rb +12 -3
- data/app/views/refinery/slideshow/admin/shared/_locale_picker.html.erb +11 -0
- data/app/views/refinery/slideshow/admin/slides/_form.html.erb +5 -0
- data/app/views/refinery/slideshow/admin/slides/_index.html.erb +3 -3
- data/app/views/refinery/slideshow/admin/slideshows/edit.html.erb +1 -1
- data/config/locales/en/views/admin/slideshows.yml +2 -0
- data/config/locales/es/views/admin/slideshows.yml +2 -0
- data/db/migrate/20130818180729_add_attached_to_slideshow.rb +6 -0
- data/lib/refinery/slideshow.rb +1 -0
- data/lib/refinery/slideshow/concerns.rb +4 -0
- data/lib/refinery/slideshow/concerns/model_with_slideshow.rb +57 -0
- metadata +9 -4
data/CHANGELOG.md
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
## 2.0.10.2 [2013-09-02]
|
2
|
+
|
3
|
+
* FIX: Locale picker not available in the back
|
4
|
+
* FIX: Duplicates didn't take into account the same slideshow in uniqueness validation
|
5
|
+
* FEATURE: Slideshows attached to objects!
|
6
|
+
|
7
|
+
## 2.0.10.2 [2013-08-01]
|
8
|
+
|
9
|
+
* Title method not present but needed in refinery dashboard tab
|
10
|
+
|
11
|
+
## 2.0.10.1 [2013-08-01]
|
12
|
+
|
13
|
+
* Fixed bug with locale files and routes not present in gem.
|
14
|
+
|
15
|
+
## 2.0.10.0 [2013-07-31]
|
16
|
+
|
17
|
+
* Initial version: Slide and slideshow models + Refinery back
|
data/README.md
CHANGED
@@ -10,9 +10,62 @@ Current status
|
|
10
10
|
|
11
11
|
The plugin right now includes a backend that allow us to create a slideshow and attach it slides with images, videos and an html body.
|
12
12
|
|
13
|
+
It also includes a way to attach a slideshow to an object and add it to that object's admin.
|
14
|
+
|
15
|
+
|
16
|
+
Attaching an Slideshow to a model
|
17
|
+
===================================
|
18
|
+
|
19
|
+
To attach an slideshow to a model you must:
|
20
|
+
|
21
|
+
1) Generate a migration with an slideshow id field `rails g migration AddSlideshowToModel slideshow_id:integer`
|
22
|
+
|
23
|
+
2) Include the slideshow concern into the model and attach the slideshow
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
class Model < ActiveRecord::Base
|
27
|
+
|
28
|
+
include Refinery::Slideshow::Concerns::ModelWithSlideShow
|
29
|
+
|
30
|
+
attach_slideshow :slideshow
|
31
|
+
|
32
|
+
end
|
33
|
+
```
|
34
|
+
|
35
|
+
This will use the previously created slideshow_id field to create a `belongs_to` relationship, so if you want another name for your slideshow (e.g. `attach_slideshow :cool_slideshow`) you will have to name your id_field in a different way in the migration (e.g. `rails g migration AddSlideshowToModel cool_slideshow_id:integer`)
|
36
|
+
|
37
|
+
3) Use the slides partial in this model's admin:
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
<%= render 'refinery/slideshow/admin/slides/index', slideshow: f.object.slideshow %>
|
41
|
+
```
|
42
|
+
|
43
|
+
4) Depending on your scenary you may (or may not) need to initialize your slideshow attribute. By default, every time you access to the attached slideshow we are creating it:
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
object_model.slideshow # -> Voilá! We have created one slideshow on DB
|
47
|
+
```
|
48
|
+
|
49
|
+
But sometimes you don't want this behaviour (e.g. I only want blog posts from some category to include a slideshow). You can achieve this by overwriting a special method in the class called `needs_slideshow?`.
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
|
53
|
+
class Model < ActiveRecord::Base
|
54
|
+
|
55
|
+
include Refinery::Slideshow::Concerns::ModelWithSlideShow
|
56
|
+
|
57
|
+
attach_slideshow :slideshow
|
58
|
+
|
59
|
+
def needs_slideshow?
|
60
|
+
# Just return a boolean. True if we must create it, False if we must not
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
```
|
65
|
+
|
66
|
+
Again, if you use some different slideshow name (we used previously `cool_slideshow`) this method would be named after that slideshow name (`needs_cool_slideshow?`)
|
67
|
+
|
13
68
|
To Do
|
14
69
|
=====
|
15
70
|
|
16
|
-
* Attach a slideshow to an object: "This product must have an slideshow", "I want an slideshow in this refinery page"... Imagine if we just can reuse the slideshow admin!
|
17
|
-
|
18
71
|
* Some default front helpers: This way we could have a slideshow running without any extra front effort
|
@@ -1,10 +1,19 @@
|
|
1
1
|
class Refinery::Slideshow::Slideshow < ActiveRecord::Base
|
2
|
-
attr_accessible :uid
|
2
|
+
attr_accessible :uid, :attached, :attached_type, :attached_id
|
3
3
|
|
4
4
|
has_many :slides
|
5
|
+
belongs_to :attached, polymorphic: true
|
6
|
+
|
7
|
+
validate :uid_not_blank_if_not_attached
|
8
|
+
|
9
|
+
def uid_not_blank_if_not_attached
|
10
|
+
errors.add(:uid, :blank) if self.uid.blank? && self.attached.nil?
|
11
|
+
errors.add(:uid, :taken) if self.attached.nil? && !self.class.where(uid: uid).detect{|s| s != self }.nil?
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
scope :not_attached, ->() { where(attached_type: nil, attached_id: nil) }
|
5
16
|
|
6
|
-
validates :uid, presence: true
|
7
|
-
validates :uid, uniqueness: true
|
8
17
|
|
9
18
|
# Needed for the dashboard's activity list
|
10
19
|
def title
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<input type='hidden' name='switch_locale' id='switch_locale' value='<%= local_assigns[:current_locale] %>' />
|
2
|
+
<% if (locales ||= Refinery::I18n.frontend_locales).present? and locales.many? %>
|
3
|
+
<ul id='switch_locale_picker' class='clearfix'>
|
4
|
+
<% locales.each do |locale| %>
|
5
|
+
<li<%= raw(" class='selected'") if locale.to_s == local_assigns[:current_locale].to_s %>>
|
6
|
+
<%= link_to refinery_icon_tag("flags/#{locale}.png", :size => "32x22"),
|
7
|
+
refinery.url_for(:switch_locale => locale) %>
|
8
|
+
</li>
|
9
|
+
<% end %>
|
10
|
+
</ul>
|
11
|
+
<% end %>
|
@@ -1,4 +1,9 @@
|
|
1
1
|
<%= form_for [refinery, :slideshow_admin, @slideshow, object], html: {multipart: true} do |f| -%>
|
2
|
+
|
3
|
+
<%= render "refinery/slideshow/admin/shared/locale_picker",
|
4
|
+
:current_locale => Thread.current[:globalize_locale] if Refinery.i18n_enabled? %>
|
5
|
+
|
6
|
+
|
2
7
|
<%= render '/refinery/admin/error_messages',
|
3
8
|
:object => object,
|
4
9
|
:include_object_name => true %>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<section id='records'>
|
2
|
-
<%= render 'refinery/slideshow/admin/slides/records', records:
|
2
|
+
<%= render 'refinery/slideshow/admin/slides/records', records: slideshow.slides %>
|
3
3
|
</section>
|
4
4
|
<aside id='actions'>
|
5
|
-
<%= render 'refinery/slideshow/admin/slides/actions', records:
|
5
|
+
<%= render 'refinery/slideshow/admin/slides/actions', records: slideshow.slides, slideshow: slideshow %>
|
6
6
|
</aside>
|
7
|
-
<%= render '/refinery/admin/make_sortable', :tree => false, update_url: refinery.update_positions_slideshow_admin_slideshow_slides_path(slideshow) if !searching? and controller.class.sortable? and
|
7
|
+
<%= render '/refinery/admin/make_sortable', :tree => false, update_url: refinery.update_positions_slideshow_admin_slideshow_slides_path(slideshow) if !searching? and controller.class.sortable? and slideshow.slides.count > 1 %>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<%= render 'refinery/slideshow/admin/slideshows/form', object: @slideshow %>
|
2
2
|
|
3
3
|
<h2><%= t '.slides' %></h2>
|
4
|
-
<%= render 'refinery/slideshow/admin/slides/index',
|
4
|
+
<%= render 'refinery/slideshow/admin/slides/index', slideshow: @slideshow %>
|
5
5
|
|
6
6
|
|
data/lib/refinery/slideshow.rb
CHANGED
@@ -0,0 +1,57 @@
|
|
1
|
+
module Refinery::Slideshow::Concerns::ModelWithSlideShow
|
2
|
+
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
|
7
|
+
has_many :slideshows, class_name: "Refinery::Slideshow::Slideshow", as: :attached
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
module ClassMethods
|
12
|
+
|
13
|
+
def attach_slideshow slideshow_relationship_name
|
14
|
+
|
15
|
+
# We create the relationship
|
16
|
+
belongs_to slideshow_relationship_name, class_name: "Refinery::Slideshow::Slideshow", autosave: true
|
17
|
+
|
18
|
+
# We create a method to define if this object needs an slideshow. By default it needs it.
|
19
|
+
define_method "needs_#{slideshow_relationship_name}?" do
|
20
|
+
true
|
21
|
+
end
|
22
|
+
|
23
|
+
# In slideshow accesor we check if this record has no slideshow but should have it, then we create a new slideshow
|
24
|
+
define_method "#{slideshow_relationship_name}" do
|
25
|
+
|
26
|
+
# We try to get the slideshow using the relationship
|
27
|
+
local_slideshow = self[slideshow_relationship_name.to_sym]
|
28
|
+
|
29
|
+
# If slideshow is nil, and the object has been already saved and the object needs an slideshow then we create it
|
30
|
+
if local_slideshow.nil? && !self.new_record? && self.send("needs_#{slideshow_relationship_name}?")
|
31
|
+
local_slideshow = self.send("build_#{slideshow_relationship_name}", attached: self)
|
32
|
+
self[slideshow_relationship_name.to_sym] = local_slideshow
|
33
|
+
send "#{slideshow_relationship_name}=", local_slideshow
|
34
|
+
self.save
|
35
|
+
end
|
36
|
+
|
37
|
+
local_slideshow
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
# In slideshow assignation we should attach current object to the slideshow
|
42
|
+
define_method "#{slideshow_relationship_name}=" do |slideshow|
|
43
|
+
slideshow.attached = self
|
44
|
+
super(slideshow)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Before saving we must check if this new slideshow has been created and create it otherwise
|
48
|
+
after_save do |record|
|
49
|
+
if self.send("needs_#{slideshow_relationship_name}?")
|
50
|
+
record.send(slideshow_relationship_name).nil?
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: refinerycms-slideshow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.10.
|
4
|
+
version: 2.0.10.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-09-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: refinerycms-core
|
@@ -60,7 +60,7 @@ dependencies:
|
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 2.0.10
|
62
62
|
description: RefineryCMS plugin for managing slideshows
|
63
|
-
email:
|
63
|
+
email: david.brenes@the-cocktail.com
|
64
64
|
executables: []
|
65
65
|
extensions: []
|
66
66
|
extra_rdoc_files: []
|
@@ -77,6 +77,7 @@ files:
|
|
77
77
|
- app/views/refinery/slideshow/admin/slideshows/_slideshow.html.erb
|
78
78
|
- app/views/refinery/slideshow/admin/slideshows/_form.html.erb
|
79
79
|
- app/views/refinery/slideshow/admin/slideshows/_index.html.erb
|
80
|
+
- app/views/refinery/slideshow/admin/shared/_locale_picker.html.erb
|
80
81
|
- app/views/refinery/slideshow/admin/slides/_actions.html.erb
|
81
82
|
- app/views/refinery/slideshow/admin/slides/new.html.erb
|
82
83
|
- app/views/refinery/slideshow/admin/slides/_inner_form.html.erb
|
@@ -95,14 +96,18 @@ files:
|
|
95
96
|
- config/locales/en/plugin.yml
|
96
97
|
- config/locales/en/views/admin/slideshows.yml
|
97
98
|
- db/migrate/20130730140608_create_slides.rb
|
99
|
+
- db/migrate/20130818180729_add_attached_to_slideshow.rb
|
98
100
|
- db/migrate/20130731111538_add_position_to_slide.rb
|
99
101
|
- db/migrate/20130730083202_create_slideshows.rb
|
100
102
|
- db/migrate/20130730150101_add_translation_to_slide.rb
|
101
103
|
- lib/refinerycms-slideshow.rb
|
102
104
|
- lib/refinery/slideshow/engine.rb
|
105
|
+
- lib/refinery/slideshow/concerns.rb
|
106
|
+
- lib/refinery/slideshow/concerns/model_with_slideshow.rb
|
103
107
|
- lib/refinery/slideshow.rb
|
104
108
|
- README.md
|
105
|
-
|
109
|
+
- CHANGELOG.md
|
110
|
+
homepage: https://github.com/simplelogica/refinerycms-slideshow
|
106
111
|
licenses: []
|
107
112
|
post_install_message:
|
108
113
|
rdoc_options: []
|