lite-form 1.0.4 → 1.0.5

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: 222e3689b037e5b8f7ab55241b45510f871b7b6045c5a2f479e1369c1e684bfd
4
- data.tar.gz: adfe85542a0edca34677ef5cfcc9ca3078e40e3f29f88f921886d71c9ffd5540
3
+ metadata.gz: 9f6348e50f8c224acb7db926a6e68cdaee3e317fae28c4976d775de547679c0c
4
+ data.tar.gz: de5fb7c924d72a17a3e7d75c09ec45a0c68b3d7ac3f0491398b62ae5df1ed416
5
5
  SHA512:
6
- metadata.gz: 3b4182e69c63b4f2cfe0cc27bfaa6c808997e3c07da2eee378c33ea1b2aefb27dec91188a7b11fc637edafddc66e6f1adfb4ba788aee77874b8a58e1eb41431e
7
- data.tar.gz: 2e50a501dee8928d9e93b3953ce534c11727a1ccb96a92e0a0323e92360301badbb15712316bc4568682a5923d90fe14972d4f65b14600ef603187b2602e663b
6
+ metadata.gz: '058745e0775a9d844551ae3df8913046cdb402bccfec011c089798c16ed5cee54c5bba3fa5368f8949d0ec1e13622365b9cc0945ced0301122b51f406c169b16'
7
+ data.tar.gz: e1538f82e2fdc246b9ff679bf304e7d5f5718c3127941381b3b7fd417405e5bdef3bd4d8f19583c404cf0bf8be5aa081f87be31420a15b2b07d5a7b14fbeeda9
data/.rubocop.yml CHANGED
@@ -5,6 +5,8 @@ AllCops:
5
5
  TargetRubyVersion: 2.6
6
6
  DisplayCopNames: true
7
7
  DisplayStyleGuide: true
8
+ Layout/EmptyLinesAroundAttributeAccessor:
9
+ Enabled: true
8
10
  Layout/EmptyLinesAroundBlockBody:
9
11
  Exclude:
10
12
  - 'spec/**/**/*'
@@ -14,6 +16,12 @@ Layout/EmptyLinesAroundModuleBody:
14
16
  EnforcedStyle: empty_lines_except_namespace
15
17
  Layout/LineLength:
16
18
  Max: 100
19
+ Layout/SpaceAroundMethodCallOperator:
20
+ Enabled: true
21
+ Lint/RaiseException:
22
+ Enabled: true
23
+ Lint/StructNewOverride:
24
+ Enabled: true
17
25
  Metrics/BlockLength:
18
26
  Exclude:
19
27
  - 'spec/**/**/*'
@@ -28,3 +36,13 @@ Style/Documentation:
28
36
  Enabled: false
29
37
  Style/ExpandPathArguments:
30
38
  Enabled: false
39
+ Style/ExponentialNotation:
40
+ Enabled: true
41
+ Style/HashEachMethods:
42
+ Enabled: true
43
+ Style/HashTransformKeys:
44
+ Enabled: true
45
+ Style/HashTransformValues:
46
+ Enabled: true
47
+ Style/SlicingWithRange:
48
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -6,6 +6,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.0.5] - 2020-05-20
10
+ ### Added
11
+ - Added save args
12
+ - Added more callback support
13
+ ### Removed
14
+ - Removed archive and destroy propagation
15
+
9
16
  ## [1.0.4] - 2019-12-21
10
17
  ### Removed
11
18
  - Removed generator empty directory check
data/Gemfile.lock CHANGED
@@ -1,65 +1,64 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lite-form (1.0.4)
4
+ lite-form (1.0.5)
5
5
  activemodel
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- actionpack (6.0.2.1)
11
- actionview (= 6.0.2.1)
12
- activesupport (= 6.0.2.1)
10
+ actionpack (6.0.3.1)
11
+ actionview (= 6.0.3.1)
12
+ activesupport (= 6.0.3.1)
13
13
  rack (~> 2.0, >= 2.0.8)
14
14
  rack-test (>= 0.6.3)
