upframework 0.1.1 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 05f3cb12631eb6061d0d6765ac7fd2807ba477044ba3325dc3c8b94f56988fd0
4
- data.tar.gz: 9d1372ba1123335dba56508767e4c96e1a858008bfb1b579c3040bdb7c5d79fe
3
+ metadata.gz: 01aa46c287d2a52c8fb32619543e90f984269b7186ad4f358665a84428618b4e
4
+ data.tar.gz: 9c310448029653953ee6fb7cda77ff9da622fd2e6e711db9eed4d4038bed1504
5
5
  SHA512:
6
- metadata.gz: 8c7161d7ab8b9458f410f87a200f4aa48cfc0200db586a0950e2eb2e9de88e7d380be8d085b0ff9899a80b1b0b3fd44b5ee8470239373e5d96ec0b903325300d
7
- data.tar.gz: 33d53469918bc45501702d0c12fdc556c85fd770f7218387180b67f65afb235457e16fd2e18108d6f1c45cbf79553ac37b12985f416c50efee4f0e7441030c41
6
+ metadata.gz: e0abf86d1dda28bda9e7224307af334f2a26c5e7da4065ca749b4fa6fccead7518a173e7e9cc4b7c17d6e08be0cc3589e866d49238f6b767cbc4118e80cc0783
7
+ data.tar.gz: 919879cab48a3800d1bacf8040a69d4961366cef98699362a28a407f4a34d1a89ff9160efcea3063f284711fafc28aa6a0ce5d64a6c86674e150e74ce12af250
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- module Upframework::CrudExtensions
2
+ module Upframework::CrudEndpoint
3
3
  extend ::ActiveSupport::Concern
4
4
 
5
5
  included do
@@ -3,9 +3,9 @@ module Upframework
3
3
  include ::DeviseTokenAuth::Concerns::SetUserByToken
4
4
  include ::Upframework::ErrorHandler
5
5
  include ::Upframework::TransformParamKeys
6
- include ::Upframework::CrudExtensions
6
+ include ::Upframework::CrudEndpoint
7
+ include ::Upframework::ServiceEndpoint
7
8
  include ::Upframework::RenderExtensions
8
- include ::Upframework::ServiceActionController
9
9
 
10
10
  before_action :authenticate!
11
11
 
@@ -0,0 +1,30 @@
1
+ module Upframework
2
+ class SearchesController < Upframework::ApiController
3
+ skip_authorize_resource
4
+
5
+ authorize_resource class: :search
6
+
7
+ skip_before_action :set_base_resource
8
+
9
+ def index
10
+ args = { current_ability: current_ability, current_user: current_user }
11
+ args.merge!(permitted_params)
12
+
13
+ resource_scope = search_class.run(args).result
14
+ render_serialized resource_scope
15
+ end
16
+
17
+ private
18
+
19
+ def search_class
20
+ "#{params[:resource].classify}Search".constantize
21
+ end
22
+
23
+ def permitted_params
24
+ excluded_keys = %w[resource format controller action search]
25
+ permitted_keys = params.keys - excluded_keys
26
+
27
+ params.slice(*permitted_keys).permit(permitted_keys)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,23 @@
1
+ class Upframework::BaseSearch < Upframework::BaseService
2
+ DEFAULT_PAGE = 1
3
+ DEFAULT_PER_PAGE = 12
4
+
5
+ def result
6
+ @model_scope
7
+ end
8
+
9
+ def query(field)
10
+ @model_scope = yield if present_value?(field)
11
+ end
12
+
13
+ def paginate_scope
14
+ @model_scope = @model_scope.
15
+ page(@page || DEFAULT_PAGE).
16
+ per(@per_page || DEFAULT_PER_PAGE).
17
+ order(created_at: :desc)
18
+ end
19
+
20
+ def present_value?(field)
21
+ instance_variable_get("@#{field}").present?
22
+ end
23
+ end
@@ -1,5 +1,5 @@
1
1
  module Upframework
2
- module ServiceActionController
2
+ module ServiceEndpoint
3
3
  extend ::ActiveSupport::Concern
4
4
 
5
5
  included do
