commons_yellowme 0.11.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.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +28 -0
  4. data/Rakefile +17 -0
  5. data/lib/commons.rb +67 -0
  6. data/lib/commons/authentication/authenticate_by_jwt.rb +27 -0
  7. data/lib/commons/authentication/json_web_token.rb +17 -0
  8. data/lib/commons/concerns/attributes/sex.rb +19 -0
  9. data/lib/commons/concerns/extensions/deleted.rb +25 -0
  10. data/lib/commons/concerns/guard/capitalizable.rb +32 -0
  11. data/lib/commons/concerns/validations/undestroyable.rb +18 -0
  12. data/lib/commons/config.rb +11 -0
  13. data/lib/commons/config/locales/en.yml +1 -0
  14. data/lib/commons/config/locales/es.yml +58 -0
  15. data/lib/commons/controllers/schema_validable.rb +27 -0
  16. data/lib/commons/errors/bad_request.rb +15 -0
  17. data/lib/commons/errors/conflict.rb +15 -0
  18. data/lib/commons/errors/default_handling.rb +44 -0
  19. data/lib/commons/errors/error_base.rb +64 -0
  20. data/lib/commons/errors/error_serializer.rb +10 -0
  21. data/lib/commons/errors/forbidden.rb +15 -0
  22. data/lib/commons/errors/internal_server_error.rb +15 -0
  23. data/lib/commons/errors/invalid_resource.rb +21 -0
  24. data/lib/commons/errors/maintenance_mode.rb +14 -0
  25. data/lib/commons/errors/missing_parameter.rb +13 -0
  26. data/lib/commons/errors/not_unique.rb +14 -0
  27. data/lib/commons/errors/payment_required.rb +15 -0
  28. data/lib/commons/errors/precondition_failed.rb +15 -0
  29. data/lib/commons/errors/resource_not_found.rb +14 -0
  30. data/lib/commons/errors/route_not_found.rb +14 -0
  31. data/lib/commons/errors/unauthorized.rb +15 -0
  32. data/lib/commons/errors/unprocessable_entity.rb +15 -0
  33. data/lib/commons/formatter/e164_phone.rb +47 -0
  34. data/lib/commons/formatter/null_attributes_remover.rb +9 -0
  35. data/lib/commons/formatter/regex_constants.rb +9 -0
  36. data/lib/commons/formatter/string_utils.rb +9 -0
  37. data/lib/commons/middleware/catch_json_parse_errors.rb +30 -0
  38. data/lib/commons/railtie.rb +4 -0
  39. data/lib/commons/repositories/base_repository.rb +227 -0
  40. data/lib/commons/repositories/catalogs/base_catalog.rb +68 -0
  41. data/lib/commons/repositories/catalogs/concerns/model_caching_extention.rb +27 -0
  42. data/lib/commons/services/concerns/callable.rb +15 -0
  43. data/lib/commons/version.rb +3 -0
  44. data/lib/tasks/commons_tasks.rake +4 -0
  45. metadata +254 -0
