attachy 0.1.1 → 0.1.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c10bc66de882f1201aba52a87e64c5ac48e46a34
4
- data.tar.gz: fc2c4995faa82011745592e90dc0ab9387571a05
3
+ metadata.gz: a029ab515bf4b323047c5231ecfe7e30d90e552e
4
+ data.tar.gz: f1454ca82ee9055a1214562d743d9ff0db114e9f
5
5
  SHA512:
6
- metadata.gz: 611a2c9b85a28674a0a026719bc743bbdc37774502ce87c3676732e651a60b87ca6463abb74c6334cf0ad3a3c03f9d0b83898b35f7ae2bbb023569cc0772bb3e
7
- data.tar.gz: ab8e16ae400ee56ec645d18acd1cdbd52e9ce3ceffb3f85ac2e4f8f50306e86ffa19278afb04021228e8b58caf623ae1d4d4fe3904e16ba026c945f6b9dbdd3e
6
+ metadata.gz: b349429b795c329775229fe57f2ade6f7dd12b49458a63354c688b74aeb1fe5b1b6e3aacf34acad947d6082b8fee611d579b7e412f3049dc4acee66dea146c81
7
+ data.tar.gz: 47f608b456d919a95b0bbb555788c972ef86d861b7f3c0abcc10b8267771cd031372c1782b54fc4c4fb7a4639621bbecd2b72195527fd232cfed927f1b8feec0
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # 0.1.2
2
+
3
+ - Added `ruby-version`;
4
+ - Added `ruby-gemset`;
5
+ - Fix the possibility to pass the button label options;
6
+ - Now an empty message can be showed or hidden.
7
+
1
8
  # 0.1.1
2
9
 
3
10
  - When a blank value is assigned on attachment relation, it is skipped to avoid error on JSON parser.
data/README.md CHANGED
@@ -83,32 +83,97 @@ public_id: default
83
83
  version: 42
84
84
  ```
85
85
 
86
- ## Showing
86
+ ## Transformations
87
87
 
88
- If you want just show your uploaded image, use:
88
+ To know more about transformations, check the [Cloudinary Doc](http://cloudinary.com/documentation/image_transformations).
89
89
 
90
- ```html
91
- <%= attachy_link :avatar, @object %>
90
+ ## Helpers
91
+
92
+ ### Attachy
93
+
94
+ ```
95
+ <%= f.attachy :avatar,
96
+ t: { width: 160, height: 160, crop: :fill },
97
+ tl: { width: 800, height: 600, crop: :scale },
98
+ button: { html: { text: 'Upload' } }
99
+ %>
92
100
  ```
93
101
 
94
- It will generate a link to your image with the image inside.
102
+ + `t`: image transformations;
103
+ + `tl`: linked image transformations;
104
+ + `button.html`: button html attributes.
95
105
 
96
- ## Transformation
106
+ ```
107
+ <div class="attachy">
108
+ <ul class="attachy__content">
109
+ <li class="attachy__node">
110
+ <a class="attachy__link" href="">
111
+ <img src="">
112
+ </a>
97
113
 
98
- You can manipulate the image using the `t` attribute:
114
+ <span class="attachy__remove">×</span>
115
+ </li>
116
+ </ul>
99
117
 
118
+ <div class="attachy__button">
119
+ <span>...</span>
120
+
121
+ <input type="file" class="attachy__fileupload">
122
+
123
+ <input value="[]" type="hidden">
124
+ </div>
125
+ </div>
100
126
  ```
101
- <%= f.attachy :avatar, t: { width: 160, height: 160, crop: :fill } %>
127
+
128
+ + `attachy`: wrapper;
129
+ + `attachy__content`: the file content;
130
+ + `attachy__node`: each file of the content;
131
+ + `attachy__link`: the link of some file;
132
+ + `img`: the uploaded file;
133
+ + `attachy__remove`: button to remove the image;
134
+ + `attachy__button`: pseudo button to access the upload file button;
135
+ + `span`: the label of the button;
136
+ + `attachy__fileupload`: the upload file field;
137
+ + `hidden`: the field that keeps hidden the files metadata as JSON.
138
+
139
+ ## Link
140
+
141
+ It draws the link with the image inside:
142
+
143
+ ```
144
+ <%= attachy_link :avatar, @object
145
+ t: { width: 160, height: 160, crop: :fill },
146
+ tl: { width: 800, height: 600, crop: :scale },
147
+ html: { class: :added_custom }
148
+ %>
102
149
  ```
