property_sets 3.10.0 → 3.11.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
  SHA256:
3
- metadata.gz: 57d3eda9c41c2ac64bad8a55e313d58bd3918d9e61ff2be28283a9662c554a6e
4
- data.tar.gz: e806ef107a1d4e21211658a40c829b2ffa553b05216e72a924932229b301d011
3
+ metadata.gz: 2384aedb2c9f673a4895f5a6e1948ae4ea88c335b2c79985a0c35609ebbce42e
4
+ data.tar.gz: dedff61be818879d70d720f3d7bfc545e0b73abeecaf57f678be2dc10a64d5e9
5
5
  SHA512:
6
- metadata.gz: a2447f302325286caf0d5c2e48060e35f419e6e881369072bb4ed5485b1eda4640aec4223d0dbff1cdd7c0ddce241b252eec2f032517e95bb2ef1e80cf4154e1
7
- data.tar.gz: 60e7ab51f65d11aca4c42a3e775ae2f17913927f002bb542c347d3bbc085dacdca76913bba406a2cb496336cfbcf812d1d6614330cdda97822dc99826fbb234d
6
+ metadata.gz: 9487f344c48e602edd77c4c36f9e5a4932db43cdc543efc68450d56a1fa433bcade00f1f88ac98ff452e4919865295fdbb9cb4e204ff7edd243ef16a46a28e13
7
+ data.tar.gz: a0223c6d67884a49a5165f5db027e02077d83bf094e563595f8e83d3c95c055312d46ec4b036da08c60c55e3e7f90a22b3265a940ff47f2aee4e650e9cb811a3
@@ -1,4 +1,4 @@
1
- require 'action_view'
1
+ require "action_view"
2
2
 
3
3
  module ActionView
4
4
  module Helpers
@@ -8,9 +8,9 @@ module ActionView
8
8
 
9
9
  def initialize(property_set, template, object_name, object)
10
10
  @property_set = property_set
11
- @template = template
12
- @object_name = object_name
13
- @object = object
11
+ @template = template
12
+ @object_name = object_name
13
+ @object = object
14
14
  end
15
15
 
16
16
  def check_box(property, options = {}, checked_value = "1", unchecked_value = "0")
@@ -23,7 +23,7 @@ module ActionView
23
23
  def radio_button(property, checked_value = "1", options = {})
24
24
  options[:id] ||= "#{object_name}_#{property_set}_#{property}_#{checked_value}"
25
25
  options = prepare_options(property, options) do |properties|
26
- properties.send("#{property}") == checked_value
26
+ properties.send(property.to_s) == checked_value
27
27
  end
28
28
  template.radio_button(object_name, property, checked_value, options)
29
29
  end
@@ -34,7 +34,7 @@ module ActionView
34
34
 
35
35
  def hidden_field(property, options = {})
36
36
  options = prepare_id_name(property, options)
37
- unless options.keys.include?(:value)
37
+ unless options.key?(:value)
38
38
  options[:value] = cast_boolean(options[:object].send(property_set).send(property))
39
39
  end
40
40
  template.hidden_field(object_name, property, options)
@@ -43,7 +43,7 @@ module ActionView
43
43
  def select(property, choices, options = {}, html_options = {})
44
44
  options = prepare_id_name(property, options)
45
45
  current_value = options[:object].send(property_set).send(property)
46
- template.select("#{object_name}[#{property_set}]", property, choices, { :selected => current_value }, html_options )
46
+ template.select("#{object_name}[#{property_set}]", property, choices, {selected: current_value}, html_options)
47
47
  end
48
48
 
49
49
  private
@@ -52,9 +52,9 @@ module ActionView
52
52
  throw "Invalid options type #{options.inspect}" unless options.is_a?(Hash)
53
53
 
54
54
  options.clone.tap do |prepared_options|