@@ -0,0 +1,68 @@
1
+ module Commons
2
+ module Repositories
3
+ module Catalogs
4
+ class BaseCatalog
5
+ include Singleton
6
+ include Commons::Repositories::Catalogs::Concerns::ModelCachingExtention
7
+
8
+ #
9
+ # Método que realiza un guardado de un objeto
10
+ #
11
+ # @param [Array<Hash>] params Listado de parámetros del objeto
12
+ #
13
+ # @return [Object] Objeto creado
14
+ #
15
+ # @raises [ActiveRecord::RecordInvalid]
16
+ #
17
+ def create_from_params!(params)
18
+ clear_cache
19
+ @db_client.create!(params)
20
+ end
21
+
22
+ #
23
+ # Método que realiza una busqueda o guardado de un objeto
24
+ #
25
+ # @param [Array<Hash>] params Listado de parámetros del objeto
26
+ # @param [block] block
27
+ #
28
+ # @return [Object] Objeto creado
29
+ #
30
+ # @raises [ActiveRecord::RecordInvalid]
31
+ #
32
+ def find_or_create_by!(params, &block)
33
+ object = @db_client.find_by(params) || @db_client.create!(params, &block)
34
+ clear_cache
35
+ object
36
+ end
37
+
38
+ #
39
+ # Método que realiza un guardado de un objeto
40
+ #
41
+ # @param [Array<Hash>] params Listado de parámetros del objeto
42
+ #
43
+ # @return [Object] Objeto creado
44
+ #
45
+ # @raises [ActiveRecord::RecordInvalid]
46
+ #
47
+ def update_from_params!(id:, **params)
48
+ object = @db_client.find_by!(id: id)
49
+ object.update!(params)
50
+ clear_cache
51
+
52
+ object
53
+ end
54
+
55
+ private
56
+
57
+ def initialize
58
+ @db_client ||= class_object
59
+ end
60
+
61
+ def class_object
62
+ model_name = self.class.to_s.gsub("Repository", "")
63
+ Object.const_get model_name
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,27 @@
1
+ module Commons
2
+ module Repositories
3
+ module Catalogs
4
+ module Concerns
5
+ module ModelCachingExtention
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ # The first time you call Model.all_cached it will cache the collection,
10
+ # each consequent call will not fire the DB query
11
+ def all_cached
12
+ Rails.cache.fetch("cached_#{self.class.name.underscore.to_s.gsub("/", "_")}") { @db_client.all.load }
13
+ end
14
+
15
+ private
16
+
17
+ # Making sure, that data is in consistent state by removing the cache
18
+ # everytime, the table is touched (eg some record is edited/created/destroyed etc).
19
+ def clear_cache
20
+ Rails.cache.delete("cached_#{self.class.name.underscore.to_s.gsub("/", "_")}")
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ module Commons
2
+ module Services
3
+ module Concerns
4
+ module Callable
5
+ extend ActiveSupport::Concern
6
+
7
+ class_methods do
8
+ def call(*args)
9
+ new(*args).call
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ module Commons
2
+ VERSION = '0.11.0'
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :commons do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,254 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: commons_yellowme
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.11.0
5
+ platform: ruby
6
+ authors:
7
+ - Yellowme
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-12-10 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: 6.0.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 6.0.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.8'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: active_model_serializers
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.10.10
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.10.10
55
+ - !ruby/object:Gem::Dependency
56
+ name: strip_attributes
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
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: jwt
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: dry-validation
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: phonelib
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.6.29
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.6.29
111
+ - !ruby/object:Gem::Dependency
112
+ name: sqlite3
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec-rails
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: factory_bot_rails
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 5.1.1
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 5.1.1
153
+ - !ruby/object:Gem::Dependency
154
+ name: faker
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: simplecov
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ description: Commons is Yellowme's Rails APIs utilities gem
182
+ email: hola@yellowme.mx
183
+ executables: []
184
+ extensions: []
185
+ extra_rdoc_files: []
186
+ files:
187
+ - MIT-LICENSE
188
+ - README.md
189
+ - Rakefile
190
+ - lib/commons.rb
191
+ - lib/commons/authentication/authenticate_by_jwt.rb
192
+ - lib/commons/authentication/json_web_token.rb
193
+ - lib/commons/concerns/attributes/sex.rb
194
+ - lib/commons/concerns/extensions/deleted.rb
195
+ - lib/commons/concerns/guard/capitalizable.rb
196
+ - lib/commons/concerns/validations/undestroyable.rb
197
+ - lib/commons/config.rb
198
+ - lib/commons/config/locales/en.yml
199
+ - lib/commons/config/locales/es.yml
200
+ - lib/commons/controllers/schema_validable.rb
201
+ - lib/commons/errors/bad_request.rb
202
+ - lib/commons/errors/conflict.rb
203
+ - lib/commons/errors/default_handling.rb
204
+ - lib/commons/errors/error_base.rb
205
+ - lib/commons/errors/error_serializer.rb
206
+ - lib/commons/errors/forbidden.rb
207
+ - lib/commons/errors/internal_server_error.rb
208
+ - lib/commons/errors/invalid_resource.rb
209
+ - lib/commons/errors/maintenance_mode.rb
210
+ - lib/commons/errors/missing_parameter.rb
211
+ - lib/commons/errors/not_unique.rb
212
+ - lib/commons/errors/payment_required.rb
213
+ - lib/commons/errors/precondition_failed.rb
214
+ - lib/commons/errors/resource_not_found.rb
215
+ - lib/commons/errors/route_not_found.rb
216
+ - lib/commons/errors/unauthorized.rb
217
+ - lib/commons/errors/unprocessable_entity.rb
218
+ - lib/commons/formatter/e164_phone.rb
219
+ - lib/commons/formatter/null_attributes_remover.rb
220
+ - lib/commons/formatter/regex_constants.rb
221
+ - lib/commons/formatter/string_utils.rb
222
+ - lib/commons/middleware/catch_json_parse_errors.rb
223
+ - lib/commons/railtie.rb
224
+ - lib/commons/repositories/base_repository.rb
225
+ - lib/commons/repositories/catalogs/base_catalog.rb
226
+ - lib/commons/repositories/catalogs/concerns/model_caching_extention.rb
227
+ - lib/commons/services/concerns/callable.rb
228
+ - lib/commons/version.rb
229
+ - lib/tasks/commons_tasks.rake
230
+ homepage: https://github.com/yellowme/commons-rails
231
+ licenses:
232
+ - MIT
233
+ metadata: {}
234
+ post_install_message:
235
+ rdoc_options: []
236
+ require_paths:
237
+ - lib
238
+ required_ruby_version: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - ">="
241
+ - !ruby/object:Gem::Version
242
+ version: '0'
243
+ required_rubygems_version: !ruby/object:Gem::Requirement
244
+ requirements:
245
+ - - ">="
246
+ - !ruby/object:Gem::Version
247
+ version: '0'
248
+ requirements: []
249
+ rubyforge_project:
250
+ rubygems_version: 2.7.6
251
+ signing_key:
252
+ specification_version: 4
253
+ summary: Commons is Yellowme's Rails APIs utilities gem
254
+ test_files: []