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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3db0e2b3144028775d4671056b9aff91b6f48d4843a056fdc0e42bc115a18a86
4
- data.tar.gz: 83a536b2e3a296c5d1bb50de2e4dee584327c8d6b0ba9e2d608d0018259e811d
3
+ metadata.gz: 00bd0c94aee3fbc99eb7ca3ca554717315e632a2b7cdabd45a49f21513e5582b
4
+ data.tar.gz: 3aa580b905fdbee20225e9f1522dc7fce2c9d5947be8ff368e971133cff5af83
5
5
  SHA512:
6
- metadata.gz: 8178f176d4cefe6bfdf990ef3d1d40310b866d5a18e36757a291c8ae490c312d5a41fe5be1380f7e66af1ff780015d1c6ea0fd57562bc413f75ce5ad048b85e5
7
- data.tar.gz: 6b56cdf9bce4b173112d50cc8e167bb022994c0877edfbc665bdeab8b3ba7618f0813a929d4e29480bef8f581283d1c4a55b556a3f7b7c05bafe2515cae2ad40
6
+ metadata.gz: 4bc54082e770bed85ecb237639a32a11f5827486575d3138b862b511046817846ad4469db26abf6da1cfdd1a1f2e2075288c4dffeb74369605436015c379692c
7
+ data.tar.gz: 86b256efde9d4ea3e8c89358f5c13ac79b3dbd7844673cb0579a723c785bfe374846c834ca77580ae9a3a833436976c51d9615fb4b2986adf80369696b3ae99f
@@ -1,26 +1,30 @@
1
- # under construction
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
- name: Rake
10
- # runs-on: ubuntu-18.04
11
- runs-on: ubuntu-latest
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@v1
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: 2.7
21
-
22
- - name: Install dependencies
23
- run: gem install bundler && bundle install --jobs 4 --retry 3
24
-
25
- - name: Run Rake
26
- run: rake
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-6.1
1
+ rails-7.0
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-2.7.2
1
+ ruby-3.1.2
data/.watchr CHANGED
@@ -1,5 +1,6 @@
1
- HH = '#' * 22 unless defined?(HH)
2
- H = '#' * 5 unless defined?(H)
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, file)
18
- case type
19
- when 'test'; run %(ruby -I test #{file})
20
- # when 'spec'; run %(rspec -X #{file})
21
- else; puts "#{H} unknown type: #{type}, file: #{file}"
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
- %w[test spec].each { |dir| run "rake #{dir}" if File.exist?(dir) }
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('_').first
32
- %w[test spec].each { |type|
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(' ') unless files.empty?
37
+ run_it type, files.join(" ") unless files.empty?
35
38
  }
36
39
  end
37
40
 
38
- %w[test spec].each { |type|
41
+ TESTING.each { |type|
39
42
  watch("#{type}/#{type}_helper\.rb") { run_all_tests }
40
- watch('lib/.*\.rb') { run_all_tests }
41
- watch("#{type}/.*/*_#{type}\.rb") { |match| run_it type, match[0] }
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
- Signal.trap('QUIT') { run_all_tests }
58
+ Signal.trap("QUIT") { run_all_tests }
46
59
  # Ctrl-C
47
- Signal.trap('INT') { abort("Interrupted\n") }
60
+ Signal.trap("INT") { abort("Interrupted\n") }
48
61
  usage
data/Appraisals CHANGED
@@ -1,24 +1,24 @@
1
- appraise 'rails-6.1' do
2
- gem 'rails', '~> 6.1'
3
- gem 'dryer-config', '~> 6.0'
1
+ appraise "rails-6.1" do
2
+ gem "rails", "~> 6.1"
3
+ gem "dryer-config", "~> 6.0"
4
4
  end
5
5
 
6
- appraise 'rails-6.0' do
7
- gem 'rails', '~> 6.0'
8
- gem 'dryer-config', '~> 6.0'
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 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
  gemspec
3
3
 
4
- gem 'rails'
4
+ gem "rails"
5
5
 
6
6
  group :test do
7
- gem 'observr'
8
- gem 'rubocop', require: false
9
- gem 'simplecov', require: false
10
- gem 'capybara'
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
@@ -1,4 +1,4 @@
1
- Copyright 2010-2021 Dittmar Krall - www.matique.com
1
+ Copyright 2010-2022 Dittmar Krall - www.matiq.com
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
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-2020 [Dittmar Krall], released under the MIT license
111
+ Copyright (c) 2009-2022 [Dittmar Krall], released under the MIT license
data/Rakefile CHANGED
@@ -1,10 +1,10 @@
1
- require 'rake/testtask'
1
+ require "rake/testtask"
2
2
 
3
- desc 'Run the tests.'
3
+ desc "Run the tests."
4
4
  Rake::TestTask.new do |t|
5
- t.libs << 'lib'
6
- t.libs << 'test'
7
- t.pattern = 'test/**/*_test.rb'
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('../lib', __FILE__)
1
+ lib = File.expand_path("../lib", __FILE__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require 'act_with_bag/version'
3
+ require "act_with_bag/version"
4
4
 
5
5
  Gem::Specification.new do |s|
6
- s.name = 'act_with_bag'
7
- s.version = ActWithBag::VERSION
8
- s.summary = %q{act_with_bag (baggies) gem}
9
- s.description = %q{Add a bag to a Rails model}
10
- s.authors = ['Dittmar Krall']
11
- s.email = ['dittmar.krall@matique.de']
12
- s.homepage = 'http://matique.de'
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.license = 'MIT'
15
- s.platform = Gem::Platform::RUBY
16
+ s.metadata["source_code_uri"] = "https://github.com/matique/act_with_bag"
16
17
 
17
- s.files = `git ls-files -z`.split("\x0")
18
- s.test_files = s.files.grep(%r{^(test|spec|features)/})
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 'bundler'
22
- s.add_development_dependency 'rake'
23
- s.add_development_dependency 'appraisal', '~> 2'
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 'minitest'
26
- s.add_development_dependency 'sqlite3'
26
+ s.add_development_dependency "minitest"
27
+ s.add_development_dependency "sqlite3"
27
28
  end
@@ -7,9 +7,9 @@ gem "dryer-config", "~> 6.0"
7
7
 
8
8
  group :test do
9
9
  gem "observr"
10
- gem "rubocop", require: false
10
+ gem "standard", require: false
11
11
  gem "simplecov", require: false
12
- gem "capybara"
12
+ gem "ricecream"
13
13
  end
14
14
 
15
15
  gemspec path: "../"
@@ -7,9 +7,9 @@ gem "dryer-config", "~> 6.0"
7
7
 
8
8
  group :test do
9
9
  gem "observr"
10
- gem "rubocop", require: false
10
+ gem "standard", require: false
11
11
  gem "simplecov", require: false
12
- gem "capybara"
12
+ gem "ricecream"
13
13
  end
14
14
 
15
15
  gemspec path: "../"
@@ -1,12 +1,11 @@
1
- # rubocop: disable all
2
-
3
1
  module ActWithBag
4
- VERSION = '1.0.4' # 2021-06-17
5
- # VERSION = '1.0.3' # 2021-05-18
6
- # VERSION = '1.0.2' # 2020-07-16
7
- # VERSION = '1.0.1' # 2020-04-27
8
- # VERSION = '1.0.0' # 2019-09-27
9
- # VERSION = '0.5.7' # 2019-03-05
10
- # VERSION = '0.5.6' # 2019-02-15
11
- # VERSION = '0.5.5'
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] if res == []
64
- res[0] = 0 unless res[0] >= 0
63
+ res = [0] if res == []
64
+ res[0] = 0 unless res[0] >= 0
65
65
 
66
- value = Date.new(*res) rescue nil
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
- protected
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 if method_defined?(accessor_sym)
78
- res = true if respond_to?(:attribute_names) &&
79
- attribute_names.include?(accessor)
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 if accessor_present?(accessor)
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: '.to_i', float: '.to_f',
107
- string: '.to_s'}[type_sym] || ''
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 if type_sym == :date
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
@@ -1,22 +1,18 @@
1
- require 'test_helper'
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 = 'abc'
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
@@ -1,13 +1,10 @@
1
- require 'test_helper'
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 = '0'
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 'test_helper'
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?('field=')
19
- assert @order.respond_to?('flag=')
20
- assert @order.respond_to?('flag?')
21
- assert @order.respond_to?('at=')
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 = 'abc'
24
+ value = "abc"
26
25
  @order.field = value
27
26
  assert_equal value, @order.field
28
- assert_not_equal 'def', @order.field
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 'def', @order.at
34
+ assert_not_equal "def", @order.at
36
35
  end
37
36
 
38
37
  test "bag is hidden" do
39
- value = 'abc'
38
+ value = "abc"
40
39
  @order.field = value
41
- @order.bag = 'bad thing'
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 => {'at(1i)' => '1', 'at(2i)' => '2','at(3i)' => '3'}}
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 'test_helper'
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 = '1'
41
+ @order.flag = "1"
43
42
  assert_equal true, @order.flag
44
43
 
45
- @order.flag = '0'
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 = 'false'
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 = 'true'
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 'test_helper'
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 = 'abc'
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 'test_helper'
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 = 'aa'
18
- @order.bb = 'bb'
19
- @order.cc = 'cc'
14
+ @order.aa = "aa"
15
+ @order.bb = "bb"
16
+ @order.cc = "cc"
20
17
  @order.save
21
- assert_equal 'aa', @order.aa
18
+ assert_equal "aa", @order.aa
22
19
  assert_nil @order.bb
23
- assert_equal 'cc', @order.cc
20
+ assert_equal "cc", @order.cc
24
21
  end
25
-
26
22
  end
@@ -0,0 +1,3 @@
1
+ class ApplicationRecord < ActiveRecord::Base
2
+ self.abstract_class = true
3
+ end
@@ -0,0 +1,7 @@
1
+ class Order < ActiveRecord::Base
2
+ before_save do |row|
3
+ row.errors.add :base, "panic" if row.category == "error"
4
+ end
5
+
6
+ add_to_bag :field, flag: :boolean, at: :date
7
+ end
@@ -0,0 +1,3 @@
1
+ test:
2
+ adapter: sqlite3
3
+ database: db/test.sqlite3
@@ -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 'test_helper'
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 'Administrator', @admin.type
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?('name=')
41
- assert @admin.respond_to?('name=')
42
- assert @admin.respond_to?('key=')
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?('key=')
42
+ assert_equal false, @user.respond_to?(:key=)
46
43
  end
47
44
 
48
45
  test "access to name & key" do
49
- name = 'name'
50
- key = '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 'def', @admin.name
56
- assert_not_equal 'def', @admin.key
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 => {'at(1i)' => '1', 'at(2i)' => '2','at(3i)' => '3'}}
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 'test_helper'
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 'false', @order.string
15
+ assert_equal "false", @order.string
18
16
  value = true
19
17
  @order.string = value
20
- assert_equal 'true', @order.string
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['COVERAGE']
2
- require 'simplecov'
1
+ if ENV["COVERAGE"]
2
+ require "simplecov"
3
3
  SimpleCov.start do
4
- add_filter '/test/'
4
+ add_filter "/test/"
5
5
  end
6
6
  end
7
7
 
8
- #require 'rails/test_help'
9
- require 'minitest/autorun'
10
- require 'minitest/benchmark'
11
- #require 'capybara/rails'
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 File.dirname(__FILE__) + '/../lib/act_with_bag.rb'
35
-
36
-
37
- class Order < ActiveRecord::Base
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 'test_helper'
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
- [123, 2.3, "abc", nil, {a: 1}, [1,2], time].each { |value|
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
- private
52
+ private
53
+
42
54
  def assert_value(expect, actual)
43
- assert_equal expect, actual if expect
44
- assert_nil actual unless expect
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
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: 2021-06-17 00:00:00.000000000 Z
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: '2'
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: '2'
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@matique.de
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://matique.de
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.2.6
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'