act_with_bag 1.0.0 → 1.0.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
  SHA256:
3
- metadata.gz: 330c7550cfb054044f0b55af218d2583ec0355d4b90b2ef89524a6fc381e0f6c
4
- data.tar.gz: 27af83366874a66054ff502b1d47f64affa30ce796a8e04b1a89a464806f3b27
3
+ metadata.gz: 4f63fb96d66263716e8ba07368225c04c756521812bddeae7660e59b359d39b4
4
+ data.tar.gz: 17e357dd8bb99e77e71c5b5a5589344a83debc7c6489fdf8ff7b74c6442ae9ad
5
5
  SHA512:
6
- metadata.gz: 501bcab6bb29bc4b62d86c3a1f64a039f50cf3b5f6fab2eaabb8ff1b31027b9196e72149ea0233c6754da8062ab106974288dc86d1321f9ac7095fa3ebed4929
7
- data.tar.gz: b8d72ad5b40959d229a61ec155d611d24da84d4aa33ced4dc1b87700055c6fceb2d56f9c627c46e49cabd0a81415a9d07689fa24ea3bb0f7c4fbf162a33f31d4
6
+ metadata.gz: fb0ca13797f98d2475d06ddd4299b0f1b91abad2556853ac3b7a93326f8bbe238fa1055f6bdd218b460571674e6abae1a09d2a6c4eeee2d94c8ca75841f22c7b
7
+ data.tar.gz: 9ce019e70d1bb2a5523721656cc44b51100c552b0af7d903e03193746c5ef0b19602efa0fb9221134e6e446f39bf3402bbd74d7135ccc8f0e418bda7d3bbb8e9
@@ -0,0 +1,30 @@
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'
@@ -1 +1 @@
1
- ruby-2.6.4
1
+ ruby-2.6.6
@@ -8,7 +8,9 @@ bundler_args: --without production
8
8
  script: "bundle exec rake test"
9
9
 
10
10
  rvm:
11
- - 2.6.4
11
+ - 2.6.6
12
+ # - 2.6.5
13
+ # - 2.6.4
12
14
  # - 2.6.3
13
15
  # - 2.6.1
14
16
  # - 2.6.0
data/.watchr CHANGED
@@ -16,37 +16,30 @@ end
16
16
 
17
17
  def run_it(type, file)
18
18
  case type