55
- prepared_options[:object] = object || fetch_target_object
56
- prepared_options[:id] ||= "#{object_name}_#{property_set}_#{property}"
57
- prepared_options[:name] = "#{object_name}[#{property_set}][#{property}]"
55
+ prepared_options[:object] = object || fetch_target_object
56
+ prepared_options[:id] ||= "#{object_name}_#{property_set}_#{property}"
57
+ prepared_options[:name] = "#{object_name}[#{property_set}][#{property}]"
58
58
  end
59
59
  end
60
60
 
@@ -75,18 +75,16 @@ module ActionView
75
75
 
76
76
  def cast_boolean(value)
77
77
  case value
78
- when TrueClass then '1'
79
- when FalseClass then '0'
78
+ when TrueClass then "1"
79
+ when FalseClass then "0"
80
80
  else value
81
81
  end
82
82
  end
83
-
84
83
  end
85
84
 
86
85
  def property_set(identifier)
87
86
  PropertySetFormBuilderProxy.new(identifier, @template, object_name, object)
88
87
  end
89
-
90
88
  end
91
89
  end
92
90
  end
@@ -1,26 +1,27 @@
1
- require 'active_record'
2
- require 'property_sets/casting'
3
- require 'set'
1
+ require "active_record"
2
+ require "property_sets/casting"
4
3
 
5
4
  module PropertySets
6
5
  module ActiveRecordExtension
7
6
  module ClassMethods
7
+ attr_accessor :property_sets_connection_class
8
+
8
9
  def property_set(association, options = {}, &block)
9
10
  unless include?(PropertySets::ActiveRecordExtension::InstanceMethods)
10
- self.send(:prepend, PropertySets::ActiveRecordExtension::InstanceMethods)
11
+ send(:prepend, PropertySets::ActiveRecordExtension::InstanceMethods)
11
12
  cattr_accessor :property_set_index
12
13
  self.property_set_index = Set.new
13
14
  end
14
15
 
15
- raise "Invalid association name, letters only" unless association.to_s =~ /[a-z]+/
16
+ raise "Invalid association name, letters only" unless /[a-z]+/.match?(association.to_s)
16
17
  exists = property_set_index.include?(association)
17
18
 
18
- self.property_set_index << association
19
+ property_set_index << association
19
20
 
20
21
  # eg AccountSetting - this IS idempotent
21
22
  property_class = PropertySets.ensure_property_set_class(
22
23
  association,
23
- options.delete(:owner_class_name) || self.name
24
+ options.delete(:owner_class_name) || name
24
25
  )
25
26
 
26
27
  # eg property :is_awesome
@@ -30,17 +31,17 @@ module PropertySets
30
31
  property_class.table_name = tb_name if tb_name
31
32
 
32
33
  hash_opts = {
33
- :class_name => property_class.name,
34
- :autosave => true,
35
- :dependent => :destroy,
36
- :inverse_of => self.name.demodulize.underscore.to_sym,
34
+ class_name: property_class.name,
35
+ autosave: true,
36
+ dependent: :destroy,
37
+ inverse_of: name.demodulize.underscore.to_sym
37
38
  }.merge(options)
38
39
 
39
40
  # TODO: should check options are compatible? warn? raise?
40
- reflection = self.reflections[association.to_s] # => ActiveRecord::Reflection::HasManyReflection
41
+ reflection = reflections[association.to_s] # => ActiveRecord::Reflection::HasManyReflection
41
42
  reflection.options.merge! options if reflection && !options.empty?
42
43
 
43
- unless exists then # makes has_many idempotent...
44
+ unless exists # makes has_many idempotent...
44
45
  has_many association, **hash_opts do
45
46
  # keep this damn block! -- creates association_module below
46
47
  end
@@ -49,23 +50,23 @@ module PropertySets
49
50
  # stolen/adapted from AR's collection_association.rb #define_extensions
50
51
 
51
52
  module_name = "#{association.to_s.camelize}AssociationExtension"
