itg 0.1.8 → 0.1.10

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: 3d053cf4b8d8c39243e96253436bb4287d51c0f05c350e4974274547a3054ccd
4
- data.tar.gz: ca430ed912df96c4d35439f78b40b4a041649430f3fdeecb13f29440a9e4a6f1
3
+ metadata.gz: fe781750f5aa0333312d6a9fd50522d349b25d4c33459c82e9db8417c60e2ab1
4
+ data.tar.gz: 112e6866a3e64dfa33ecc755d69c40d44c4f460e8b91a8bbf0a3a19e14daacf7
5
5
  SHA512:
6
- metadata.gz: be3e9fa71c749a1413158cdf1152d75bd2a6891bce296bb337ae86a005132df6d5b0113ced3750130e764006f3236e5f48f9cec41d0b6a73d0ec6958e05d9535
7
- data.tar.gz: 9e59e76d5deea88cd5d5ce33a3538288411974623852ff8c0f45249a4e12bd9d15ff1df6114be98c6ffbf4891ff03c121d1169c81da3ccf5b1dc0ac66ee6845d
6
+ metadata.gz: 569b0ef8c9e406792bbe4491bf841ce1558d26b6cfa206395b4d62368170a2741048f527cde8406666f973cbf2ad9b262fbd4e4cee3d54f53d3a2f0d00c1746e
7
+ data.tar.gz: 20df9342f243bb409fd467c97ef55a781abc3e1198142739488603c1625a81a485603da738131b684ea8c4bb388a49caa88665e72829b731763f79389cd7b4cb
data/README.md CHANGED
@@ -1,4 +1,22 @@
1
- # Itg
1
+ # Itg gem
2
+
3
+ ### Context
4
+
5
+ The `Context` describes the isolated storage for the users data
6
+
7
+ Every time a user can see and manage only the data of a single `context` in which he has access
8
+
9
+ User has a list of contexts (memberships) where has access.
10
+ Each `context membership` has: `context`, `user`, `access` (`ro`, `rw`, `admin`)
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
2
20
 
3
21
  TODO: Delete this and the text below, and describe your gem
