snf_core 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: dde0007bbb3dc4a82efd54f10f989550985fcf19580458cc1c384b557625a725
4
+ data.tar.gz: ad334000389fe9007b7fe3b54224a370a6fd31d04b4269fc076ef6ac05bc1214
5
+ SHA512:
6
+ metadata.gz: 2b0b39082ad4e83efdd9d491eba81b6dd6ff4dc02ee4b17986f0bd907db2d19a205bc0695a4bb4188cae60ffba5a22f5fb829886b7012175360178dc48583280
7
+ data.tar.gz: 2f9a33b8b8719327427b0b3dcf6b825a4ec51a9974a74b8e5fa4fe47866477cabec442c225bf5031cbd1ba872f0b33d22856d652676bc7309d4a1c80dea0d9c7
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright Asrat
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # SnfCore
2
+ Short description and motivation.
3
+
4
+ ## Usage
5
+ How to use my plugin.
6
+
7
+ ## Installation
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem "snf_core"
12
+ ```
13
+
14
+ And then execute:
15
+ ```bash
16
+ $ bundle
17
+ ```
18
+
19
+ Or install it yourself as:
20
+ ```bash
21
+ $ gem install snf_core
22
+ ```
23
+
24
+ ## Contributing
25
+ Contribution directions go here.
26
+
27
+ ## License
28
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require "bundler/setup"
2
+
3
+ APP_RAKEFILE = File.expand_path("spec/dummy/Rakefile", __dir__)
4
+ load "rails/tasks/engine.rake"
5
+
6
+ load "rails/tasks/statistics.rake"
7
+
8
+ require "bundler/gem_tasks"
@@ -0,0 +1,140 @@
1
+ module SnfCore
2
+ module Common
3
+ extend ActiveSupport::Concern
4
+ include Pagination
5
+
6
+ included do
7
+ before_action :set_clazz
8
+ before_action :set_object, only: %i[show update]
9
+ end
10
+
11
+ def index
12
+ data = nil
13
+ options = {}
14
+ if block_given?
15
+ incoming = yield
16
+ if incoming.instance_of?(Array)
17
+ data, options = incoming
18
+ elsif incoming.instance_of?(Hash)
19
+ options = incoming
20
+ else
21
+ data = incoming
22
+ end
23
+ else
24
+ data = @clazz.all
25
+ end
26
+ total = data.count
27
+ data = data.then(&paginate) if params[:page]
28
+ result = {
29
+ success: true,
30
+ data: serialize(data, options)
31
+ }
32
+ if params[:page]
33
+ result[:page] = params[:page]
34
+ result[:total] = total
35
+ end
36
+
37
+ render json: result
38
+ end
39
+
40
+ def show
41
+ data = nil
42
+ options = {}
43
+ if block_given?
44
+ incoming = yield
45
+ if incoming.instance_of?(Array)
46
+ data, options = incoming
47
+ elsif incoming.instance_of?(Hash)
48
+ data = @obj
49
+ options = incoming
50
+ else
51
+ data = incoming
52
+ end
53
+ else
54
+ data = @obj
55
+ end
56
+ result = {
57
+ success: true,
58
+ data: serialize(data, options)
59
+ }
60
+ render json: result
61
+ end
62
+
63
+ def create
64
+ obj = nil
65
+ options = {}
66
+ if block_given?
67
+ incoming = yield
68
+ if incoming.instance_of?(Array)
69
+ obj, options = incoming
70
+ elsif incoming.instance_of?(Hash)
71
+ obj = @clazz.new(model_params)
72
+ options = incoming
73
+ else
74
+ obj = incoming
75
+ end
76
+ else
77
+ obj = @clazz.new(model_params)
78
+ end
79
+
80
+ if obj.save
81
+ result = {
82
+ success: true,
83
+ data: serialize(obj, options)
84
+ }
85
+ render json: result, status: :created
86
+ else
87
+ render json: {success: false, error: obj.errors.full_messages[0]}, status: 422
88
+ end
89
+ rescue StandardError => e
90
+ render json: {success: false, error: e.message}
91
+ end
92
+
93
+ def update
94
+ obj = nil
95
+ options = {}
96
+ if block_given?
97
+ incoming = yield
98
+ if incoming.instance_of?(Array)
99
+ obj, options = incoming
100
+ elsif incoming.instance_of?(Hash)
101
+ obj = set_object
102
+ options = incoming
103
+ else
104
+ obj = incoming
105
+ end
106
+ else
107
+ obj = set_object
108
+ end
109
+
110
+ if obj.update(model_params)
111
+ result = {
112
+ success: true,
113
+ data: serialize(obj, options)
114
+ }
115
+ render json: result
116
+ else
117
+ render json: {success: false, error: obj.errors.full_messages[0]}, status: 422
118
+ end
119
+ rescue StandardError => e
120
+ render json: {success: false, error: e.message}
121
+ end
122
+
123
+ private
124
+
125
+ def serialize(data, options = {})
126
+ ActiveModelSerializers::SerializableResource.new(data, options)
127
+ end
128
+
129
+ def set_clazz
130
+ @clazz = "Scf::Core::#{controller_name.classify}".constantize
131
+ end
132
+
133
+ def set_object
134
+ @obj = @clazz.find(params[:id])
135
+ end
136
+
137
+ # This class should be overridden by respective child controllers
138
+ def model_params; end
139
+ end
140
+ end
@@ -0,0 +1,33 @@
1
+ module ScfCore
2
+ module Pagination
3
+ extend ActiveSupport::Concern
4
+
5
+ def default_per_page
6
+ 25
7
+ end
8
+
9
+ def page_no
10
+ params[:page]&.to_i || 1
11
+ end
12
+
13
+ def per_page
14
+ params[:per_page]&.to_i || default_per_page
15
+ end
16
+
17
+ def paginate_offset
18
+ (page_no - 1) * per_page
19
+ end
20
+
21
+ def order_by
22
+ params.fetch(:order_by, :id)
23
+ end
24
+
25
+ def order_direction
26
+ params.fetch(:order_direction, :asc)
27
+ end
28
+
29
+ def paginate
30
+ ->(it) { it.limit(per_page).offset(paginate_offset).order("#{order_by}": order_direction) }
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,4 @@
1
+ module SnfCore
2
+ class ApplicationController < ActionController::API
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module SnfCore
2
+ class ApplicationJob < ActiveJob::Base
3
+ end
4
+ end
@@ -0,0 +1,6 @@
1
+ module SnfCore
2
+ class ApplicationMailer < ActionMailer::Base
3
+ default from: "from@example.com"
4
+ layout "mailer"
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ module SnfCore
2
+ class ApplicationRecord < ActiveRecord::Base
3
+ self.abstract_class = true
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module SnfCore
2
+ class Person < ApplicationRecord
3
+ validates :name, presence: true
4
+ end
5
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,2 @@
1
+ SnfCore::Engine.routes.draw do
2
+ end
@@ -0,0 +1,9 @@
1
+ class CreateSnfCorePeople < ActiveRecord::Migration[8.0]
2
+ def change
3
+ create_table :snf_core_people do |t|
4
+ t.string :name
5
+
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,22 @@
1
+ module SnfCore
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace SnfCore
4
+ config.generators.api_only = true
5
+
6
+ config.generators do |g|
7
+ g.test_framework :rspec, routing_specs: false
8
+ g.fixture_replacement :factory_bot
9
+ g.factory_bot dir: 'spec/factories'
10
+ end
11
+
12
+ initializer 'snf_core.factories', after: 'factory_bot.set_factory_paths' do
13
+ FactoryBot.definition_file_paths << File.expand_path('../../../spec/factories', __dir__) if defined?(FactoryBot)
14
+ end
15
+
16
+ initializer :append_migrations do |app|
17
+ unless app.root.to_s.match(root.to_s + File::SEPARATOR)
18
+ app.config.paths['db/migrate'].concat(config.paths['db/migrate'].expanded)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,3 @@
1
+ module SnfCore
2
+ VERSION = "0.1.0"
3
+ end
data/lib/snf_core.rb ADDED
@@ -0,0 +1,6 @@
1
+ require "snf_core/version"
2
+ require "snf_core/engine"
3
+
4
+ module SnfCore
5
+ # Your code goes here...
6
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :snf_core do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,323 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: snf_core
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Asrat
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 2025-02-26 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: active_model_serializers
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: ancestry
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: 4.1.0
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 4.1.0
40
+ - !ruby/object:Gem::Dependency
41
+ name: bcrypt
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '3.1'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '3.1'
54
+ - !ruby/object:Gem::Dependency
55
+ name: httparty
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: image_processing
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '1.12'
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: 1.12.2
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: '1.12'
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: 1.12.2
88
+ - !ruby/object:Gem::Dependency
89
+ name: jwt
90
+ requirement: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '2.7'
95
+ type: :runtime
96
+ prerelease: false
97
+ version_requirements: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '2.7'
102
+ - !ruby/object:Gem::Dependency
103
+ name: noticed
104
+ requirement: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '1.6'
109
+ type: :runtime
110
+ prerelease: false
111
+ version_requirements: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
114
+ - !ruby/object:Gem::Version
115
+ version: '1.6'
116
+ - !ruby/object:Gem::Dependency
117
+ name: rails
118
+ requirement: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: '8.0'
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: 8.0.1
126
+ type: :runtime
127
+ prerelease: false
128
+ version_requirements: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: '8.0'
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: 8.0.1
136
+ - !ruby/object:Gem::Dependency
137
+ name: ransack
138
+ requirement: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ type: :runtime
144
+ prerelease: false
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ - !ruby/object:Gem::Dependency
151
+ name: database_cleaner-active_record
152
+ requirement: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ type: :development
158
+ prerelease: false
159
+ version_requirements: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ - !ruby/object:Gem::Dependency
165
+ name: factory_bot_rails
166
+ requirement: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ type: :development
172
+ prerelease: false
173
+ version_requirements: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ - !ruby/object:Gem::Dependency
179
+ name: faker
180
+ requirement: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ version: '0'
185
+ type: :development
186
+ prerelease: false
187
+ version_requirements: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
192
+ - !ruby/object:Gem::Dependency
193
+ name: letter_opener
194
+ requirement: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - ">="
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ type: :development
200
+ prerelease: false
201
+ version_requirements: !ruby/object:Gem::Requirement
202
+ requirements:
203
+ - - ">="
204
+ - !ruby/object:Gem::Version
205
+ version: '0'
206
+ - !ruby/object:Gem::Dependency
207
+ name: rspec-rails
208
+ requirement: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: '0'
213
+ type: :development
214
+ prerelease: false
215
+ version_requirements: !ruby/object:Gem::Requirement
216
+ requirements:
217
+ - - ">="
218
+ - !ruby/object:Gem::Version
219
+ version: '0'
220
+ - !ruby/object:Gem::Dependency
221
+ name: rspec-retry
222
+ requirement: !ruby/object:Gem::Requirement
223
+ requirements:
224
+ - - ">="
225
+ - !ruby/object:Gem::Version
226
+ version: '0'
227
+ type: :development
228
+ prerelease: false
229
+ version_requirements: !ruby/object:Gem::Requirement
230
+ requirements:
231
+ - - ">="
232
+ - !ruby/object:Gem::Version
233
+ version: '0'
234
+ - !ruby/object:Gem::Dependency
235
+ name: rubocop-rspec
236
+ requirement: !ruby/object:Gem::Requirement
237
+ requirements:
238
+ - - ">="
239
+ - !ruby/object:Gem::Version
240
+ version: '0'
241
+ type: :development
242
+ prerelease: false
243
+ version_requirements: !ruby/object:Gem::Requirement
244
+ requirements:
245
+ - - ">="
246
+ - !ruby/object:Gem::Version
247
+ version: '0'
248
+ - !ruby/object:Gem::Dependency
249
+ name: shoulda-matchers
250
+ requirement: !ruby/object:Gem::Requirement
251
+ requirements:
252
+ - - ">="
253
+ - !ruby/object:Gem::Version
254
+ version: '0'
255
+ type: :development
256
+ prerelease: false
257
+ version_requirements: !ruby/object:Gem::Requirement
258
+ requirements:
259
+ - - ">="
260
+ - !ruby/object:Gem::Version
261
+ version: '0'
262
+ - !ruby/object:Gem::Dependency
263
+ name: simplecov
264
+ requirement: !ruby/object:Gem::Requirement
265
+ requirements:
266
+ - - ">="
267
+ - !ruby/object:Gem::Version
268
+ version: '0'
269
+ type: :development
270
+ prerelease: false
271
+ version_requirements: !ruby/object:Gem::Requirement
272
+ requirements:
273
+ - - ">="
274
+ - !ruby/object:Gem::Version
275
+ version: '0'
276
+ description: An engine which contains core models for Supply Chain Financing.
277
+ email:
278
+ - asratextras77@gmail.com
279
+ executables: []
280
+ extensions: []
281
+ extra_rdoc_files: []
282
+ files:
283
+ - MIT-LICENSE
284
+ - README.md
285
+ - Rakefile
286
+ - app/controllers/concerns/common.rb
287
+ - app/controllers/concerns/pagination.rb
288
+ - app/controllers/snf_core/application_controller.rb
289
+ - app/jobs/snf_core/application_job.rb
290
+ - app/mailers/snf_core/application_mailer.rb
291
+ - app/models/snf_core/application_record.rb
292
+ - app/models/snf_core/person.rb
293
+ - config/routes.rb
294
+ - db/migrate/20250226035137_create_snf_core_people.rb
295
+ - lib/snf_core.rb
296
+ - lib/snf_core/engine.rb
297
+ - lib/snf_core/version.rb
298
+ - lib/tasks/snf_core_tasks.rake
299
+ homepage: https://www.mks.com
300
+ licenses:
301
+ - MIT
302
+ metadata:
303
+ homepage_uri: https://www.mks.com
304
+ source_code_uri: https://github.com/BITS-DEVSEC
305
+ changelog_uri: https://github.com/BITS-DEVSEC
306
+ rdoc_options: []
307
+ require_paths:
308
+ - lib
309
+ required_ruby_version: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - ">="
312
+ - !ruby/object:Gem::Version
313
+ version: '3.2'
314
+ required_rubygems_version: !ruby/object:Gem::Requirement
315
+ requirements:
316
+ - - ">="
317
+ - !ruby/object:Gem::Version
318
+ version: '0'
319
+ requirements: []
320
+ rubygems_version: 3.6.2
321
+ specification_version: 4
322
+ summary: An Engine for Supply Chain Financing
323
+ test_files: []