52
- association_module = self.const_get module_name
53
+ association_module = const_get module_name
53
54
 
54
55
  association_module.module_eval do
55
56
  include PropertySets::ActiveRecordExtension::AssociationExtensions
56
57
 
57
58
  property_class.keys.each do |key|
58
- raise "Invalid property key #{key}" if self.respond_to?(key)
59
+ raise "Invalid property key #{key}" if respond_to?(key)
59
60
 
60
61
  # Reports the coerced truth value of the property
61
62
  define_method "#{key}?" do
62
- type = property_class.type(key)
63
+ type = property_class.type(key)
63
64
  value = lookup_value(type, key)
64
- ![ "false", "0", "", "off", "n" ].member?(value.to_s.downcase)
65
+ !["false", "0", "", "off", "n"].member?(value.to_s.downcase)
65
66
  end
66
67
 
67
68
  # Returns the value of the property
68
- define_method "#{key}" do
69
+ define_method key.to_s do
69
70
  type = property_class.type(key)
70
71
  lookup_value(type, key)
71
72
  end
@@ -98,10 +99,10 @@ module PropertySets
98
99
  association_class.keys & keys.map(&:to_s)
99
100
  end
100
101
 
101
- property_pairs = property_keys.map do |name|
102
+ property_pairs = property_keys.flat_map do |name|
102
103
  value = lookup_value(association_class.type(name), name)
103
104
  [name, value]
104
- end.flatten(1)
105
+ end
105
106
  HashWithIndifferentAccess[*property_pairs]
106
107
  end
107
108
 
@@ -138,7 +139,7 @@ module PropertySets
138
139
  end
139
140
 
140
141
  def build_default(arg)
141
- build(:name => arg.to_s, :value => association_class.raw_default(arg))
142
+ build(name: arg.to_s, value: association_class.raw_default(arg))
142
143
  end
143
144
 
144
145
  def lookup_without_default(arg)
@@ -148,7 +149,7 @@ module PropertySets
148
149
  def lookup_value(type, key)
149
150
  serialized = property_serialized?(key)
150
151
 
151
- if instance = lookup_without_default(key)
152
+ if (instance = lookup_without_default(key))
152
153
  instance.value_serialized = serialized
153
154
  PropertySets::Casting.read(type, instance.value)
154
155
  else
@@ -163,7 +164,7 @@ module PropertySets
163
164
 
164
165
  # The finder method which returns the property if present, otherwise a new instance with defaults
165
166
  def lookup(arg)
166
- instance = lookup_without_default(arg)
167
+ instance = lookup_without_default(arg)
167
168
  instance ||= build_default(arg)
168
169
  instance.value_serialized = property_serialized?(arg)
169
170
 
@@ -177,7 +178,7 @@ module PropertySets
177
178
  # It does not have the side effect of adding a new setting object.
178
179
  def lookup_or_default(arg)
179
180
  instance = lookup_without_default(arg)
180
- instance ||= association_class.new(:value => association_class.raw_default(arg))
181
+ instance ||= association_class.new(value: association_class.raw_default(arg))
181
182
  instance.value_serialized = property_serialized?(arg)
182
183
  instance
183
184
  end
@@ -192,18 +193,18 @@ module PropertySets
192
193
  update_property_set_attributes(attributes)
193
194
  super
194
195
  end
195
- alias update_attributes update
196
+ alias_method :update_attributes, :update
196
197
 
197
198
  def update!(attributes)
198
199
  update_property_set_attributes(attributes)
199
200
  super
200
201
  end
201
- alias update_attributes! update!
202
+ alias_method :update_attributes!, :update!
202
203
 
203
204
  def update_property_set_attributes(attributes)
204
205
  if attributes && self.class.property_set_index.any?
205
206
  self.class.property_set_index.each do |property_set|
