mini_form 0.2.0 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 6d0c0c470b74ebc5e81006fa9f4f226de8d821d6
4
- data.tar.gz: 38393dfb6c142a1f85dca47a2aa16072a63f657f
2
+ SHA256:
3
+ metadata.gz: 4fae1bbe2eb9f254e0315e13364a0d9a19a87515061f066a37fd89689be9c657
4
+ data.tar.gz: 34c5ac1537cf058c0c67cdaa7ef4c88dd7aaaef63412cbabddbad5e13be73435
5
5
  SHA512:
6
- metadata.gz: 1f8c4900a91ceedd1b9f7c12b73e5b2fc30f033fd47783ae792a4c9e8dbb3f0bae93c65953da6ddebf1bbc75e3bb8c4484e863e33925b67672f11246e4b094b6
7
- data.tar.gz: 5a3a73ad3547ba949a1900918a1cdcfefc73c8bf77d0764d89fa0858c6fe8ae075a0493066f80b65d62429160e5a93d2734303d75fcc66d8b8746596d3455730
6
+ metadata.gz: ada501cc629ff6fd8701162248d095868bf2a7a9ac0e7e23f74caae5d08d1f8cbd31d9202fd47f52283cbb3117cd8c0d1a2705b9c074a09a6c95cb622ac2e4ee
7
+ data.tar.gz: 8cb38e2bf06594be100078b2d2b0ee10c4d5a356808ba4249fc2f63f060478619c97dc8d776004d20c5f52cb2b1dfef5b93099ca9307379c7921006a40bfa0ee
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ .vimrc.local
data/.projections.json ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "lib/*.rb": {
3
+ "alternate": "spec/{}_spec.rb"
4
+ },
5
+ "spec/*_spec.rb": {
6
+ "alternate": "lib/{}.rb"
7
+ },
8
+ }
data/.rubocop.yml CHANGED
@@ -1,16 +1,32 @@
1
1
  require: rubocop-rspec
2
2
 
3
- AllCops:
4
- RunRailsCops: true
3
+ Rails:
4
+ Enabled: true
5
5
  Exclude:
6
6
  - example/db/**/*
7
7
  - example/config/**/*
8
8
  - search_object.gemspec
9
9
 
10
+ # Disables "Module definition is too long"
11
+ ModuleLength:
12
+ Enabled: false
13
+
10
14
  # Disables "Line is too long"
11
15
  LineLength:
12
16
  Enabled: false
13
17
 
18
+ # Disables "Method is too long"
19
+ MethodLength:
20
+ Enabled: false
21
+
22
+ # Disables "Assignment Branch Condition size for included is too high"
23
+ AbcSize:
24
+ Enabled: false
25
+
26
+ # Disables "Block has too many lines"
27
+ BlockLength:
28
+ Enabled: false
29
+
14
30
  # Disables "Missing top-level class documentation comment"
15
31
  Documentation:
16
32
  Enabled: false
@@ -22,3 +38,19 @@ Style/EachWithObject:
22
38
  # Disables "Prefer reduce over inject."
23
39
  Style/CollectionMethods:
24
40
  Enabled: false
41
+
42
+ # Disables "%i-literals should be delimited by [ and ]."
43
+ Style/PercentLiteralDelimiters:
44
+ Enabled: false
45
+
46
+ # Disables "Use tr instead of gsubs"
47
+ Performance/StringReplacement:
48
+ Enabled: false
49
+
50
+ # Disables "Example has too many expectations"
51
+ RSpec/MultipleExpectations:
52
+ Enabled: false
53
+
54
+ # Disables "Example has too many lines"
55
+ RSpec/ExampleLength:
56
+ Enabled: false
data/.travis.yml CHANGED
@@ -1,10 +1,12 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.0
4
- - 2.1
5
- - 2.2
3
+ - 2.2.5
4
+ - 2.3.3
5
+ - 2.4.0
6
6
  script:
7
7
  - bundle exec rubocop
8
8
  - bundle exec rspec spec
9
+ sudo: false
10
+ cache: bundle
9
11
  notifications:
10
12
  email: false
data/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## Version 0.2.4
4
+
5
+ * Rails 6+ support (@emilov)
6
+
7
+ ## Version 0.2.3
8
+
9
+ * Fix handling delegated attributes prefixes in `attribute_names` (@rstankov)
10
+
11
+ ## Version 0.2.2
12
+
13
+ * Bump activemodel requirements (@vestimir)
14
+
15
+ ## Version 0.2.1
16
+
17
+ * Fix typo in `assignment` callbaks (@ayrton)
18
+ * Alias `assignment` to `assigment` for backwards compatibility (@ayrton)
19
+
3
20
  ## Version 0.2.0
