attache_rails 0.1.4 → 0.2.0
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 +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
|