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 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