rails-fields 0.2.0 → 0.3.0
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/README.md +3 -15
- data/lib/{rails_fields.rb → rails-fields.rb} +12 -7
- data/lib/rails_fields/enforce_fields_middleware.rb +18 -0
- data/lib/rails_fields/railtie.rb +22 -0
- data/lib/rails_fields/version.rb +1 -1
- metadata +84 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 602330976f090420f2e4dc7ac7ce1fd5c897cf62c99f17a86bd3dbee88809b50
|
4
|
+
data.tar.gz: e2310c47d667f4d9199e7e0db893329d0eb75aaf257fe9579f31151b7e510be8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f186efcfac13495e229a308d088ea15698339cdec3be93d411504946514b4d618600947dc8182ee24048eb85c617878dee7115f2b7d88742a52334a8190c095
|
7
|
+
data.tar.gz: 893c54f91c6fe94601dd0ab278b5eb00e97946e4df03147f7ebfa8837c12be090f6ab4c18a735395e983b2d430617bfa05f7862521148afb52531299b087485e
|
data/README.md
CHANGED
@@ -8,9 +8,9 @@
|
|
8
8
|
|
9
9
|
Enforce field types and attributes for ActiveRecord models in Ruby on Rails applications.
|
10
10
|
|
11
|
-
- 🚀
|
12
|
-
- 🦄 Automatic [
|
13
|
-
- 📝 Explicit declarative model attributes annotation
|
11
|
+
- 🚀 Auto-magic ActiveRecord **Migrations** generation
|
12
|
+
- 🦄 Automatic [GraphQL types](https://graphql-ruby.org/type_definitions/objects.html) generation
|
13
|
+
- 📝 Explicit **declarative** model attributes annotation
|
14
14
|
- 💪🏻 Enforcement of fields declaration with real db columns
|
15
15
|
- 📜 Automatic YARD model documentation
|
16
16
|
|
@@ -76,18 +76,6 @@ And then execute:
|
|
76
76
|
```bash
|
77
77
|
$ bundle install
|
78
78
|
```
|
79
|
-
Update your `ApplicationRecord`:
|
80
|
-
|
81
|
-
```patch
|
82
|
-
+require 'rails_fields'
|
83
|
-
|
84
|
-
class ApplicationRecord < ActiveRecord::Base
|
85
|
-
primary_abstract_class
|
86
|
-
|
87
|
-
+ extend RailsFields::ClassMethods
|
88
|
-
+ include RailsFields
|
89
|
-
end
|
90
|
-
```
|
91
79
|
|
92
80
|
## License
|
93
81
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require "rails_fields/railtie"
|
1
2
|
require "rails_fields/errors/rails_fields_error"
|
2
3
|
require "rails_fields/errors/rails_fields_mismatch_error"
|
3
4
|
require "rails_fields/errors/rails_fields_unknown_type_error"
|
@@ -6,9 +7,13 @@ require "rails_fields/utils/mappings"
|
|
6
7
|
require "rails_fields/utils/helpers"
|
7
8
|
require "rails_fields/class_methods"
|
8
9
|
require "rails_fields/instance_methods"
|
10
|
+
require "rails_fields/enforce_fields_middleware"
|
11
|
+
|
12
|
+
Rails.logger.debug "RailsFields file root"
|
9
13
|
|
10
14
|
# Provides enforcement of declared field for ActiveRecord models.
|
11
15
|
module RailsFields
|
16
|
+
Rails.logger.debug "RailsFields module"
|
12
17
|
@processed_classes = {}
|
13
18
|
|
14
19
|
def self.processed_classes
|
@@ -16,11 +21,11 @@ module RailsFields
|
|
16
21
|
end
|
17
22
|
|
18
23
|
# @param base [ActiveRecord::Base] the model to include the module in
|
19
|
-
def self.included(base)
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
24
|
+
# def self.included(base)
|
25
|
+
# # base.extend(ClassMethods)
|
26
|
+
# # todo: raise if class methods not found
|
27
|
+
# # base.after_initialize do
|
28
|
+
# # self.class.enforce_declared_fields
|
29
|
+
# # end
|
30
|
+
# end
|
26
31
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
Rails.logger.debug "RailsFields::EnforceFieldsMiddleware"
|
2
|
+
|
3
|
+
module RailsFields
|
4
|
+
class EnforceFieldsMiddleware
|
5
|
+
def initialize(app)
|
6
|
+
@app = app
|
7
|
+
Rails.logger.debug "RailsFields::EnforceFieldsMiddleware initialize"
|
8
|
+
end
|
9
|
+
|
10
|
+
def call(env)
|
11
|
+
Rails.logger.debug "RailsFields::EnforceFieldsMiddleware call"
|
12
|
+
ApplicationRecord.descendants.each do |model|
|
13
|
+
model.enforce_declared_fields # if model.respond_to?(:enforce_declared_fields)
|
14
|
+
end
|
15
|
+
@app.call(env)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require "active_support"
|
2
|
+
require "active_support/rails"
|
3
|
+
require "rails_fields/enforce_fields_middleware"
|
4
|
+
|
5
|
+
Rails.logger.debug "RailsFields::Railtie"
|
6
|
+
|
7
|
+
module RailsFields
|
8
|
+
class Railtie < Rails::Railtie
|
9
|
+
# config.eager_load_namespaces << RailsFields
|
10
|
+
|
11
|
+
initializer "rails_fields.initialize" do
|
12
|
+
ActiveSupport.on_load(:active_record) do
|
13
|
+
extend RailsFields::ClassMethods
|
14
|
+
include RailsFields
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
initializer "rails_fields.middleware" do |app|
|
19
|
+
app.middleware.insert_before ActiveRecord::Migration::CheckPending, RailsFields::EnforceFieldsMiddleware
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/rails_fields/version.rb
CHANGED
metadata
CHANGED
@@ -1,20 +1,89 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-fields
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gaston Morixe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-08-
|
12
|
-
dependencies:
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
11
|
+
date: 2023-08-28 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '5.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '5.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: graphql
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: yard
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: jekyll
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: webrick
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: |2
|
84
|
+
rails-fields gem provides robust field type enforcement for ActiveRecord models in Ruby on Rails applications.
|
85
|
+
It includes utility methods for type validation, logging, and field mappings between GraphQL and ActiveRecord types
|
86
|
+
Custom error classes provide clear diagnostics for field-related issues, making it easier to maintain consistent data models.
|
18
87
|
email:
|
19
88
|
- gaston@gastonmorixe.com
|
20
89
|
executables: []
|
@@ -22,12 +91,14 @@ extensions: []
|
|
22
91
|
extra_rdoc_files: []
|
23
92
|
files:
|
24
93
|
- README.md
|
25
|
-
- lib/
|
94
|
+
- lib/rails-fields.rb
|
26
95
|
- lib/rails_fields/class_methods.rb
|
96
|
+
- lib/rails_fields/enforce_fields_middleware.rb
|
27
97
|
- lib/rails_fields/errors/rails_fields_error.rb
|
28
98
|
- lib/rails_fields/errors/rails_fields_mismatch_error.rb
|
29
99
|
- lib/rails_fields/errors/rails_fields_unknown_type_error.rb
|
30
100
|
- lib/rails_fields/instance_methods.rb
|
101
|
+
- lib/rails_fields/railtie.rb
|
31
102
|
- lib/rails_fields/utils/helpers.rb
|
32
103
|
- lib/rails_fields/utils/logging.rb
|
33
104
|
- lib/rails_fields/utils/mappings.rb
|
@@ -35,7 +106,10 @@ files:
|
|
35
106
|
homepage: https://github.com/gastonmorixe/rails-fields
|
36
107
|
licenses:
|
37
108
|
- MIT
|
38
|
-
metadata:
|
109
|
+
metadata:
|
110
|
+
homepage_uri: https://rails-fields.dev
|
111
|
+
source_code_uri: https://github.com/gastonmorixe/rails-fields
|
112
|
+
bug_tracker_uri: https://github.com/gastonmorixe/rails-fields/issues
|
39
113
|
post_install_message:
|
40
114
|
rdoc_options: []
|
41
115
|
require_paths:
|