103
150
 
104
- To know more about transformations, check the [Cloudinary Doc](http://cloudinary.com/documentation/image_transformations).
151
+ + `t`: image transformations;
152
+ + `tl`: linked image transformations;
153
+ + `html`: link html attributes.
154
+
155
+ ```
156
+ <a class="attachy__link" href="">
157
+ <img src="">
158
+ </a>
159
+ ```
160
+
161
+ ### Image
162
+
163
+ It draws the link with the image inside:
105
164
 
106
- ## HTML
165
+ ```
166
+ <%= attachy_image :avatar, @object
167
+ t: { width: 160, height: 160, crop: :fill },
168
+ html: { alt: :me }
169
+ %>
170
+ ```
107
171
 
108
- For HTML attributes, just use `html`:
172
+ + `t`: image transformations;
173
+ + `html`: link html attributes.
109
174
 
110
175
  ```
111
- <%= f.attachy :avatar, html: { width: 160, height: 160, alt: 'Image' } %>
176
+ <img src="https://res.cloudinary.com/account/image/upload/secret/version/hash.format">
112
177
  ```
113
178
 
114
179
  ## Test
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * @author : Washington Botelho
7
7
  * @doc : http://wbotelhos.com/attachy
8
- * @version : 0.1.1
8
+ * @version : 0.1.2
9
9
  *
10
10
  */
11
11
 
@@ -109,6 +109,8 @@
109
109
  link = that.link(file, image, json),
110
110
  remove = that.removeButton();
111
111
 
112
+ that.hideEmpty();
113
+
112
114
  if (that.multiple) {
113
115
  var node = $('<li />', { html: link, 'class': 'attachy__node' }).append(remove);
114
116
 
@@ -119,6 +121,10 @@
119
121
  });
120
122
  },
121
123
 
124
+ hideEmpty: function() {
125
+ this.empty.hide();
126
+ },
127
+
122
128
  image: function(file, json) {
123
129
  var
124
130
  config = this.imageConfig(file),
@@ -222,9 +228,9 @@
222
228
 
223
229
  this.updateHidden();
224
230
 
225
- // if (this.defaultAvatar) {
226
- // this.container.html(this.defaultAvatar.clone());
227
- // }
231
+ if (!this.files.length) {
232
+ this.showEmpty();
233
+ }
228
234
  },
229
235
 
230
236
  onUploading: function() {
@@ -274,11 +280,16 @@
274
280
  this.wrapper = this.field.closest('.attachy');
275
281
  this.button = this.wrapper.find('.attachy__button span');
276
282
  this.content = this.wrapper.find('.attachy__content');
277
- this.hidden = this.wrapper.find('input[type="hidden"]')
283
+ this.empty = this.wrapper.find('.attachy__empty');
284
+ this.hidden = this.wrapper.find('input[type="hidden"]');
278
285
  this.remove = this.wrapper.find('.attachy__remove');
279
286
  this.submit = this.wrapper.closest('form').find(':submit');
280
287
  },
281
288
 
289
+ showEmpty: function() {
290
+ this.empty.show();
291
+ },
292
+
282
293
  updateHidden: function() {
283
294
  this.hidden.val(JSON.stringify(this.files));
284
295
  }
@@ -8,23 +8,23 @@ module Attachy
8
8
  viewer.field
9
9
  end
10
10
 
11
- def attachy_content(method, object, options)
11
+ def attachy_content(method, object, options = {})
12
12
  Viewer.new(method, object, options, self).content
13
13
  end
14
14
 
15
- def attachy_file_field(method, object, options)
15
+ def attachy_file_field(method, object, options = {})
16
16
  Viewer.new(method, object, options, self).file_field
17
17
  end
18
18
 
19
- def attachy_image(method, object, options)
19
+ def attachy_image(method, object, options = {})
20
20
  Viewer.new(method, object, options, self).image
21
21
  end
22
22
 
23
- def attachy_link(method, object, options)
23
+ def attachy_link(method, object, options = {})
24
24
  Viewer.new(method, object, options, self).link
