ack_rails_admin_settings 1.2.1.3 → 1.2.2

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