form_core 0.0.14 → 0.1.4
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 +5 -5
- data/README.md +9 -2
- data/Rakefile +1 -1
- data/app/models/form_core/form.rb +1 -1
- data/db/migrate/20170430190404_create_forms.rb +2 -0
- data/db/migrate/20170430191336_create_fields.rb +2 -0
- data/lib/form_core.rb +3 -7
- data/lib/form_core/coder.rb +12 -12
- data/lib/form_core/coders/hash_coder.rb +1 -3
- data/lib/form_core/coders/yaml_coder.rb +3 -7
- data/lib/form_core/concerns/models/field.rb +16 -21
- data/lib/form_core/concerns/models/form.rb +4 -4
- data/lib/form_core/version.rb +1 -1
- data/lib/form_core/virtual_model.rb +10 -11
- metadata +23 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: '07928a7711775a7ce8cdfaf530713730dfc5a72dd771bc6a9cf6b3ff32bf8812'
|
4
|
+
data.tar.gz: fa3857b1953ab4ba80868b3347ddc619c3edbd60d93eba1441ff0f1318eb5b15
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6f6cb884b37fa4a923d065840ae07f2d1dedad44867418d24115e9c7109ba58c1a36cfa199d506279cd11162f937d58331c18dba8467fe27073a765e2fb7f09
|
7
|
+
data.tar.gz: c9ac5f4b33404314e2c6fab8b3ddcac8bdf2151e541e354de0f727e92c7b6b4fe99c109cb5581d7099762209075f6d6ed241d74ec096f82fadadfda3836e3818
|
data/README.md
CHANGED
@@ -5,6 +5,13 @@ A Rails engine providing ability to generate dynamic form.
|
|
5
5
|
|
6
6
|
## Requirements
|
7
7
|
|
8
|
+
### 0.1 branch
|
9
|
+
|
10
|
+
- MRI 2.5+
|
11
|
+
- Rails 6.0+
|
12
|
+
|
13
|
+
### 0.0.1 branch
|
14
|
+
|
8
15
|
- MRI 2.3+
|
9
16
|
- Rails 5.0+
|
10
17
|
|
@@ -23,7 +30,7 @@ gem 'form_core'
|
|
23
30
|
Or you may want to include the gem directly from GitHub:
|
24
31
|
|
25
32
|
```ruby
|
26
|
-
gem 'form_core', github: '
|
33
|
+
gem 'form_core', github: 'rails-engine/form_core'
|
27
34
|
```
|
28
35
|
|
29
36
|
And then execute:
|
@@ -49,7 +56,7 @@ $ bin/rails db:migrate
|
|
49
56
|
Clone the repository.
|
50
57
|
|
51
58
|
```sh
|
52
|
-
$ git clone https://github.com/
|
59
|
+
$ git clone https://github.com/rails-engine/form_core.git
|
53
60
|
```
|
54
61
|
|
55
62
|
Change directory
|
data/Rakefile
CHANGED
@@ -16,7 +16,7 @@ RDoc::Task.new(:rdoc) do |rdoc|
|
|
16
16
|
rdoc.rdoc_files.include("lib/**/*.rb")
|
17
17
|
end
|
18
18
|
|
19
|
-
APP_RAKEFILE = File.expand_path("
|
19
|
+
APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
|
20
20
|
load "rails/tasks/engine.rake"
|
21
21
|
|
22
22
|
load "rails/tasks/statistics.rake"
|
data/lib/form_core.rb
CHANGED
@@ -18,9 +18,7 @@ module FormCore
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def virtual_model_class=(klass)
|
21
|
-
unless klass && klass < VirtualModel
|
22
|
-
raise ArgumentError, "#{klass} should be sub-class of #{VirtualModel}."
|
23
|
-
end
|
21
|
+
raise ArgumentError, "#{klass} should be sub-class of #{VirtualModel}." unless klass && klass < VirtualModel
|
24
22
|
|
25
23
|
@reserved_names = nil
|
26
24
|
@virtual_model_class = klass
|
@@ -28,7 +26,7 @@ module FormCore
|
|
28
26
|
|
29
27
|
def reserved_names
|
30
28
|
@reserved_names ||= Set.new(
|
31
|
-
%i
|
29
|
+
%i[def class module private public protected allocate new parent superclass] +
|
32
30
|
virtual_model_class.instance_methods(true)
|
33
31
|
)
|
34
32
|
end
|
@@ -38,9 +36,7 @@ module FormCore
|
|
38
36
|
end
|
39
37
|
|
40
38
|
def virtual_model_coder_class=(klass)
|
41
|
-
unless klass && klass < Coder
|
42
|
-
raise ArgumentError, "#{klass} should be sub-class of #{Coder}."
|
43
|
-
end
|
39
|
+
raise ArgumentError, "#{klass} should be sub-class of #{Coder}." unless klass && klass < Coder
|
44
40
|
|
45
41
|
@virtual_model_coder_class = klass
|
46
42
|
end
|
data/lib/form_core/coder.rb
CHANGED
@@ -24,20 +24,20 @@ module FormCore
|
|
24
24
|
|
25
25
|
private
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
27
|
+
def new_or_raise_decoding_error
|
28
|
+
if strict?
|
29
|
+
raise DecodingDataCorrupted
|
30
|
+
else
|
31
|
+
object_class.new
|
32
|
+
end
|
32
33
|
end
|
33
|
-
end
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
def valid_attribute_names
|
36
|
+
object_class.attribute_names + object_class._embeds_reflections.keys
|
37
|
+
end
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
def valid_attributes(hash)
|
40
|
+
hash.slice(*valid_attribute_names)
|
41
|
+
end
|
42
42
|
end
|
43
43
|
end
|
@@ -9,9 +9,7 @@ module FormCore
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def load(hash)
|
12
|
-
if hash.nil? || !hash.respond_to?(:to_h)
|
13
|
-
return new_or_raise_decoding_error
|
14
|
-
end
|
12
|
+
return new_or_raise_decoding_error if hash.nil? || !hash.respond_to?(:to_h)
|
15
13
|
|
16
14
|
object_class.new valid_attributes(hash)
|
17
15
|
end
|
@@ -23,19 +23,15 @@ module FormCore
|
|
23
23
|
def load(yaml)
|
24
24
|
return object_class.new if yaml.blank?
|
25
25
|
|
26
|
-
unless yaml.is_a?(String) && /^---/.match?(yaml)
|
27
|
-
return new_or_raise_decoding_error
|
28
|
-
end
|
26
|
+
return new_or_raise_decoding_error unless yaml.is_a?(String) && /^---/.match?(yaml)
|
29
27
|
|
30
28
|
decoded =
|
31
29
|
if safe_mode?
|
32
30
|
YAML.safe_load(yaml, YAMLCoder.whitelist_classes)
|
33
31
|
else
|
34
|
-
YAML.
|
32
|
+
YAML.safe_load(yaml)
|
35
33
|
end
|
36
|
-
unless decoded.is_a? Hash
|
37
|
-
return new_or_raise_decoding_error
|
38
|
-
end
|
34
|
+
return new_or_raise_decoding_error unless decoded.is_a? Hash
|
39
35
|
|
40
36
|
object_class.new valid_attributes(decoded)
|
41
37
|
end
|
@@ -5,10 +5,10 @@ module FormCore::Concerns
|
|
5
5
|
module Field
|
6
6
|
extend ActiveSupport::Concern
|
7
7
|
|
8
|
-
NAME_REGEX = /\A[a-
|
8
|
+
NAME_REGEX = /\A[a-z][a-z_0-9]*\z/.freeze
|
9
9
|
|
10
10
|
included do
|
11
|
-
enum accessibility: {read_and_write: 0, readonly: 1, hidden: 2},
|
11
|
+
enum accessibility: { read_and_write: 0, readonly: 1, hidden: 2 },
|
12
12
|
_prefix: :access
|
13
13
|
|
14
14
|
serialize :validations
|
@@ -16,11 +16,11 @@ module FormCore::Concerns
|
|
16
16
|
|
17
17
|
validates :name,
|
18
18
|
presence: true,
|
19
|
-
uniqueness: {scope: :form},
|
20
|
-
exclusion: {in: FormCore.reserved_names},
|
21
|
-
format: {with: NAME_REGEX}
|
19
|
+
uniqueness: { scope: :form },
|
20
|
+
exclusion: { in: FormCore.reserved_names },
|
21
|
+
format: { with: NAME_REGEX }
|
22
22
|
validates :accessibility,
|
23
|
-
inclusion: {in:
|
23
|
+
inclusion: { in: accessibilities.keys.map(&:to_sym) }
|
24
24
|
|
25
25
|
after_initialize do
|
26
26
|
self.validations ||= {}
|
@@ -54,9 +54,7 @@ module FormCore::Concerns
|
|
54
54
|
default_value = overrides.fetch(:default_value, self.default_value)
|
55
55
|
model.attribute name, stored_type, default: default_value
|
56
56
|
|
57
|
-
if accessibility == :readonly
|
58
|
-
model.attr_readonly name
|
59
|
-
end
|
57
|
+
model.attr_readonly name if accessibility == :readonly
|
60
58
|
|
61
59
|
interpret_validations_to model, accessibility, overrides
|
62
60
|
interpret_extra_to model, accessibility, overrides
|
@@ -66,23 +64,20 @@ module FormCore::Concerns
|
|
66
64
|
|
67
65
|
protected
|
68
66
|
|
69
|
-
|
70
|
-
|
71
|
-
|
67
|
+
def interpret_validations_to(model, accessibility, overrides = {})
|
68
|
+
validations = overrides.fetch(:validations, (self.validations || {}))
|
69
|
+
validation_options = overrides.fetch(:validation_options) { self.options.fetch(:validation, {}) }
|
72
70
|
|
73
|
-
|
74
|
-
model.validates name, **validations, **validation_options
|
71
|
+
model.validates name, **validations, **validation_options if accessibility == :read_and_write && validations.present?
|
75
72
|
end
|
76
|
-
end
|
77
73
|
|
78
|
-
|
79
|
-
end
|
74
|
+
def interpret_extra_to(_model, _accessibility, _overrides = {}); end
|
80
75
|
|
81
|
-
|
82
|
-
|
83
|
-
|
76
|
+
def check_model_validity!(model)
|
77
|
+
unless model.is_a?(Class) && model < ::FormCore::VirtualModel
|
78
|
+
raise ArgumentError, "#{model} must be a #{::FormCore::VirtualModel}'s subclass"
|
79
|
+
end
|
84
80
|
end
|
85
|
-
end
|
86
81
|
end
|
87
82
|
end
|
88
83
|
end
|
@@ -28,11 +28,11 @@ module FormCore::Concerns
|
|
28
28
|
|
29
29
|
private
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
def check_model_validity!(model)
|
32
|
+
unless model.is_a?(Class) && model < ::FormCore::VirtualModel
|
33
|
+
raise ArgumentError, "#{model} must be a #{::FormCore::VirtualModel}'s subclass"
|
34
|
+
end
|
34
35
|
end
|
35
|
-
end
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
data/lib/form_core/version.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "
|
3
|
+
require "active_entity"
|
4
4
|
|
5
5
|
module FormCore
|
6
|
-
class VirtualModel < ::
|
6
|
+
class VirtualModel < ::ActiveEntity::Base
|
7
7
|
# Returns the contents of the record as a nicely formatted string.
|
8
8
|
def inspect
|
9
9
|
# We check defined?(@attributes) not to issue warnings if the object is
|
@@ -11,9 +11,7 @@ module FormCore
|
|
11
11
|
inspection =
|
12
12
|
if defined?(@attributes) && @attributes
|
13
13
|
self.class.attribute_names.collect do |name|
|
14
|
-
if has_attribute?(name)
|
15
|
-
"#{name}: #{attribute_for_inspect(name)}"
|
16
|
-
end
|
14
|
+
"#{name}: #{attribute_for_inspect(name)}" if has_attribute?(name)
|
17
15
|
end.compact.join(", ")
|
18
16
|
else
|
19
17
|
"not initialized"
|
@@ -24,11 +22,14 @@ module FormCore
|
|
24
22
|
|
25
23
|
def serializable_hash(options = {})
|
26
24
|
options = (options || {}).reverse_merge include: self.class._embeds_reflections.keys
|
27
|
-
super
|
25
|
+
super(**options)
|
28
26
|
end
|
29
27
|
|
28
|
+
# Hack
|
29
|
+
ARRAY_WITHOUT_BLANK_PATTERN = "!ruby/array:ArrayWithoutBlank"
|
30
|
+
|
30
31
|
def dump
|
31
|
-
self.class.dump(self)
|
32
|
+
self.class.dump(self).gsub(ARRAY_WITHOUT_BLANK_PATTERN, "")
|
32
33
|
end
|
33
34
|
|
34
35
|
class << self
|
@@ -48,9 +49,7 @@ module FormCore
|
|
48
49
|
end
|
49
50
|
|
50
51
|
def coder=(klass)
|
51
|
-
unless klass && klass < Coder
|
52
|
-
raise ArgumentError, "#{klass} should be sub-class of #{Coder}."
|
53
|
-
end
|
52
|
+
raise ArgumentError, "#{klass} should be sub-class of #{Coder}." unless klass && klass < Coder
|
54
53
|
|
55
54
|
@_coder = klass.new(self)
|
56
55
|
end
|
@@ -70,7 +69,7 @@ module FormCore
|
|
70
69
|
end
|
71
70
|
|
72
71
|
def _embeds_reflections
|
73
|
-
_reflections.select { |_, v| v.is_a?
|
72
|
+
_reflections.select { |_, v| v.is_a? ::ActiveEntity::Reflection::EmbeddedAssociationReflection }
|
74
73
|
end
|
75
74
|
end
|
76
75
|
end
|
metadata
CHANGED
@@ -1,43 +1,49 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: form_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jasl
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activeentity
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 6.1.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
|
-
version:
|
26
|
+
version: 6.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: rails
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 6.0.0
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '7'
|
34
37
|
type: :runtime
|
35
38
|
prerelease: false
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
37
40
|
requirements:
|
38
|
-
- - "
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 6.0.0
|
44
|
+
- - "<"
|
39
45
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
46
|
+
version: '7'
|
41
47
|
description: |
|
42
48
|
A Rails engine providing ability to generate dynamic form.
|
43
49
|
It's would make such as dynamic fields of model or questionnaire easily.
|
@@ -66,11 +72,11 @@ files:
|
|
66
72
|
- lib/form_core/version.rb
|
67
73
|
- lib/form_core/virtual_model.rb
|
68
74
|
- lib/tasks/form_core_tasks.rake
|
69
|
-
homepage: https://github.com/
|
75
|
+
homepage: https://github.com/rails-engine/form_core
|
70
76
|
licenses:
|
71
77
|
- MIT
|
72
78
|
metadata: {}
|
73
|
-
post_install_message:
|
79
|
+
post_install_message:
|
74
80
|
rdoc_options: []
|
75
81
|
require_paths:
|
76
82
|
- lib
|
@@ -85,9 +91,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
91
|
- !ruby/object:Gem::Version
|
86
92
|
version: '0'
|
87
93
|
requirements: []
|
88
|
-
|
89
|
-
|
90
|
-
signing_key:
|
94
|
+
rubygems_version: 3.1.4
|
95
|
+
signing_key:
|
91
96
|
specification_version: 4
|
92
97
|
summary: A Rails engine providing ability to generate dynamic form.
|
93
98
|
test_files: []
|