ack_rails_admin_settings 1.2.1.3 → 1.2.2

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: 44e65f11e42fe108a21c419dc2b291796b18be89
4
- data.tar.gz: f711ebbdd3551c06ec781ef36e67db2d3f55b51b
3
+ metadata.gz: 624635c832be44255141d7ada5d09cc18abf8b89
4
+ data.tar.gz: d0a9ed54f0ca8df937ac06fbcd51364f58a61c02
5
5
  SHA512:
6
- metadata.gz: 4660599fd64007b1878537a91cff2067fde22979f1ae34aa3544f78999afc5ce9fe63d3250a67f8e555d44d285817e4686a22b415e87d5558e013d280aa473a7
7
- data.tar.gz: 3b25d6f68beabe7d83db4d564c18bf1238cce8204918cbc2f9d0d7f7af9333e3fa2ea73396d52cad0e85a6ca91f0e059709dab2cc09462e27ad473f56acdfa0e
6
+ metadata.gz: 46e9b4192e3b1b9e83129de9abb34ac8b59abe36d97a2a01cd4484309a3b61fc61948bb4812416152b25e20e2c0e2b7cabc6de4908d3f4442180bb33f65e3931
7
+ data.tar.gz: 7a0dbcf80aee6d511d2b572caf2af051fdce29628b8a0b987d2e0937a9aa157218e64e4cc2ef1615f4940aae5c61dcc51464e33447c4169892a9e2492924c19b
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 1.2.2
2
+ - Loadable Settings. You can cancel load some settings for save time, memory, etc. Because of cache, perhaps.
3
+ - DELEGATE :p, :puts and :block_given? for Kernel. Prevent Settings.p and etc
4
+ - Caching improves.
5
+
1
6
  ## 1.2.1
2
7
 
3
8
  - Remove HancockCMS support (moved into CMS and cache plugin for CMS).
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ack_rails_admin_settings (1.2.1.3)
4
+ ack_rails_admin_settings (1.2.2)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -65,7 +65,7 @@ GEM
65
65
  erubis (2.7.0)
66
66
  factory_girl (4.8.0)
67
67
  activesupport (>= 3.0.0)
68
- geocoder (1.4.1)
68
+ geocoder (1.4.3)
69
69
  glebtv-carrierwave-mongoid (0.7.0)
70
70
  carrierwave (~> 0.9.0)
71
71
  mongoid (~> 4.0.0.alpha1)
@@ -74,7 +74,7 @@ GEM
74
74
  paperclip (~> 5.1.0)
75
75
  globalid (0.3.7)
76
76
  activesupport (>= 4.1.0)
77
- i18n (0.7.0)
77
+ i18n (0.8.0)
78
78
  json (2.0.3)
79
79
  loofah (2.0.3)
80
80
  nokogiri (>= 1.5.9)
@@ -164,7 +164,7 @@ GEM
164
164
  crass (~> 1.0.2)
165
165
  nokogiri (>= 1.4.4)
166
166
  nokogumbo (~> 1.4.1)
167
- simplecov (0.12.0)
167
+ simplecov (0.13.0)
168
168
  docile (~> 1.1.0)
169
169
  json (>= 1.8, < 3)
170
170
  simplecov-html (~> 0.10.0)
@@ -37,6 +37,10 @@ module RailsAdminSettings
37
37
  enabled
38
38
  end
39
39
 
40
+ def loadable?
41
+ loadable
42
+ end
43
+
40
44
  def name
41
45
  label.blank? ? key : label
42
46
  end
@@ -2,6 +2,9 @@ module RailsAdminSettings
2
2
  # we are inheriting from BasicObject so we don't get a bunch of methods from
3
3
  # Kernel or Object
4
4
  class Fallback < BasicObject
5
+
6
+ DELEGATE = [:puts, :p, :block_given?].freeze
7
+
5
8
  def initialize(ns, fb)
6
9
  @ns = ns
7
10
  @fb = fb
@@ -11,10 +14,12 @@ module RailsAdminSettings
11
14
  "#<RailsAdminSettings::Fallback ns: #{@ns.inspect}, fb: #{@fb.inspect}>".freeze
12
15
  end
13
16
 
14
- def method_missing(*args)
17
+ def method_missing(name, *args, &block)
18
+ return ::Kernel.send(name, *args, &block) if DELEGATE.include?(name)
19
+
15
20
  @ns.ns_mutex.synchronize do
16
21
  @ns.fallback = @fb