15
15
  rails-dom-testing (~> 2.0)
16
16
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
17
- actionview (6.0.2.1)
18
- activesupport (= 6.0.2.1)
17
+ actionview (6.0.3.1)
18
+ activesupport (= 6.0.3.1)
19
19
  builder (~> 3.1)
20
20
  erubi (~> 1.4)
21
21
  rails-dom-testing (~> 2.0)
22
22
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
23
- activemodel (6.0.2.1)
24
- activesupport (= 6.0.2.1)
25
- activerecord (6.0.2.1)
26
- activemodel (= 6.0.2.1)
27
- activesupport (= 6.0.2.1)
28
- activesupport (6.0.2.1)
23
+ activemodel (6.0.3.1)
24
+ activesupport (= 6.0.3.1)
25
+ activerecord (6.0.3.1)
26
+ activemodel (= 6.0.3.1)
27
+ activesupport (= 6.0.3.1)
28
+ activesupport (6.0.3.1)
29
29
  concurrent-ruby (~> 1.0, >= 1.0.2)
30
30
  i18n (>= 0.7, < 2)
31
31
  minitest (~> 5.1)
32
32
  tzinfo (~> 1.1)
33
- zeitwerk (~> 2.2)
33
+ zeitwerk (~> 2.2, >= 2.2.2)
34
34
  ast (2.4.0)
35
35
  builder (3.2.4)
36
36
  colorize (0.8.1)
37
- concurrent-ruby (1.1.5)
38
- crass (1.0.5)
39
- database_cleaner (1.7.0)
37
+ concurrent-ruby (1.1.6)
38
+ crass (1.0.6)
39
+ database_cleaner (1.8.5)
40
40
  diff-lcs (1.3)
41
41
  erubi (1.9.0)
42
- fasterer (0.8.1)
42
+ fasterer (0.8.3)
43
43
  colorize (~> 0.7)
44
44
  ruby_parser (>= 3.14.1)
45
45
  generator_spec (0.9.4)
46
46
  activesupport (>= 3.0.0)
47
47
  railties (>= 3.0.0)
48
- i18n (1.7.0)
48
+ i18n (1.8.2)
49
49
  concurrent-ruby (~> 1.0)
50
- jaro_winkler (1.5.4)
51
- loofah (2.4.0)
50
+ loofah (2.5.0)
52
51
  crass (~> 1.0.2)
53
52
  nokogiri (>= 1.5.9)
54
- method_source (0.9.2)
53
+ method_source (1.0.0)
55
54
  mini_portile2 (2.4.0)
56
- minitest (5.13.0)
57
- nokogiri (1.10.7)
55
+ minitest (5.14.1)
56
+ nokogiri (1.10.9)
58
57
  mini_portile2 (~> 2.4.0)
59
58
  parallel (1.19.1)
60
- parser (2.6.5.0)
59
+ parser (2.7.1.2)
61
60
  ast (~> 2.4.0)
62
- rack (2.0.8)
61
+ rack (2.2.2)
63
62
  rack-test (1.1.0)
64
63
  rack (>= 1.0, < 3)
65
64
  rails-dom-testing (2.0.3)
@@ -67,49 +66,50 @@ GEM
67
66
  nokogiri (>= 1.6)
68
67
  rails-html-sanitizer (1.3.0)
69
68
  loofah (~> 2.3)
70
- railties (6.0.2.1)
71
- actionpack (= 6.0.2.1)
72
- activesupport (= 6.0.2.1)
69
+ railties (6.0.3.1)
70
+ actionpack (= 6.0.3.1)
71
+ activesupport (= 6.0.3.1)
73
72
  method_source
74
73
  rake (>= 0.8.7)
75
74
  thor (>= 0.20.3, < 2.0)
76
75
  rainbow (3.0.0)
77
76
  rake (13.0.1)
77
+ rexml (3.2.4)
78
78
  rspec (3.9.0)
79
79
  rspec-core (~> 3.9.0)
80
80
  rspec-expectations (~> 3.9.0)