25
25
  end
26
26
 
27
- def attachy_node(method, object, options)
27
+ def attachy_node(method, object, options = {})
28
28
  Viewer.new(method, object, options, self).node
29
29
  end
30
30
  end
@@ -17,8 +17,8 @@ module Attachy
17
17
  { text: '...' }
18
18
  end
19
19
 
20
- def button_label(html: button_label_options)
21
- html = htm(:button).merge(html)
20
+ def button_label(html: htm(:button))
21
+ html = button_label_options.merge(html)
22
22
 
23
23
  @view.content_tag :span, html.delete(:text), html
24
24
  end
@@ -103,7 +103,7 @@ module Attachy
103
103
  end
104
104
 
105
105
  def link(file = criteria, t: transform, tl: { crop: :none }, html: {})
106
- html = html.reverse_merge(link_options.merge(data: tl))
106
+ html = link_options.merge(data: tl).merge(html)
107
107
 
108
108
  return yield(html, attachments) if block_given?
109
109
 
@@ -155,16 +155,16 @@ module Attachy
155
155
  attachments.size == 1 && attachments.last.public_id == Attachy::File.default.public_id
156
156
  end
157
157
 
158
- def htm(resource_type = :image)
159
- @options.dig(resource_type, :html) || {}
158
+ def htm(path = [])
159
+ @options.dig(*[path, :html].flatten) || {}
160
160
  end
161
161
 
162
162
  def metadata
163
163
  @metadata ||= @object.send("#{@method}_metadata")
164
164
  end
165
165
 
166
- def transform(path = [:t])
167
- @options.dig(*path) || {}
166
+ def transform(path = [])
167
+ @options.dig(*[path, :t].flatten) || {}
168
168
  end
169
169
  end
170
170
  end
@@ -1,3 +1,3 @@
1
1
  module Attachy
2
- VERSION = '0.1.1'.freeze
2
+ VERSION = '0.1.2'.freeze
3
3
  end
@@ -6,7 +6,6 @@ FactoryGirl.define do
6
6
  width 800
7
7
 
8
8
  sequence(:public_id) { |i| "PublicId#{i}" }
9
-
10
- sequence :version, &:to_s
9
+ sequence(:version) { |i| "v#{i}" }
11
10
  end
12
11
  end
@@ -3,7 +3,6 @@ require 'rails_helper'
3
3
  RSpec.describe Attachy::Viewer, '.image' do
4
4
  let!(:method) { :avatar }
5
5
  let!(:object) { create :user }
6
- let!(:viewer) { described_class.new method, object, options }
7
6
  let!(:default_html) { { alt: :image, height: 50, width: 150 } }
8
7
  let!(:default_t) { { height: 100, width: 200 } }
9
8
  let!(:options) { { t: default_t, html: default_html } }
@@ -14,6 +13,8 @@ RSpec.describe Attachy::Viewer, '.image' do
14
13
  create :file, attachable: object
15
14
  end
16
15
 
16
+ subject { described_class.new method, object, options }
17
+
17
18
  context 'when :html is present' do
18
19
  let!(:html_attributes) { { alt: :alt, invalid: :invalid, height: 11, width: 22 } }
19
20
 
@@ -25,7 +26,7 @@ RSpec.describe Attachy::Viewer, '.image' do
25
26
  end
26
27
 
27
28
  it 'adds all attributes on image' do
28
- el = viewer.image(t: t_attributes, html: html_attributes)
29
+ el = subject.image(t: t_attributes, html: html_attributes)
29
30
 
30
31
  expect(el).to have_tag 'img', with: html_attributes
31
32
  end
@@ -37,7 +38,7 @@ RSpec.describe Attachy::Viewer, '.image' do
37
38
  before { allow_any_instance_of(Attachy::File).to receive(:url).with(t_attributes) { 'http://example.org' } }
38
39
 
39
40
  it 'gives priority to :html' do
40
- el = viewer.image(t: t_attributes, html: html_attributes)
41
+ el = subject.image(t: t_attributes, html: html_attributes)
41
42
 
42
43
  expect(el).to have_tag 'img', with: html_attributes
43
44
  end