4
22
 
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Itg
4
+ module ApiKeysControllerBase
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ include Itg::ApiKeyAuthenticatable
9
+
10
+ # Require API key authentication
11
+ prepend_before_action :authenticate_with_api_key!, only: %i[index destroy]
12
+ before_action :switch_database
13
+
14
+ def index
15
+ render json: current_bearer.api_keys
16
+ end
17
+
18
+ def current
19
+ authenticate_with_http_basic do |email, password|
20
+ user = User.find_by email: email.downcase
21
+
22
+ # if user&.authenticate(password)
23
+ if user&.valid_password?(password)
24
+ data = {}
25
+ data['token'] = user.api_keys.create!(token: SecureRandom.hex).token
26
+ # data['token'] = if user.api_keys.empty?
27
+ # user.api_keys.create!(token: SecureRandom.hex).token
28
+ # else
29
+ # user.api_keys.first.token
30
+ # end
31
+ data['user'] = user
32
+ render json: data, status: :ok
33
+ end
34
+ end
35
+ end
36
+
37
+ def create
38
+ ITG_LOGGER.info 'ApiKeysController - create....'
39
+ authenticate_with_http_basic do |email, password|
40
+ ITG_LOGGER.info 'ApiKeysController - create - bef find user'
41
+ user = User.find_by email: email.downcase
42
+
43
+ ITG_LOGGER.info 'ApiKeysController - create - bef auth user'
44
+ # if user&.authenticate(password)
45
+ if user&.valid_password?(password)
46
+ ITG_LOGGER.info 'ApiKeysController - create - user authenticated - create api_key'
47
+ api_key = user.api_keys.create! token: SecureRandom.hex
48
+
49
+ ITG_LOGGER.info 'ApiKeysController - create - user authenticated - return'
50
+ render json: api_key, status: :created and return
51
+ end
52
+ end
53
+
54
+ render status: :unauthorized
55
+ end
56
+
57
+ def destroy
58
+ api_key = current_bearer.api_keys.find(params[:id])
59
+
60
+ api_key.destroy
61
+ end
62
+
63
+ private
64
+
65
+ def switch_database
66
+ db_name = if params.has_key? 'test'
67
+ # db_name = "md-test"
68
+ 'itg_api_test'
69
+ else
70
+ 'md'
71
+ end
72
+ # Mongoid.override_database(db_name)
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,18 @@
1
+ module Itg
2
+ module ControllerSetCurrentRequestDetails
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ before_action do
7
+ Current.request_id = request.uuid
8
+ Current.user_agent = request.user_agent
9
+ Current.ip_address = request.ip
10
+ Current.host = request.host
11
+ end
12
+ end
13
+
14
+ class_methods do
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Itg
4
+ module EntitiesControllerBase
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ include Itg::ApiKeyAuthenticatable
9
+
10
+ prepend_before_action :authenticate_with_api_key!
11
+
12
+ before_action :init
13
+ before_action :set_model_instance, only: [:show, :update, :destroy]
14
+ before_action :require_permission # from generic_controller, fix execution order
15
+
16
+ private
17
+
18
+ def init
19
+ ITG_LOGGER.info '*** [EntitiesController.set_variables] ...'
20
+ # @g_model_class = Entity
21
+ @g_model_class = self.class.model_class
22
+ @g_search_field = 'kind'
23
+ @g_permitted_params = {kind: nil, tags: nil, context: nil, attrs: {}}
24
+ end
25
+
26
+ def set_model_instance
27
+ # puts '******** entities_controller#set_model_instance......'
28
+ ITG_LOGGER.info '*** [Entities.set_model_instance] ...'
29
+ @model_instance = @g_model_class.find(params[:id])
30
+ end
31
+ end
32
+
33
+ class_methods do
34
+ attr_reader :model_class
35
+
36
+ private
37
+
38
+ def itg_entities_controller_base(model_class:)
39
+ @model_class = model_class
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,309 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Itg
4
+ module GenericControllerBase
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ include Itg::Response
9
+
10
+ before_action :g_model_class, :g_parent_model_class, :g_search_field, :g_permitted_params
11
+ # before_action :set_model_instance, only: [:show, :update, :destroy]
12
+ before_action :require_permission
13
+ before_action :switch_database
14
+ after_action :reset_database
15
+
16
+ def curr_user_db
17
+ # @current_bearer ? @current_bearer.db : 'mainaaa'
18
+ # 'test'
19
+ end
20
+
21
+ def index
22
+ # puts "[GenericController.index] current_bearer: #{@current_bearer}, current_api_key: #{@current_api_key}"
23
+ # puts "[GenericController.index] current_bearer.db: #{@current_bearer.db}, current_bearer.kind: #{@current_bearer.kind}"
24
+ # puts "[GenericController.index] curr_user_db: #{curr_user_db}, params[:filter]: #{params[:filter]}"
25
+ # pp "*** Api::V1::Cultivation::Chamber.count: #{Api::V1::Cultivation::Chamber.count}"
26
+ ITG_LOGGER.info "*** [GenericController/#{@g_model_class}.index] params: #{params}\n params[:filter]: #{params[:filter]}\n db: #{@g_model_class.database_name}\n=========================="
27
+ collection = get_collection
28
+ # data = if (filter = params[:filter])
29
+ # collection.where(@g_search_field => /.*#{filter}.*/i)
30
+ # elsif (view_name = params[:view])
31
+ # # collection.fetch_view(view_name)
32
+ # collection.respond_to?(view_name) ? collection.send(view_name) : "View '#{view_name}' does not exist for collection '#{collection}'"
33
+ # else
34
+ # collection.all
35
+ # end
36
+ data = if (filter = params[:filter])
37
+ # puts '----- with filter'
38
+ collection.where(@g_search_field => /.*#{filter}.*/i)
39
+ else
40
+ # puts '----- all'
41
+ # pp collection.with(curr_user_db).all.count
42
+ # pp collection.all.count
43
+ # pp "*** Api::V1::Cultivation::Chamber.count: #{Api::V1::Cultivation::Chamber.count}"
44
+ collection.all
45
+ # Api::V1::Link.with(database: curr_user_db) { |klass| klass.all.to_a }
46
+ # collection.with(database: curr_user_db) { |klass| klass.all.to_a }
47
+ # Api::V1::Link.with(database: curr_user_db) do |klass|
48
+ # # klass.create!(title: 'tetstttt', url: 'ttttt', owner: @current_bearer);
49
+ # klass.all
50
+ # end
51
+ end
52
+ # puts ">>>> collection '#{collection}' data (#{data.count}): #{data}"
53
+ if (view_name = params[:view])
54
+ data = data.respond_to?(view_name) ? data.send(view_name) : "View '#{view_name}' does not exist for collection '#{collection}'"
55
+ end
56
+ # ITG_LOGGER.info ">>> params[:limit]: #{params[:limit]}, data: #{data}"
57
+ if (limit = params[:limit]) && !data.is_a?(String)
58
+ # ITG_LOGGER.info ">>> limit: #{limit}, data.count (bef): #{data.count}"
59
+ data = data.limit(limit)
60
+ # ITG_LOGGER.info ">>> limit: #{limit}, data.count (aft): #{data.count}"
61
+ # TODO: data.count does not return the correct value! Why?????
62
+ end
63
+ # data = params[:filter] ? collection.where(@g_search_field => /.*#{params[:filter]}.*/i) : collection.all
64
+ # ITG_LOGGER.info "*** [GenericController/#{@g_model_class}.index] data to return (#{data.count}):\n#{JSON.pretty_generate data}\n============================"
65
+ # render json: params[:filter] ? @g_model_class.where(@g_search_field => /.*#{params[:filter]}.*/i) : @g_model_class.all
66
+ # puts '>>>>>>> [GenericController.index] ....'
67
+ # puts ">>>>>>> [GenericController.index] data (#{data.count if data})"
68
+ # pp data
69
+ # pp data
70
+ render json: data
71
+ end
72
+
73
+ def show
74
+ # puts '>>>>>>> [GenericController.show] ...'
75
+ ITG_LOGGER.info "*** [GenericController/#{@g_model_class}.show] params: #{params}\n params[:id]: #{params[:id]}\n db: #{@g_model_class.database_name}\n========================="
76
+ collection = get_collection
77
+ data = collection.find(params[:id])
78
+ ITG_LOGGER.info "*** [GenericController/#{@g_model_class}.show] data to return:\n#{JSON.pretty_generate data.to_s}\n============================"
79
+ # puts ">>>>>>> [GenericController.show] collection: #{collection}"
80
+ # pp data
81
+ if data
82
+ render json: data
83
+ else
84
+ json_response("Couldn't find #{@g_model_class} with 'id'=#{params[:id]}", :not_found)
85
+ end
86
+ end
87
+
88
+ def create
89
+ # puts '>>>>>>> [GenericController.create] ...'
90
+ ITG_LOGGER.info "*** [GenericController/#{@g_model_class}.create] params:\n#{JSON.pretty_generate params}\n db: #{@g_model_class.database_name}\n============================"
91
+ # g_check_variables
92
+ # # ITG_LOGGER.info "*** [GenericController/#{@g_model_class}.create] model_instance_params:\n#{JSON.pretty_generate model_instance_params}\n============================"
93
+ # @model_instance = @g_model_class.create!(model_instance_params)
94
+ collection = get_collection
95
+
96
+ # @model_instance = collection.create!(model_instance_params(true))
97
+ # @model_instance = collection.create(model_instance_params(true))
98
+ @model_instance = collection.new(model_instance_params(true))
99
+ @model_instance.owner = @current_bearer if @model_instance.respond_to?(:owner)
100
+ # puts ">>>> @model_instance: #{@model_instance}"
101
+ # json_response(@model_instance, :created)
102
+ # puts ">>>>>>> create...."
103
+ # pp @model_instance
104
+ if @model_instance.save
105
+ # render json: @model_instance, status: :created, location: @model_instance
106
+ json_response(@model_instance, :created)
107
+ else
108
+ # render json: @model_instance.errors, status: :unprocessable_entity
109
+ json_response(@model_instance.errors, :unprocessable_entity)
110
+ end
111
+
112
+ # @post = Post.new(post_params)
113
+ #
114
+ # if @post.save
115
+ # render json: @post, status: :created, location: @post
116
+ # else
117
+ # render json: @post.errors, status: :unprocessable_entity
118
+ # end
119
+
120
+ # ITG_LOGGER.info "======== EventsController create ======= params:\n#{JSON.pretty_generate params}\n======================="
121
+ # @event = Event.new(event_params)
122
+ # respond_to do |format|
123
+ # if @event.save
124
+ # format.json { render :show, status: :created, location: @event }
125
+ # else
126
+ # format.json { render json: @event.errors, status: :unprocessable_entity }
127
+ # end
128
+ # end
129
+ end
130
+
131
+ def update
132
+ # puts '>>>>>>> [GenericController.update] ...'
133
+ ITG_LOGGER.info "*** [GenericController/#{@g_model_class}.update] params:\n#{JSON.pretty_generate params}\n db: #{@g_model_class.database_name}\n============================"
134
+ g_check_variables
135
+ # @model_instance.update(model_instance_params)
136
+ # head :no_content
137
+
138
+ @model_instance.owner = @current_bearer if @model_instance.respond_to?(:owner)
139
+ if @model_instance
140
+ if @model_instance.update(model_instance_params)
141
+ # head :no_content
142
+ json_response(@model_instance)
143
+ else
144
+ json_response(@model_instance.errors, :unprocessable_entity)
145
+ end
146
+ else
147
+ json_response("Couldn't find #{@g_model_class} with 'id'=#{params[:id]}", :not_found)
148
+ end
149
+
150
+ # if @post.update(post_params)
151
+ # render json: @post
152
+ # else
153
+ # render json: @post.errors, status: :unprocessable_entity
154
+ # end
155
+ end
156
+
157
+ def destroy
158
+ g_check_variables
159
+ # puts "*** [GenericController/#{@g_model_class}.destroy] params:\n#{JSON.pretty_generate params}\n db: #{@g_model_class.database_name}\n============================"
160
+ ITG_LOGGER.info "*** [GenericController/#{@g_model_class}.destroy] params:\n#{JSON.pretty_generate params}\n db: #{@g_model_class.database_name}\n============================"
161
+ if @model_instance
162
+ @model_instance.destroy
163
+ head :no_content
164
+ else
165
+ json_response("Couldn't find #{@g_model_class} with 'id'=#{params[:id]}", :not_found)
166
+ end
167
+ end
168
+
169
+ private
170
+
171
+ def switch_database
172
+ # puts ">>> [GenericController.switch_database] curr_user_db: #{curr_user_db}"
173
+ # if params.has_key? 'test'
174
+ # # db_name = "md-test"
175
+ # db_name = 'itg_api_test'
176
+ # else
177
+ # db_name = 'md'
178
+ # end
179
+ # Mongoid.override_database(db_name)
180
+ Mongoid.override_database(curr_user_db)
181
+ end
182
+
183
+ def reset_database
184
+ Mongoid.override_database(nil)
185
+ end
186
+
187
+ def g_check_variables
188
+ ITG_LOGGER.info '*** [GenericController.g_check_variables] ...'
189
+ raise '[GenericController] @g_model_class is nil!' unless @g_model_class
190
+ raise "[GenericController/#{@g_model_class}] @g_search_field is nil!" unless @g_search_field
191
+ raise "[GenericController/#{@g_model_class}] @g_permitted_params is nil!" unless @g_permitted_params
192
+ end
193
+
194
+ def g_model_class
195
+ ITG_LOGGER.info '*** [GenericController.g_model_class] ...'
196
+ @g_model_class ||= nil
197
+ end
198
+
199
+ def g_parent_model_class
200
+ ITG_LOGGER.info '*** [GenericController.g_parent_model_class] ...'
201
+ @g_parent_model_class ||= nil
202
+ end
203
+
204
+ def g_search_field
205
+ ITG_LOGGER.info '*** [GenericController.g_search_field] ...'
206
+ @g_search_field ||= nil
207
+ end
208
+
209
+ def g_permitted_params
210
+ ITG_LOGGER.info '*** [GenericController.g_permitted_params] ...'
211
+ @g_permitted_params ||= nil
212
+ end
213
+
214
+ def g_only_show
215
+ ITG_LOGGER.info '*** [GenericController.g_only_show] ...'
216
+ @g_only_show ||= false
217
+ end
218
+
219
+ # Issue: when this is called, the child controller does not have set the g_ variables...
220
+ # This must be run in the child coltroller...
221
+ # def set_model_instance
222
+ # ITG_LOGGER.info "*** [GenericController.set_model_instance] ..."
223
+ # @model_instance = @g_model_class.find(params[:id])
224
+ # end
225
+
226
+ def model_instance_params(create = false)
227
+ # puts '>>>>>>> [GenericController.model_instance_params] ...'
228
+ ITG_LOGGER.info '*** [GenericController.model_instance_params] ...'
229
+ ITG_LOGGER.info ">>>>> params: #{params}"
230
+ ITG_LOGGER.info ">>>>> @g_model_class: #{@g_model_class}"
231
+ # params_model_sym = @g_model_class.name.parameterize.underscore.to_sym
232
+ params_model_sym = @g_model_class.name.underscore.gsub('/', '_').to_sym
233
+ ITG_LOGGER.info ">>>>> params_model_sym: #{params_model_sym}"
234
+ ITG_LOGGER.info ">>>>> @g_permitted_params: #{@g_permitted_params}"
235
+ # ITG_LOGGER.info "*** [GenericController.model_instance_params] g_permitted_params:\n#{@g_permitted_params}"
236
+ # ret = params.require(@g_model_class.name.underscore.to_sym).permit(*@g_permitted_params)
237
+
238
+ case @g_permitted_params
239
+ when Array
240
+ ret = params.require(params_model_sym).permit(*@g_permitted_params)
241
+ when Hash
242
+ ret = params.require(params_model_sym).permit(*@g_permitted_params, **@g_permitted_params)
243
+ else
244
+ raise "[GenericController.model_instance_params] unhandled @g_permitted_params: #{@g_permitted_params.inspect}"
245
+ end
246
+
247
+ ITG_LOGGER.info "*** [GenericController.model_instance_params] return:\n#{ret}"
248
+ if create
249
+ # ITG_LOGGER.info "*** [GenericController.model_instance_params] @g_model_class.fields: #{@g_model_class.fields}"
250
+ ret.each do |k, v|
251
+ ITG_LOGGER.info "*** [GenericController.model_instance_params] k:#{k}, v:#{v}"
252
+ field = @g_model_class.fields[k]
253
+ raise "[GenericController.model_instance_params] field #{k} does not exists in fields..." if field.nil?
254
+ # ITG_LOGGER.info "*** [GenericController.model_instance_params] field: #{field.inspect}"
255
+ # ITG_LOGGER.info "*** [GenericController.model_instance_params] field.options: #{field.options.inspect}"
256
+ # ITG_LOGGER.info "*** [GenericController.model_instance_params] field.options[:type]: #{field.options[:type].inspect}, field.default_val: #{field.default_val.inspect}"
257
+ ret.delete(k) if v == '' and !field.default_val.nil?
258
+ end
259
+ ITG_LOGGER.info "*** [GenericController.model_instance_params] (create) changed return:\n#{ret}"
260
+ end
261
+ ret
262
+ end
263
+
264
+ def get_collection
265
+ # puts "*** [GenericController/#{@g_model_class}.get_collection] params: #{params}"
266
+ ITG_LOGGER.info "*** [GenericController/#{@g_model_class}.get_collection] params: #{params}"
267
+ g_check_variables
268
+ if @g_parent_model_class
269
+ ITG_LOGGER.info "*** [GenericController/#{@g_model_class}.index] With parent: #{@g_parent_model_class}"
270
+ # puts "*** [GenericController/#{@g_model_class}.index] With parent: #{@g_parent_model_class}"
271
+ collection_name = @g_model_class.to_s.parameterize.pluralize
272
+ parent_field_id = @g_parent_model_class.to_s.parameterize + '_id'
273
+ parent_id = params[parent_field_id.to_sym]
274
+ raise "[GenericController/#{@g_model_class}.index] Parent id is empty!" if parent_id.nil? || parent_id.empty?
275
+ ITG_LOGGER.info "*** [GenericController/#{@g_model_class}.index] collection_name: #{collection_name}, parent_field_id: #{parent_field_id}, parent_id: #{parent_id}"
276
+ parent_rec = @g_parent_model_class.find(parent_id)
277
+ raise "[GenericController/#{@g_model_class}.index] Parent record for id '#{parent_id}' was not found!" unless parent_rec
278
+ if parent_rec.respond_to?(collection_name.to_sym)
279
+ collection = parent_rec.send(collection_name.to_sym)
280
+ ITG_LOGGER.info "*** [GenericController/#{@g_model_class}.index] collection: #{collection}"
281
+ else
282
+ raise "[GenericController/#{@g_model_class}.index] Parent record '#{parent_rec}' does not has '#{collection_name}' method!"
283
+ end
284
+ else
285
+ ITG_LOGGER.info "*** [GenericController/#{@g_model_class}.index] NO parent...."
286
+ # puts "*** [GenericController/#{@g_model_class}.index] NO parent...."
287
+ collection = @g_model_class
288
+ # data = params[:filter] ? @g_model_class.where(@g_search_field => /.*#{params[:filter]}.*/i) : @g_model_class.all
289
+ end
290
+ collection
291
+ end
292
+
293
+ def require_permission
294
+ if @g_model_class.attribute_names.include?('owner_id')
295
+ # puts "******** generic_controller#require_permission @model_instance.owner: #{@model_instance&.owner}, @model_instance: #{@model_instance}"
296
+ if @model_instance && @model_instance.owner_id != @current_bearer.id
297
+ json_response('Not allowed!', :forbidden)
298
+ end
299
+ else
300
+ # puts "******** generic_controller#require_permission @current_bearer: #{@current_bearer.inspect}, @model_instance: #{@model_instance.inspect}"
301
+ unless @current_bearer.kind == 'one'
302
+ json_response('Not allowed!', :forbidden)
303
+ end
304
+ end
305
+ end
306
+
307
+ end
308
+ end
309
+ end
@@ -15,11 +15,13 @@ module Itg
15
15
  # code when API key authentication fails
16
16
  def authenticate_with_api_key!
17
17
  @current_bearer = authenticate_or_request_with_http_token(&method(:authenticator))
18
+ Current.user = @current_bearer
18
19
  end
19
20
 
20
21
  # Use this for optional API key authentication
21
22
  def authenticate_with_api_key
22
23
  @current_bearer = authenticate_with_http_token(&method(:authenticator))
24
+ Current.user = @current_bearer
23
25
  end
24
26
 
25
27
  private
@@ -0,0 +1,27 @@
1
+ module Itg
2
+ module CurrentBase
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ attribute :user
7
+ attribute :context
8
+ attribute :config
9
+ attribute :request_id, :user_agent, :ip_address, :host
10
+
11
+ def to_s
12
+ ret_hash = {}
13
+ ret_hash[:user] = user.username if user
14
+ ret_hash[:request_id] = request_id if request_id
15
+ ret_hash[:user_agent] = user_agent if user_agent
16
+ ret_hash[:host] = host if host
17
+ ret_hash[:ip_address] = ip_address if ip_address
18
+ if ret_hash.empty?
19
+ "Current singleton is empty"
20
+ else
21
+ # ret_hash.to_a.join(', ')
22
+ "Current is #{ret_hash.inspect}"
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -8,7 +8,8 @@ module Itg
8
8
  included do
9
9
  def itg_print(header: nil, prefix: '', allow_nested: true)
10
10
  puts header if header
11
- puts "#{prefix}print item....."
11
+ # puts "#{prefix}print item....."
12
+ puts "#{prefix}#{self.to_s}"
12
13
  end
13
14
  end
14
15
 
data/lib/itg/itg_sec.rb CHANGED
@@ -19,12 +19,12 @@ module Itg
19
19
 
20
20
  included do
21
21
  begin
22
- puts ">>>>>> itg_sec - include it....."
22
+ # puts ">>>>>> itg_sec - include it....."
23
23
  unless Rails.env.test?
24
24
  store_in database: DB_NAME, client: CLIENT_NAME
25
- puts "[itg_sec] set db details: #{DB_NAME}, #{CLIENT_NAME}"
25
+ # puts "[itg_sec] set db details: #{DB_NAME}, #{CLIENT_NAME}"
26
26
  end
27
- self.itg_print_db_info
27
+ # self.itg_print_db_info
28
28
  rescue NameError => e
29
29
  # Ignored - Used only because the gem does not have the Rails initialized!
30
30
  raise if e.message != "uninitialized constant Itg::Sec::Rails"
@@ -11,10 +11,20 @@ module Itg
11
11
  field :code, type: String
12
12
  field :name, type: String
13
13
  field :descr, type: String
14
- field :db, type: String
14
+ field :db_name, type: String
15
+ field :db_client, type: String, default: "default"
15
16
 
16
17
  validates_presence_of(:code, :name)
17
18
  validates_uniqueness_of :code
19
+
20
+ def to_s
21
+ [code, name, descr]
22
+ end
23
+
24
+ # def itg_print(header: nil, prefix: '', allow_nested: true)
25
+ # puts header if header
26
+ # puts "#{prefix}#{[attrs['name'] || attrs['descr'] || attrs['code']]}"
27
+ # end
18
28
  end
19
29
  end
20
30
  end
@@ -19,8 +19,10 @@ module Itg
19
19
 
20
20
  validates_presence_of :kind
21
21
  validates_presence_of :attrs
22
+ validates_presence_of :context
22
23
 
23
- belongs_to :owner, class_name: 'User'
24
+ # belongs_to :owner, class_name: 'User'
25
+ belongs_to :owner, class_name: User
24
26
 
25
27
  def to_s
26
28
  attrs['name'] || attrs['descr'] || attrs['code']
@@ -44,9 +44,9 @@ module Itg
44
44
 
45
45
  field :email, type: String
46
46
  # field :password_digest, type: String
47
- field :db, type: String
47
+ # field :db, type: String
48
48
  field :kind, type: String, default: 'user'
49
- field :contexts, type: Object, default: {}
49
+ # field :contexts, type: Object, default: {}
50
50
 
51
51
  index({ email: 1 }, { unique: true, name: 'email_index' })
52
52
 
@@ -67,19 +67,20 @@ module Itg
67
67
  super
68
68
  end
69
69
 
70
- def add_context(context, role: :user)
71
- if context.persisted?
72
- unless contexts.keys.include?(context.code.to_sym)
73
- contexts[context.code.to_sym] = {role: role.to_sym}
74
- contexts[context.code.to_sym][:name] = context[:name] if context[:name]
75
- contexts[context.code.to_sym][:descr] = context[:descr] if context[:descr]
76
- contexts[context.code.to_sym][:db] = context[:db] if context[:db]
77
- end
78
- end
79
- end
70
+ # def add_context(context, role: :user)
71
+ # if context.persisted?
72
+ # unless contexts.keys.include?(context.code.to_sym)
73
+ # contexts[context.code.to_sym] = {role: role.to_sym}
74
+ # contexts[context.code.to_sym][:name] = context[:name] if context[:name]
75
+ # contexts[context.code.to_sym][:descr] = context[:descr] if context[:descr]
76
+ # contexts[context.code.to_sym][:db] = context[:db] if context[:db]
77
+ # end
78
+ # end
79
+ # end
80
80
 
81
81
  def to_s
82
- attributes.symbolize_keys.slice(:_id, :email, :db, :role).to_s
82
+ # attributes.symbolize_keys.slice(:_id, :email, :db, :role).to_s
83
+ attributes.symbolize_keys.slice(:_id, :email, :role).to_s
83
84
  end
84
85
 
85
86
  def itg_print(header: nil, prefix: '', allow_nested: true)
data/lib/itg/version.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Itg
4
- VERSION = "0.1.8"
5
- DATE = "18/2/2024"
4
+ VERSION = "0.1.10"
5
+ DATE = "21/3/2024"
6
6
 
7
7
  def self.version_info
8
8
  "Itg gem v.#{VERSION} #{DATE}"
data/lib/itg.rb CHANGED
@@ -10,6 +10,11 @@ require_relative "itg/itg_mongo_base"
10
10
  require_relative "itg/itg_printable"
11
11
  require_relative "itg/itg_api_key_authenticatable"
12
12
  require_relative "itg/itg_response"
13
+ require_relative "itg/itg_current_base"
14
+ require_relative "itg/controllers/itg_generic_controller_base"
15
+ require_relative "itg/controllers/itg_api_keys_controller_base"
16
+ require_relative "itg/controllers/itg_entities_controller_base"
17
+ require_relative "itg/controllers/itg_controller_set_current_request_details"
13
18
  require_relative "itg/itg_sec"
14
19
 
15
20
  module Itg
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: itg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - aAon
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-02-18 00:00:00.000000000 Z
11
+ date: 2024-03-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -29,7 +29,12 @@ files:
29
29
  - config/mongoid.yml
30
30
  - itg.gemspec
31
31
  - lib/itg.rb
32
+ - lib/itg/controllers/itg_api_keys_controller_base.rb
33
+ - lib/itg/controllers/itg_controller_set_current_request_details.rb
34
+ - lib/itg/controllers/itg_entities_controller_base.rb
35
+ - lib/itg/controllers/itg_generic_controller_base.rb
32
36
  - lib/itg/itg_api_key_authenticatable.rb
37
+ - lib/itg/itg_current_base.rb
33
38
  - lib/itg/itg_mongo_base.rb
34
39
  - lib/itg/itg_printable.rb
35
40
  - lib/itg/itg_response.rb