attache_rails 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -0
- data/app/assets/javascripts/attache/ujs.js +4 -4
- data/lib/attache_rails/model.rb +11 -7
- data/lib/attache_rails/version.rb +1 -1
- metadata +72 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 07bb6c168bed2d516774523756dd125d86ca0729
|
4
|
+
data.tar.gz: b788a5d74a9b1d51c7c6981a6f57d98da62ba060
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c8e22d8e34a7a2464af773442eee64f857ccb274e3ea53f9f58732f422b583c2d3b0cca7b32778d5f1d1f407cd166729f68381eff3401358e296bd169d9b65d
|
7
|
+
data.tar.gz: 1bb4fc71ecfbfa8301ed12eba825dd541ae508b184ebdf62e2c4948033463a025711af00feccde92478e5ae69aca32cee370915dd9535c27bb85a06233546a73
|
data/README.md
CHANGED
@@ -33,6 +33,12 @@ If you want to customize the file upload look and feel, define your own react `<
|
|
33
33
|
//= require attache
|
34
34
|
```
|
35
35
|
|
36
|
+
The `AttacheRails.upgrade_fileinputs` idempotent function is setup to find all the elements with `enable-attache` css class and upgrade them to use the direct upload & preview javascript. If you wish to re-run this function any other time, e.g. hookup the `cocoon:after-insert` event, you may
|
37
|
+
|
38
|
+
``` javascript
|
39
|
+
$(document).on('cocoon:after-insert', AttacheRails.upgrade_fileinputs);
|
40
|
+
```
|
41
|
+
|
36
42
|
|
37
43
|
## Usage
|
38
44
|
|
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
function
|
1
|
+
window.AttacheRails = {
|
2
|
+
upgrade_fileinputs: function() {
|
3
3
|
var safeWords = { 'class': 'className', 'for': 'htmlFor' };
|
4
4
|
var sel = document.getElementsByClassName('enable-attache');
|
5
5
|
var ele, attrs, name, value;
|
@@ -18,6 +18,6 @@
|
|
18
18
|
React.render(React.createElement(AttacheFileInput, React.__spread({}, attrs)), wrap);
|
19
19
|
}
|
20
20
|
}
|
21
|
+
};
|
21
22
|
|
22
|
-
|
23
|
-
})();
|
23
|
+
$(document).on('page:change', AttacheRails.upgrade_fileinputs);
|
data/lib/attache_rails/model.rb
CHANGED
@@ -5,6 +5,10 @@ require "httpclient"
|
|
5
5
|
module AttacheRails
|
6
6
|
module Utils
|
7
7
|
class << self
|
8
|
+
def array(value)
|
9
|
+
Array.wrap(value).reject(&:blank?)
|
10
|
+
end
|
11
|
+
|
8
12
|
def attache_retry_doing(max_retries, retries = 0)
|
9
13
|
yield
|
10
14
|
rescue Exception
|
@@ -66,7 +70,7 @@ module AttacheRails
|
|
66
70
|
end
|
67
71
|
|
68
72
|
def attaches_discard!(files = attaches_discarded)
|
69
|
-
files.reject!
|
73
|
+
files.reject!(&:blank?)
|
70
74
|
files.uniq!
|
71
75
|
if files.present?
|
72
76
|
logger.info "DELETE #{files.inspect}"
|
@@ -83,17 +87,17 @@ module AttacheRails
|
|
83
87
|
module ClassMethods
|
84
88
|
def has_one_attache(name)
|
85
89
|
serialize name, JSON
|
86
|
-
define_method "#{name}_options", -> (geometry, options = {}) { Utils.attache_options(geometry,
|
90
|
+
define_method "#{name}_options", -> (geometry, options = {}) { Utils.attache_options(geometry, Utils.array(self.send("#{name}_attributes", geometry)), multiple: false, **options) }
|
87
91
|
define_method "#{name}_url", -> (geometry) { self.send("#{name}_attributes", geometry).try(:[], 'url') }
|
88
92
|
define_method "#{name}_attributes", -> (geometry) { str = self.send(name); Utils.attache_url_for(str, geometry) if str; }
|
89
93
|
define_method "#{name}=", -> (value) {
|
90
94
|
new_value = (value.respond_to?(:read) ? Utils.attache_upload_and_get_json(value) : value)
|
91
|
-
super(new_value)
|
95
|
+
super(Utils.array(new_value).first)
|
92
96
|
}
|
93
97
|
define_method "#{name}_discard_was",-> do
|
94
98
|
new_value = self.send("#{name}")
|
95
99
|
old_value = self.send("#{name}_was")
|
96
|
-
obsoleted =
|
100
|
+
obsoleted = Utils.array(old_value).collect {|x| JSON.parse(x)['path'] } - Utils.array(new_value).collect {|x| JSON.parse(x)['path'] }
|
97
101
|
self.attaches_discarded ||= []
|
98
102
|
self.attaches_discarded.push(*obsoleted)
|
99
103
|
end
|
@@ -113,12 +117,12 @@ module AttacheRails
|
|
113
117
|
define_method "#{name}_urls", -> (geometry) { self.send("#{name}_attributes", geometry).collect {|attrs| attrs['url'] } }
|
114
118
|
define_method "#{name}_attributes", -> (geometry) {
|
115
119
|
(self.send(name) || []).inject([]) do |sum, str|
|
116
|
-
sum + (str.
|
120
|
+
sum + Utils.array(str.present? && Utils.attache_url_for(str, geometry))
|
117
121
|
end
|
118
122
|
}
|
119
123
|
define_method "#{name}=", -> (array) {
|
120
|
-
new_value = (
|
121
|
-
super(new_value)
|
124
|
+
new_value = Utils.array(array).collect {|value| value.respond_to?(:read) ? Utils.attache_upload_and_get_json(value) : value }
|
125
|
+
super(Utils.array new_value)
|
122
126
|
}
|
123
127
|
define_method "#{name}_discard_was",-> do
|
124
128
|
new_value = [*self.send("#{name}")]
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: attache_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- choonkeat
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.0.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.0.0
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: httpclient
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -24,6 +38,62 @@ dependencies:
|
|
24
38
|
- - ">="
|
25
39
|
- !ruby/object:Gem::Version
|
26
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec-rails
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: guard-rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: sqlite3
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: factory_girl_rails
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
27
97
|
description:
|
28
98
|
email:
|
29
99
|
- choonkeat@gmail.com
|