eitil 1.1.5 → 1.1.6

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: 1f2aa00902c0c436b26613f26555b6d583907285491dac4178b03ad0916be42d
4
- data.tar.gz: ccb82971dcdeaa31c03716f942ace584d40183bded78c25a92b9df0800b97998
3
+ metadata.gz: 56c74ebd746f3df95bb5db69eea9c32c894c3a360c4f3da75d2fd5e776834800
4
+ data.tar.gz: a61655e6fab7305708443fe00918513cf42ebd04bddf9f5114b7f346edc8a347
5
5
  SHA512:
6
- metadata.gz: 6502c6a8df10c45af6234c1f49e7fcc4f8960c27693d09d797bfa5bb2a217dd576297fb0be5afc3c02a30a6556da1e2ff139741a69f91fccd2c595cee8a7be4c
7
- data.tar.gz: 686b771909c542bc6ef2a5d6657161353af8535754f23a2396c91ce6ede9590b0c6d4033c7acf1a80d1090f084ca57c90d97d97f8b4d7d2f07ae8b675dbdba28
6
+ metadata.gz: 247df55a479fa73e45cba14dc6dd902b8e334d7ec4f9faa4a67142015489498abbd1a17b3f08053326837e47677e1886a5e2663e3d496ae0e98ba5a20feffefc
7
+ data.tar.gz: 5844f97ccf79c3ccb7e4c9f7724fc2b9ff005e51e703477d4734b692b7180e4257fb81744a7a12ed4b292ab793fecb89f6d5f95d4f4866ddca6524ba4c57aeba
data/eitil_core/README.md CHANGED
@@ -10,10 +10,26 @@ EitilCore extends the core classes of Ruby and Rails.
10
10
 
11
11
  ```ruby
12
12
 
13
- require "eitil_core/application_controller"
13
+ require "eitil_core/active_record"
14
14
 
15
15
  ```
16
16
 
17
+ ```ruby
18
+ # require "eitil_core/active_record/hash_to_relation"
19
+
20
+ [].to_relation
21
+ # converts an array of ActiveRecord instances to an ActiveRecord_Relation instance
22
+ # call as: [#<instance1>,<instance2>].to_relation
23
+ ```
24
+
25
+ ## ApplicationController
26
+
27
+ ```ruby
28
+
29
+ require "eitil_core/application_controller"
30
+ require "eitil_core/application_controller/permit_model_atts"
31
+ ```
32
+
17
33
  ```ruby
18
34
  # require "eitil_core/application_controller/slice_params"
19
35
 
@@ -21,6 +37,11 @@ slice_params(*args)
21
37
  # slices request params, converts them to JSON and symbolizes the keys
22
38
  # call as: slice_params :id, :user
23
39
  # => { id: 1, user: 69 }
40
+
41
+ permit_model_atts(*models, include: nil, except: nil)
42
+ # calls params.permit and automatically permits the columns of all given models (one or more)
43
+ # also accepts additional permits (include: nil) or allows you to reject column values (except: nil)
44
+ # call as: params.permit_model_atts(BillingInfo, BillingIntegration, except: :credit_card)
24
45
  ```
25
46
 
26
47
 
@@ -12,6 +12,7 @@ require "eitil_core/formatters"
12
12
  require "eitil_core/mocks"
13
13
 
14
14
  # rails class patches
15
+ require "eitil_core/active_record"
15
16
  require "eitil_core/application_record"
16
17
  require "eitil_core/application_controller"
17
18
 
@@ -0,0 +1,2 @@
1
+
2
+ require "eitil_core/active_record/hash_to_relation"
@@ -0,0 +1,27 @@
1
+
2
+ # require "eitil_core/active_record/hash_to_relation"
3
+
4
+ require "eitil_core/errors/raise_error"
5
+
6
+ class Array
7
+
8
+ def to_relation
9
+
10
+ return self unless self.present?
11
+
12
+ unless self.all? { |item| item.class.ancestors.include? ApplicationRecord }
13
+ raise_error "InvalidArrayError", ".to_relation requires that all array items are model instances"
14
+ end
15
+
16
+ unless self.each_cons(2).all? { |el1, el2| el1.class == el2.class }
17
+ raise_error "InvalidArrayError", ".to_relation requires that all array items are instances of the same model"
18
+ end
19
+
20
+ _class = self.first.class
21
+ ids = self.map(&:id)
22
+
23
+ return _class.where(id: ids)
24
+
25
+ end
26
+
27
+ end
@@ -1,2 +1,3 @@
1
1
 