@@ -47,7 +48,7 @@ RSpec.describe Attachy::Viewer, '.image' do
47
48
  before { allow_any_instance_of(Attachy::File).to receive(:url).with(default_t) { 'http://example.org' } }
48
49
 
49
50
  it 'uses the :html attributes and transform with default :t' do
50
- el = viewer.image(html: html_attributes)
51
+ el = subject.image(html: html_attributes)
51
52
 
52
53
  expect(el).to have_tag 'img', with: {
53
54
  'data-crop' => 'fill',
@@ -76,7 +77,7 @@ RSpec.describe Attachy::Viewer, '.image' do
76
77
  before { allow_any_instance_of(Attachy::File).to receive(:url).with(t_attributes) { 'http://example.org' } }
77
78
 
78
79
  it 'adds only the default transformation with file attributes' do
79
- el = viewer.image(t: t_attributes, html: html_attributes)
80
+ el = subject.image(t: t_attributes, html: html_attributes)
80
81
 
81
82
  expect(el).to have_tag 'img', with: {
82
83
  'data-format' => file.format,
@@ -93,7 +94,7 @@ RSpec.describe Attachy::Viewer, '.image' do
93
94
  before { allow_any_instance_of(Attachy::File).to receive(:url).with(t_attributes) { 'http://example.org' } }
94
95
 
95
96
  it 'adds the :t attributes on html attributes with default data' do
96
- el = viewer.image(t: t_attributes, html: html_attributes)
97
+ el = subject.image(t: t_attributes, html: html_attributes)
97
98
 
98
99
  expect(el).to have_tag 'img', with: {
99
100
  'data-format' => file.format,
@@ -113,10 +114,10 @@ RSpec.describe Attachy::Viewer, '.image' do
113
114
  before { allow_any_instance_of(Attachy::File).to receive(:url).with(default_t) { 'http://example.org' } }
114
115
 
115
116
  it 'uses the default :html with default :t' do
116
- el = viewer.image
117
+ el = subject.image
117
118
 
118
119
  expect(el).to have_tag 'img', with: {
119
- 'alt' => 'Example',
120
+ 'alt' => 'image',
120
121
  'data-crop' => 'fill',
121
122
  'data-format' => file.format,
122
123
  'data-height' => 100,
@@ -125,9 +126,9 @@ RSpec.describe Attachy::Viewer, '.image' do
125
126
  'data-sign-url' => true,
126
127
  'data-version' => file.version,
127
128
  'data-width' => 200,
128
- 'height' => 100,
129
+ 'height' => 50,
129
130
  'src' => 'http://example.org',
130
- 'width' => 200
131
+ 'width' => 150
131
132
  }
132
133
  end
133
134
  end
@@ -138,10 +139,10 @@ RSpec.describe Attachy::Viewer, '.image' do
138
139
  before { allow_any_instance_of(Attachy::File).to receive(:url).with(t_attributes) { 'http://example.org' } }
139
140
 
140
141
  it 'uses the default :html with given :t overriding the default :t' do
141
- el = viewer.image(t: t_attributes)
142
+ el = subject.image(t: t_attributes)
142
143
 
143
144
  expect(el).to have_tag 'img', with: {
144
- 'alt' => 'Example',
145
+ 'alt' => 'image',
145
146
  'data-crop' => 'fill',
146
147
  'data-format' => file.format,
147
148
  'data-height' => 1,
@@ -150,9 +151,9 @@ RSpec.describe Attachy::Viewer, '.image' do
150
151
  'data-sign-url' => true,
151
152
  'data-version' => file.version,
152
153
  'data-width' => 2,
153
- 'height' => 1,
154
+ 'height' => 50,
154
155
  'src' => 'http://example.org',
155
- 'width' => 2
156
+ 'width' => 150
156
157
  }
157
158
  end
158
159
  end
@@ -164,7 +165,7 @@ RSpec.describe Attachy::Viewer, '.image' do
164
165
  it 'is used' do
165
166
  expect(file).to receive(:url).with(default_t) { 'http://example.org' }
166
167
 
167
- viewer.image file
168
+ subject.image file
168
169
  end
169
170
  end
170
171
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attachy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Washington Botelho
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-16 00:00:00.000000000 Z
11
+ date: 2017-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cloudinary