81
81
  rspec-mocks (~> 3.9.0)
82
- rspec-core (3.9.0)
83
- rspec-support (~> 3.9.0)
84
- rspec-expectations (3.9.0)
82
+ rspec-core (3.9.2)
83
+ rspec-support (~> 3.9.3)
84
+ rspec-expectations (3.9.2)
85
85
  diff-lcs (>= 1.2.0, < 2.0)
86
86
  rspec-support (~> 3.9.0)
87
- rspec-mocks (3.9.0)
87
+ rspec-mocks (3.9.1)
88
88
  diff-lcs (>= 1.2.0, < 2.0)
89
89
  rspec-support (~> 3.9.0)
90
- rspec-support (3.9.0)
91
- rubocop (0.78.0)
92
- jaro_winkler (~> 1.5.1)
90
+ rspec-support (3.9.3)
91
+ rubocop (0.83.0)
93
92
  parallel (~> 1.10)
94
- parser (>= 2.6)
93
+ parser (>= 2.7.0.1)
95
94
  rainbow (>= 2.2.2, < 4.0)
95
+ rexml
96
96
  ruby-progressbar (~> 1.7)
97
- unicode-display_width (>= 1.4.0, < 1.7)
98
- rubocop-performance (1.5.1)
97
+ unicode-display_width (>= 1.4.0, < 2.0)
98
+ rubocop-performance (1.5.2)
99
99
  rubocop (>= 0.71.0)
100
- rubocop-rspec (1.37.1)
100
+ rubocop-rspec (1.39.0)
101
101
  rubocop (>= 0.68.1)
102
102
  ruby-progressbar (1.10.1)
103
- ruby_parser (3.14.1)
103
+ ruby_parser (3.14.2)
104
104
  sexp_processor (~> 4.9)
105
- sexp_processor (4.13.0)
105
+ sexp_processor (4.14.1)
106
106
  sqlite3 (1.4.2)
107
107
  thor (1.0.1)
108
108
  thread_safe (0.3.6)
109
- tzinfo (1.2.5)
109
+ tzinfo (1.2.7)
110
110
  thread_safe (~> 0.1)
111
- unicode-display_width (1.6.0)
112
- zeitwerk (2.2.2)
111
+ unicode-display_width (1.7.0)
112
+ zeitwerk (2.3.0)
113
113
 
114
114
  PLATFORMS
115
115
  ruby
@@ -129,4 +129,4 @@ DEPENDENCIES
129
129
  sqlite3
130
130
 
131
131
  BUNDLED WITH
132
- 2.0.2
132
+ 2.1.4
data/README.md CHANGED
@@ -59,9 +59,9 @@ class UserForm < ApplicationForm
59
59
  # Setup your form validations like you would on model objects
60
60
  validates :name, presence: true
61
61
 
62
- # Access 4 predefined callbacks to trigger before, after, and
62
+ # Access 6 predefined callbacks to trigger before, after, and
63
63
  # around your actions. Available callbacks are `initialize`
64
- # `create`, `save`, and `update`
64
+ # `commit`, `create`, `rollback`, `save`, and `update`.
65
65
  before_create :prepend_signature!
66
66
  after_update :append_signature!
67
67
 
@@ -74,17 +74,26 @@ class UserForm < ApplicationForm
74
74
  # Propagation methods help you perform an action on an object.
75
75
  # If successful is returns the result else it adds the object
76
76
  # errors to the form object. Available propagation methods are:
77
- # `create_and_return!(object, params)`, `update_and_return!(object, params)`,
78
- # `save_and_return!(object)`, and `destroy_and_return!(object)`
77
+ # `create_and_return!(object, params)`,
78
+ # `update_and_return!(object, params)`,
79
+ # `save_and_return!(object)`
79
80
  create_and_return!(User, attributes)
80
81
  end
81
82
 
82
83
  def update_action
