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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8234de5aefd56b79098a8a169d480630f225e280
4
- data.tar.gz: 9b737e9282765e17251242eed4d48ebcc7ed3746
3
+ metadata.gz: 07bb6c168bed2d516774523756dd125d86ca0729
4
+ data.tar.gz: b788a5d74a9b1d51c7c6981a6f57d98da62ba060
5
5
  SHA512:
6
- metadata.gz: 2ab9a10a5ba8e91e57a9689f9368b979977ada2c787f906b8acbb9d39056bbc4758c0d3d25e86d0c0144f75c7ce49b6f7f6d94cba4d4149d091c6a92c7a7daa4
7
- data.tar.gz: 123707d54c09d6406924ae1b9c2b791c9b70eeae26f7a3737990d1fd367007bb017a4c22cf5c166faa54fc17c1456626f5c716053a7e8f53569ff77dbc50c0bf
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
- (function() {
2
- function attacheFileInputs() {
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
- $(document).on('page:change', attacheFileInputs);
23
- })();
23
+ $(document).on('page:change', AttacheRails.upgrade_fileinputs);
@@ -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! &:blank?
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, [self.send("#{name}_attributes", geometry)], multiple: false, **options) }
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 = [*old_value].collect {|x| JSON.parse(x)['path'] } - [*new_value].collect {|x| JSON.parse(x)['path'] }
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.blank? ? [] : [Utils.attache_url_for(str, geometry)])
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 = ((array || []).reject(&:blank?).collect {|value| value.respond_to?(:read) ? Utils.attache_upload_and_get_json(value) : 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}")]
@@ -1,3 +1,3 @@
1
1
  module AttacheRails
2
- VERSION = "0.1.4"
2
+ VERSION = "0.2.0"
3
3
  end
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.1.4
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-01 00:00:00.000000000 Z
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