readymade 0.2.4 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +18 -0
- data/Gemfile.lock +1 -1
- data/README.md +15 -0
- data/lib/readymade/form.rb +20 -4
- data/lib/readymade/model/api_attachable.rb +1 -2
- data/lib/readymade/model/filterable.rb +34 -0
- data/lib/readymade/version.rb +1 -1
- data/lib/readymade.rb +1 -0
- data/readymade.gemspec +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78de03a88081398d6f7a8a5f3a16b5311d12488e9e0418e9cd3c8fba74295605
|
4
|
+
data.tar.gz: '0924386861d20eb8bb83426e1cbd824d35b7c72d027b8bc812ca21d8df858984'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5a8182a959f3f8509835963292334ab7eb7912557ac04a312e86d746f77f406c4eb5252da002ba85226881e61e5ac7c8c37a5b818cd48b0c4270355320682834
|
7
|
+
data.tar.gz: 9b716935a3c69428018453240eb60d95a871b3a5862ad2e684258f8f152c737226766b33813a97047df86f3833825c2d4df184f7a7ff27cfe02cf1442f6548f0
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,24 @@
|
|
1
1
|
Changelog
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
+
## [0.2.7] - 2022-06-03
|
5
|
+
|
6
|
+
### Improvement
|
7
|
+
|
8
|
+
* Update `Readymade::Model::ApiAttachable` to support browser native base64 encoding
|
9
|
+
|
10
|
+
## [0.2.6] - 2022-05-24
|
11
|
+
|
12
|
+
### Features
|
13
|
+
|
14
|
+
* Add `Readymade::Model::Filterable` - model concern for scopes filtering
|
15
|
+
|
16
|
+
## [0.2.5] - 2022-05-19
|
17
|
+
|
18
|
+
### Improvements
|
19
|
+
|
20
|
+
* Form#required_attributes returns `[]` if `params[:_destroy]` present
|
21
|
+
|
4
22
|
## [0.2.4] - 2022-05-12
|
5
23
|
|
6
24
|
### Fixes
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -195,6 +195,21 @@ let(:avatar) { Rack::Test::UploadedFile.new(Rails.root.join('spec/support/assets
|
|
195
195
|
let(:params) { { user: attributes_for(:user).merge!(avatar: to_api_file(avatar)) } }
|
196
196
|
```
|
197
197
|
|
198
|
+
### Readymade::Model::Filterable
|
199
|
+
|
200
|
+
```ruby
|
201
|
+
class User < ApplicationRecord
|
202
|
+
include Readyamde::Model::Filterable
|
203
|
+
|
204
|
+
scope :by_status, ->(status) { where(status: status) }
|
205
|
+
scope :by_role, ->(role) { where(role: role) }
|
206
|
+
end
|
207
|
+
```
|
208
|
+
|
209
|
+
```ruby
|
210
|
+
User.all.filter_collection({ by_status: 'active', by_role: 'manager' })
|
211
|
+
```
|
212
|
+
|
198
213
|
## Development
|
199
214
|
|
200
215
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/readymade/form.rb
CHANGED
@@ -45,6 +45,8 @@ module Readymade
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def required_attributes
|
48
|
+
return [] if params.try(:[], :_destroy).present?
|
49
|
+
|
48
50
|
@required_attributes ||= self.class::REQUIRED_ATTRIBUTES
|
49
51
|
end
|
50
52
|
|
@@ -79,9 +81,17 @@ module Readymade
|
|
79
81
|
|
80
82
|
# copy errors from nested forms into parent form
|
81
83
|
def sync_nested_errors(nested_forms)
|
82
|
-
|
83
|
-
|
84
|
-
errors.
|
84
|
+
if rails_errors_v2?
|
85
|
+
nested_forms.each do |n_form|
|
86
|
+
n_form.errors.each do |code|
|
87
|
+
errors.add("#{n_form.humanized_name}.#{code.attribute}", code.message)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
else
|
91
|
+
nested_forms.each do |n_form|
|
92
|
+
n_form.errors.each do |code, text|
|
93
|
+
errors.add("#{n_form.humanized_name}.#{code}", text)
|
94
|
+
end
|
85
95
|
end
|
86
96
|
end
|
87
97
|
|
@@ -92,7 +102,7 @@ module Readymade
|
|
92
102
|
def sync_errors(from: self, to: record)
|
93
103
|
return if [from, to].any?(&:blank?)
|
94
104
|
|
95
|
-
if
|
105
|
+
if rails_errors_v2?
|
96
106
|
from.errors.messages.each do |key, values|
|
97
107
|
Array.wrap(values).uniq.each do |uv|
|
98
108
|
to.errors.add(key, uv)
|
@@ -145,6 +155,12 @@ module Readymade
|
|
145
155
|
{}
|
146
156
|
end
|
147
157
|
|
158
|
+
private
|
159
|
+
|
160
|
+
def rails_errors_v2?
|
161
|
+
Rails.version.to_f > 6.0
|
162
|
+
end
|
163
|
+
|
148
164
|
# EXAMPLE
|
149
165
|
# class Items::Forms::Create::Value < ::Readymade::Form
|
150
166
|
# PERMITTED_ATTRIBUTES = %i[vat_percent price_type item_category].freeze
|
@@ -49,7 +49,7 @@ module Readymade
|
|
49
49
|
ActionDispatch::Http::UploadedFile.new(
|
50
50
|
tempfile: Tempfile.new(attachment_file[:filename]).tap do |tf|
|
51
51
|
tf.binmode
|
52
|
-
tf.write(Base64.decode64(attachment_file[:base64]))
|
52
|
+
tf.write(Base64.decode64(attachment_file[:base64].split('base64,')[-1]))
|
53
53
|
end,
|
54
54
|
filename: attachment_file[:filename],
|
55
55
|
type: Mime::Type.lookup_by_extension(File.extname(attachment_file[:filename])[1..]).to_s
|
@@ -58,4 +58,3 @@ module Readymade
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
61
|
-
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
|
3
|
+
module Readymade
|
4
|
+
module Model
|
5
|
+
module Filterable
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
module ClassMethods
|
9
|
+
def send_chain(methods, scope = self)
|
10
|
+
return scope if methods.blank?
|
11
|
+
|
12
|
+
if methods.respond_to?(:keys)
|
13
|
+
methods.inject(scope) do |obj, (method, value)|
|
14
|
+
obj.send(method, value)
|
15
|
+
end
|
16
|
+
else
|
17
|
+
methods.inject(scope) do |obj, method|
|
18
|
+
obj.send(method)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def filter_collection(filtering_params)
|
24
|
+
filtering_params.permit! if filtering_params.respond_to?(:permit)
|
25
|
+
|
26
|
+
regular_params = filtering_params.select { |_key, value| value.present? }.to_h
|
27
|
+
custom_params = filtering_params.to_h.select { |_key, value| value.is_a?(String) && value.start_with?('without_') }.values
|
28
|
+
|
29
|
+
send_chain(regular_params, send_chain(custom_params)).distinct
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/readymade/version.rb
CHANGED
data/lib/readymade.rb
CHANGED
data/readymade.gemspec
CHANGED
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
|
|
26
26
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
27
27
|
end
|
28
28
|
spec.files << 'lib/readymade/model/api_attachable.rb'
|
29
|
+
spec.files << 'lib/readymade/model/filterable.rb'
|
29
30
|
spec.files << 'lib/readymade/controller/serialization.rb'
|
30
31
|
spec.bindir = 'exe'
|
31
32
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: readymade
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OrestF
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-06-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: byebug
|
@@ -77,6 +77,7 @@ files:
|
|
77
77
|
- lib/readymade/form.rb
|
78
78
|
- lib/readymade/instant_form.rb
|
79
79
|
- lib/readymade/model/api_attachable.rb
|
80
|
+
- lib/readymade/model/filterable.rb
|
80
81
|
- lib/readymade/operation.rb
|
81
82
|
- lib/readymade/response.rb
|
82
83
|
- lib/readymade/version.rb
|