206
- if property_set_hash = attributes.delete(property_set)
207
+ if (property_set_hash = attributes.delete(property_set))
207
208
  send(property_set).set(property_set_hash, true)
208
209
  end
209
210
  end
@@ -212,7 +213,7 @@ module PropertySets
212
213
 
213
214
  def update_columns(attributes)
214
215
  if delegated_property_sets?
215
- attributes = attributes.reject{|k,_| self.class.delegated_property_set_attributes.include?(k.to_s) }
216
+ attributes = attributes.reject { |k, _| self.class.delegated_property_set_attributes.include?(k.to_s) }
216
217
  end
217
218
 
218
219
  super attributes
@@ -239,7 +240,6 @@ module PropertySets
239
240
  attribute_names
240
241
  end
241
242
  end
242
-
243
243
  end
244
244
  end
245
245
 
@@ -1,8 +1,8 @@
1
- require 'json'
1
+ require "json"
2
2
 
3
3
  module PropertySets
4
4
  module Casting
5
- FALSE = [ "false", "0", "", "off", "n" ]
5
+ FALSE_VALUES = ["false", "0", "", "off", "n"]
6
6
 
7
7
  class << self
8
8
  def read(type, value)
@@ -53,7 +53,7 @@ module PropertySets
53
53
  private
54
54
 
55
55
  def false?(value)
56
- FALSE.include?(value.to_s.downcase)
56
+ FALSE_VALUES.include?(value.to_s.downcase)
57
57
  end
58
58
  end
59
59
  end
@@ -65,7 +65,7 @@ module PropertySets
65
65
  # These are not database columns and should not be included in queries but
66
66
  # using the attributes API is the only way to track changes in the main model
67
67
  if respond_to?(:user_provided_columns)
68
- self.user_provided_columns.reject!{|k,_| delegated_property_set_attributes.include?(k.to_s) }
68
+ user_provided_columns.reject! { |k, _| delegated_property_set_attributes.include?(k.to_s) }
69
69
  end
70
70
  end
71
71
  end
@@ -1,22 +1,22 @@
1
- require 'active_support'
1
+ require "active_support"
2
2
 
3
3
  module PropertySets
4
4
  module PropertySetModel
5
5
  # https://dev.mysql.com/doc/refman/5.6/en/storage-requirements.html
6
6
  COLUMN_TYPE_LIMITS = {
7
- 'tinyblob' => 255, # 2^8 - 1
8
- 'tinytext' => 255,
9
- 'blob' => 65535, # 2^16 - 1
10
- 'text' => 65535,
11
- 'mediumblob' => 16777215, # 2^24 - 1
12
- 'mediumtext' => 16777215,
13
- 'longblob' => 4294967295, # 2^32 - 1
14
- 'longtext' => 4294967295,
7
+ "tinyblob" => 255, # 2^8 - 1
8
+ "tinytext" => 255,
9
+ "blob" => 65535, # 2^16 - 1
10
+ "text" => 65535,
11
+ "mediumblob" => 16777215, # 2^24 - 1
12
+ "mediumtext" => 16777215,
13
+ "longblob" => 4294967295, # 2^32 - 1
14
+ "longtext" => 4294967295
15
15
  }.freeze
16
16
 
17
17
  module InstanceMethods
18
18
  def false?
19
- [ "false", "0", "", "off", "n" ].member?(value.to_s.downcase)
19
+ ["false", "0", "", "off", "n"].member?(value.to_s.downcase)
20
20
  end
21
21
 
22
22
  def true?
@@ -93,7 +93,7 @@ module PropertySets
93
93
  end
94
94
 
95
95
  def value_column_limit
96
- column = self.class.columns_hash.fetch('value')
96
+ column = self.class.columns_hash.fetch("value")
97
97
 
98
98
  # use sql_type because type returns :text for all text types regardless of length
99
99
  column.limit || COLUMN_TYPE_LIMITS.fetch(column.sql_type)