@@ -0,0 +1,52 @@
1
+ module Upframework
2
+ class BaseService
3
+ attr_reader :errors
4
+
5
+ class << self
6
+ def run(attributes = {})
7
+ attributes = Hash[attributes.to_h.map { |k, v| [k.to_sym, v] }]
8
+ new(**attributes).tap(&:execute)
9
+ end
10
+ end
11
+
12
+ def initialize(**attributes)
13
+ @errors = []
14
+
15
+ self.class.send(:attr_reader, *attributes.keys)
16
+
17
+ #TODO: Remove. this should be done on the child class.
18
+ attributes.each do |key, value|
19
+ instance_variable_set("@#{key}", value)
20
+ end
21
+
22
+ post_initialize(**attributes)
23
+ end
24
+
25
+ def post_initialize(**attributes)
26
+ end
27
+
28
+ def execute
29
+ end
30
+
31
+ def result
32
+ end
33
+
34
+ def success?
35
+ @errors.blank?
36
+ end
37
+
38
+ def error?
39
+ @errors.present?
40
+ end
41
+
42
+ def error_messages
43
+ @errors.join('. ')
44
+ end
45
+
46
+ protected
47
+
48
+ def add_error(error)
49
+ @errors << error
50
+ end
51
+ end
52
+ end
data/config/routes.rb CHANGED
@@ -1,3 +1,2 @@
1
1
  Upframework::Engine.routes.draw do
2
- ::Upframework::Services::Routes.load
3
2
  end
@@ -0,0 +1,14 @@
1
+ module Upframework
2
+ module Searches
3
+ module Routes
4
+ def self.load(namespace: nil, **options)
5
+ Rails.application.routes.draw do
6
+ # Create a route for searches
7
+ # ex.
8
+ # GET searches
9
+ get [namespace, "search"].compact.join("/"), to: "searches#index"
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,17 +1,26 @@
1
1
  module Upframework
2
2
  module Services
3
3
  module Routes
4
- def self.load
4
+ def self.load(namespace: nil, **options)
5
+ scope_name = namespace
6
+
5
7
  Rails.application.routes.draw do
6
8
  source_path = Rails.root.join('app', 'services')
7
9
 
8
- namespace :api, defaults: { format: 'json' } do
10
+ service_routes = proc do
9
11
  Dir.glob("#{source_path}/*/").map{ |e| File.basename e }.each do |resource|
10
- #TODO: check resource exists in controller
11
- # config to exclude some services in the routes
12
+ # Create a post route for services
13
+ # ex.
14
+ # POST users/service/my_custom_service
12
15
  post "#{resource}/service/:service_name", to: "#{resource}#service"
13
16
  end
14
17
  end
18
+
19
+ if scope_name
20
+ namespace scope_name, defaults: { format: :json }, &service_routes
21
+ else
22
+ service_routes.call
23
+ end
15
24
  end
16
25
  end
17
26
  end
@@ -1,3 +1,3 @@
1
1
  module Upframework
2
- VERSION = '0.1.1'
2
+ VERSION = '0.2.0'
3
3
  end
data/lib/upframework.rb CHANGED
@@ -5,3 +5,4 @@ module Upframework
5
5
  end
6
6
 
7
7
  require "upframework/services/routes"
8
+ require "upframework/searches/routes"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: upframework
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - jude_cali
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-02 00:00:00.000000000 Z
11
+ date: 2020-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -42,21 +42,25 @@ files:
42
42
  - Rakefile
43
43
  - app/assets/config/upframework_manifest.js
44
44
  - app/assets/stylesheets/upframework/application.css
45
- - app/controllers/concerns/upframework/crud_extensions.rb
45
+ - app/controllers/concerns/upframework/crud_endpoint.rb
46
46
  - app/controllers/concerns/upframework/error_handler.rb
47
47
  - app/controllers/concerns/upframework/render_extensions.rb
48
48
  - app/controllers/concerns/upframework/transform_param_keys.rb
49
49
  - app/controllers/upframework/api_controller.rb
50
+ - app/controllers/upframework/searches_controller.rb
50
51
  - app/helpers/upframework/application_helper.rb
51
52
  - app/jobs/upframework/application_job.rb
52
53
  - app/mailers/upframework/application_mailer.rb
53
54
  - app/models/upframework/application_record.rb
54
- - app/services/concerns/upframework/service_action_controller.rb
55
+ - app/searches/upframework/base_search.rb
56
+ - app/services/concerns/upframework/service_endpoint.rb
57
+ - app/services/upframework/base_service.rb
55
58
  - app/views/layouts/upframework/application.html.erb
56
59
  - config/routes.rb
57
60
  - lib/tasks/upframework_tasks.rake
58
61
  - lib/upframework.rb
59
62
  - lib/upframework/engine.rb
63
+ - lib/upframework/searches/routes.rb
60
64
  - lib/upframework/services/routes.rb
61
65
  - lib/upframework/version.rb
62
66
  homepage: https://gitlab.com/disruptors/upframework