2
2
  require "eitil_core/application_controller/slice_params"
3
+ require "eitil_core/application_controller/permit_model_atts"
@@ -0,0 +1,27 @@
1
+
2
+ # require "eitil_core/application_controller/permit_model_atts"
3
+
4
+ module ActionController
5
+ class Parameters
6
+
7
+ def permit_model_atts(*models, include: nil, except: nil)
8
+
9
+ models = models.is_a?(Array) ? models : [models]
10
+ except = except.is_a?(Array) ? except : [except]
11
+ include = include.is_a?(Array) ? include : [include]
12
+
13
+ columns = models.map do |model|
14
+ model.columns_hash.keys.map &:to_sym
15
+ end.flatten.uniq
16
+
17
+ default_reject = %i( id updated_at created_at )
18
+ given_reject = except.map { |key| key&.to_sym }
19
+ accepted_values = columns + include - default_reject - given_reject
20
+
21
+ return self.permit(*accepted_values)
22
+ end
23
+
24
+ end
25
+ end
26
+
27
+
@@ -2,3 +2,4 @@
2
2
  require "eitil_core/application_record/where_like"
3
3
  require "eitil_core/application_record/find_by_like"
4
4
  require "eitil_core/application_record/all_associations"
5
+ require "eitil_core/application_record/model_atts"
@@ -0,0 +1,19 @@
1
+
2
+ # require "eitil_core/application_record/model_atts"
3
+
4
+ # require "eitil_core/railtie" to run the dynamic dispatch as an init hook during boot
5
+ require "eitil_core/railtie"
6
+
7
+ module EitilCore
8
+ module ApplicationRecord
9
+ module ModelAtts
10
+
11
+ def model_atts
12
+ columns = self.columns_hash.keys.map(&:to_sym)
13
+ reject = %i( id updated_at created_at )
14
+ columns - reject
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -21,6 +21,10 @@ module EitilCore
21
21
  ::ApplicationRecord.send(:extend, EitilCore::ApplicationRecord::AllAssociations)
22
22
  end
23
23
 
24
+ if Object.const_defined?('EitilCore::ApplicationRecord::ModelAtts')
25
+ ::ApplicationRecord.send(:extend, EitilCore::ApplicationRecord::ModelAtts)
26
+ end
27
+
24
28
  # ApplicationController
25
29
 
26
30
  if Object.const_defined?('EitilCore::ApplicationController::SliceParams')
data/lib/eitil/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Eitil
2
2
 
3
- VERSION = '1.1.5'
3
+ VERSION = '1.1.6'
4
4
 
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eitil
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.5
4
+ version: 1.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jurriaan Schrofer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-25 00:00:00.000000000 Z
11
+ date: 2021-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -82,11 +82,15 @@ files:
82
82
  - Rakefile
83
83
  - eitil_core/README.md
84
84
  - eitil_core/lib/eitil_core.rb
85
+ - eitil_core/lib/eitil_core/active_record.rb
86
+ - eitil_core/lib/eitil_core/active_record/hash_to_relation.rb
85
87
  - eitil_core/lib/eitil_core/application_controller.rb
88
+ - eitil_core/lib/eitil_core/application_controller/permit_model_atts.rb
86
89
  - eitil_core/lib/eitil_core/application_controller/slice_params.rb
87
90
  - eitil_core/lib/eitil_core/application_record.rb
88
91
  - eitil_core/lib/eitil_core/application_record/all_associations.rb
89
92
  - eitil_core/lib/eitil_core/application_record/find_by_like.rb
93
+ - eitil_core/lib/eitil_core/application_record/model_atts.rb
90
94
  - eitil_core/lib/eitil_core/application_record/where_like.rb
91
95
  - eitil_core/lib/eitil_core/argument_helpers.rb
92
96
  - eitil_core/lib/eitil_core/argument_helpers/all_args_to_ivars.rb