83
- ActiveRecord::Base.transaction do
84
- user = User.find(attributes[:id])
85
- update_and_return!(user, attributes.slice(:id))
86
- update_and_return!(user.settings, tour: false)
84
+ run_callbacks(:commit) do
85
+ ActiveRecord::Base.transaction do
86
+ user = User.find(attributes[:id])
87
+ update_and_return!(user, attributes.slice(:id))
88
+
89
+ # The `save_and_return!` supports on/off validation
90
+ user.settings.web_notification = true
91
+ save_and_return!(user.settings, validate: false)
92
+ end
87
93
  end
94
+ rescue StandardError => e
95
+ # This will run the `rollback` callback and re-raise the error.
96
+ raise_transaction_rollback(e)
88
97
  end
89
98
 
90
99
  def prepend_signature!
@@ -101,7 +110,6 @@ end
101
110
  ## Usage
102
111
 
103
112
  To access the form you need to pass the object to the form class and thats it.
104
- You can even decorate a collection of objects by passing the collection to `decorate`.
105
113
 
106
114
  ```ruby
107
115
  form = UserForm.new(params)
@@ -139,7 +147,9 @@ include ActiveModel::Serialization
139
147
 
140
148
  # Default callbacks that are defined
141
149
  define_model_callbacks :initialize
150
+ define_model_callbacks :commit
142
151
  define_model_callbacks :create
152
+ define_model_callbacks :rollback
143
153
  define_model_callbacks :save
144
154
  define_model_callbacks :update
145
155
  ```
@@ -17,10 +17,18 @@ module Lite
17
17
  include Lite::Form::Helpers::Propagation
18
18
 
19
19
  define_model_callbacks :initialize
20
+ define_model_callbacks :commit
20
21
  define_model_callbacks :create
22
+ define_model_callbacks :rollback
21
23
  define_model_callbacks :save
22
24
  define_model_callbacks :update
23
25
 
26
+ attr_reader :result
27
+
28
+ def initialize(params = {})
29
+ run_callbacks(:initialize) { super(params) }
30
+ end
31
+
24
32
  class << self
25
33
 
26
34
  def model_name
@@ -33,12 +41,6 @@ module Lite
33
41
 
34
42
  end
35
43
 
36
- attr_reader :result
37
-
38
- def initialize(params = {})
39
- run_callbacks(:initialize) { super(params) }
40
- end
41
-
42
44
  end
43
45
  end
44
46
  end
@@ -50,6 +50,11 @@ module Lite
50
50
  errors.empty?
51
51
  end
52
52
 
53
+ def raise_transaction_rollback(exception)
54
+ run_callbacks(:rollback)
55
+ raise exception
56
+ end
57
+
53
58
  end
54
59
  end
55
60
  end
@@ -7,19 +7,17 @@ module Lite
7
7
 
8
8
  private
9
9
 
10
- %i[archive destroy save].each do |action|
11
- define_method("#{action}_and_return!") do |klass|
12
- merge_errors!(klass) unless klass.send(action)
13
- klass
14
- end
15
- end
16
-
17
10
  def create_and_return!(klass, params)
18
11
  klass = klass.create(params)
19
12
  merge_errors!(klass) unless klass.errors.empty?
20
13
  klass
21
14
  end
22
15
 
16
+ def save_and_return!(klass, *args)
17
+ merge_errors!(klass) unless klass.save(*args)
18
+ klass
19
+ end
20
+
23
21
  def update_and_return!(klass, params)
24
22
  merge_errors!(klass) unless klass.update(params)
25
23
  klass
@@ -3,7 +3,7 @@
3
3
  module Lite
4
4
  module Form
5
5
 
6
- VERSION ||= '1.0.4'
6
+ VERSION ||= '1.0.5'
7
7
 
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lite-form
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Gomez
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-12-21 00:00:00.000000000 Z
11
+ date: 2020-05-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -231,7 +231,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
231
231
  - !ruby/object:Gem::Version
232
232
  version: '0'
233
233
  requirements: []
234
- rubygems_version: 3.1.1
234
+ rubygems_version: 3.1.3
235
235
  signing_key:
236
236
  specification_version: 4
237
237
  summary: Ruby Form based framework (aka form objects)