active_form_objects 1.0.0.beta → 1.0.0.beta.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 +4 -4
- data/lib/active_form_objects.rb +7 -1
- data/lib/dsl/associates.rb +18 -0
- data/lib/dsl/attributes.rb +9 -0
- data/lib/dsl/delegates.rb +10 -3
- data/lib/handlers/associates.rb +23 -0
- data/lib/handlers/delegates.rb +3 -2
- data/lib/handlers/polymorphs.rb +3 -4
- data/lib/handlers/relations.rb +1 -1
- data/lib/handlers/savings.rb +9 -4
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4cc38391b46ea4d3dd453708fd14842a0848017c270003e0ffcc67088aaf4ce8
|
4
|
+
data.tar.gz: 91c862cc0a28c7f2be22d9af319e41eae764421cf8234badacc0dc66c708afa5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9a52467cb2e00a176b5044869b125728b45eca076931ecbc5f049ca72eccf1b33d878516449ef29dbbcc08501add7c59ed5eeedd191faadb9d594b571b01146
|
7
|
+
data.tar.gz: 401e27c9bd4024c242eda7d211d2df1759cbea23a85a12c0375c59443490d4dec5edafd8159d4ea662fb8300935a2c09cf98c5f65e1ad6989eedd98220bc0632
|
data/lib/active_form_objects.rb
CHANGED
@@ -1,16 +1,20 @@
|
|
1
1
|
require 'active_model'
|
2
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
3
|
+
|
2
4
|
|
3
5
|
require_relative 'dsl/relations'
|
4
6
|
require_relative 'dsl/attributes'
|
5
7
|
require_relative 'dsl/delegates'
|
6
8
|
require_relative 'dsl/savings'
|
7
9
|
require_relative 'dsl/resource'
|
10
|
+
require_relative 'dsl/associates'
|
8
11
|
require_relative 'dsl/polymorphs'
|
9
12
|
|
10
13
|
require_relative 'handlers/initializer'
|
11
14
|
require_relative 'handlers/relations'
|
12
15
|
require_relative 'handlers/resource'
|
13
16
|
require_relative 'handlers/attributes'
|
17
|
+
require_relative 'handlers/associates'
|
14
18
|
|
15
19
|
module ActiveFormObjects
|
16
20
|
class Base
|
@@ -21,13 +25,15 @@ module ActiveFormObjects
|
|
21
25
|
include Dsl::Relations
|
22
26
|
include Dsl::Polymorphs
|
23
27
|
include Dsl::Delegates
|
28
|
+
include Dsl::Associates
|
24
29
|
include Dsl::Savings
|
25
30
|
|
26
31
|
def initialize(params, resource = nil)
|
27
|
-
@params = params
|
32
|
+
@params = params.with_indifferent_access
|
28
33
|
@resource = resource
|
29
34
|
|
30
35
|
Handlers::Initializer.handle(self)
|
36
|
+
Handlers::Associates.handle(self)
|
31
37
|
Handlers::Resource.handle(self)
|
32
38
|
Handlers::Attributes.handle(self)
|
33
39
|
super(@params)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
|
3
|
+
module Dsl
|
4
|
+
module Associates
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
@@associated_forms = {}
|
8
|
+
|
9
|
+
class_methods do
|
10
|
+
def associated(key, form, params = nil)
|
11
|
+
@@associated_forms[name] ||= []
|
12
|
+
@@associated_forms[name] << { name: key, form: form, params: params }
|
13
|
+
|
14
|
+
set_default value: {}, to: key
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/dsl/attributes.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'active_support'
|
2
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
2
3
|
|
3
4
|
module Dsl
|
4
5
|
module Attributes
|
@@ -9,6 +10,14 @@ module Dsl
|
|
9
10
|
@@default_params = {}
|
10
11
|
@@preparers = {}
|
11
12
|
|
13
|
+
def attrs_only(params)
|
14
|
+
attributes.slice(*params)
|
15
|
+
end
|
16
|
+
|
17
|
+
def attributes
|
18
|
+
instance_values.with_indifferent_access.symbolize_keys
|
19
|
+
end
|
20
|
+
|
12
21
|
included do
|
13
22
|
attr_accessor :params
|
14
23
|
|
data/lib/dsl/delegates.rb
CHANGED
@@ -5,13 +5,20 @@ module Dsl
|
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
7
|
@@delegators = {}
|
8
|
-
|
9
8
|
included do
|
10
9
|
def self.delegate(*params)
|
11
|
-
delegator = params.last[:to]
|
10
|
+
delegator = params.last[:to]
|
12
11
|
params.pop
|
13
12
|
|
14
|
-
|
13
|
+
if delegator.is_a?(Hash)
|
14
|
+
delegator[:attributes] = params
|
15
|
+
@@delegators[name] = (@@delegators[name] || []) << delegator
|
16
|
+
else
|
17
|
+
send(:attributes, *params)
|
18
|
+
define_method("#{delegator}_params") do
|
19
|
+
attrs_only(params)
|
20
|
+
end
|
21
|
+
end
|
15
22
|
end
|
16
23
|
end
|
17
24
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'active_support/core_ext/hash/reverse_merge'
|
2
|
+
require_relative 'base'
|
3
|
+
|
4
|
+
module Handlers
|
5
|
+
class Associates < Base
|
6
|
+
def handle
|
7
|
+
(upper('@@associated_forms') || []).each do |form|
|
8
|
+
@klass.instance_variable_set("@#{form[:name]}_form", form[:form])
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def save_associated_forms!
|
13
|
+
(upper('@@associated_forms') || []).each do |associated|
|
14
|
+
params = associated[:params].nil? ? @params[associated[:name]] : @klass.send(associated[:params])
|
15
|
+
resource_to_save = @klass.send("#{associated[:name]}_to_update") rescue nil
|
16
|
+
the_form = associated[:form]
|
17
|
+
|
18
|
+
saved_form = the_form.new(params, resource_to_save).save!
|
19
|
+
@klass.instance_variable_set("@#{associated[:name]}", saved_form)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/handlers/delegates.rb
CHANGED
@@ -3,7 +3,8 @@ require_relative 'base'
|
|
3
3
|
module Handlers
|
4
4
|
class Delegates < Base
|
5
5
|
def handle
|
6
|
-
delegates = upper
|
6
|
+
delegates = upper('@@delegators')
|
7
|
+
|
7
8
|
(delegates || []).each do |delegate|
|
8
9
|
Delegate.new(@klass, delegate).handle
|
9
10
|
end
|
@@ -23,7 +24,7 @@ module Handlers
|
|
23
24
|
end
|
24
25
|
|
25
26
|
def handle
|
26
|
-
@attributes = @raw_params.slice(*@attributes).merge({
|
27
|
+
@attributes = @raw_params.slice(*@attributes.map(&:to_s)).merge({
|
27
28
|
@foreign_key => @resource.id
|
28
29
|
})
|
29
30
|
|
data/lib/handlers/polymorphs.rb
CHANGED
@@ -34,15 +34,14 @@ module Handlers
|
|
34
34
|
def handle
|
35
35
|
@params_to_send = @params[@polymorph[:key]] || {}
|
36
36
|
polymorph_instance = form_class.new(@params_to_send, @resource.try(@polymorph[:key])).save!
|
37
|
-
|
38
|
-
@params["#{@polymorph[:key]}
|
39
|
-
@params["#{@polymorph[:key]}_type".to_sym] = polymorph_instance.class.name
|
37
|
+
@params["#{@polymorph[:key]}_id"] = polymorph_instance.id
|
38
|
+
@params["#{@polymorph[:key]}_type"] = polymorph_instance.class.name
|
40
39
|
@params.delete(@polymorph[:key])
|
41
40
|
end
|
42
41
|
|
43
42
|
def form_class
|
44
43
|
@polymorph[:types][
|
45
|
-
@resource.try("#{@polymorph[:key]}_type"
|
44
|
+
@resource.try("#{@polymorph[:key]}_type") || clean_params.try(:to_sym)
|
46
45
|
]
|
47
46
|
end
|
48
47
|
|
data/lib/handlers/relations.rb
CHANGED
@@ -5,7 +5,7 @@ module Handlers
|
|
5
5
|
def affect_relation_values!
|
6
6
|
relation_keys = upper(:@@relation_keys) || {}
|
7
7
|
{}.merge(@params).each_key do |key|
|
8
|
-
@params["#{key}_id"
|
8
|
+
@params["#{key}_id"] = @params[key].id if relation_keys.include?(key.to_sym)
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
data/lib/handlers/savings.rb
CHANGED
@@ -4,19 +4,19 @@ require 'active_record'
|
|
4
4
|
require_relative 'base'
|
5
5
|
require_relative 'polymorphs'
|
6
6
|
require_relative 'delegates'
|
7
|
+
require_relative 'associates'
|
7
8
|
|
8
9
|
module Handlers
|
9
10
|
class Savings < Base
|
10
11
|
def save!(&block)
|
11
|
-
|
12
|
+
ActiveRecord::Base.transaction do
|
13
|
+
return save_associated_forms! unless upper('@@associated_forms').nil?
|
12
14
|
@klass.validate!
|
13
|
-
|
14
15
|
before_save_hooks!
|
15
16
|
block ? save_with_block!(block) : save_without_block!
|
16
17
|
after_save_hooks!
|
17
|
-
|
18
18
|
@resource
|
19
|
-
|
19
|
+
end
|
20
20
|
rescue ActiveRecord::RecordInvalid => e
|
21
21
|
e.record.errors.add(e.record.class.name, '')
|
22
22
|
raise ActiveRecord::RecordInvalid.new(e.record)
|
@@ -28,6 +28,7 @@ module Handlers
|
|
28
28
|
|
29
29
|
def save_with_block!(block)
|
30
30
|
@klass.instance_eval(&block)
|
31
|
+
@resource = @klass.instance_variable_get(:@resource)
|
31
32
|
@resource.try(:save!)
|
32
33
|
end
|
33
34
|
|
@@ -38,5 +39,9 @@ module Handlers
|
|
38
39
|
def before_save_hooks!
|
39
40
|
Polymorphs.handle(@klass)
|
40
41
|
end
|
42
|
+
|
43
|
+
def save_associated_forms!
|
44
|
+
Associates.new(@klass).save_associated_forms!
|
45
|
+
end
|
41
46
|
end
|
42
47
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_form_objects
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.beta
|
4
|
+
version: 1.0.0.beta.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michaël Villeneuve
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-12-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -59,12 +59,14 @@ extensions: []
|
|
59
59
|
extra_rdoc_files: []
|
60
60
|
files:
|
61
61
|
- lib/active_form_objects.rb
|
62
|
+
- lib/dsl/associates.rb
|
62
63
|
- lib/dsl/attributes.rb
|
63
64
|
- lib/dsl/delegates.rb
|
64
65
|
- lib/dsl/polymorphs.rb
|
65
66
|
- lib/dsl/relations.rb
|
66
67
|
- lib/dsl/resource.rb
|
67
68
|
- lib/dsl/savings.rb
|
69
|
+
- lib/handlers/associates.rb
|
68
70
|
- lib/handlers/attributes.rb
|
69
71
|
- lib/handlers/base.rb
|
70
72
|
- lib/handlers/delegates.rb
|