17
- @ns.__send__(*args)
22
+ @ns.__send__(name, *args, &block)
18
23
  end
19
24
  end
20
25
  end
@@ -12,11 +12,24 @@ module RailsAdminSettings
12
12
  field :key, type: String
13
13
  field :raw, type: String
14
14
  field :label, type: String
15
- index({ns: 1, key: 1}, {unique: true, sparse: true})
15
+ field :loadable, type: Boolean, default: true
16
+ scope :loadable, -> {
17
+ where(loadable: true)
18
+ }
19
+ index({ns: 1, key: 1, loadable: 1}, {unique: true, sparse: true})
16
20
 
17
21
  field :cache_keys_str, type: String, default: ""
18
22
  def cache_keys
19
- cache_keys_str.split(/\s+/).map { |k| k.strip }.reject { |k| k.blank? }
23
+ @cache_keys ||= cache_keys_str.split(/\s+/).map { |k| k.strip }.reject { |k| k.blank? }
24
+ end
25
+ def add_cache_key(_key)
26
+ unless has_cache_key?(_key)
27
+ self.cache_keys_str = (cache_keys + [_key]).uniq.join(" ")
28
+ @cache_key = nil
29
+ end
30
+ end
31
+ def has_cache_key?(_key)
32
+ cache_keys.include?(_key)
20
33
  end
21
34
 
22
35
  after_touch :clear_cache
@@ -2,6 +2,9 @@ module RailsAdminSettings
2
2
  # we are inheriting from BasicObject so we don't get a bunch of methods from
3
3
  # Kernel or Object
4
4
  class Namespaced < BasicObject
5
+
6
+ DELEGATE = [:puts, :p, :block_given?].freeze
7
+
5
8
  attr_accessor :settings, :fallback
6
9
  attr_reader :loaded, :mutex, :ns_mutex, :name
7
10
 
@@ -29,7 +32,7 @@ module RailsAdminSettings
29
32
  return if loaded
30
33
  @loaded = true
31
34
  @settings = {}
32
- ::RailsAdminSettings::Setting.ns(@name).each do |setting|
35
+ ::RailsAdminSettings::Setting.ns(@name).loadable.each do |setting|
33
36
  @settings[setting.key] = setting
34
37
  end
35
38
  end
@@ -43,18 +46,63 @@ module RailsAdminSettings
43
46
  end
44
47
 
45
48
  # returns setting object
46
- def get(key, options = {})
47
- load!
49
+ def get(key, options = {}, &block)
50
+ options[:loadable] = true unless options[:loadable] == false
51
+ load! if options[:loadable]
48
52
  key = key.to_s
49
53
  mutex.synchronize do
50
54
  @locked = true
51
- v = @settings[key]
52
- if v.nil?
53
- unless @fallback.nil? || @fallback == @name
54
- v = ::Settings.ns(@fallback).getnc(key)
55
+ _loadable = options[:loadable]
56
+ unless _loadable
57
+ v = ::RailsAdminSettings::Setting.ns(name).where(key: key).first
58
+ if v
59
+ unless options[:cache_keys_str].present?
60
+ _cache_keys = options.delete(:cache_keys)
61
+ _cache_keys ||= options.delete(:cache_key)
62
+
63
+ if _cache_keys.nil?
64
+ # if _cache
65
+ # options[:cache_keys_str] = name.underscore
66
+ # end
67
+ else
68
+ if _cache_keys.is_a?(::Array)
69
+ options[:cache_keys_str] = _cache_keys.map { |k| k.to_s.strip }.join(" ")
70
+ else
71
+ options[:cache_keys_str] = _cache_keys.to_s.strip
72
+ end
73
+ end
74
+ end
75
+ options.delete(:cache_keys)
76
+ options.delete(:cache_key)
77
+
78
+ _old_cache_keys = options[:cache_keys_str].strip.split(" ")
79
+ # options[:cache_keys_str] = ("#{v.cache_keys_str} #{(options[:cache_keys_str] || "")}".strip.split(" ")).uniq
80
+ # options[:cache_keys_str] = ("#{v.cache_keys_str.join(" ")} #{(options[:cache_keys_str] || "")}".strip.split(" ")).uniq
81
+ options[:cache_keys_str] = (_old_cache_keys + v.cache_keys).uniq
82
+ options[:overwrite] = true if (options[:cache_keys_str] - _old_cache_keys).blank?
83
+ options[:cache_keys_str] = options[:cache_keys_str].map { |k| k.to_s.strip }.join(" ")
55
84
  end