4
21
 
5
22
  * Don't expose model name on `model`. _(security fix)_
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
- [![Gem Version](https://badge.fury.io/rb/mini_form.png)](http://badge.fury.io/rb/mini_form)
2
- [![Code Climate](https://codeclimate.com/github/RStankov/MiniForm.png)](https://codeclimate.com/github/RStankov/MiniForm)
3
- [![Build Status](https://secure.travis-ci.org/RStankov/MiniForm.png)](http://travis-ci.org/RStankov/MiniForm)
4
- [![Code coverage](https://coveralls.io/repos/RStankov/MiniForm/badge.png?branch=master)](https://coveralls.io/r/RStankov/MiniForm)
1
+ [![Gem Version](https://badge.fury.io/rb/mini_form.svg)](http://badge.fury.io/rb/mini_form)
2
+ [![Code Climate](https://codeclimate.com/github/RStankov/MiniForm.svg)](https://codeclimate.com/github/RStankov/MiniForm)
3
+ [![Build Status](https://secure.travis-ci.org/RStankov/MiniForm.svg)](http://travis-ci.org/RStankov/MiniForm)
4
+ [![Code coverage](https://coveralls.io/repos/RStankov/MiniForm/badge.svg?branch=master)](https://coveralls.io/r/RStankov/MiniForm)
5
5
 
6
6
  # MiniForm
7
7
 
@@ -267,11 +267,11 @@ form.id = 42 # => raises `NoMethodError`
267
267
  <td>Meant to be overwritten.</td>
268
268
  </tr>
269
269
  <tr>
270
- <td>#before_assigment</td>
270
+ <td>#before_assignment</td>
271
271
  <td>Meant to be overwritten.</td>
272
272
  </tr>
273
273
  <tr>
274
- <td>#after_assigment</td>
274
+ <td>#after_assignment</td>
275
275
  <td>Meant to be overwritten.</td>
276
276
  </tr>
277
277
  <tr>
data/Rakefile CHANGED
@@ -5,4 +5,4 @@ require 'rubocop/rake_task'
5
5
  RSpec::Core::RakeTask.new(:spec)
6
6
  RuboCop::RakeTask.new(:rubocop)
7
7
 
8
- task default: [:rubocop, :spec]
8
+ task default: %i(rubocop spec)
@@ -5,7 +5,8 @@ module MiniForm
5
5
  def initialize(object)
6
6
  @errors = object.errors
7
7
 
8
- super "Form validation failed for: #{errors.keys.join(', ')}"
8
+ arr_obj = errors.respond_to?(:attribute_names) ? errors.attribute_names : errors.keys
9
+ super "Form validation failed for: #{arr_obj.join(', ')}"
9
10
  end
10
11
  end
11
12
  end
@@ -3,7 +3,7 @@ require 'active_model'
3
3
 
4
4
  module MiniForm
5
5
  module Model
6
- def self.included(base) # rubocop:disable MethodLength
6
+ def self.included(base)
7
7
  base.class_eval do
8
8
  include ActiveModel::Validations
9
9
  include ActiveModel::Validations::Callbacks
@@ -15,11 +15,18 @@ module MiniForm
15
15
  extend ClassMethods
16
16
 
17
17
  define_model_callbacks :update
18
+ define_model_callbacks :assignment
19
+
20
+ # For backwards compatibility purpose
18
21
  define_model_callbacks :assigment
19
22
 
20
23
  before_update :before_update
21
24
  after_update :after_update
22
25
 
26
+ before_assignment :before_assignment
27
+ after_assignment :after_assignment
28
+
29
+ # For backwards compatibility purpose
23
30
  before_assigment :before_assigment
24
31
  after_assigment :after_assigment
25
32
  end
@@ -34,14 +41,16 @@ module MiniForm
34
41
  end
35
42
 
36
43
  def attributes=(attributes)
37
- run_callbacks :assigment do
38
- attributes.slice(*self.class.attribute_names).each do |name, value|
39
- public_send "#{name}=", value
44
+ run_callbacks :assignment do
45
+ run_callbacks :assigment do
46
+ attributes.slice(*self.class.attribute_names).each do |name, value|
47
+ public_send "#{name}=", value
48
+ end
40
49
  end
41
50
  end
42
51
  end
43
52
 
44
- alias_method :assign_attributes, :attributes=
53
+ alias assign_attributes attributes=
45
54
 
46
55
  def attributes
47
56
  Hash[self.class.attribute_names.map { |name| [name, public_send(name)] }]
@@ -63,7 +72,7 @@ module MiniForm
63
72
  end
64
73
 
65
74
  def update!(attributes = {})
66
- fail InvalidForm, self unless update attributes
75
+ raise InvalidForm, self unless update attributes
67
76
  self
68
77
  end
69
78
 
@@ -94,6 +103,14 @@ module MiniForm
94
103
  # noop
95
104
  end
96
105
 
106
+ def before_assignment
107
+ # noop
108
+ end
109
+
110
+ def after_assignment
111
+ # noop
112
+ end
113
+
97
114
  def before_assigment
98
115
  # noop
99
116
  end
@@ -123,7 +140,13 @@ module MiniForm
123
140
  end
124
141
 
125
142
  def attributes(*attributes, delegate: nil, prefix: nil, allow_nil: nil)
126
- attribute_names.push(*attributes)
143
+ if prefix
144
+ attribute_names.push(*attributes.map do |name|
145
+ :"#{prefix == true ? delegate : prefix}_#{name}"
146
+ end)
147
+ else
148
+ attribute_names.push(*attributes)
149
+ end
127
150
 
128
151
  if delegate.nil?
129
152
  attr_accessor(*attributes)
@@ -5,6 +5,15 @@ module MiniForm
5
5
  def validate_each(record, _, relation)
6
6
  return if relation.valid?
7
7
 
8
+ if record.errors.respond_to?(:merge!)
9
+ # Rails 6.1+ where accessing ActiveModel::Errors as a hash has been
10
+ # deprecated and the errors array is frozen. For this reason we use the new
11
+ # method merge!() which appends the errors as NestedErrors to the array. "This is the way."
12
+ record.errors.merge!(relation.errors)
13
+ return
14
+ end
15
+
16
+ # Rails < 6.1
8
17
  relation.errors.each do |name, value|
9
18
  record.errors.add name, value
10
19
  end
@@ -1,3 +1,3 @@
1
1
  module MiniForm
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.4'.freeze
3
3
  end
data/mini_form.gemspec CHANGED
@@ -1,5 +1,5 @@
1
- # coding: utf-8
2
1
  lib = File.expand_path('../lib', __FILE__)
2
+
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'mini_form/version'
5
5
 
@@ -14,14 +14,14 @@ Gem::Specification.new do |spec|
14
14
  spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
17
- spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(/^(spec)\//)
17
+ spec.executables = spec.files.grep(%r{^bin\/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(spec)\/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency 'activemodel', '~> 4.0'
21
+ spec.add_dependency 'activemodel', '>= 4.0'
22
22
 
23
- spec.add_development_dependency 'bundler', '~> 1.3'
24
- spec.add_development_dependency 'rake'
23
+ spec.add_development_dependency 'bundler', '>= 2.1.4'
24
+ spec.add_development_dependency 'rake', '>= 12.3.3'
25
25
  spec.add_development_dependency 'rspec', '~> 2.14'
26
26
  spec.add_development_dependency 'rspec-mocks', '>= 2.12.3'
27
27
  spec.add_development_dependency 'coveralls'
@@ -24,6 +24,8 @@ module MiniForm
24
24
  attr_reader :user
25
25
 
26
26
  attributes :name, delegate: :user
27
+ attributes :id, delegate: :user, prefix: true
28
+ attributes :name, delegate: :user, prefix: 'full'
27
29
 
28
30
  def initialize(user)
29
31
  @user = user
@@ -49,6 +51,10 @@ module MiniForm
49
51
  expect(value).to eq(expected_value), message
50
52
  end
51
53
 
54
+ def assert_respond_to(klass, method, message = nil)
55
+ expect(klass).to respond_to(method), message
56
+ end
57
+
52
58
  ActiveModel::Lint::Tests.public_instance_methods.map(&:to_s).grep(/^test/).each do |method|
53
59
  example(method.gsub('_', ' ')) { send method }
54
60
  end
@@ -140,6 +146,11 @@ module MiniForm
140
146
  it 'returns attribute names' do
141
147
  expect(Example.attribute_names).to eq %i(name price)
142
148
  end
149
+
150
+ it 'can handle prefixes' do
151
+ expect(ExampleWithDelegate.attribute_names).to include :user_id
152
+ expect(ExampleWithDelegate.attribute_names).to include :full_name
153
+ end
143
154
  end
144
155
 
145
156
  describe '#initialize' do
@@ -204,7 +215,7 @@ module MiniForm
204
215
 
205
216
  model :user, attributes: %i(name), save: true
206
217
 
207
- def initialize(user: user)
218
+ def initialize(user:)
208
219
  self.user = user
209
220
  end
210
221
  end
@@ -224,9 +235,11 @@ module MiniForm
224
235
  it 'calls "perfom" method when validation pass' do
225
236
  object = ExampleForUpdate.new name: 'value'
226
237
 
227
- expect(object).to receive(:perform)
238
+ allow(object).to receive(:perform)
228
239
 
229
240
  object.update
241
+
242
+ expect(object).to have_received(:perform)
230
243
  end
231
244
 
232
245
  it 'calls "save" for the model' do
@@ -242,19 +255,37 @@ module MiniForm
242
255
  it 'supports update callbacks' do
243
256
  object = ExampleForUpdate.new name: 'value'
244
257
 
245
- expect(object).to receive(:before_update)
246
- expect(object).to receive(:after_update)
258
+ allow(object).to receive(:before_update)
259
+ allow(object).to receive(:after_update)
247
260
 
248
261
  object.update
262
+
263
+ expect(object).to have_received(:before_update)
264
+ expect(object).to have_received(:after_update)
265
+ end
266
+
267
+ it 'supports legacy assig callbacks' do
268
+ object = ExampleForUpdate.new
269
+
270
+ allow(object).to receive(:before_assigment)
271
+ allow(object).to receive(:after_assigment)
272
+
273
+ object.update name: 'value'
274
+
275
+ expect(object).to have_received(:before_assigment)
276
+ expect(object).to have_received(:after_assigment)
249
277
  end
250
278
 
251
279
  it 'supports assign callbacks' do
252
280
  object = ExampleForUpdate.new
253
281
 
254
- expect(object).to receive(:before_assigment)
255
- expect(object).to receive(:after_assigment)
282
+ allow(object).to receive(:before_assignment)
283
+ allow(object).to receive(:after_assignment)
256
284
 
257
285
  object.update name: 'value'
286
+
287
+ expect(object).to have_received(:before_assignment)
288
+ expect(object).to have_received(:after_assignment)
258
289
  end
259
290
 
260
291
  it 'returns false when validations fail' do
@@ -266,9 +297,11 @@ module MiniForm
266
297
  it 'does not call "perfom" method when validation fail' do
267
298
  object = ExampleForUpdate.new name: nil
268
299
 
269
- expect(object).not_to receive(:perform)
300
+ allow(object).to receive(:perform)
270
301
 
271
302
  object.update
303
+
304
+ expect(object).not_to have_received(:perform)
272
305
  end
273
306
  end
274
307
 
@@ -281,9 +314,11 @@ module MiniForm
281
314
  it 'calls update with given arguments' do
282
315
  object = Example.new
283
316
 
284
- expect(object).to receive(:update).with(:attributes).and_return true
317
+ allow(object).to receive(:update).and_return true
285
318
 
286
319
  object.update! :attributes
320
+
321
+ expect(object).to have_received(:update).with(:attributes)
287
322
  end
288
323
 
289
324
  it 'raises error when update fails' do
metadata CHANGED
@@ -1,57 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mini_form
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Radoslav Stankov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-28 00:00:00.000000000 Z
11
+ date: 2022-01-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '4.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.3'
33
+ version: 2.1.4
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: '1.3'
40
+ version: 2.1.4
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 12.3.3
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: '0'
54
+ version: 12.3.3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -130,6 +130,7 @@ extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
132
  - ".gitignore"
133
+ - ".projections.json"
133
134
  - ".rspec"
134
135
  - ".rubocop.yml"
135
136
  - ".travis.yml"
@@ -151,7 +152,7 @@ homepage: https://github.com/RStankov/MiniForm
151
152
  licenses:
152
153
  - MIT
153
154
  metadata: {}
154
- post_install_message:
155
+ post_install_message:
155
156
  rdoc_options: []
156
157
  require_paths:
157
158
  - lib
@@ -166,9 +167,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
167
  - !ruby/object:Gem::Version
167
168
  version: '0'
168
169
  requirements: []
169
- rubyforge_project:
170
- rubygems_version: 2.4.5
171
- signing_key:
170
+ rubygems_version: 3.1.4
171
+ signing_key:
172
172
  specification_version: 4
173
173
  summary: Easy to use form objects in Rails projects
174
174
  test_files: