act_with_bag 1.0.4 → 1.1.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 +4 -4
- data/.github/workflows/rake.yml +22 -18
- data/.ruby-gemset +1 -1
- data/.ruby-version +1 -1
- data/.watchr +29 -16
- data/Appraisals +12 -12
- data/Gemfile +7 -6
- data/MIT-LICENSE +1 -1
- data/README.md +18 -1
- data/Rakefile +5 -5
- data/act_with_bag.gemspec +20 -19
- data/gemfiles/rails_6.0.gemfile +2 -2
- data/gemfiles/rails_6.1.gemfile +2 -2
- data/lib/act_with_bag/version.rb +9 -10
- data/lib/act_with_bag.rb +23 -19
- data/test/accessor_test.rb +2 -6
- data/test/bag_boolean_test.rb +2 -6
- data/test/bag_test.rb +11 -13
- data/test/boolean_test.rb +5 -7
- data/test/clean_test.rb +2 -6
- data/test/delete_test.rb +6 -10
- data/test/internal/app/models/application_record.rb +3 -0
- data/test/internal/app/models/order.rb +7 -0
- data/test/internal/config/database.yml +3 -0
- data/test/internal/db/schema.rb +19 -0
- data/test/sti_test.rb +11 -15
- data/test/string_test.rb +3 -6
- data/test/test_helper.rb +11 -33
- data/test/type_test.rb +19 -8
- metadata +30 -22
- data/.rubocop.yml +0 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00bd0c94aee3fbc99eb7ca3ca554717315e632a2b7cdabd45a49f21513e5582b
|
4
|
+
data.tar.gz: 3aa580b905fdbee20225e9f1522dc7fce2c9d5947be8ff368e971133cff5af83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4bc54082e770bed85ecb237639a32a11f5827486575d3138b862b511046817846ad4469db26abf6da1cfdd1a1f2e2075288c4dffeb74369605436015c379692c
|
7
|
+
data.tar.gz: 86b256efde9d4ea3e8c89358f5c13ac79b3dbd7844673cb0579a723c785bfe374846c834ca77580ae9a3a833436976c51d9615fb4b2986adf80369696b3ae99f
|
data/.github/workflows/rake.yml
CHANGED
@@ -1,26 +1,30 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# see also https://github.com/whitequark/parser/blob/master/.github/workflows/test.yml
|
3
2
|
name: Rake
|
4
3
|
|
5
|
-
on: push
|
4
|
+
#on: [push, pull_request]
|
5
|
+
on: [push]
|
6
6
|
|
7
7
|
jobs:
|
8
8
|
test:
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
strategy:
|
10
|
+
fail-fast: false
|
11
|
+
matrix:
|
12
|
+
# os: [ubuntu-latest, macos-latest]
|
13
|
+
os: [ubuntu-latest]
|
14
|
+
# Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0'
|
15
|
+
# ruby: [2.5, 2.6, 2.7, '3.0', head, jruby, jruby-head, truffleruby, truffleruby-head]
|
16
|
+
ruby: ["2.7.2", 3.1.0, 3.1.2]
|
17
|
+
test_command: ["bundle exec rake test"]
|
18
|
+
runs-on: ${{ matrix.os }}
|
12
19
|
|
13
20
|
steps:
|
14
|
-
- uses: actions/checkout@
|
15
|
-
|
16
|
-
- name: Setup Ruby
|
17
|
-
# uses: actions/setup-ruby@v1
|
18
|
-
uses: ruby/setup-ruby@v1
|
21
|
+
- uses: actions/checkout@v2
|
22
|
+
- uses: ruby/setup-ruby@v1
|
19
23
|
with:
|
20
|
-
ruby-version:
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
ruby-version: ${{ matrix.ruby }}
|
25
|
+
- name: Bundle install
|
26
|
+
run: |
|
27
|
+
bundle config path /home/runner/bundle
|
28
|
+
bundle install
|
29
|
+
bundle update
|
30
|
+
- run: ${{ matrix.test_command }}
|
data/.ruby-gemset
CHANGED
@@ -1 +1 @@
|
|
1
|
-
rails-
|
1
|
+
rails-7.0
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-
|
1
|
+
ruby-3.1.2
|
data/.watchr
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
TESTING = %w[test]
|
2
|
+
HH = "#" * 22 unless defined?(HH)
|
3
|
+
H = "#" * 5 unless defined?(H)
|
3
4
|
|
4
5
|
def usage
|
5
6
|
puts <<-EOS
|
@@ -14,35 +15,47 @@ def run(cmd)
|
|
14
15
|
system "/usr/bin/time --format '#{HH} Elapsed time %E' #{cmd}"
|
15
16
|
end
|
16
17
|
|
17
|
-
def run_it(type,
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
def run_it(type, files)
|
19
|
+
files.split(" ").flatten.each do |file|
|
20
|
+
case type
|
21
|
+
when "test" then run %(bundle exec ruby -I test #{file})
|
22
|
+
# when 'spec'; run %(rspec -X #{file})
|
23
|
+
else; puts "#{H} unknown type: #{type}, file: #{file}"
|
24
|
+
end
|
22
25
|
end
|
23
26
|
end
|
24
27
|
|
25
28
|
def run_all_tests
|
26
29
|
puts "\n#{HH} Running all tests #{HH}\n"
|
27
|
-
|
30
|
+
TESTING.each { |dir| run "bundle exec rake #{dir}" if File.exist?(dir) }
|
28
31
|
end
|
29
32
|
|
30
33
|
def run_matching_files(base)
|
31
|
-
base = base.split(
|
32
|
-
|
34
|
+
base = base.split("_").first
|
35
|
+
TESTING.each { |type|
|
33
36
|
files = Dir["#{type}/**/*.rb"].select { |file| file =~ /#{base}_.*\.rb/ }
|
34
|
-
run_it type, files.join(
|
37
|
+
run_it type, files.join(" ") unless files.empty?
|
35
38
|
}
|
36
39
|
end
|
37
40
|
|
38
|
-
|
41
|
+
TESTING.each { |type|
|
39
42
|
watch("#{type}/#{type}_helper\.rb") { run_all_tests }
|
40
|
-
watch(
|
41
|
-
watch("#{type}/.*/*_#{type}\.rb")
|
43
|
+
watch("lib/.*\.rb") { run_all_tests }
|
44
|
+
watch("#{type}/.*/*_#{type}\.rb") { |match| run_it type, match[0] }
|
45
|
+
watch("#{type}/data/(.*)\.rb") { |match|
|
46
|
+
m1 = match[1]
|
47
|
+
run_matching_files("#{type}/#{m1}/#{m1}_#{type}.rb")
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
%w[rb erb haml slim].each { |type|
|
52
|
+
watch(".*/(.*)\.#{type}") { |match|
|
53
|
+
run_matching_files(match[1])
|
54
|
+
}
|
42
55
|
}
|
43
56
|
|
44
57
|
# Ctrl-\ or ctrl-4
|
45
|
-
|
58
|
+
Signal.trap("QUIT") { run_all_tests }
|
46
59
|
# Ctrl-C
|
47
|
-
|
60
|
+
Signal.trap("INT") { abort("Interrupted\n") }
|
48
61
|
usage
|
data/Appraisals
CHANGED
@@ -1,24 +1,24 @@
|
|
1
|
-
appraise
|
2
|
-
gem
|
3
|
-
gem
|
1
|
+
appraise "rails-6.1" do
|
2
|
+
gem "rails", "~> 6.1"
|
3
|
+
gem "dryer-config", "~> 6.0"
|
4
4
|
end
|
5
5
|
|
6
|
-
appraise
|
7
|
-
gem
|
8
|
-
gem
|
6
|
+
appraise "rails-6.0" do
|
7
|
+
gem "rails", "~> 6.0"
|
8
|
+
gem "dryer-config", "~> 6.0"
|
9
9
|
end
|
10
10
|
|
11
|
-
#appraise 'rails-5.2' do
|
11
|
+
# appraise 'rails-5.2' do
|
12
12
|
# gem 'rails', '~> 5.2.0'
|
13
13
|
# gem 'dryer-config', '~> 5.2.0'
|
14
|
-
#end
|
14
|
+
# end
|
15
15
|
|
16
|
-
#appraise 'rails-5.0' do
|
16
|
+
# appraise 'rails-5.0' do
|
17
17
|
# gem 'rails', '~> 5.0.0'
|
18
18
|
# gem 'dryer-config', '~> 5.0.0'
|
19
|
-
#end
|
19
|
+
# end
|
20
20
|
|
21
|
-
#appraise 'rails-4.1' do
|
21
|
+
# appraise 'rails-4.1' do
|
22
22
|
# gem 'rails', '= 4.1.1'
|
23
23
|
## gem 'dryer-config', '~> 5.1.0'
|
24
|
-
#end
|
24
|
+
# end
|
data/Gemfile
CHANGED
@@ -1,11 +1,12 @@
|
|
1
|
-
source
|
1
|
+
source "https://rubygems.org"
|
2
2
|
gemspec
|
3
3
|
|
4
|
-
gem
|
4
|
+
gem "rails"
|
5
5
|
|
6
6
|
group :test do
|
7
|
-
gem
|
8
|
-
gem
|
9
|
-
gem
|
10
|
-
gem
|
7
|
+
gem "observr"
|
8
|
+
gem "standard", require: false
|
9
|
+
gem "simplecov", require: false
|
10
|
+
# gem "capybara"
|
11
|
+
gem "ricecream"
|
11
12
|
end
|
data/MIT-LICENSE
CHANGED
data/README.md
CHANGED
@@ -50,6 +50,23 @@ Using an "add_to_bag" in the subclass obsoletes the "serialize".
|
|
50
50
|
Other records are untouched,
|
51
51
|
i.e. the value of the field will be kept in the database.
|
52
52
|
|
53
|
+
3. Keep an eye on YAML, the library to serialize the "bag",
|
54
|
+
which for some versions is not tamper-proof
|
55
|
+
and may required additional configuration in Rails.
|
56
|
+
|
57
|
+
See also:
|
58
|
+
~~~
|
59
|
+
https://stackoverflow.com/questions/72970170/upgrading-to-rails-6-1-6-1-causes-psychdisallowedclass-tried-to-load-unspecif
|
60
|
+
~~~
|
61
|
+
|
62
|
+
The configuration
|
63
|
+
"Rails.application.config.active_record.use_yaml_unsafe_load = true"
|
64
|
+
is not recommended as it is a patch prone to attacks.
|
65
|
+
|
66
|
+
The configuration
|
67
|
+
"Rails.application.config.active_record.yaml_column_permitted_classes = [Symbol]"
|
68
|
+
may be incomplete requiring additional classes like "Time" and "Date".
|
69
|
+
(credits to Martin Sch�ttler).
|
53
70
|
|
54
71
|
Example
|
55
72
|
=======
|
@@ -91,4 +108,4 @@ Test
|
|
91
108
|
|
92
109
|
rake
|
93
110
|
|
94
|
-
Copyright (c) 2009-
|
111
|
+
Copyright (c) 2009-2022 [Dittmar Krall], released under the MIT license
|
data/Rakefile
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
require
|
1
|
+
require "rake/testtask"
|
2
2
|
|
3
|
-
desc
|
3
|
+
desc "Run the tests."
|
4
4
|
Rake::TestTask.new do |t|
|
5
|
-
t.libs <<
|
6
|
-
t.libs <<
|
7
|
-
t.pattern =
|
5
|
+
t.libs << "lib"
|
6
|
+
t.libs << "test"
|
7
|
+
t.pattern = "test/**/*_test.rb"
|
8
8
|
t.verbose = false
|
9
9
|
end
|
10
10
|
|
data/act_with_bag.gemspec
CHANGED
@@ -1,27 +1,28 @@
|
|
1
|
-
lib = File.expand_path(
|
1
|
+
lib = File.expand_path("../lib", __FILE__)
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
-
require
|
3
|
+
require "act_with_bag/version"
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
|
-
s.name
|
7
|
-
s.version
|
8
|
-
s.summary
|
9
|
-
s.description =
|
10
|
-
s.authors
|
11
|
-
s.email
|
12
|
-
s.homepage
|
6
|
+
s.name = "act_with_bag"
|
7
|
+
s.version = ActWithBag::VERSION
|
8
|
+
s.summary = "act_with_bag (baggies) gem"
|
9
|
+
s.description = "Add a bag to a Rails model"
|
10
|
+
s.authors = ["Dittmar Krall"]
|
11
|
+
s.email = ["dittmar.krall@matiq.com"]
|
12
|
+
s.homepage = "http://matiq.com"
|
13
|
+
s.license = "MIT"
|
14
|
+
s.platform = Gem::Platform::RUBY
|
13
15
|
|
14
|
-
s.
|
15
|
-
s.platform = Gem::Platform::RUBY
|
16
|
+
s.metadata["source_code_uri"] = "https://github.com/matique/act_with_bag"
|
16
17
|
|
17
|
-
s.files
|
18
|
-
s.
|
19
|
-
s.require_paths = ['lib']
|
18
|
+
s.files = `git ls-files -z`.split("\x0")
|
19
|
+
s.require_paths = ["lib"]
|
20
20
|
|
21
|
-
s.add_development_dependency
|
22
|
-
s.add_development_dependency
|
23
|
-
s.add_development_dependency
|
21
|
+
s.add_development_dependency "bundler"
|
22
|
+
s.add_development_dependency "rake"
|
23
|
+
s.add_development_dependency "appraisal"
|
24
|
+
s.add_development_dependency "combustion"
|
24
25
|
|
25
|
-
s.add_development_dependency
|
26
|
-
s.add_development_dependency
|
26
|
+
s.add_development_dependency "minitest"
|
27
|
+
s.add_development_dependency "sqlite3"
|
27
28
|
end
|
data/gemfiles/rails_6.0.gemfile
CHANGED
data/gemfiles/rails_6.1.gemfile
CHANGED
data/lib/act_with_bag/version.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
|
-
# rubocop: disable all
|
2
|
-
|
3
1
|
module ActWithBag
|
4
|
-
VERSION =
|
5
|
-
# VERSION =
|
6
|
-
# VERSION =
|
7
|
-
# VERSION =
|
8
|
-
# VERSION =
|
9
|
-
# VERSION =
|
10
|
-
# VERSION =
|
11
|
-
# VERSION =
|
2
|
+
VERSION = "1.1.0" # 2022-08-07
|
3
|
+
# VERSION = "1.0.4" # 2021-06-17
|
4
|
+
# VERSION = "1.0.3" # 2021-05-18
|
5
|
+
# VERSION = "1.0.2" # 2020-07-16
|
6
|
+
# VERSION = "1.0.1" # 2020-04-27
|
7
|
+
# VERSION = "1.0.0" # 2019-09-27
|
8
|
+
# VERSION = "0.5.7" # 2019-03-05
|
9
|
+
# VERSION = "0.5.6" # 2019-02-15
|
10
|
+
# VERSION = "0.5.5"
|
12
11
|
end
|
data/lib/act_with_bag.rb
CHANGED
@@ -9,7 +9,7 @@ class << ActiveRecord::Base
|
|
9
9
|
def bag=(x)
|
10
10
|
#bag changes disabled as it must be handled by Bag himself
|
11
11
|
end
|
12
|
-
}
|
12
|
+
}, __FILE__, __LINE__ - 4
|
13
13
|
|
14
14
|
@baggies_date ||= {}
|
15
15
|
baglets.each { |b|
|
@@ -38,7 +38,7 @@ class << ActiveRecord::Base
|
|
38
38
|
end
|
39
39
|
}
|
40
40
|
end
|
41
|
-
}
|
41
|
+
}, __FILE__, __LINE__ - 12
|
42
42
|
end
|
43
43
|
|
44
44
|
def merge(_bag, params)
|
@@ -60,23 +60,28 @@ class << ActiveRecord::Base
|
|
60
60
|
next unless found
|
61
61
|
|
62
62
|
## weird Timestamp, Hash and YAML problem
|
63
|
-
res = [0]
|
64
|
-
res[0] = 0
|
63
|
+
res = [0] if res == []
|
64
|
+
res[0] = 0 unless res[0] >= 0
|
65
65
|
|
66
|
-
value =
|
66
|
+
value = begin
|
67
|
+
Date.new(*res)
|
68
|
+
rescue
|
69
|
+
nil
|
70
|
+
end
|
67
71
|
params[model][baggie] = value
|
68
72
|
}
|
69
73
|
params
|
70
74
|
end
|
71
75
|
|
72
|
-
|
76
|
+
protected
|
77
|
+
|
73
78
|
def accessor_present?(accessor)
|
74
79
|
accessor_sym = accessor.to_sym
|
75
80
|
res = false
|
76
81
|
|
77
|
-
res = true
|
78
|
-
res = true
|
79
|
-
|
82
|
+
res = true if method_defined?(accessor_sym)
|
83
|
+
res = true if respond_to?(:attribute_names) &&
|
84
|
+
attribute_names.include?(accessor)
|
80
85
|
if res
|
81
86
|
# logger.info "** Already defined #{self.to_s}.#{accessor}"
|
82
87
|
# p "** act_to_bag: untouched accessor '#{self.to_s}.#{accessor}'"
|
@@ -86,7 +91,7 @@ class << ActiveRecord::Base
|
|
86
91
|
|
87
92
|
def add_accessor(baggie, type)
|
88
93
|
accessor = baggie.to_s
|
89
|
-
return
|
94
|
+
return if accessor_present?(accessor)
|
90
95
|
|
91
96
|
# MARS patch, new:
|
92
97
|
#
|
@@ -103,11 +108,11 @@ class << ActiveRecord::Base
|
|
103
108
|
# END
|
104
109
|
|
105
110
|
type_sym = type.to_sym
|
106
|
-
typing = {integer:
|
107
|
-
string:
|
111
|
+
typing = {integer: ".to_i", float: ".to_f",
|
112
|
+
string: ".to_s"}[type_sym] || ""
|
108
113
|
# p "add_accessor #{self.to_s} #{baggie.inspect} #{type_sym.inspect}"
|
109
114
|
|
110
|
-
@baggies_date[baggie] = type
|
115
|
+
@baggies_date[baggie] = type if type_sym == :date
|
111
116
|
|
112
117
|
if type_sym == :boolean
|
113
118
|
class_eval %(
|
@@ -116,9 +121,8 @@ class << ActiveRecord::Base
|
|
116
121
|
return res if res.class == FalseClass
|
117
122
|
return res if res.class == TrueClass
|
118
123
|
return res.to_i != 0
|
119
|
-
res
|
120
124
|
end
|
121
|
-
)
|
125
|
+
), __FILE__, __LINE__ - 7
|
122
126
|
|
123
127
|
class_eval %(
|
124
128
|
def #{accessor}=(value)
|
@@ -131,13 +135,13 @@ class << ActiveRecord::Base
|
|
131
135
|
nil
|
132
136
|
end
|
133
137
|
end
|
134
|
-
)
|
138
|
+
), __FILE__, __LINE__ - 11
|
135
139
|
|
136
140
|
class_eval %(
|
137
141
|
def #{accessor}?
|
138
142
|
#{accessor}
|
139
143
|
end
|
140
|
-
)
|
144
|
+
), __FILE__, __LINE__ - 4
|
141
145
|
|
142
146
|
else
|
143
147
|
|
@@ -145,7 +149,7 @@ class << ActiveRecord::Base
|
|
145
149
|
def #{accessor}
|
146
150
|
self.bag && self.bag[:#{baggie}]
|
147
151
|
end
|
148
|
-
)
|
152
|
+
), __FILE__, __LINE__ - 4
|
149
153
|
|
150
154
|
class_eval %(
|
151
155
|
def #{accessor}=(value)
|
@@ -157,7 +161,7 @@ class << ActiveRecord::Base
|
|
157
161
|
nil
|
158
162
|
end
|
159
163
|
end
|
160
|
-
)
|
164
|
+
), __FILE__, __LINE__ - 10
|
161
165
|
end
|
162
166
|
end
|
163
167
|
end
|
data/test/accessor_test.rb
CHANGED
@@ -1,22 +1,18 @@
|
|
1
|
-
require
|
2
|
-
|
1
|
+
require "test_helper"
|
3
2
|
|
4
3
|
class Order < ActiveRecord::Base
|
5
4
|
add_to_bag :category
|
6
5
|
end
|
7
6
|
|
8
|
-
|
9
7
|
class AccessorTest < ActiveSupport::TestCase
|
10
|
-
|
11
8
|
def setup
|
12
9
|
@order = Order.new
|
13
10
|
end
|
14
11
|
|
15
12
|
test "should reject overwriting of column category" do
|
16
|
-
value =
|
13
|
+
value = "abc"
|
17
14
|
assert @order.respond_to?(:category)
|
18
15
|
@order.category = value
|
19
16
|
assert_equal false, @order.bag.has_key?(:category)
|
20
17
|
end
|
21
|
-
|
22
18
|
end
|
data/test/bag_boolean_test.rb
CHANGED
@@ -1,13 +1,10 @@
|
|
1
|
-
require
|
2
|
-
|
1
|
+
require "test_helper"
|
3
2
|
|
4
3
|
class Order < ActiveRecord::Base
|
5
4
|
add_to_bag bool: :boolean
|
6
5
|
end
|
7
6
|
|
8
|
-
|
9
7
|
class BagBooleanTest < ActiveSupport::TestCase
|
10
|
-
|
11
8
|
def setup
|
12
9
|
@order = Order.new
|
13
10
|
end
|
@@ -22,7 +19,7 @@ class BagBooleanTest < ActiveSupport::TestCase
|
|
22
19
|
assert_equal false, @order.bag.has_key?(:bool)
|
23
20
|
@order.bool = 0
|
24
21
|
assert_equal false, @order.bag.has_key?(:bool)
|
25
|
-
@order.bool =
|
22
|
+
@order.bool = "0"
|
26
23
|
assert_equal false, @order.bag.has_key?(:bool)
|
27
24
|
end
|
28
25
|
|
@@ -37,5 +34,4 @@ class BagBooleanTest < ActiveSupport::TestCase
|
|
37
34
|
@order.bool = false
|
38
35
|
assert_equal false, @order.bag.has_key?(:bool)
|
39
36
|
end
|
40
|
-
|
41
37
|
end
|
data/test/bag_test.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
-
require
|
1
|
+
require "test_helper"
|
2
2
|
|
3
3
|
class BagTest < ActiveSupport::TestCase
|
4
|
-
|
5
4
|
def setup
|
6
5
|
@order = Order.new
|
7
6
|
end
|
@@ -15,38 +14,37 @@ class BagTest < ActiveSupport::TestCase
|
|
15
14
|
assert @order.respond_to?(:flag)
|
16
15
|
assert @order.respond_to?(:at)
|
17
16
|
|
18
|
-
assert @order.respond_to?(
|
19
|
-
assert @order.respond_to?(
|
20
|
-
assert @order.respond_to?(
|
21
|
-
assert @order.respond_to?(
|
17
|
+
assert @order.respond_to?(:field=)
|
18
|
+
assert @order.respond_to?(:flag=)
|
19
|
+
assert @order.respond_to?(:flag?)
|
20
|
+
assert @order.respond_to?(:at=)
|
22
21
|
end
|
23
22
|
|
24
23
|
test "string access to field" do
|
25
|
-
value =
|
24
|
+
value = "abc"
|
26
25
|
@order.field = value
|
27
26
|
assert_equal value, @order.field
|
28
|
-
assert_not_equal
|
27
|
+
assert_not_equal "def", @order.field
|
29
28
|
end
|
30
29
|
|
31
30
|
test "date access to at" do
|
32
31
|
value = DateTime.now
|
33
32
|
@order.at = value
|
34
33
|
assert_equal value, @order.at
|
35
|
-
assert_not_equal
|
34
|
+
assert_not_equal "def", @order.at
|
36
35
|
end
|
37
36
|
|
38
37
|
test "bag is hidden" do
|
39
|
-
value =
|
38
|
+
value = "abc"
|
40
39
|
@order.field = value
|
41
|
-
@order.bag =
|
40
|
+
@order.bag = "bad thing"
|
42
41
|
assert_equal value, @order.field
|
43
42
|
end
|
44
43
|
|
45
44
|
test "merge for :at :date" do
|
46
45
|
model = :order
|
47
|
-
params = {model => {
|
46
|
+
params = {model => {"at(1i)" => "1", "at(2i)" => "2", "at(3i)" => "3"}}
|
48
47
|
res = Order.merge({}, params)
|
49
48
|
assert_equal Date.new(1, 2, 3), res[model][:at]
|
50
49
|
end
|
51
|
-
|
52
50
|
end
|
data/test/boolean_test.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
-
require
|
1
|
+
require "test_helper"
|
2
2
|
|
3
3
|
class BooleanTest < ActiveSupport::TestCase
|
4
|
-
|
5
4
|
def setup
|
6
5
|
@order = Order.new
|
7
6
|
end
|
@@ -39,10 +38,10 @@ class BooleanTest < ActiveSupport::TestCase
|
|
39
38
|
end
|
40
39
|
|
41
40
|
test "string 1/0 returns a boolean" do
|
42
|
-
@order.flag =
|
41
|
+
@order.flag = "1"
|
43
42
|
assert_equal true, @order.flag
|
44
43
|
|
45
|
-
@order.flag =
|
44
|
+
@order.flag = "0"
|
46
45
|
assert_equal false, @order.flag
|
47
46
|
|
48
47
|
@order.flag = nil
|
@@ -50,13 +49,12 @@ class BooleanTest < ActiveSupport::TestCase
|
|
50
49
|
end
|
51
50
|
|
52
51
|
test "'false' returns a boolean" do
|
53
|
-
@order.flag =
|
52
|
+
@order.flag = "false"
|
54
53
|
assert_equal false, @order.flag
|
55
54
|
end
|
56
55
|
|
57
56
|
test "'true' returns a boolean" do
|
58
|
-
@order.flag =
|
57
|
+
@order.flag = "true"
|
59
58
|
assert_equal true, @order.flag
|
60
59
|
end
|
61
|
-
|
62
60
|
end
|
data/test/clean_test.rb
CHANGED
@@ -1,20 +1,17 @@
|
|
1
|
-
require
|
2
|
-
|
1
|
+
require "test_helper"
|
3
2
|
|
4
3
|
class Order < ActiveRecord::Base
|
5
4
|
add_to_bag :name
|
6
5
|
add_to_bag :name2
|
7
6
|
end
|
8
7
|
|
9
|
-
|
10
8
|
class CleanTest < ActiveSupport::TestCase
|
11
|
-
|
12
9
|
def setup
|
13
10
|
@order = Order.new
|
14
11
|
end
|
15
12
|
|
16
13
|
test "assigning nil removes field from bag" do
|
17
|
-
value =
|
14
|
+
value = "abc"
|
18
15
|
assert_equal false, @order.bag.has_key?(:name)
|
19
16
|
@order.name = value
|
20
17
|
assert_equal true, @order.bag.has_key?(:name)
|
@@ -27,5 +24,4 @@ class CleanTest < ActiveSupport::TestCase
|
|
27
24
|
@order.name2 = nil
|
28
25
|
assert_equal false, @order.bag.has_key?(:name2)
|
29
26
|
end
|
30
|
-
|
31
27
|
end
|
data/test/delete_test.rb
CHANGED
@@ -1,26 +1,22 @@
|
|
1
|
-
require
|
2
|
-
|
1
|
+
require "test_helper"
|
3
2
|
|
4
3
|
class Order < ActiveRecord::Base
|
5
4
|
add_to_bag :aa, :bb, :cc
|
6
5
|
delete_from_bag :bb
|
7
6
|
end
|
8
7
|
|
9
|
-
|
10
8
|
class DeleteTest < ActiveSupport::TestCase
|
11
|
-
|
12
9
|
def setup
|
13
10
|
@order = Order.new
|
14
11
|
end
|
15
12
|
|
16
13
|
test "delete a field" do
|
17
|
-
@order.aa =
|
18
|
-
@order.bb =
|
19
|
-
@order.cc =
|
14
|
+
@order.aa = "aa"
|
15
|
+
@order.bb = "bb"
|
16
|
+
@order.cc = "cc"
|
20
17
|
@order.save
|
21
|
-
assert_equal
|
18
|
+
assert_equal "aa", @order.aa
|
22
19
|
assert_nil @order.bb
|
23
|
-
assert_equal
|
20
|
+
assert_equal "cc", @order.cc
|
24
21
|
end
|
25
|
-
|
26
22
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
ActiveRecord::Schema.define(version: 202208) do
|
4
|
+
create_table "orders", force: true do |t|
|
5
|
+
t.string :category
|
6
|
+
t.text :bag
|
7
|
+
|
8
|
+
t.datetime "created_at", null: false
|
9
|
+
t.datetime "updated_at", null: false
|
10
|
+
end
|
11
|
+
|
12
|
+
create_table "users", force: true do |t|
|
13
|
+
t.string :type
|
14
|
+
t.text :bag
|
15
|
+
|
16
|
+
t.datetime "created_at", null: false
|
17
|
+
t.datetime "updated_at", null: false
|
18
|
+
end
|
19
|
+
end
|
data/test/sti_test.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
require
|
2
|
-
|
1
|
+
require "test_helper"
|
3
2
|
|
4
3
|
class User < ActiveRecord::Base
|
5
4
|
add_to_bag :name
|
@@ -9,9 +8,7 @@ class Administrator < User
|
|
9
8
|
add_to_bag :key
|
10
9
|
end
|
11
10
|
|
12
|
-
|
13
11
|
class StiTest < ActiveSupport::TestCase
|
14
|
-
|
15
12
|
def setup
|
16
13
|
@user = User.new
|
17
14
|
@admin = Administrator.new
|
@@ -24,7 +21,7 @@ class StiTest < ActiveSupport::TestCase
|
|
24
21
|
|
25
22
|
test "STI field type" do
|
26
23
|
assert_nil @user.type
|
27
|
-
assert_equal
|
24
|
+
assert_equal "Administrator", @admin.type
|
28
25
|
end
|
29
26
|
|
30
27
|
test "have bag" do
|
@@ -37,30 +34,29 @@ class StiTest < ActiveSupport::TestCase
|
|
37
34
|
assert @admin.respond_to?(:name)
|
38
35
|
assert @admin.respond_to?(:key)
|
39
36
|
|
40
|
-
assert @user.respond_to?(
|
41
|
-
assert @admin.respond_to?(
|
42
|
-
assert @admin.respond_to?(
|
37
|
+
assert @user.respond_to?(:name=)
|
38
|
+
assert @admin.respond_to?(:name=)
|
39
|
+
assert @admin.respond_to?(:key=)
|
43
40
|
|
44
41
|
assert_equal false, @user.respond_to?(:key)
|
45
|
-
assert_equal false, @user.respond_to?(
|
42
|
+
assert_equal false, @user.respond_to?(:key=)
|
46
43
|
end
|
47
44
|
|
48
45
|
test "access to name & key" do
|
49
|
-
name =
|
50
|
-
key =
|
46
|
+
name = "name"
|
47
|
+
key = "key"
|
51
48
|
@admin.name = name
|
52
49
|
@admin.key = key
|
53
50
|
assert_equal name, @admin.name
|
54
51
|
assert_equal key, @admin.key
|
55
|
-
assert_not_equal
|
56
|
-
assert_not_equal
|
52
|
+
assert_not_equal "def", @admin.name
|
53
|
+
assert_not_equal "def", @admin.key
|
57
54
|
end
|
58
55
|
|
59
56
|
test "merge" do
|
60
57
|
model = :administrator
|
61
|
-
params = {model => {
|
58
|
+
params = {model => {"at(1i)" => "1", "at(2i)" => "2", "at(3i)" => "3"}}
|
62
59
|
res = Administrator.merge({}, params)
|
63
60
|
assert_nil res[model][:at]
|
64
61
|
end
|
65
|
-
|
66
62
|
end
|
data/test/string_test.rb
CHANGED
@@ -1,12 +1,10 @@
|
|
1
|
-
require
|
1
|
+
require "test_helper"
|
2
2
|
|
3
3
|
class Order < ActiveRecord::Base
|
4
4
|
add_to_bag string: :string
|
5
5
|
end
|
6
6
|
|
7
|
-
|
8
7
|
class StringTest < ActiveSupport::TestCase
|
9
|
-
|
10
8
|
def setup
|
11
9
|
@order = Order.new
|
12
10
|
end
|
@@ -14,10 +12,9 @@ class StringTest < ActiveSupport::TestCase
|
|
14
12
|
test "assigning boolean to string" do
|
15
13
|
value = false
|
16
14
|
@order.string = value
|
17
|
-
assert_equal
|
15
|
+
assert_equal "false", @order.string
|
18
16
|
value = true
|
19
17
|
@order.string = value
|
20
|
-
assert_equal
|
18
|
+
assert_equal "true", @order.string
|
21
19
|
end
|
22
|
-
|
23
20
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,39 +1,17 @@
|
|
1
|
-
if ENV[
|
2
|
-
require
|
1
|
+
if ENV["COVERAGE"]
|
2
|
+
require "simplecov"
|
3
3
|
SimpleCov.start do
|
4
|
-
add_filter
|
4
|
+
add_filter "/test/"
|
5
5
|
end
|
6
6
|
end
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
require 'active_record'
|
14
|
-
|
15
|
-
ActiveRecord::Base.establish_connection({
|
16
|
-
adapter: 'sqlite3',
|
17
|
-
database: 'bag.sqlite3'
|
18
|
-
})
|
19
|
-
|
20
|
-
ActiveRecord::Schema.define do
|
21
|
-
create_table 'orders', :force => true do |t|
|
22
|
-
t.string :category
|
23
|
-
t.column 'bag', :text
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
ActiveRecord::Schema.define do
|
28
|
-
create_table 'users', :force => true do |t|
|
29
|
-
t.string :type
|
30
|
-
t.text :bag
|
31
|
-
end
|
8
|
+
require "combustion"
|
9
|
+
Combustion.path = "test/internal"
|
10
|
+
Combustion.initialize! :active_record do
|
11
|
+
config.active_record.yaml_column_permitted_classes = [Symbol, Time, Date]
|
32
12
|
end
|
33
13
|
|
34
|
-
require
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
add_to_bag :field, flag: :boolean, at: :date
|
39
|
-
end
|
14
|
+
require "rails/test_help"
|
15
|
+
require "minitest/autorun"
|
16
|
+
require "minitest/benchmark"
|
17
|
+
# require 'capybara/rails'
|
data/test/type_test.rb
CHANGED
@@ -1,19 +1,30 @@
|
|
1
|
-
require
|
1
|
+
require "test_helper"
|
2
2
|
|
3
3
|
class Order < ActiveRecord::Base
|
4
4
|
add_to_bag({i: :integer}, {f: :float})
|
5
5
|
end
|
6
6
|
|
7
|
-
|
8
7
|
class TypeTest < ActiveSupport::TestCase
|
9
|
-
|
10
8
|
def setup
|
11
9
|
@order = Order.new
|
12
10
|
end
|
13
11
|
|
14
12
|
test "miscellaneous values" do
|
13
|
+
[123, 2.3, "abc", nil, {a: 1}, [1, 2]].each { |value|
|
14
|
+
@order.field = value
|
15
|
+
assert_value value, @order.field
|
16
|
+
|
17
|
+
@order.save
|
18
|
+
id = @order.id
|
19
|
+
order = Order.find(id)
|
20
|
+
assert_value value, order.field
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
test "Time & Date" do
|
15
25
|
time = Time.now
|
16
|
-
|
26
|
+
today = Date.today
|
27
|
+
[time, today].each { |value|
|
17
28
|
@order.field = value
|
18
29
|
assert_value value, @order.field
|
19
30
|
|
@@ -38,10 +49,10 @@ class TypeTest < ActiveSupport::TestCase
|
|
38
49
|
assert_kind_of Float, @order.f
|
39
50
|
end
|
40
51
|
|
41
|
-
|
52
|
+
private
|
53
|
+
|
42
54
|
def assert_value(expect, actual)
|
43
|
-
assert_equal expect, actual
|
44
|
-
assert_nil
|
55
|
+
assert_equal expect, actual if expect
|
56
|
+
assert_nil actual unless expect
|
45
57
|
end
|
46
|
-
|
47
58
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: act_with_bag
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dittmar Krall
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-08-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -42,16 +42,30 @@ dependencies:
|
|
42
42
|
name: appraisal
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: combustion
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: minitest
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,14 +96,13 @@ dependencies:
|
|
82
96
|
version: '0'
|
83
97
|
description: Add a bag to a Rails model
|
84
98
|
email:
|
85
|
-
- dittmar.krall@
|
99
|
+
- dittmar.krall@matiq.com
|
86
100
|
executables: []
|
87
101
|
extensions: []
|
88
102
|
extra_rdoc_files: []
|
89
103
|
files:
|
90
104
|
- ".github/workflows/rake.yml"
|
91
105
|
- ".gitignore"
|
92
|
-
- ".rubocop.yml"
|
93
106
|
- ".ruby-gemset"
|
94
107
|
- ".ruby-version"
|
95
108
|
- ".watchr"
|
@@ -109,14 +122,19 @@ files:
|
|
109
122
|
- test/boolean_test.rb
|
110
123
|
- test/clean_test.rb
|
111
124
|
- test/delete_test.rb
|
125
|
+
- test/internal/app/models/application_record.rb
|
126
|
+
- test/internal/app/models/order.rb
|
127
|
+
- test/internal/config/database.yml
|
128
|
+
- test/internal/db/schema.rb
|
112
129
|
- test/sti_test.rb
|
113
130
|
- test/string_test.rb
|
114
131
|
- test/test_helper.rb
|
115
132
|
- test/type_test.rb
|
116
|
-
homepage: http://
|
133
|
+
homepage: http://matiq.com
|
117
134
|
licenses:
|
118
135
|
- MIT
|
119
|
-
metadata:
|
136
|
+
metadata:
|
137
|
+
source_code_uri: https://github.com/matique/act_with_bag
|
120
138
|
post_install_message:
|
121
139
|
rdoc_options: []
|
122
140
|
require_paths:
|
@@ -132,18 +150,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
150
|
- !ruby/object:Gem::Version
|
133
151
|
version: '0'
|
134
152
|
requirements: []
|
135
|
-
rubygems_version: 3.
|
153
|
+
rubygems_version: 3.3.7
|
136
154
|
signing_key:
|
137
155
|
specification_version: 4
|
138
156
|
summary: act_with_bag (baggies) gem
|
139
|
-
test_files:
|
140
|
-
- test/accessor_test.rb
|
141
|
-
- test/bag_boolean_test.rb
|
142
|
-
- test/bag_test.rb
|
143
|
-
- test/boolean_test.rb
|
144
|
-
- test/clean_test.rb
|
145
|
-
- test/delete_test.rb
|
146
|
-
- test/sti_test.rb
|
147
|
-
- test/string_test.rb
|
148
|
-
- test/test_helper.rb
|
149
|
-
- test/type_test.rb
|
157
|
+
test_files: []
|
data/.rubocop.yml
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
inherit_from:
|
2
|
-
- ~/configs/.rubocop.yml
|
3
|
-
|
4
|
-
AllCops:
|
5
|
-
Include:
|
6
|
-
- 'lib/**/*.rb'
|
7
|
-
Exclude:
|
8
|
-
- 'test/**/*'
|
9
|
-
|
10
|
-
Layout/AccessModifierIndentation:
|
11
|
-
Enabled: false
|
12
|
-
Layout/EmptyLinesAroundAccessModifier:
|
13
|
-
Enabled: false
|
14
|
-
Layout/ExtraSpacing:
|
15
|
-
Enabled: false
|
16
|
-
|
17
|
-
Metrics/AbcSize:
|
18
|
-
Enabled: false
|
19
|
-
Metrics/CyclomaticComplexity:
|
20
|
-
Enabled: false
|
21
|
-
Metrics/MethodLength:
|
22
|
-
Enabled: false
|
23
|
-
Metrics/PerceivedComplexity:
|
24
|
-
Enabled: false
|
25
|
-
|
26
|
-
Style/EvalWithLocation:
|
27
|
-
Enabled: false
|
28
|
-
Style/RescueModifier:
|
29
|
-
Exclude:
|
30
|
-
- 'lib/act_with_bag.rb'
|