85
+ else
86
+ v = @settings[key]
87
+ end
88
+ _overwrite = options[:overwrite]
89
+ if v.nil? or _overwrite
56
90
  if v.nil?
57
- v = set(key, options[:default], options)
91
+ unless @fallback.nil? || @fallback == @name
92
+ v = ::Settings.ns(@fallback).getnc(key)
93
+ end
94
+ end
95
+ if v.nil? or _overwrite
96
+ if block
97
+ begin
98
+ v = set(key, yield, options)
99
+ rescue Exception => ex
100
+ # puts "WTF"
101
+ # puts ex.inspect
102
+ end
103
+ else
104
+ v = set(key, options[:default], options)
105
+ end
58
106
  end
59
107
  end
60
108
  @locked = false
@@ -65,13 +113,17 @@ module RailsAdminSettings
65
113
  # returns setting object
66
114
  def getnc(key)
67
115
  load!
68
- mutex.synchronize do
116
+ ret = mutex.synchronize do
69
117
  self.settings[key]
70
118
  end
119
+ unless ret
120
+ ret = ::RailsAdminSettings::Setting.ns(name).where(key: key).first
121
+ end
122
+ ret
71
123
  end
72
124
 
73
125
  def set(key, value = nil, options = {})
74
- load! unless @locked
126
+ load! unless @locked if options[:loadable]
75
127
  key = key.to_s
76
128
  options.symbolize_keys!
77
129
  if options.key?(:cache)
@@ -87,8 +139,8 @@ module RailsAdminSettings
87
139
  end
88
140
 
89
141
  unless options[:cache_keys_str].present?
90
- options[:cache_keys] ||= options.delete :cache_key
91
- _cache_keys = options.delete :cache_keys
142
+ _cache_keys = options.delete(:cache_keys)
143
+ _cache_keys ||= options.delete(:cache_key)
92
144
 
93
145
  if _cache_keys.nil?
94
146
  # if _cache
@@ -96,21 +148,24 @@ module RailsAdminSettings
96
148
  # end
97
149
  else
98
150
  if _cache_keys.is_a?(::Array)
99
- options[:cache_keys_str] = _cache_keys.map { |k| k.to_s }.join(" ")
151
+ options[:cache_keys_str] = _cache_keys.map { |k| k.to_s.strip }.join(" ")
100
152
  else
101
- options[:cache_keys_str] = _cache_keys.to_s
153
+ options[:cache_keys_str] = _cache_keys.to_s.strip
102
154
  end
103
155
  end
104
156
  end
157
+ options.delete(:cache_keys)
158
+ options.delete(:cache_key)
105
159
 
106
160
  options.merge!(value: value)
107
161
  if @locked
108
- write_to_database(key, options)
162
+ ret = write_to_database(key, options)
109
163
  else
110
164
  mutex.synchronize do
111
- write_to_database(key, options)
165
+ ret = write_to_database(key, options)
112
166
  end
113
167
  end
168
+ ret
114
169
  end
115
170
 
116
171
  def enabled?(key, options = {})
@@ -142,7 +197,8 @@ module RailsAdminSettings
142
197
  end
143
198
 
144
199
  # returns processed setting value
145
- def method_missing(key, *args)
200
+ def method_missing(key, *args, &block)
201
+ return ::Kernel.send(key, *args, &block) if DELEGATE.include?(key)
146
202
  key = key.to_s
147
203
  if key.end_with?('_enabled?')
148
204
  key = key[0..-10]
@@ -172,7 +228,7 @@ module RailsAdminSettings
172
228
  value = args.first
173
229
  set(key, value, options).val
174
230
  else
175
- v = get(key, args.first || {})
231
+ v = get(key, args.first || {}, &block)
176
232
  if v.nil?
177
233
  ''
178
234
  else
@@ -187,27 +243,38 @@ module RailsAdminSettings
187
243
  options[:raw] = ''
188
244
  file = options[:value]
189
245
  else
190
- options[:raw] = options[:value]
246
+ options[:raw] = options[:value] if options[:value]
191
247
  end
192
248
 
193
249
  options.delete(:value)
194
250
  options.delete(:default)
195
251
  options[:ns] = @name
196
-
197
252
  if @settings[key].nil?
