essay-carrierwave 1.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f89ed883ff13eac1fb3e60b21b2080358db8a5fd
4
+ data.tar.gz: a06588187ed94cb1ebd05b55271aaa7d21718dba
5
+ SHA512:
6
+ metadata.gz: bd7e6ae01298117ffc5c3438168777f41d171d9e83d70684145322a2d43cbebd1efe80c2ec8e4f979260de4a1ac2db68663a2dd384a4810c048d4e104c381f02
7
+ data.tar.gz: 24dbcc10e628c4711276edf30141053b581c45f384e7dfcec324fe6dfd9e2156a375ed678705a69988ea9d6271204485e458f1069c3a67619c4548e4679b3d74
data/.gitignore ADDED
@@ -0,0 +1,15 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
15
+ .idea
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ # encoding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ source 'https://rubygems.org'
5
+
6
+ # Specify your gem's dependencies in essay-carrierwave.gemspec
7
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2016 Yaroslav Konoplov
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,14 @@
1
+ ```ruby
2
+ class Article < ActiveRecord::Base
3
+ mount_uploader :poster, PosterUploader
4
+ end
5
+
6
+ Article.features.has_carrierwave_uploaders? # => true
7
+ Article.attribute_features[:poster].has_carrierwave_uploader? # => true
8
+ Article.attribute_features[:poster].carrierwave.mounted_on # => :poster
9
+ ```
10
+
11
+ ## Gemfile
12
+ ```ruby
13
+ gem 'essay-carrierwave', github: 'yivo/essay-carrierwave'
14
+ ```
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'essay-carrierwave'
6
+ s.version = '1.0.1'
7
+ s.authors = ['Yaroslav Konoplov']
8
+ s.email = ['eahome00@gmail.com']
9
+ s.summary = 'essay-carrierwave'
10
+ s.description = 'essay-carrierwave'
11
+ s.homepage = 'http://github.com/yivo/essay-carrierwave'
12
+ s.license = 'MIT'
13
+
14
+ s.executables = `git ls-files -z -- bin/*`.split("\x0").map{ |f| File.basename(f) }
15
+ s.files = `git ls-files -z`.split("\x0")
16
+ s.test_files = `git ls-files -z -- {test,spec,features}/*`.split("\x0")
17
+ s.require_paths = ['lib']
18
+
19
+ s.add_dependency 'carrierwave', '>= 0'
20
+ s.add_dependency 'essay', '~> 1.0'
21
+ end
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ class Essay::AttributeFeatures
5
+ def has_uploader?
6
+ has_carrierwave_uploader?
7
+ end
8
+
9
+ def has_carrierwave_uploader?
10
+ !!model_features.with(:carrierwave) { |cw| cw.uploader_for(this_attribute.name) }
11
+ end
12
+
13
+ def carrierwave
14
+ @carrierwave || if has_carrierwave_uploader?
15
+ @carrierwave = HasCarrierWaveUploader.new(env)
16
+ end
17
+ end
18
+
19
+ serialize do
20
+ {
21
+ has_carrierwave_uploader: has_carrierwave_uploader?,
22
+ carrierwave: carrierwave.try(:to_hash)
23
+ }
24
+ end
25
+
26
+ class HasCarrierWaveUploader < Base
27
+ # class Article
28
+ # mount_uploader :poster, PosterUploader
29
+ # end
30
+ #
31
+ # Article.attribute_features[:poster].carrierwave.uploader => PosterUploader
32
+ #
33
+ def uploader
34
+ top_feature.uploader_for(this_attribute.name)
35
+ end
36
+
37
+ # class Article
38
+ # mount_uploader :poster, PosterUploader
39
+ # end
40
+ #
41
+ # Article.attribute_features[:poster].carrierwave.mounted_as => :poster
42
+ #
43
+ def mounted_as
44
+ top_feature.accessor_for(this_attribute.name)
45
+ end
46
+
47
+ serialize do
48
+ {
49
+ uploader: uploader.name,
50
+ mounted_as: mounted_as
51
+ }
52
+ end
53
+
54
+ private
55
+ def top_feature
56
+ model_features.carrierwave
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,140 @@
1
+ # encoding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ class Essay::ModelFeatures
5
+ def has_uploaders?
6
+ has_carrierwave_uploaders?
7
+ end
8
+
9
+ def has_carrierwave_uploaders?
10
+ has_own_carrierwave_uploaders? || has_translated_carrierwave_uploaders?
11
+ end
12
+
13
+ # class Article
14
+ # mount_uploader :poster, PosterUploader
15
+ # end
16
+ #
17
+ # Article.features.has_own_carrierwave_uploaders? => true
18
+ # Article.features.has_translated_carrierwave_uploaders? => false
19
+ #
20
+ def has_own_carrierwave_uploaders?
21
+ model_class.try(:uploaders).present?
22
+ end
23
+
24
+ # class Article
25
+ # translates :poster
26
+ # Translation.mount_uploader :poster, PosterUploader
27
+ # end
28
+ #
29
+ # Article.features.has_own_carrierwave_uploaders? => false
30
+ # Article.features.has_translated_carrierwave_uploaders? => true
31
+ #
32
+ def has_translated_carrierwave_uploaders?
33
+ !!with(:globalize) { |g| g.model_class_for_translations.features.has_carrierwave_uploaders? }
34
+ end
35
+
36
+ def carrierwave
37
+ @carrierwave || begin
38
+ @carrierwave = CarrierWave.new(env) if has_carrierwave_uploaders?
39
+ end
40
+ end
41
+
42
+ serialize do
43
+ {
44
+ has_carrierwave_uploaders: has_carrierwave_uploaders?,
45
+ has_own_carrierwave_uploaders: has_own_carrierwave_uploaders?,
46
+ has_translated_carrierwave_uploaders: has_translated_carrierwave_uploaders?,
47
+ carrierwave: carrierwave.try(:to_hash)
48
+ }
49
+ end
50
+
51
+ class CarrierWave < Base
52
+ # class Article
53
+ # mount_uploader :poster, PosterUploader
54
+ # end
55
+ #
56
+ # Article.features.carrierwave.table => { poster: PosterUploader }
57
+ #
58
+ def table
59
+ model_class.uploaders
60
+ end
61
+
62
+ # class Article
63
+ # mount_uploader :poster, PosterUploader, mount_on: :poster_path
64
+ # end
65
+ #
66
+ # Article.features.carrierwave.options => { poster: { mount_on: :poster_path } }
67
+ #
68
+ def options
69
+ model_class.uploader_options
70
+ end
71
+
72
+ # class Article
73
+ # mount_uploader :poster, PosterUploader, mount_on: :poster_path
74
+ # end
75
+ #
76
+ # Article.features.carrierwave.uploader_for(:poster_path) => PosterUploader
77
+ #
78
+ def uploader_for(attr_name)
79
+ attr_name = convert_key(attr_name)
80
+
81
+ if pair = pair_for(attr_name)
82
+ table[pair.first]
83
+
84
+ else
85
+ send_to_translation(:uploader_for, attr_name)
86
+ end
87
+ end
88
+
89
+ # class Article
90
+ # mount_uploader :poster, PosterUploader, mount_on: :poster_path
91
+ # end
92
+ #
93
+ # Article.features.carrierwave.accessor_for(:poster_path) => :poster
94
+ #
95
+ def accessor_for(attr_name)
96
+ attr_name = convert_key(attr_name)
97
+
98
+ if table.has_key?(attr_name)
99
+ attr_name
100
+
101
+ elsif pair = pair_for(attr_name)
102
+ pair.first
103
+
104
+ else
105
+ send_to_translation(:accessor_for, attr_name)
106
+ end
107
+ end
108
+
109
+ serialize do
110
+ {
111
+ table: table,
112
+ options: options
113
+ }
114
+ end
115
+
116
+ private
117
+ def pair_for(mounted_on_or_attr_name)
118
+ all_options = options
119
+ key = convert_key(mounted_on_or_attr_name)
120
+
121
+ if all_options.has_key?(key)
122
+ {key => all_options[key]}
123
+ else
124
+ all_options.find do |name, options|
125
+ options.is_a?(Hash) && (mount_on = options[:mount_on]) && mount_on.to_sym == key
126
+ end
127
+ end
128
+ end
129
+
130
+ def convert_key(key)
131
+ key.is_a?(Symbol) ? key : key.to_sym
132
+ end
133
+
134
+ def send_to_translation(method, *args)
135
+ model_features.with(:globalize) do |g|
136
+ g.model_class_for_translations.features.carrierwave.send(method, *args)
137
+ end
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,7 @@
1
+ # encoding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ require 'carrierwave'
5
+ require 'essay'
6
+ require 'essay-carrierwave/model'
7
+ require 'essay-carrierwave/attribute'
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: essay-carrierwave
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Yaroslav Konoplov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-10-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: carrierwave
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: essay
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
41
+ description: essay-carrierwave
42
+ email:
43
+ - eahome00@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitignore"
49
+ - Gemfile
50
+ - LICENSE.txt
51
+ - README.md
52
+ - essay-carrierwave.gemspec
53
+ - lib/essay-carrierwave.rb
54
+ - lib/essay-carrierwave/attribute.rb
55
+ - lib/essay-carrierwave/model.rb
56
+ homepage: http://github.com/yivo/essay-carrierwave
57
+ licenses:
58
+ - MIT
59
+ metadata: {}
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubyforge_project:
76
+ rubygems_version: 2.5.1
77
+ signing_key:
78
+ specification_version: 4
79
+ summary: essay-carrierwave
80
+ test_files: []