@@ -102,9 +102,9 @@ module PropertySets
102
102
 
103
103
  module ClassMethods
104
104
  def self.extended(base)
105
- base.validate :validate_format_of_name
106
- base.validate :validate_length_of_serialized_data
107
- base.before_create :coerce_value
105
+ base.validate :validate_format_of_name
106
+ base.validate :validate_length_of_serialized_data
107
+ base.before_create :coerce_value
108
108
  base.attr_accessible :name, :value if defined?(ProtectedAttributes)
109
109
  end
110
110
 
@@ -139,10 +139,10 @@ module PropertySets
139
139
  def owner_class=(owner_class_name)
140
140
  @owner_class_sym = owner_class_name.to_s.demodulize.underscore.to_sym
141
141
 
142
- belongs_to owner_class_sym, class_name: owner_class_name
143
- validates_presence_of owner_class_sym, class_name: owner_class_name
144
- validates_uniqueness_of :name, :scope => owner_class_key_sym, :case_sensitive => false
145
- attr_accessible owner_class_key_sym, owner_class_sym if defined?(ProtectedAttributes)
142
+ belongs_to owner_class_sym, class_name: owner_class_name
143
+ validates_presence_of owner_class_sym, class_name: owner_class_name
144
+ validates_uniqueness_of :name, scope: owner_class_key_sym, case_sensitive: false
145
+ attr_accessible owner_class_key_sym, owner_class_sym if defined?(ProtectedAttributes)
146
146
  end
147
147
 
148
148
  def owner_assoc=(association)
@@ -161,6 +161,5 @@ module PropertySets
161
161
  "#{owner_class_sym}_id".to_sym
162
162
  end
163
163
  end
164
-
165
164
  end
166
165
  end
@@ -1,3 +1,3 @@
1
1
  module PropertySets
2
- VERSION = "3.10.0"
2
+ VERSION = "3.11.0"
3
3
  end
data/lib/property_sets.rb CHANGED
@@ -1,9 +1,9 @@
1
- require 'property_sets/property_set_model'
2
- require 'property_sets/active_record_extension'
3
- require 'property_sets/version'
1
+ require "property_sets/property_set_model"
2
+ require "property_sets/active_record_extension"
3
+ require "property_sets/version"
4
4
 
5
5
  begin
6
- require 'property_sets/action_view_extension'
6
+ require "property_sets/action_view_extension"
7
7
  rescue LoadError
8
8
  end
9
9
 
@@ -19,7 +19,7 @@ module PropertySets
19
19
  unless namespace.const_defined?(const_name, false)
20
20
  property_class = Class.new(parent_for_property_class(namespace, owner_class_name)) do
21
21
  include PropertySets::PropertySetModel::InstanceMethods
22
- extend PropertySets::PropertySetModel::ClassMethods
22
+ extend PropertySets::PropertySetModel::ClassMethods
23
23
  end
24
24
 
25
25
  namespace.const_set(const_name, property_class)
@@ -32,7 +32,9 @@ module PropertySets
32
32
  end
33
33
 
34
34
  def self.parent_for_property_class(namespace, owner_class_name)
35
- namespace.const_get(owner_class_name).connection_class_for_self
35
+ owner_class = namespace.const_get(owner_class_name)
36
+
37
+ owner_class.property_sets_connection_class || owner_class.connection_class_for_self
36
38
  rescue NameError
37
39
  ::ActiveRecord::Base
38
40
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: property_sets
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.10.0
4
+ version: 3.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Morten Primdahl
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-18 00:00:00.000000000 Z
11
+ date: 2023-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -100,6 +100,20 @@ dependencies:
100
100
  - - ">="
101
101
  - !ruby/object:Gem::Version
102
102
  version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: standard
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
103
117
  - !ruby/object:Gem::Dependency
104
118
  name: byebug
105
119
  requirement: !ruby/object:Gem::Requirement