198
- options.delete(:overwrite)
199
- v = ::RailsAdminSettings::Setting.create(options.merge(key: key))
200
- if !v.persisted?
201
- if v.errors[:key].any?
202
- v = ::RailsAdminSettings::Setting.where(key: key).first
203
- if v.nil?
204
- ::Kernel.raise ::RailsAdminSettings::PersistenceException, 'Fatal: error in key and not in DB'
253
+ if options.delete(:overwrite)
254
+ v = ::RailsAdminSettings::Setting.ns(options[:ns]).where(key: key).first
255
+ if v
256
+ opts = options.dup
257
+ v.update_attributes!(opts)
258
+ end
259
+ end
260
+ if v.nil?
261
+ v = ::RailsAdminSettings::Setting.create(options.merge(key: key))
262
+ if !v.persisted?
263
+ if v.errors[:key].any?
264
+ v = ::RailsAdminSettings::Setting.where(key: key).first
265
+ if v.nil?
266
+ ::Kernel.raise ::RailsAdminSettings::PersistenceException, 'Fatal: error in key and not in DB'
267
+ end
268
+ else
269
+ ::Kernel.raise ::RailsAdminSettings::PersistenceException, v.errors.full_messages.join(',')
205
270
  end
206
- else
207
- ::Kernel.raise ::RailsAdminSettings::PersistenceException, v.errors.full_messages.join(',')
208
271
  end
209
272
  end
210
- @settings[key] = v
273
+ if options[:loadable]
274
+ @settings[key] = v
275
+ else
276
+ return v
277
+ end
211
278
  else
212
279
  opts = options.dup
213
280
  if options[:overwrite] == false && !@settings[key].value.blank?
@@ -218,7 +285,7 @@ module RailsAdminSettings
218
285
  opts.delete(:overwrite)
219
286
  @settings[key].update_attributes!(opts)
220
287
  end
221
- if is_file
288
+ if is_file and options[:loadable] and @settings[key]
222
289
  if options[:overwrite] != false || !@settings[key].file?
223
290
  @settings[key].file = file
224
291
  @settings[key].save!
@@ -10,8 +10,10 @@ module RailsAdminSettings
10
10
  list do
11
11
  if Object.const_defined?('RailsAdminToggleable')
12
12
  field :enabled, :toggle
13
+ field :loadable, :toggle
13
14
  else
14
15
  field :enabled
16
+ field :loadable
15
17
  end
16
18
  field :kind do
17
19
  searchable true
@@ -50,6 +52,7 @@ module RailsAdminSettings
50
52
 
51
53
  edit do
52
54
  field :enabled
55
+ field :loadable
53
56
  field :ns do
54
57
  read_only true
55
58
  help false
@@ -47,7 +47,7 @@ module RailsAdminSettings
47
47
  require 'geocoder'
48
48
  yield
49
49
  rescue LoadError => e
50
- e.message << " [rails_admin_settings] Please add gem 'validates_email_format_of' to your Gemfile to use email kind settings".freeze
50
+ e.message << " [rails_admin_settings] Please add gem 'geocoder' to your Gemfile to use geocoder kind settings".freeze
51
51
  raise e
52
52
  end
53
53
  end
@@ -3,6 +3,9 @@ require 'thread'
3
3
  # we are inheriting from BasicObject so we don't get a bunch of methods from
4
4
  # Kernel or Object
5
5
  class Settings < BasicObject
6
+
7
+ DELEGATE = [:puts, :p, :block_given?].freeze
8
+
6
9
  cattr_accessor :file_uploads_supported, :file_uploads_engine
7
10
  @@file_uploads_supported = false
8
11
  @@file_uploads_engine = false
@@ -106,8 +109,13 @@ class Settings < BasicObject
106
109
  set(key, nil, options.merge(overwrite: false))
107
110
  end
108
111
 
109
- def method_missing(*args)
110
- get_default_ns.__send__(*args)
112
+ def method_missing(name, *args, &block)
113
+ return ::Kernel.send(name, *args, &block) if DELEGATE.include?(name)
114
+ get_default_ns.__send__(name, *args, &block)
115
+ end
116
+
117
+ def respond_to_missing?(name, include_private = false)
118
+ DELEGATE.include?(name) or super
111
119
  end
112
120
  end
113
121
  end
@@ -1,3 +1,3 @@
1
1
  module RailsAdminSettings
2
- VERSION = "1.2.1.3".freeze
2
+ VERSION = "1.2.2".freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ack_rails_admin_settings
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1.3
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Kiseliev
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-01-25 00:00:00.000000000 Z
12
+ date: 2017-02-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongoid