rails_admin_settings 0.5.3 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rspec +0 -0
- data/.travis.yml +15 -0
- data/README.md +1 -1
- data/Rakefile +0 -0
- data/app/models/rails_admin_settings/setting.rb +0 -1
- data/app/views/rails_admin/main/_setting_value.html.haml +0 -0
- data/config/locales/en.rails_admin_settings.yml +0 -0
- data/config/locales/ru.rails_admin_settings.yml +0 -0
- data/gemfiles/mongoid-3.0.gemfile +6 -0
- data/gemfiles/mongoid-3.1.gemfile +5 -0
- data/gemfiles/mongoid-4.0.gemfile +5 -0
- data/lib/rails_admin_settings/engine.rb +0 -0
- data/lib/rails_admin_settings/hex_color_validator.rb +0 -0
- data/lib/rails_admin_settings/processing.rb +10 -2
- data/lib/rails_admin_settings/rails_admin_config.rb +0 -0
- data/lib/rails_admin_settings/require_helpers.rb +0 -0
- data/lib/rails_admin_settings/settings.rb +62 -30
- data/lib/rails_admin_settings/storage/carrierwave.rb +0 -0
- data/lib/rails_admin_settings/types.rb +1 -1
- data/lib/rails_admin_settings/uploads.rb +8 -4
- data/lib/rails_admin_settings/validation.rb +0 -0
- data/lib/rails_admin_settings/version.rb +1 -1
- data/lib/rails_admin_settings.rb +0 -0
- data/rails_admin_settings.gemspec +3 -0
- data/spec/advanced_usage_spec.rb +0 -0
- data/spec/carrierwave_spec.rb +36 -0
- data/spec/database_trickery_spec.rb +0 -0
- data/spec/factories/setting.rb +0 -0
- data/spec/model_spec.rb +0 -0
- data/spec/paperclip_spec.rb +34 -0
- data/spec/settings_spec.rb +0 -0
- data/spec/spec_helper.rb +10 -0
- data/spec/support/1024x768.gif +0 -0
- data/spec/support/database_cleaner.rb +0 -0
- data/spec/support/mongoid.rb +0 -0
- data/spec/support/mongoid.yml +0 -0
- data/spec/types_spec.rb +0 -0
- metadata +40 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 04813caf7297c8963bfeb2ef852f48b59bad20e0
|
4
|
+
data.tar.gz: e7f5313d59b0d98ee04fd229f9cf3667b6050e06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f4d2ab7a2e3d31fa5f40bc52e61fc6ba8429d64068a2ab6fe033224937b701458ad454e18e3e2aba672415a3fcdc8c129c2d38270af5fa945578abad0367a50
|
7
|
+
data.tar.gz: df8efddcdcce6daf6a99ec0759e98e2747abed205b06df39b562ca5c4cc1215336078efb06e181627359cf915e6d5244b036601705622d0dcc3486798ebb101f
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
File without changes
|
data/.travis.yml
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
language: ruby
|
2
2
|
services: mongodb
|
3
|
+
|
4
|
+
notifications:
|
5
|
+
email: false
|
6
|
+
|
3
7
|
rvm:
|
4
8
|
- 1.9.3
|
9
|
+
- 2.0.0
|
10
|
+
- jruby-19mode
|
11
|
+
|
12
|
+
env:
|
13
|
+
- "UPLOADS=paperclip"
|
14
|
+
- "UPLOADS=carrierwave"
|
5
15
|
|
16
|
+
gemfile:
|
17
|
+
- Gemfile
|
18
|
+
- gemfiles/mongoid-3.0.gemfile
|
19
|
+
- gemfiles/mongoid-3.1.gemfile
|
20
|
+
- gemfiles/mongoid-4.0.gemfile
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
[![Build Status](https://secure.travis-ci.org/rs-pro/rails_admin_settings.png?branch=master)](http://travis-ci.org/rs-pro/rails_admin_settings)
|
4
4
|
[![Dependency Status](https://gemnasium.com/rs-pro/rails_admin_settings.png)](https://gemnasium.com/rs-pro/rails_admin_settings)
|
5
5
|
|
6
|
-
Note: This gem currently supports Mongoid only, as I don't need AR support.
|
6
|
+
Note: This gem currently supports Mongoid 3/4 only, as I don't need AR support.
|
7
7
|
|
8
8
|
Pull request with AR support will be welcome
|
9
9
|
|
data/Rakefile
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -10,13 +10,21 @@ module RailsAdminSettings
|
|
10
10
|
(RailsAdminSettings.types - ['phone', 'integer', 'yaml']).include? type
|
11
11
|
end
|
12
12
|
|
13
|
+
def upload_type?
|
14
|
+
['file', 'image'].include? type
|
15
|
+
end
|
16
|
+
|
13
17
|
def html_type?
|
14
18
|
['html', 'sanitized'].include? type
|
15
19
|
end
|
16
20
|
|
17
21
|
def value
|
18
|
-
if
|
19
|
-
file
|
22
|
+
if upload_type?
|
23
|
+
if file?
|
24
|
+
file.url
|
25
|
+
else
|
26
|
+
nil
|
27
|
+
end
|
20
28
|
elsif raw.blank? || disabled?
|
21
29
|
default_value
|
22
30
|
else
|
File without changes
|
File without changes
|
@@ -1,32 +1,39 @@
|
|
1
|
+
require 'thread'
|
2
|
+
|
1
3
|
class Settings
|
2
4
|
cattr_accessor :file_uploads_supported, :file_uploads_engine, :settings
|
3
5
|
@@file_uploads_supported = false
|
4
6
|
@@file_uploads_engine = false
|
7
|
+
@@mutex = Mutex.new
|
5
8
|
|
6
9
|
class << self
|
7
10
|
@@loaded = false
|
8
11
|
@@settings = {}
|
9
12
|
|
10
13
|
def load!
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
@@mutex.synchronize do
|
15
|
+
if @@loaded
|
16
|
+
false
|
17
|
+
else
|
18
|
+
@@settings = {}
|
19
|
+
RailsAdminSettings::Setting.all.each do |setting|
|
20
|
+
@@settings[setting.key] = setting
|
21
|
+
end
|
22
|
+
@@loaded = true
|
23
|
+
true
|
17
24
|
end
|
18
|
-
@@loaded = true
|
19
|
-
true
|
20
25
|
end
|
21
26
|
end
|
22
27
|
|
23
28
|
def unload!
|
24
|
-
|
25
|
-
@@
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
29
|
+
@@mutex.synchronize do
|
30
|
+
if @@loaded
|
31
|
+
@@settings = {}
|
32
|
+
@@loaded = false
|
33
|
+
true
|
34
|
+
else
|
35
|
+
false
|
36
|
+
end
|
30
37
|
end
|
31
38
|
end
|
32
39
|
|
@@ -54,12 +61,29 @@ class Settings
|
|
54
61
|
value = value.to_yaml
|
55
62
|
end
|
56
63
|
|
64
|
+
is_file = !options[:type].nil? && (options[:type] == 'image' || options[:type] == 'file')
|
65
|
+
if is_file
|
66
|
+
options[:raw] = ''
|
67
|
+
else
|
68
|
+
options[:raw] = value
|
69
|
+
end
|
70
|
+
|
57
71
|
if @@settings[key].nil?
|
58
|
-
write_to_database(key, options.merge(key: key
|
72
|
+
write_to_database(key, options.merge(key: key))
|
59
73
|
else
|
60
|
-
@@
|
61
|
-
|
74
|
+
@@mutex.synchronize do
|
75
|
+
@@settings[key].update_attributes!(options)
|
76
|
+
end
|
62
77
|
end
|
78
|
+
|
79
|
+
if is_file
|
80
|
+
@@mutex.synchronize do
|
81
|
+
@@settings[key].file = value
|
82
|
+
@@settings[key].save!
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
@@settings[key]
|
63
87
|
end
|
64
88
|
|
65
89
|
def valid_yaml?(value)
|
@@ -100,6 +124,7 @@ class Settings
|
|
100
124
|
load!
|
101
125
|
key = key.to_s
|
102
126
|
options.merge!(default: value)
|
127
|
+
|
103
128
|
if @@settings[key].nil?
|
104
129
|
create_setting(key, options).val
|
105
130
|
else
|
@@ -116,6 +141,7 @@ class Settings
|
|
116
141
|
key = key.to_s
|
117
142
|
options.symbolize_keys!
|
118
143
|
options[:raw] = options.delete(:default)
|
144
|
+
|
119
145
|
if @@settings[key].nil?
|
120
146
|
write_to_database(key, options.merge(key: key))
|
121
147
|
else
|
@@ -139,9 +165,12 @@ class Settings
|
|
139
165
|
def destroy!(key)
|
140
166
|
load!
|
141
167
|
key = key.to_s
|
142
|
-
|
143
|
-
|
144
|
-
@@settings.
|
168
|
+
|
169
|
+
@@mutex.synchronize do
|
170
|
+
unless @@settings[key].nil?
|
171
|
+
@@settings[key].destroy
|
172
|
+
@@settings.delete(key)
|
173
|
+
end
|
145
174
|
end
|
146
175
|
end
|
147
176
|
|
@@ -153,20 +182,23 @@ class Settings
|
|
153
182
|
|
154
183
|
def write_to_database(key, options)
|
155
184
|
key = key.to_s
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
if
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
185
|
+
|
186
|
+
@@mutex.synchronize do
|
187
|
+
@@settings[key] = RailsAdminSettings::Setting.create(options)
|
188
|
+
unless @@settings[key].persisted?
|
189
|
+
if @@settings[key].errors[:key].any?
|
190
|
+
@@settings[key] = RailsAdminSettings::Setting.where(key: key).first
|
191
|
+
if options[:raw].blank? && !@@settings[key].blank?
|
192
|
+
# do not update setting if it's not blank in DB and we want to make it blank
|
193
|
+
else
|
194
|
+
unless @@settings[key].update_attributes(options)
|
195
|
+
raise RailsAdminSettings::PersistenceException
|
196
|
+
end
|
165
197
|
end
|
166
198
|
end
|
167
199
|
end
|
200
|
+
@@settings[key]
|
168
201
|
end
|
169
|
-
@@settings[key]
|
170
202
|
end
|
171
203
|
|
172
204
|
def label key
|
File without changes
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module RailsAdminSettings
|
2
2
|
def self.types
|
3
|
-
['string', 'integer', 'html', 'sanitized', 'yaml', 'phone', 'email', 'address', 'file', 'url', 'domain', 'color']
|
3
|
+
['string', 'integer', 'html', 'sanitized', 'yaml', 'phone', 'email', 'address', 'file', 'image', 'url', 'domain', 'color']
|
4
4
|
end
|
5
5
|
end
|
@@ -5,7 +5,7 @@ module RailsAdminSettings
|
|
5
5
|
def self.included(base)
|
6
6
|
# carrierwave
|
7
7
|
if base.respond_to?(:mount_uploader)
|
8
|
-
|
8
|
+
puts "[rails_admin_settings] CarrierWave detected"
|
9
9
|
# base.field(:file, type: String)
|
10
10
|
base.mount_uploader(:file, RailsAdminSettings::Uploads::CarrierWave)
|
11
11
|
Settings.file_uploads_supported = true
|
@@ -13,16 +13,20 @@ module RailsAdminSettings
|
|
13
13
|
# paperclip
|
14
14
|
elsif Mongoid.const_defined?('Paperclip')
|
15
15
|
base.send(:include, Mongoid::Paperclip)
|
16
|
-
|
16
|
+
puts "[rails_admin_settings] PaperClip detected"
|
17
17
|
base.field(:file, type: String)
|
18
|
-
|
18
|
+
if defined?(Rails)
|
19
|
+
base.has_mongoid_attached_file(:file)
|
20
|
+
else
|
21
|
+
base.has_mongoid_attached_file(:file, path: "#{File.dirname(__FILE__)}/../../uploads/:filename", url: '/uploads/:filename')
|
22
|
+
end
|
19
23
|
base.send(:attr_accessor, :delete_file)
|
20
24
|
base.before_validation { self.file.clear if self.delete_file == '1' }
|
21
25
|
|
22
26
|
Settings.file_uploads_supported = true
|
23
27
|
Settings.file_uploads_engine = :paperclip
|
24
28
|
else
|
25
|
-
|
29
|
+
puts "[rails_admin_settings] Uploads disabled"
|
26
30
|
end
|
27
31
|
end
|
28
32
|
end
|
File without changes
|
data/lib/rails_admin_settings.rb
CHANGED
File without changes
|
@@ -34,4 +34,7 @@ Gem::Specification.new do |spec|
|
|
34
34
|
spec.add_development_dependency "validates_email_format_of", "~> 1.5.3"
|
35
35
|
spec.add_development_dependency "geocoder", "~> 1.1.6"
|
36
36
|
spec.add_development_dependency "addressable", "~> 2.3.3"
|
37
|
+
|
38
|
+
spec.add_development_dependency "glebtv-carrierwave-mongoid"
|
39
|
+
spec.add_development_dependency "glebtv-mongoid-paperclip"
|
37
40
|
end
|
data/spec/advanced_usage_spec.rb
CHANGED
File without changes
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Uploads" do
|
4
|
+
if Settings.file_uploads_engine != :carrierwave
|
5
|
+
pending "paperclip not detected, skipped. To run use UPLOADS=carrierwave rspec"
|
6
|
+
else
|
7
|
+
before :each do
|
8
|
+
f = "#{File.dirname(__FILE__)}/../uploads/1024x768.gif"
|
9
|
+
if File.file?(f)
|
10
|
+
File.unlink(f)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
it 'supports file type' do
|
14
|
+
Settings.set('file', File.open("#{File.dirname(__FILE__)}/support/1024x768.gif"), type: 'file')
|
15
|
+
|
16
|
+
# because we're not inside Rails
|
17
|
+
Settings.get(:file).file.root = '/'
|
18
|
+
|
19
|
+
Settings.get(:file).file.file.file.should eq "#{File.dirname(__FILE__).gsub('/spec', '/')}uploads/1024x768.gif"
|
20
|
+
|
21
|
+
File.exists?("#{File.dirname(__FILE__)}/../uploads/1024x768.gif").should be_true
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'supports image type' do
|
25
|
+
Settings.set('file', File.open("#{File.dirname(__FILE__)}/support/1024x768.gif"), type: 'image')
|
26
|
+
|
27
|
+
# because we're not inside Rails
|
28
|
+
Settings.get(:file).file.root = '/'
|
29
|
+
|
30
|
+
Settings.get(:file).file.file.file.should eq "#{File.dirname(__FILE__).gsub('/spec', '/')}uploads/1024x768.gif"
|
31
|
+
|
32
|
+
File.exists?("#{File.dirname(__FILE__)}/../uploads/1024x768.gif").should be_true
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
File without changes
|
data/spec/factories/setting.rb
CHANGED
File without changes
|
data/spec/model_spec.rb
CHANGED
File without changes
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
describe "Uploads" do
|
5
|
+
if Settings.file_uploads_engine != :paperclip
|
6
|
+
pending "paperclip not detected, skipped. To run use UPLOADS=paperclip rspec"
|
7
|
+
else
|
8
|
+
Paperclip.options[:log] = false
|
9
|
+
before :each do
|
10
|
+
f = "#{File.dirname(__FILE__)}/../uploads/1024x768.gif"
|
11
|
+
if File.file?(f)
|
12
|
+
File.unlink(f)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
it 'supports file type' do
|
16
|
+
Settings.set('file', File.open("#{File.dirname(__FILE__)}/support/1024x768.gif"), type: 'file')
|
17
|
+
Settings.get(:file).file_file_name.should eq '1024x768.gif'
|
18
|
+
Settings.get(:file).file_file_size.should eq 4357
|
19
|
+
Settings.file[0..21].should eq '/uploads/1024x768.gif?'
|
20
|
+
|
21
|
+
File.exists?("#{File.dirname(__FILE__)}/../uploads/1024x768.gif").should be_true
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'supports image type' do
|
25
|
+
Settings.set('file', File.open("#{File.dirname(__FILE__)}/support/1024x768.gif"), type: 'image')
|
26
|
+
Settings.get(:file).file_file_name.should eq '1024x768.gif'
|
27
|
+
Settings.get(:file).file_file_size.should eq 4357
|
28
|
+
Settings.file[0..21].should eq '/uploads/1024x768.gif?'
|
29
|
+
|
30
|
+
File.exists?("#{File.dirname(__FILE__)}/../uploads/1024x768.gif").should be_true
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
data/spec/settings_spec.rb
CHANGED
File without changes
|
data/spec/spec_helper.rb
CHANGED
@@ -12,6 +12,16 @@ require 'database_cleaner'
|
|
12
12
|
require 'factory_girl'
|
13
13
|
require 'mongoid-rspec'
|
14
14
|
|
15
|
+
require "glebtv-mongoid-paperclip" if ENV['UPLOADS'] == 'paperclip'
|
16
|
+
if ENV['UPLOADS'] == 'carrierwave'
|
17
|
+
require "glebtv-carrierwave-mongoid"
|
18
|
+
CarrierWave.configure do |config|
|
19
|
+
config.asset_host = proc do |file|
|
20
|
+
"http://localhost"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
15
25
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each do |f|
|
16
26
|
require f
|
17
27
|
end
|
Binary file
|
File without changes
|
data/spec/support/mongoid.rb
CHANGED
File without changes
|
data/spec/support/mongoid.yml
CHANGED
File without changes
|
data/spec/types_spec.rb
CHANGED
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_admin_settings
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gleb Tv
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-11-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mongoid
|
@@ -206,6 +206,34 @@ dependencies:
|
|
206
206
|
- - ~>
|
207
207
|
- !ruby/object:Gem::Version
|
208
208
|
version: 2.3.3
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: glebtv-carrierwave-mongoid
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - '>='
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
type: :development
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - '>='
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: glebtv-mongoid-paperclip
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - '>='
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '0'
|
230
|
+
type: :development
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - '>='
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: '0'
|
209
237
|
description: Mongoid / RailsAdmin App Settings management
|
210
238
|
email:
|
211
239
|
- glebtv@gmail.com
|
@@ -226,6 +254,9 @@ files:
|
|
226
254
|
- app/views/rails_admin/main/_setting_value.html.haml
|
227
255
|
- config/locales/en.rails_admin_settings.yml
|
228
256
|
- config/locales/ru.rails_admin_settings.yml
|
257
|
+
- gemfiles/mongoid-3.0.gemfile
|
258
|
+
- gemfiles/mongoid-3.1.gemfile
|
259
|
+
- gemfiles/mongoid-4.0.gemfile
|
229
260
|
- lib/rails_admin_settings.rb
|
230
261
|
- lib/rails_admin_settings/engine.rb
|
231
262
|
- lib/rails_admin_settings/hex_color_validator.rb
|
@@ -240,12 +271,15 @@ files:
|
|
240
271
|
- lib/rails_admin_settings/version.rb
|
241
272
|
- rails_admin_settings.gemspec
|
242
273
|
- spec/advanced_usage_spec.rb
|
274
|
+
- spec/carrierwave_spec.rb
|
243
275
|
- spec/database_trickery_spec.rb
|
244
276
|
- spec/factories/setting.rb
|
245
277
|
- spec/label_spec.rb
|
246
278
|
- spec/model_spec.rb
|
279
|
+
- spec/paperclip_spec.rb
|
247
280
|
- spec/settings_spec.rb
|
248
281
|
- spec/spec_helper.rb
|
282
|
+
- spec/support/1024x768.gif
|
249
283
|
- spec/support/database_cleaner.rb
|
250
284
|
- spec/support/mongoid.rb
|
251
285
|
- spec/support/mongoid.yml
|
@@ -270,18 +304,21 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
270
304
|
version: '0'
|
271
305
|
requirements: []
|
272
306
|
rubyforge_project:
|
273
|
-
rubygems_version: 2.
|
307
|
+
rubygems_version: 2.1.10
|
274
308
|
signing_key:
|
275
309
|
specification_version: 4
|
276
310
|
summary: Setting for Rails app with mongoid and RailsAdmin
|
277
311
|
test_files:
|
278
312
|
- spec/advanced_usage_spec.rb
|
313
|
+
- spec/carrierwave_spec.rb
|
279
314
|
- spec/database_trickery_spec.rb
|
280
315
|
- spec/factories/setting.rb
|
281
316
|
- spec/label_spec.rb
|
282
317
|
- spec/model_spec.rb
|
318
|
+
- spec/paperclip_spec.rb
|
283
319
|
- spec/settings_spec.rb
|
284
320
|
- spec/spec_helper.rb
|
321
|
+
- spec/support/1024x768.gif
|
285
322
|
- spec/support/database_cleaner.rb
|
286
323
|
- spec/support/mongoid.rb
|
287
324
|
- spec/support/mongoid.yml
|