19
- when 'test'; run %Q{ruby -I"lib:test" -r rubygems #{file}}
20
- # when 'test'; run %Q{rails test #{file}}
21
- # when 'spec'; run %Q{spring rspec -X #{file}}
19
+ when 'test'; run %(ruby -I test #{file})
20
+ # when 'spec'; run %(rspec -X #{file})
22
21
  else; puts "#{H} unknown type: #{type}, file: #{file}"
23
22
  end
24
23
  end
25
24
 
26
25
  def run_all_tests
27
26
  puts "\n#{HH} Running all tests #{HH}\n"
28
- # %w{test spec}.each { |dir| run "spring rake #{dir} RAILS_ENV=test" if File.exists?(dir) }
29
- # %w{test}.each { |dir| run "spring rake #{dir} RAILS_ENV=test" if File.exists?(dir) }
30
- %w{test}.each { |dir| run "rake #{dir} RAILS_ENV=test" if File.exists?(dir) }
27
+ %w[test spec].each { |dir| run "rake #{dir}" if File.exist?(dir) }
31
28
  end
32
29
 
33
30
  def run_matching_files(base)
34
31
  base = base.split('_').first
35
- %w{test spec}.each { |type|
32
+ %w[test spec].each { |type|
36
33
  files = Dir["#{type}/**/*.rb"].select { |file| file =~ /#{base}_.*\.rb/ }
37
34
  run_it type, files.join(' ') unless files.empty?
38
35
  }
39
36
  end
40
37
 
41
- %w{test spec}.each { |type|
38
+ %w[test spec].each { |type|
42
39
  watch("#{type}/#{type}_helper\.rb") { run_all_tests }
40
+ watch('lib/.*\.rb') { run_all_tests }
43
41
  watch("#{type}/.*/*_#{type}\.rb") { |match| run_it type, match[0] }
44
42
  }
45
- %w{rb erb haml slim}.each { |type|
46
- watch("app/.*/.*\.#{type}") { |m|
47
- run_matching_files("#{m[0].split('/').at(2).split('.').first}")
48
- }
49
- }
50
43
 
51
44
  # Ctrl-\ or ctrl-4
52
45
  Signal.trap('QUIT') { run_all_tests }
data/Gemfile CHANGED
@@ -1,11 +1,11 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
  gemspec
3
3
 
4
+ gem 'rails'
5
+
4
6
  group :test do
5
7
  gem 'observr'
8
+ gem 'rubocop', require: false
6
9
  gem 'simplecov', require: false
7
- gem 'minitest'
8
10
  gem 'capybara'
9
- gem 'sqlite3'
10
- # gem 'slim'
11
11
  end
@@ -0,0 +1,20 @@
1
+ Copyright 2010-2020 Dittmar Krall - www.matique.com
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -7,7 +7,7 @@ In Gemfile:
7
7
 
8
8
  gem 'act_with_bag'
9
9
 
10
- Bag helps when fields in a table are not yet settled down
10
+ Bag helps when fields in a Rails database table are not yet settled down
11
11
  or when many fields without business logic are required.
12
12
 
13
13
  Install (migrate) one bag as a text field in a table to collect many fields.
@@ -92,4 +92,4 @@ Test
92
92
 
93
93
  rake
94
94
 
95
- Copyright (c) 2009-2019 [Dittmar Krall], released under the MIT license
95
+ Copyright (c) 2009-2020 [Dittmar Krall], released under the MIT license
data/Rakefile CHANGED
@@ -1,13 +1,11 @@
1
- require "bundler/setup"
2
-
3
1
  require 'rake/testtask'
4
2
 
5
- desc 'Test the act_with_bag plugin.'
6
- Rake::TestTask.new(:test) do |t|
3
+ desc 'Run the tests.'
4
+ Rake::TestTask.new do |t|
7
5
  t.libs << 'lib'
8
6
  t.libs << 'test'
9
7
  t.pattern = 'test/**/*_test.rb'
10
8
  t.verbose = false
11
9
  end
12
10
 
13
- task :default => :test
11
+ task default: :test
@@ -18,8 +18,10 @@ Gem::Specification.new do |s|
18
18
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
19
19
  s.require_paths = ['lib']
20
20
 
21
- s.add_development_dependency 'rails'
22
- s.add_development_dependency 'bundler'
23
- s.add_development_dependency 'rake', '~> 12'
21
+ s.add_development_dependency 'bundler', '~>1'
22
+ s.add_development_dependency 'rake', '~>13'
24
23
  s.add_development_dependency 'appraisal', '~> 2'
24
+
25
+ s.add_development_dependency 'minitest', '~> 5.0'
26
+ s.add_development_dependency 'sqlite3', '~> 1'
25
27
  end
@@ -1,90 +1,94 @@
1
- class << ActiveRecord::Base
1
+ # frozen_string_literal: true
2
2
 
3
+ class << ActiveRecord::Base
3
4
  def add_to_bag(*baglets)
4
- #p "baglets #{baglets.inspect}"
5
+ # p "baglets #{baglets.inspect}"
5
6
  serialize :bag, Hash
6
7
 
7
- self.class_eval %{
8
+ class_eval %{
8
9
  def bag=(x)
9
- #bag changes disabled as it must be handled by Bag himself
10
+ #bag changes disabled as it must be handled by Bag himself
10
11
  end
11
12
  }
12
13
 
13
14
  @baggies_date ||= {}
14
- baglets.each {|b|
15
+ baglets.each { |b|
15
16
  if b.is_a?(Hash)
16
- b.each {|baggie, type|
17
- add_accessor(baggie, type)
18
- }
17
+ b.each { |baggie, type|
18
+ add_accessor(baggie, type)
19
+ }
19
20
  else
20
- add_accessor(b, :field)
21
+ add_accessor(b, :field)
21
22
  end
22
23
  }
23
24
  end
24
25
 
25
26
  def delete_from_bag(*baglets)
26
- #p "delete_from_bag baglets #{baglets.inspect}"
27
+ # p "delete_from_bag baglets #{baglets.inspect}"
27
28
 
28
- self.class_eval %{
29
+ class_eval %{
29
30
  before_save do
30
- #{baglets}.each {|b|
31
- if b.is_a?(Hash)
32
- b.each {|baggie, type|
33
- self.bag.delete(baggie.to_sym)
34
- }
35
- else
36
- self.bag.delete(b.to_sym)
37
- end
38
- }
31
+ #{baglets}.each { |b|
32
+ if b.is_a?(Hash)
33
+ b.each { |baggie, type|
34
+ self.bag.delete(baggie.to_sym)
35
+ }
36
+ else
37
+ self.bag.delete(b.to_sym)
38
+ end
39
+ }
39
40
  end
40
41
  }
41
-
42
42
  end
43
43
 
44
- def merge(bag, params)
45
- model = self.to_s.underscore.to_sym
44
+ def merge(_bag, params)
45
+ model = to_s.underscore.to_sym
46
46
  return params unless params[model]
47
47
 
48
- (@baggies_date || {}).each {|baggie, type|
49
- res, found, stopped = [], false, false
50
- (1..3).each {|i|
51
- p = params[model].delete("#{baggie}(#{i}i)")
52
- break if p.nil?
53
- found = true
54
- stopped = true if p.empty?
55
- res << p.to_i unless stopped
48
+ (@baggies_date || {}).each { |baggie, _type|
49
+ res = []
50
+ found = false
51
+ stopped = false
52
+ (1..3).each { |i|
53
+ p = params[model].delete("#{baggie}(#{i}i)")
54
+ break if p.nil?
55
+
56
+ found = true
57
+ stopped = true if p.empty?
58
+ res << p.to_i unless stopped
56
59
  }
57
60
  next unless found
58
- ## weird Timestamp, Hash and YAML problem
61
+
62
+ ## weird Timestamp, Hash and YAML problem
59
63
  res = [0] if res == []
60
64
  res[0] = 0 unless res[0] >= 0
61
65
 
62
- value = Date.new(*res) rescue value = nil
66
+ value = Date.new(*res) rescue nil
63
67
  params[model][baggie] = value
64
68
  }
65
69
  params
66
70
  end
67
71
 
68
-
69
72
  protected
70
73
  def accessor_present?(accessor)
71
74
  accessor_sym = accessor.to_sym
72
75
  res = false
73
76
 
74
- res = true if self.method_defined?(accessor_sym)
75
- res = true if self.respond_to?(:attribute_names) &&
76
- self.attribute_names.include?(accessor)
77
+ res = true if method_defined?(accessor_sym)
78
+ res = true if respond_to?(:attribute_names) &&
79
+ attribute_names.include?(accessor)
77
80
  if res
78
- # logger.info "** Already defined #{self.to_s}.#{accessor}"
79
- #p "** act_to_bag: untouched accessor '#{self.to_s}.#{accessor}'"
81
+ # logger.info "** Already defined #{self.to_s}.#{accessor}"
82
+ # p "** act_to_bag: untouched accessor '#{self.to_s}.#{accessor}'"
80
83
  end
81
- return res
84
+ res
82
85
  end
83
86
 
84
87
  def add_accessor(baggie, type)
85
88
  accessor = baggie.to_s
86
89
  return if accessor_present?(accessor)
87
- #MARS patch, new:
90
+
91
+ # MARS patch, new:
88
92
  #
89
93
  # The @baggies field is indispensable. Otherwise mistakes in renaming
90
94
  # or deleting baggies (without renaming/deleting) the value entry from the
@@ -94,69 +98,66 @@ class << ActiveRecord::Base
94
98
  # doing completely other things (e. g. accessing a database column).
95
99
  #
96
100
  @baggies ||= {}
97
- baggies = ( @baggies[self.to_s.underscore.to_sym] ||= {} )
98
- baggies[ baggie ] = type
99
- #END
101
+ baggies = (@baggies[to_s.underscore.to_sym] ||= {})
102
+ baggies[baggie] = type
103
+ # END
100
104
 
101
105
  type_sym = type.to_sym
102
106
  typing = {integer: '.to_i', float: '.to_f',
103
- string: '.to_s'}[type_sym] || ''
104
- #p "add_accessor #{self.to_s} #{baggie.inspect} #{type_sym.inspect}"
107
+ string: '.to_s'}[type_sym] || ''
108
+ # p "add_accessor #{self.to_s} #{baggie.inspect} #{type_sym.inspect}"
105
109
 
106
110
  @baggies_date[baggie] = type if type_sym == :date
107
111
 
108
- unless type_sym == :boolean
109
- self.class_eval %{
110
- def #{accessor}
111
- self.bag && self.bag[:#{baggie}]
112
- end
113
- }
114
-
115
- self.class_eval %{
116
- def #{accessor}=(value)
117
- @attributes['bag'] = {} unless bag.is_a?(Hash)
118
- unless value.nil?
119
- self.bag[:#{baggie}] = value#{typing}
120
- else
121
- self.bag.delete(:#{baggie})
122
- nil
123
- end
124
- end
125
- }
126
-
127
- else ################ now boolean handling ###################
128
-
129
- self.class_eval %{
130
- def #{accessor}
131
- res = bag && bag[:#{baggie}]
132
- return res if res.class == FalseClass
133
- return res if res.class == TrueClass
134
- return res.to_i != 0
135
- res
136
- end
137
- }
138
-
139
- self.class_eval %{
140
- def #{accessor}=(value)
141
- @attributes['bag'] = {} unless bag.is_a?(Hash)
142
- falsys = [false, "false", 0, "0", nil]
143
- unless falsys.include?(value)
144
- self.bag[:#{baggie}] = (value == 'true') || value
145
- else
146
- self.bag.delete(:#{baggie})
147
- nil
148
- end
149
- end
150
- }
151
-
152
- self.class_eval %{
153
- def #{accessor}?
154
- #{accessor}
155
- end
156
- }
157
-
112
+ if type_sym == :boolean
113
+ class_eval %(
114
+ def #{accessor}
115
+ res = bag && bag[:#{baggie}]
116
+ return res if res.class == FalseClass
117
+ return res if res.class == TrueClass
118
+ return res.to_i != 0
119
+ res
120
+ end
121
+ )
122
+
123
+ class_eval %(
124
+ def #{accessor}=(value)
125
+ @attributes['bag'] = {} unless bag.is_a?(Hash)
126
+ falsys = [false, "false", 0, "0", nil]
127
+ unless falsys.include?(value)
128
+ self.bag[:#{baggie}] = (value == 'true') || value
129
+ else
130
+ self.bag.delete(:#{baggie})
131
+ nil
132
+ end
133
+ end
134
+ )
135
+
136
+ class_eval %(
137
+ def #{accessor}?
138
+ #{accessor}
139
+ end
140
+ )
141
+
142
+ else
143
+
144
+ class_eval %(
145
+ def #{accessor}
146
+ self.bag && self.bag[:#{baggie}]
147
+ end
148
+ )
149
+
150
+ class_eval %(
151
+ def #{accessor}=(value)
152
+ @attributes['bag'] = {} unless bag.is_a?(Hash)
153
+ unless value.nil?
154
+ self.bag[:#{baggie}] = value#{typing}
155
+ else
156
+ self.bag.delete(:#{baggie})
157
+ nil
158
+ end
159
+ end
160
+ )
158
161
  end
159
-
160
162
  end
161
-
162
163
  end
@@ -1,6 +1,10 @@
1
+ # rubocop: disable all
2
+
1
3
  module ActWithBag
2
- VERSION = '1.0.0' # 2019-09-27
3
- # VERSION = '0.5.7' # 2019-03-05
4
- # VERSION = '0.5.6' # 2019-02-15
5
- # VERSION = '0.5.5'
4
+ VERSION = '1.0.2' # 2020-07-16
5
+ # VERSION = '1.0.1' # 2020-04-27
6
+ # VERSION = '1.0.0' # 2019-09-27
7
+ # VERSION = '0.5.7' # 2019-03-05
8
+ # VERSION = '0.5.6' # 2019-02-15
9
+ # VERSION = '0.5.5'
6
10
  end
@@ -1,13 +1,16 @@
1
- require 'simplecov'
1
+ if ENV['COVERAGE']
2
+ require 'simplecov'
3
+ SimpleCov.start do
4
+ add_filter '/test/'
5
+ end
6
+ end
2
7
 
3
- require 'rubygems'
8
+ #require 'rails/test_help'
4
9
  require 'minitest/autorun'
5
- require 'active_record'
10
+ require 'minitest/benchmark'
11
+ #require 'capybara/rails'
6
12
 
7
- #SimpleCov.start do
8
- # add_filter 'test'
9
- # command_name 'Minitest'
10
- #end
13
+ require 'active_record'
11
14
 
12
15
  ActiveRecord::Base.establish_connection({
13
16
  adapter: 'sqlite3',
metadata CHANGED
@@ -1,71 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: act_with_bag
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dittmar Krall
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-27 00:00:00.000000000 Z
11
+ date: 2020-07-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
14
+ name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '1'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '1'
27
27
  - !ruby/object:Gem::Dependency
28
- name: bundler
28
+ name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '13'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '13'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
42
+ name: appraisal
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '12'
47
+ version: '2'
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: '12'
54
+ version: '2'
55
55
  - !ruby/object:Gem::Dependency
56
- name: appraisal
56
+ name: minitest
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '2'
61
+ version: '5.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '2'
68
+ version: '5.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: sqlite3
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1'
69
83
  description: Add a bag to a Rails model
70
84
  email:
71
85
  - dittmar.krall@matique.de
@@ -74,12 +88,14 @@ extensions: []
74
88
  extra_rdoc_files: []
75
89
  files:
76
90
  - ".gitignore"
91
+ - ".rubocop.yml"
77
92
  - ".ruby-gemset"
78
93
  - ".ruby-version"
79
94
  - ".travis.yml"
80
95
  - ".watchr"
81
96
  - Appraisals
82
97
  - Gemfile
98
+ - MIT-LICENSE
83
99
  - README.md
84
100
  - Rakefile
85
101
  - act_with_bag.gemspec
@@ -118,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
134
  - !ruby/object:Gem::Version
119
135
  version: '0'
120
136
  requirements: []
121
- rubygems_version: 3.0.6
137
+ rubygems_version: 3.0.8
122
138
  signing_key:
123
139
  specification_version: 4
124
140
  summary: act_with_bag (baggies) gem