radiant-images-extension 0.3.3 → 0.3.4
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/README.md +60 -23
- data/Rakefile +2 -1
- data/VERSION +1 -1
- data/app/controllers/admin/images_controller.rb +5 -19
- data/app/models/image.rb +15 -60
- data/app/views/admin/images/_bottom.haml +1 -6
- data/config/routes.rb +1 -1
- data/images_extension.rb +8 -12
- data/lib/images/interface/admin/images.rb +1 -2
- data/lib/images/tags/core.rb +16 -223
- data/public/stylesheets/sass/admin/extensions/images/index.sass +4 -0
- data/radiant-images-extension.gemspec +9 -7
- data/spec/controllers/admin/images_controller_spec.rb +88 -31
- data/spec/datasets/images.rb +1 -1
- data/spec/datasets/squaretalent.png +0 -0
- data/spec/lib/images/tags/core_spec.rb +190 -72
- data/spec/models/image_spec.rb +25 -20
- metadata +33 -19
- data/CHANGELOG +0 -9
- data/public/javascripts/admin/extensions/images/edit.js +0 -0
data/README.md
CHANGED
@@ -4,48 +4,85 @@ Radiant Images is an IMAGE management tool, meant only to be useful to pages and
|
|
4
4
|
|
5
5
|
## Primary (only) Goals
|
6
6
|
|
7
|
-
|
7
|
+
**Light Weight ::** We're not replacing paperclipped, we're just building a simple image manager extension.
|
8
8
|
|
9
|
-
|
9
|
+
**Uncomplicated ::** People need to be able to look at the model and instantly know what it's doing, being able to do so means they can easily extend it
|
10
10
|
|
11
|
-
|
11
|
+
**Flexible ::** Images works with the local filesystem or S3 cloud storage.
|
12
12
|
|
13
|
-
|
13
|
+
**Easily Extendable ::** Images is a base for things like galleries and shop, where they don't need additional assets
|
14
14
|
|
15
|
-
|
15
|
+
**Migrate from paperclipped easily ::** Paperclipped is freakin' awesome, we use it and we need to be able to migrate the images over
|
16
16
|
|
17
|
-
|
17
|
+
rake radiant:extensions:images:migrate_from_paperclipped
|
18
18
|
|
19
|
-
|
19
|
+
## Installation
|
20
20
|
|
21
|
-
|
21
|
+
gem install radiant-images-extension
|
22
|
+
|
23
|
+
Add the following line to your config/environment.rb:
|
24
|
+
`config.gem 'radiant-images-extension', :lib => false`
|
25
|
+
|
26
|
+
rake radiant:extensions:images:update
|
27
|
+
rake radiant:extensions:images:migrate
|
22
28
|
|
23
|
-
|
29
|
+
## S3 Storage
|
24
30
|
|
25
|
-
|
31
|
+
By default images will use your local file storage. If you wish to use s3 to store your image, change the `images.storage` config key to `s3`.
|
26
32
|
|
27
|
-
|
33
|
+
Radiant::Config['images.storage'] = 's3'
|
28
34
|
|
29
|
-
|
35
|
+
You will also need to set the related S3 config items to match your account:
|
30
36
|
|
31
|
-
|
37
|
+
Radiant::Config['s3.bucket'] = 'bucket'
|
38
|
+
Radiant::Config['s3.host_alias'] = 'alias' # Optional! Used for aliased hostnames
|
39
|
+
Radiant::Config['s3.key'] = 'key'
|
40
|
+
Radiant::Config['s3.secret'] = 'secret'
|
32
41
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
42
|
+
The URL and path values will need to be altered from their default values to work correctly with S3 storage, see the section below for examples.
|
43
|
+
|
44
|
+
## URL and Path Settings
|
45
|
+
|
46
|
+
The URL and Path settings for images out of the box will work fine for local storage, if you are using S3 then checkout the examples below:
|
47
|
+
|
48
|
+
You can find a list of symbols that can be used in the URL/Path [at the paperclip wiki](http://github.com/thoughtbot/paperclip/wiki/interpolations). There are more symbols which you may be able to find by searching online also.
|
49
|
+
|
50
|
+
Here are some base values and their explanation of use:
|
51
|
+
|
52
|
+
#### Local file storage
|
53
|
+
|
54
|
+
produces a URL such as: /images/original_file-icon.png
|
55
|
+
|
56
|
+
Radiant::Config['images.path'] = ':rails_root/public/:class/:basename-:style.:extension'
|
57
|
+
Radiant::Config['images.url'] = '/:class/:basename-:style.:extension'
|
58
|
+
|
59
|
+
#### Amazon S3 storage
|
60
|
+
|
61
|
+
produces a URL such as: http://s3.amazonaws.com/bucketname/images/original_file-icon.png
|
62
|
+
|
63
|
+
Radiant::Config['images.path'] = ':class/:basename-:style.:extension'
|
64
|
+
Radiant::Config['images.url'] = ':s3_path_url'
|
65
|
+
|
66
|
+
#### Amazon S3 with FQDN (Requires a CNAME pointing to s3.amazonaws.com)
|
67
|
+
|
68
|
+
produces a URL such as: http://host.alias/images/original_file-icon.png
|
69
|
+
|
70
|
+
Radiant::Config['images.path'] = ':class/:basename-:style.:extension'
|
71
|
+
Radiant::Config['images.url'] = ':s3_alias_url'
|
37
72
|
|
38
|
-
|
73
|
+
## Passenger and ImageMagick
|
39
74
|
|
40
|
-
|
75
|
+
They don't always play nicely, if you're having strange errors such as
|
41
76
|
|
42
|
-
|
77
|
+
/tmp/stream20101025-12485-nx6sdr-0 is not recognized by the 'identify' command.
|
78
|
+
|
79
|
+
Then ensure that you have set the config to match the location of imagemagick on your machine
|
43
80
|
|
44
|
-
|
81
|
+
images.image_magick_path = /usr/local/bin
|
45
82
|
|
46
|
-
|
83
|
+
## Contributors
|
47
84
|
|
48
|
-
|
85
|
+
Dirk Kelly, Mario Visic
|
49
86
|
|
50
87
|
## License
|
51
88
|
|
data/Rakefile
CHANGED
@@ -7,7 +7,8 @@ begin
|
|
7
7
|
gem.email = "info@squaretalent.com"
|
8
8
|
gem.homepage = "http://github.com/squaretalent/radiant-images-extension"
|
9
9
|
gem.authors = ['squaretalent']
|
10
|
-
gem.add_dependency '
|
10
|
+
gem.add_dependency 'radiant', '>= 0.9.1'
|
11
|
+
gem.add_dependency 'paperclip', '~> 2.3.5'
|
11
12
|
gem.add_dependency 'aws-s3', '>= 0.6.2'
|
12
13
|
gem.add_dependency 'acts_as_list', '>= 0.1.2'
|
13
14
|
gem.add_development_dependency 'rspec', '>= 1.3.0'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.4
|
@@ -1,34 +1,20 @@
|
|
1
1
|
class Admin::ImagesController < Admin::ResourceController
|
2
2
|
|
3
|
-
before_filter :index_assets,
|
4
|
-
before_filter :edit_assets,
|
5
|
-
around_filter :rescue_s3_exceptions,
|
3
|
+
before_filter :index_assets, :only => [ :index ]
|
4
|
+
before_filter :edit_assets, :only => [ :show, :edit ]
|
5
|
+
around_filter :rescue_s3_exceptions, :only => [ :create, :update, :destroy ]
|
6
6
|
|
7
7
|
def index
|
8
|
-
@images = Image.paginate :page => params[:page], :per_page =>
|
8
|
+
@images = Image.paginate :page => params[:page], :per_page => params[:pp] || 25
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
def search
|
13
|
-
@images = Image.search params[:search], params[:p]
|
14
|
-
|
15
|
-
respond_to do |format|
|
16
|
-
format.html { render }
|
17
|
-
format.js { render @images }
|
18
|
-
format.xml { render :xml => @images.to_xml }
|
19
|
-
format.json { render :json => @images.to_json }
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
11
|
+
protected
|
24
12
|
|
25
13
|
def index_assets
|
26
|
-
include_javascript 'admin/extensions/images/index'
|
27
14
|
include_stylesheet 'admin/extensions/images/index'
|
28
15
|
end
|
29
16
|
|
30
17
|
def edit_assets
|
31
|
-
include_javascript 'admin/extensions/images/edit'
|
32
18
|
include_stylesheet 'admin/extensions/images/edit'
|
33
19
|
end
|
34
20
|
|
data/app/models/image.rb
CHANGED
@@ -14,15 +14,16 @@ class Image < ActiveRecord::Base
|
|
14
14
|
:styles => lambda { Image.config_styles },
|
15
15
|
:whiny_thumbnails => false,
|
16
16
|
:default_url => '/images/extensions/images/missing_:style.png',
|
17
|
-
|
18
|
-
:storage => :s3,
|
17
|
+
:storage => Radiant::Config['images.storage'] == 's3' ? :s3 : :filesystem,
|
19
18
|
:s3_credentials => {
|
20
19
|
:access_key_id => Radiant::Config['s3.key'],
|
21
20
|
:secret_access_key => Radiant::Config['s3.secret']
|
22
21
|
},
|
22
|
+
:s3_host_alias => Radiant::Config['s3.host_alias'],
|
23
23
|
:bucket => Radiant::Config['s3.bucket'],
|
24
|
-
:
|
25
|
-
|
24
|
+
:url => Radiant::Config['images.url'],
|
25
|
+
:path => Radiant::Config['images.path']
|
26
|
+
|
26
27
|
validates_attachment_presence :asset
|
27
28
|
validates_attachment_content_type :asset, :content_type => ['image/jpeg', 'image/png', 'image/gif']
|
28
29
|
|
@@ -30,65 +31,19 @@ class Image < ActiveRecord::Base
|
|
30
31
|
self.title = self.asset_file_name if title.blank?
|
31
32
|
end
|
32
33
|
|
33
|
-
def url(style =
|
34
|
-
self.asset.url(style, include_updated_timestamp
|
34
|
+
def url(style = Radiant::Config['images.default'], include_updated_timestamp = true)
|
35
|
+
self.asset.url(style, include_updated_timestamp)
|
35
36
|
end
|
36
37
|
|
37
|
-
|
38
|
-
# we can dynamically swap between aliased and non aliased domain names
|
39
|
-
module ::Paperclip
|
40
|
-
class Attachment
|
41
|
-
|
42
|
-
def url(style = :original, include_updated_timestamp = true, secure = false)
|
43
|
-
style = style.to_s
|
44
|
-
prefix = secure ? 'https://' : 'http://'
|
45
|
-
domain = Radiant::Config['s3.host_alias'].present? ? Radiant::Config['s3.host_alias'] : 's3.amazonaws.com'
|
46
|
-
bucket = Radiant::Config['s3.host_alias'].present? ? '' : "/#{Radiant::Config['s3.bucket']}"
|
47
|
-
|
48
|
-
url = prefix + domain + bucket + '/images/' + basename + '-' + style + '.' + extension
|
49
|
-
include_updated_timestamp && updated_at ? [url, updated_at].compact.join(url.include?("?") ? "&" : "?") : url
|
50
|
-
end
|
51
|
-
|
52
|
-
def basename
|
53
|
-
File.basename(instance.asset_file_name, ".*") if instance.asset_file_name
|
54
|
-
end
|
55
|
-
|
56
|
-
def extension
|
57
|
-
instance.asset_file_name.split('.').last.downcase if instance.asset_file_name
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
61
|
-
end
|
38
|
+
private
|
62
39
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
queries = []
|
69
|
-
queries << 'LOWER(title) LIKE (:term)'
|
70
|
-
queries << 'LOWER(caption) LIKE (:term)'
|
71
|
-
queries << 'LOWER(asset_file_name) LIKE (:term)'
|
72
|
-
|
73
|
-
sql = queries.join(' OR ')
|
74
|
-
@conditions = [sql, {:term => "%#{search.downcase}%" }]
|
75
|
-
else
|
76
|
-
@conditions = []
|
77
|
-
end
|
78
|
-
|
79
|
-
self.all :conditions => @conditions
|
80
|
-
|
81
|
-
end
|
82
|
-
|
83
|
-
def config_styles
|
84
|
-
styles = []
|
85
|
-
|
86
|
-
if Radiant::Config['images.styles']
|
87
|
-
styles = Radiant::Config['images.styles'].gsub(/\s+/,'').split(',')
|
88
|
-
styles = styles.collect{|s| s.split('=')}.inject({}) {|ha, (k, v)| ha[k.to_sym] = v; ha}
|
89
|
-
end
|
90
|
-
styles
|
40
|
+
def self.config_styles
|
41
|
+
styles = []
|
42
|
+
if Radiant::Config['images.styles']
|
43
|
+
styles = Radiant::Config['images.styles'].gsub(/\s+/,'').split(',')
|
44
|
+
styles = styles.collect{|s| s.split('=')}.inject({}) {|ha, (k, v)| ha[k.to_sym] = v; ha}
|
91
45
|
end
|
46
|
+
styles
|
92
47
|
end
|
93
|
-
|
48
|
+
|
94
49
|
end
|
@@ -1,13 +1,8 @@
|
|
1
|
-
%ul
|
1
|
+
%ul
|
2
2
|
- render_region :bottom do |bottom|
|
3
3
|
- bottom.create do
|
4
4
|
%li
|
5
5
|
= link_to image('plus') + " " + t("new_image"), new_admin_image_path
|
6
|
-
- bottom.search do
|
7
|
-
%li
|
8
|
-
- form_tag nil, :method => 'get' do
|
9
|
-
= text_field_tag 'search', params[:search], :type => 'search'
|
10
|
-
= observe_field 'search', :frequency => 2, :update => 'images', :url => { :controller => 'images', :action=> 'index' }, :method => 'get', :with => "'search=' + escape(value)"
|
11
6
|
- render_region :paginate do |paginate|
|
12
7
|
- paginate.pagination do
|
13
8
|
= pagination_for(@images)
|
data/config/routes.rb
CHANGED
data/images_extension.rb
CHANGED
@@ -10,7 +10,7 @@ class ImagesExtension < Radiant::Extension
|
|
10
10
|
url "http://github.com/squaretalent/radiant-images-extension"
|
11
11
|
|
12
12
|
extension_config do |config|
|
13
|
-
config.gem 'paperclip', :version => '~> 2.3.
|
13
|
+
config.gem 'paperclip', :version => '~> 2.3.5'
|
14
14
|
config.gem 'aws-s3', :version => '>= 0.6.2', :lib => 'aws/s3'
|
15
15
|
config.gem 'acts_as_list', :version => '>= 0.1.2'
|
16
16
|
|
@@ -22,18 +22,12 @@ class ImagesExtension < Radiant::Extension
|
|
22
22
|
|
23
23
|
def activate
|
24
24
|
|
25
|
-
# require the settings extension to be loaded
|
26
|
-
unless Radiant::Extension.descendants.any? { |extension| extension.extension_name == 'Settings' }
|
27
|
-
warn 'Error: The Images extension requires the Settings extension to be installed.'
|
28
|
-
warn 'Either install the Settings extension or remove Images.'
|
29
|
-
exit(1)
|
30
|
-
end
|
31
|
-
|
32
25
|
unless defined? admin.image
|
33
26
|
Radiant::AdminUI.send :include, Images::Interface::Admin::Images
|
34
27
|
admin.image = Radiant::AdminUI.load_default_image_regions
|
35
28
|
end
|
36
29
|
|
30
|
+
Paperclip::Railtie.insert
|
37
31
|
|
38
32
|
Page.send :include, Images::Tags::Core
|
39
33
|
|
@@ -43,14 +37,16 @@ class ImagesExtension < Radiant::Extension
|
|
43
37
|
add_item 'Images', '/admin/images', :after => 'Pages'
|
44
38
|
end
|
45
39
|
|
46
|
-
Radiant::Config['images.styles'] ||= "icon=45x45#,preview=200x200#,normal=640x640#"
|
47
40
|
Radiant::Config['images.default'] ||= "original"
|
41
|
+
Radiant::Config['images.path'] ||= ":rails_root/public/:class/:basename-:style.:extension"
|
42
|
+
Radiant::Config['images.storage'] ||= "local"
|
43
|
+
Radiant::Config['images.styles'] ||= "icon=45x45#,preview=200x200#,normal=640x640#"
|
44
|
+
Radiant::Config['images.url'] ||= "/:class/:basename-:style.:extension"
|
48
45
|
|
49
|
-
Radiant::Config['s3.
|
46
|
+
Radiant::Config['s3.bucket'] ||= "set"
|
47
|
+
Radiant::Config['s3.host_alias'] ||= "set"
|
50
48
|
Radiant::Config['s3.key'] ||= "set"
|
51
49
|
Radiant::Config['s3.secret'] ||= "set"
|
52
|
-
Radiant::Config['s3.bucket'] ||= "fs.domain.com"
|
53
|
-
Radiant::Config['s3.path'] ||= ":class/:basename-:style.:extension"
|
54
50
|
|
55
51
|
|
56
52
|
unless Radiant::Config["images.image_magick_path"].nil?
|
@@ -22,10 +22,9 @@ module Images
|
|
22
22
|
image.new = image.edit
|
23
23
|
image.index = Radiant::AdminUI::RegionSet.new do |index|
|
24
24
|
index.attributes.concat %w{thumbnail title modify }
|
25
|
-
index.bottom.concat %w{ create
|
25
|
+
index.bottom.concat %w{ create }
|
26
26
|
index.paginate.concat %w{ pagination }
|
27
27
|
end
|
28
|
-
image.searchearch = image.index
|
29
28
|
image.remove = image.index
|
30
29
|
end
|
31
30
|
end
|
data/lib/images/tags/core.rb
CHANGED
@@ -14,7 +14,6 @@ module Images
|
|
14
14
|
}
|
15
15
|
tag 'images' do |tag|
|
16
16
|
tag.locals.images = Helpers.current_images(tag)
|
17
|
-
|
18
17
|
tag.expand
|
19
18
|
end
|
20
19
|
|
@@ -42,279 +41,73 @@ module Images
|
|
42
41
|
}
|
43
42
|
tag 'images:each' do |tag|
|
44
43
|
context = ''
|
45
|
-
|
46
44
|
tag.locals.images.each do |image|
|
47
45
|
tag.locals.image = image
|
48
46
|
context << tag.expand
|
49
47
|
end
|
50
|
-
|
51
|
-
content
|
48
|
+
context
|
52
49
|
end
|
53
50
|
|
54
51
|
desc %{
|
55
|
-
Expands the current image context
|
52
|
+
Expands the current image context.
|
53
|
+
Images can be obtained by passing a ID, title or position attribute.
|
56
54
|
|
57
55
|
*Usage:*
|
58
|
-
<pre><code><r:image>...</r:image></code></pre>
|
56
|
+
<pre><code><r:image [id=] [title=""] [position=]>...</r:image></code></pre>
|
59
57
|
}
|
60
58
|
tag 'image' do |tag|
|
61
59
|
tag.locals.image = Helpers.current_image(tag)
|
62
|
-
|
63
60
|
tag.expand
|
64
61
|
end
|
65
62
|
|
66
63
|
desc %{
|
67
|
-
Outputs the full URL of the image including the filename.
|
68
|
-
|
64
|
+
Outputs the full URL of the image including the filename.
|
65
|
+
The style of the image can be specified by passing the style attribute.
|
69
66
|
|
70
67
|
*Usage:*
|
71
68
|
<pre><code><r:image title='image'><r:url [style="preview|original"] /></r:image></code></pre>
|
72
69
|
}
|
73
70
|
tag 'image:url' do |tag|
|
74
71
|
result = nil
|
75
|
-
|
76
72
|
if tag.locals.image ||= Helpers.current_image(tag)
|
77
|
-
style = tag.attr['style'] ||
|
73
|
+
style = tag.attr['style'] || Radiant::Config['images.default'].to_sym
|
78
74
|
result = tag.locals.image.url(style, false)
|
79
75
|
end
|
80
|
-
|
81
76
|
result
|
82
77
|
end
|
83
78
|
|
84
79
|
desc %{
|
85
|
-
Outputs a very simple image tag
|
80
|
+
Outputs a very simple image tag.
|
81
|
+
The style of the image can be specified by passing the style attribute.
|
82
|
+
|
83
|
+
*Usage:*
|
84
|
+
<pre><code><r:image title='image'><r:tag [style="preview|original"] /></r:image></code></pre>
|
86
85
|
}
|
87
86
|
tag 'image:tag' do |tag|
|
88
87
|
result = nil
|
89
|
-
|
90
88
|
if tag.locals.image ||= Helpers.current_image(tag)
|
91
|
-
style = tag.attr['style'] ||
|
89
|
+
style = tag.attr['style'] || Radiant::Config['images.default'].to_sym
|
92
90
|
result = %{<img src="#{tag.locals.image.url(style, false)}" />}
|
93
91
|
end
|
94
|
-
|
95
92
|
result
|
96
93
|
end
|
97
94
|
|
98
|
-
[:id, :title].each do |method|
|
95
|
+
[:id, :title, :position].each do |method|
|
99
96
|
desc %{
|
100
|
-
Outputs the
|
97
|
+
Outputs the #{method} of the current image
|
101
98
|
|
102
99
|
*Usage:*
|
103
100
|
<pre><code><r:image title='image'><r:#{method} /></code></pre>
|
104
101
|
}
|
105
102
|
tag "image:#{method}" do |tag|
|
106
103
|
result = nil
|
107
|
-
|
108
104
|
if tag.locals.image ||= Helpers.current_image(tag)
|
109
105
|
result = tag.locals.image.send(method)
|
110
106
|
end
|
111
|
-
|
112
107
|
result
|
113
108
|
end
|
114
109
|
end
|
115
110
|
|
116
111
|
end
|
117
112
|
end
|
118
|
-
end
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
# describe '<r:images:each>' do
|
123
|
-
#
|
124
|
-
# it 'should expand on all images' do
|
125
|
-
# content = '<r:images:each>test!</r:images:each>'
|
126
|
-
# expected = ''
|
127
|
-
# @images.length.times { expected += 'test!' }
|
128
|
-
# pages(:home).should render(content).as(expected)
|
129
|
-
# end
|
130
|
-
#
|
131
|
-
# it 'should be running through the image objects' do
|
132
|
-
# content = '<r:images:each><r:images:url/></r:images:each>'
|
133
|
-
# expected = ''
|
134
|
-
# @images.each { |image| expected += image.asset.url }
|
135
|
-
# pages(:home).should render(content).as(expected)
|
136
|
-
# end
|
137
|
-
#
|
138
|
-
# it 'should only run through however many images we specify with limit' do
|
139
|
-
# content = '<r:images:each limit="2"><r:images:url/></r:images:each>'
|
140
|
-
# expected = ''
|
141
|
-
# @images[0..1].each { |image| expected += image.asset.url }
|
142
|
-
# pages(:home).should render(content).as(expected)
|
143
|
-
# end
|
144
|
-
#
|
145
|
-
# it 'should start at the image number we give it using offset' do
|
146
|
-
# content = '<r:images:each limit="2" offset="1"><r:images:url/></r:images:each>'
|
147
|
-
# expected = ''
|
148
|
-
# @images[1..2].each { |image| expected += image.asset.url }
|
149
|
-
# pages(:home).should render(content).as(expected)
|
150
|
-
# end
|
151
|
-
#
|
152
|
-
# it 'should display images in the order we give' do
|
153
|
-
# # asc
|
154
|
-
# content = '<r:images:each order="asc" by="position"><r:images:url/></r:images:each>'
|
155
|
-
# expected = ''
|
156
|
-
# @images.each { |image| expected += image.asset.url }
|
157
|
-
# pages(:home).should render(content).as(expected)
|
158
|
-
#
|
159
|
-
# #desc
|
160
|
-
# content = '<r:images:each order="desc" by="position"><r:images:url/></r:images:each>'
|
161
|
-
# expected = ''
|
162
|
-
# @images.reverse.each { |image| expected += image.asset.url }
|
163
|
-
# pages(:home).should render(content).as(expected)
|
164
|
-
# end
|
165
|
-
#
|
166
|
-
# it 'should allow us to order images by title' do
|
167
|
-
# content = '<r:images:each order="asc" by="title"><r:images:url/></r:images:each>'
|
168
|
-
# expected = ''
|
169
|
-
# @images.sort! { |a,b| a.title <=> b.title }
|
170
|
-
# @images.each { |image| expected += image.asset.url }
|
171
|
-
# pages(:home).should render(content).as(expected)
|
172
|
-
# end
|
173
|
-
#
|
174
|
-
# end
|
175
|
-
#
|
176
|
-
# describe '<r:images:first>' do
|
177
|
-
#
|
178
|
-
# it 'should render the first image' do
|
179
|
-
# content = '<r:images:first><r:images:url/></r:images:first>'
|
180
|
-
# expected = @images.first.asset.url
|
181
|
-
# pages(:home).should render(content).as(expected)
|
182
|
-
# end
|
183
|
-
#
|
184
|
-
# end
|
185
|
-
#
|
186
|
-
# describe '<r:images:if_first>' do
|
187
|
-
#
|
188
|
-
# it 'should expand the tag if the image is the first' do
|
189
|
-
# content = '<r:images><r:each><r:if_first><r:url /></r:if_first></r:each></r:images>'
|
190
|
-
# expected = @images.first.asset.url
|
191
|
-
# pages(:home).should render(content).as(expected)
|
192
|
-
# end
|
193
|
-
#
|
194
|
-
# end
|
195
|
-
#
|
196
|
-
# describe '<r:images:unless_first>' do
|
197
|
-
#
|
198
|
-
# it 'should expand the tag if the image is not the first' do
|
199
|
-
# content = '<r:images><r:each><r:unless_first><r:url /></r:unless_first></r:each></r:images>'
|
200
|
-
# expected = ''
|
201
|
-
#
|
202
|
-
# @images.each do |image|
|
203
|
-
# expected += image.asset.url unless image == @images.first
|
204
|
-
# end
|
205
|
-
#
|
206
|
-
# pages(:home).should render(content).as(expected)
|
207
|
-
# end
|
208
|
-
#
|
209
|
-
# end
|
210
|
-
#
|
211
|
-
# describe '<r:if_images>' do
|
212
|
-
#
|
213
|
-
# it 'should expand the contents if there are images' do
|
214
|
-
# content = '<r:images:if_images>test text</r:images:if_images>'
|
215
|
-
# expected = 'test text'
|
216
|
-
# pages(:home).should render(content).as(expected)
|
217
|
-
# end
|
218
|
-
#
|
219
|
-
# it 'should not expand the contents if there are no images' do
|
220
|
-
# Image.delete_all
|
221
|
-
# content = '<r:images:if_images>test text</r:images:if_images>'
|
222
|
-
# expected = ''
|
223
|
-
# pages(:home).should render(content).as(expected)
|
224
|
-
# end
|
225
|
-
#
|
226
|
-
# it 'should expand if the min count is equal to the image count' do
|
227
|
-
# min_count = Image.count
|
228
|
-
# content = '<r:images:if_images min_count="' + min_count.to_s + '">test text</r:images:if_images>'
|
229
|
-
# expected = 'test text'
|
230
|
-
# pages(:home).should render(content).as(expected)
|
231
|
-
# end
|
232
|
-
#
|
233
|
-
# it 'should not expand if the min count is greater than the image count' do
|
234
|
-
# min_count = Image.count + 1
|
235
|
-
# content = '<r:images:if_images min_count="' + min_count.to_s + '">test text</r:images:if_images>'
|
236
|
-
# expected = ''
|
237
|
-
# pages(:home).should render(content).as(expected)
|
238
|
-
# end
|
239
|
-
#
|
240
|
-
# end
|
241
|
-
#
|
242
|
-
# describe '<r:unless_images>' do
|
243
|
-
#
|
244
|
-
# it 'should not the contents if there are images' do
|
245
|
-
# content = '<r:images:unless_images>test text</r:images:unless_images>'
|
246
|
-
# expected = ''
|
247
|
-
# pages(:home).should render(content).as(expected)
|
248
|
-
# end
|
249
|
-
#
|
250
|
-
# it 'should expand the contents if there are no images' do
|
251
|
-
# Image.delete_all
|
252
|
-
# content = '<r:images:unless_images>test text</r:images:unless_images>'
|
253
|
-
# expected = 'test text'
|
254
|
-
# pages(:home).should render(content).as(expected)
|
255
|
-
# end
|
256
|
-
#
|
257
|
-
# it 'should not expand if the min count is equal to the image count' do
|
258
|
-
# min_count = Image.count
|
259
|
-
# content = '<r:images:unless_images min_count="' + min_count.to_s + '">test text</r:images:unless_images>'
|
260
|
-
# expected = ''
|
261
|
-
# pages(:home).should render(content).as(expected)
|
262
|
-
# end
|
263
|
-
#
|
264
|
-
# it 'should expand if the min count is greater than the image count' do
|
265
|
-
# min_count = Image.count + 1
|
266
|
-
# content = '<r:images:unless_images min_count="' + min_count.to_s + '">test text</r:images:unless_images>'
|
267
|
-
# expected = 'test text'
|
268
|
-
# pages(:home).should render(content).as(expected)
|
269
|
-
# end
|
270
|
-
#
|
271
|
-
# end
|
272
|
-
#
|
273
|
-
# describe '<r:images:url/>' do
|
274
|
-
#
|
275
|
-
# it 'should output the url for a valid image' do
|
276
|
-
# content = '<r:images title="' + @images.first.title + '"><r:images:url/></r:images>'
|
277
|
-
# expected = @images.first.asset.url
|
278
|
-
# pages(:home).should render(content).as(expected)
|
279
|
-
# end
|
280
|
-
#
|
281
|
-
# end
|
282
|
-
#
|
283
|
-
# describe '<r:images:title/>' do
|
284
|
-
#
|
285
|
-
# it 'should output the title for a valid image' do
|
286
|
-
# content = '<r:images title="' + @images.first.title + '"><r:images:title/></r:images>'
|
287
|
-
# expected = @images.first.title
|
288
|
-
# pages(:home).should render(content).as(expected)
|
289
|
-
# end
|
290
|
-
#
|
291
|
-
# end
|
292
|
-
#
|
293
|
-
# describe '<r:images:tag/>' do
|
294
|
-
#
|
295
|
-
# it 'should output a valid image tag when given a valid image' do
|
296
|
-
# content = '<r:images title="' + @images.first.title + '"><r:images:tag /></r:images>'
|
297
|
-
# expected = '<img src="' + @images.first.asset.url + '" alt="' + @images.first.title + '" />'
|
298
|
-
# pages(:home).should render(content).as(expected)
|
299
|
-
# end
|
300
|
-
#
|
301
|
-
# it 'should output a valid image tag when specifying an image by title' do
|
302
|
-
# content = '<r:images:tag title="' + @images.first.title + '" />'
|
303
|
-
# expected = '<img src="' + @images.first.asset.url + '" alt="' + @images.first.title + '" />'
|
304
|
-
# pages(:home).should render(content).as(expected)
|
305
|
-
# end
|
306
|
-
#
|
307
|
-
# it 'should output an image tag with the specified size' do
|
308
|
-
# content = '<r:images:tag title="' + @images.first.title + '" size="icon" />'
|
309
|
-
# expected = '<img src="' + @images.first.asset.url(:icon) + '" alt="' + @images.first.title + '" />'
|
310
|
-
# pages(:home).should render(content).as(expected)
|
311
|
-
# end
|
312
|
-
#
|
313
|
-
# it 'should use the given alt text specified' do
|
314
|
-
# content = '<r:images:tag title="' + @images.first.title + '" alt="new alt text" />'
|
315
|
-
# expected = '<img src="' + @images.first.asset.url + '" alt="new alt text" />'
|
316
|
-
# pages(:home).should render(content).as(expected)
|
317
|
-
# end
|
318
|
-
#
|
319
|
-
# end
|
320
|
-
#
|
113
|
+
end
|