effective_regions 1.4.10 → 1.4.11
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/README.md +21 -6
- data/app/controllers/effective/regions_controller.rb +1 -1
- data/app/helpers/effective_regions_helper.rb +5 -4
- data/app/models/effective/region.rb +3 -2
- data/app/models/effective/snippets/snippet.rb +4 -0
- data/lib/effective_regions/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 483fd3d07ea6577b19b36977370babd10af15ae8
|
4
|
+
data.tar.gz: c9fe3624dc933c53f563031780ec8dc53b9b0cdd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c8fff7cc51e8132edf5a336080b9b501606004c56dc1eb68cb7f551d9ed4ea1ab1e57df7a19b07a0c05189d70c677c4ff02508246761f25b3ed901f8dcd319c1
|
7
|
+
data.tar.gz: 7665b9df3050856b0270d34a41e6e19a0811fe080a7103b67ce22d2063e165752899a8110c8e57cce3afaa10116ed6078f776fed70b7aff71b4c1d08b7b86fae
|
data/README.md
CHANGED
@@ -424,10 +424,17 @@ module Effective
|
|
424
424
|
module Snippets
|
425
425
|
class Post < Snippet
|
426
426
|
attribute :post_id, Integer
|
427
|
+
attribute :all_posts, Array # We're going to assign this through the effective_region :snippet_locals option
|
427
428
|
|
428
429
|
def post_object
|
429
430
|
# We're using ::Post to refer to the app/models/post.rb rather than the Effective::Snippets::Post
|
430
|
-
@post ||=
|
431
|
+
@post ||= begin
|
432
|
+
if all_posts.present?
|
433
|
+
all_posts.find { |post| post.id == post_id }
|
434
|
+
else
|
435
|
+
::Post.find_by_id(post_id)
|
436
|
+
end
|
437
|
+
end
|
431
438
|
end
|
432
439
|
|
433
440
|
end
|
@@ -532,11 +539,12 @@ We can pre-populate an effective_region's default content with some posts. Thes
|
|
532
539
|
```haml
|
533
540
|
%h2 Posts
|
534
541
|
|
535
|
-
= snippet_effective_region :sidebar_posts, :snippets => [:post] do
|
542
|
+
= snippet_effective_region :sidebar_posts, :snippets => [:post], :snippet_locals => {:all_posts => Post.all.to_a} do
|
536
543
|
- Post.order(:created_at).first(5).each do |post|
|
537
|
-
= render_snippet Effective::Snippets::Post.new(:post_id => post.id)
|
544
|
+
= render_snippet Effective::Snippets::Post.new(:post_id => post.id, :all_posts => [post])
|
538
545
|
```
|
539
546
|
|
547
|
+
Using the `snippet_locals` approach as above prevents an N+1 query when each snippet has to look up its own post.
|
540
548
|
|
541
549
|
### Summary
|
542
550
|
|
@@ -549,9 +557,7 @@ Templates are small pieces of reusable HTML that can be inserted into an `effect
|
|
549
557
|
|
550
558
|
Unlike snippets, there are no configurable options or anything. They're just pieces of raw HTML that can be dropped in and then immediately editted.
|
551
559
|
|
552
|
-
|
553
|
-
|
554
|
-
They take the form of two files, a model and a view.
|
560
|
+
They take the form of three files, a model, a view, and an optional image file.
|
555
561
|
|
556
562
|
### The Model
|
557
563
|
|
@@ -587,6 +593,15 @@ The view is defined at app/models/effective/templates/_two_column.html.haml
|
|
587
593
|
%p Right column
|
588
594
|
```
|
589
595
|
|
596
|
+
### The Image
|
597
|
+
|
598
|
+
The image is used as an icon on the 'Content Templates' dialog screen.
|
599
|
+
|
600
|
+
It is optional, but will raise a silent 404 error if it doesn't exist.
|
601
|
+
|
602
|
+
The image should be 100x70 pixel .png file stored at /app/assets/images/effective/templates/two_column.png
|
603
|
+
|
604
|
+
|
590
605
|
## License
|
591
606
|
|
592
607
|
MIT License. Copyright [Code and Effect Inc.](http://www.codeandeffect.com/)
|
@@ -48,7 +48,7 @@ module Effective
|
|
48
48
|
region.content = cleanup(vals[:content])
|
49
49
|
|
50
50
|
region.snippets = HashWithIndifferentAccess.new()
|
51
|
-
(vals[:snippets] || []).each { |snippet, vals| region.snippets[snippet] = vals }
|
51
|
+
(vals[:snippets] || []).each { |snippet, vals| region.snippets[snippet] = HashWithIndifferentAccess.new(vals.to_h) }
|
52
52
|
|
53
53
|
# Last chance for a developer to make some changes here
|
54
54
|
refresh_page = true if (run_before_save_method(region, regionable) rescue nil) == :refresh
|
@@ -43,6 +43,7 @@ module EffectiveRegionsHelper
|
|
43
43
|
obj = args.first
|
44
44
|
title = args.last.to_s.parameterize
|
45
45
|
editable_tag = options.delete(:editable_tag) || :div
|
46
|
+
snippet_locals = options.delete(:snippet_locals) # These get passed into the Snippet.new() model
|
46
47
|
|
47
48
|
# Set up the editable div options we need to send to ckeditor
|
48
49
|
if effectively_editing?
|
@@ -76,19 +77,19 @@ module EffectiveRegionsHelper
|
|
76
77
|
|
77
78
|
if effectively_editing? && (can_edit && options[:editable] != false) # If we need the editable div
|
78
79
|
content_tag(editable_tag, opts) do
|
79
|
-
region.try(:content).present? ? render_region(region, true) : (capture(&block) if block_given?)
|
80
|
+
region.try(:content).present? ? render_region(region, true, snippet_locals) : (capture(&block) if block_given?)
|
80
81
|
end
|
81
82
|
else
|
82
|
-
region.try(:content).present? ? render_region(region, false) : (capture(&block) if block_given?)
|
83
|
+
region.try(:content).present? ? render_region(region, false, snippet_locals) : (capture(&block) if block_given?)
|
83
84
|
end
|
84
85
|
end
|
85
86
|
|
86
|
-
def render_region(region, can_edit = true)
|
87
|
+
def render_region(region, can_edit = true, snippet_locals = {})
|
87
88
|
return '' unless region
|
88
89
|
|
89
90
|
region.content.tap do |html|
|
90
91
|
html.scan(/\[(snippet_\d+)\]/).flatten.uniq.each do |id| # find snippet_1 and replace with snippet content
|
91
|
-
snippet = region.snippet_objects.find { |snippet| snippet.id == id }
|
92
|
+
snippet = region.snippet_objects(snippet_locals).find { |snippet| snippet.id == id }
|
92
93
|
html.gsub!("[#{id}]", render_snippet(snippet, can_edit)) if snippet
|
93
94
|
end
|
94
95
|
end.html_safe
|
@@ -23,11 +23,12 @@ module Effective
|
|
23
23
|
# Hash of the Snippets objectified
|
24
24
|
#
|
25
25
|
# Returns a Hash of {'snippet_1' => CurrentUserInfo.new(snippets[:key]['options'])}
|
26
|
-
def snippet_objects
|
26
|
+
def snippet_objects(locals = {})
|
27
|
+
locals = {} unless locals.kind_of?(Hash)
|
27
28
|
@snippet_objects ||= snippets.map do |key, snippet| # Key here is 'snippet_1'
|
28
29
|
if snippet['class_name']
|
29
30
|
klass = "Effective::Snippets::#{snippet['class_name'].classify}".safe_constantize
|
30
|
-
klass.new(snippet.merge!(:region => self, :id => key)) if klass
|
31
|
+
klass.new(snippet.merge!(locals).merge!(:region => self, :id => key)) if klass
|
31
32
|
end
|
32
33
|
end.compact
|
33
34
|
end
|
@@ -31,6 +31,10 @@ module Effective
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
# If you define "attribute :something, Array" in your derived class
|
35
|
+
# You can call effective_region post, :content :snippet_locals => {:something => [1,2,3]}
|
36
|
+
# And it will be assigned when the effective_region is rendered
|
37
|
+
|
34
38
|
def initialize(atts = {})
|
35
39
|
(atts || {}).each { |k, v| self.send("#{k}=", v) if respond_to?("#{k}=") }
|
36
40
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_regions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code and Effect
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|