upframework 0.2.2 → 0.2.8

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: d88db49c9f1f7137b98b936cf13792218150eb0cb61c6278ff11fee45f9c8c05
4
- data.tar.gz: 5263d90be331e0459b6f3e735052758a539b2a9466987765041df221b8cb572a
3
+ metadata.gz: 65b7cd4203031fe204ae2db4b2e9f15234f70b9f8319c0b0eb0479a93b8d775d
4
+ data.tar.gz: bab9c34c224ae19444350453b103a6658bba142351ef54a516d602b34f869ca5
5
5
  SHA512:
6
- metadata.gz: 801d5101e0aadd229c9c698dc43dd9850d896fb244274a388d3bcb5df3596a2d83ce3a08ab0645eb4d154d487bdfa8629d63332d4cbf17245c8b1aa1b8eed439
7
- data.tar.gz: f21de820db493c15daea315e7fff83439ec5c286da810b22860e6b981e45417c45ea08c201cccc53fb45ac319212c652f6ce77c02ee0bfa1601a58b0fa974d63
6
+ metadata.gz: 98e0d8b2a6405ccd13098554c6c219b9b1f3bc551c9d321f4378a71bb39cbd468a34260818b2f0a14abeba83060a9692fdf86163fbf8d92d2121b836ea67efcd
7
+ data.tar.gz: 93d0add617417cfd7fe6052d6557525fc22626069032a37677e9b9d5ba43257828694ad35edca4eec0f676e75f8ec510ffc876c2aa9cd208442dbf48dc12492e
data/README.md CHANGED
@@ -4,39 +4,100 @@ Add features on top of Rails, Especially for APIs. This was created to make stru
4
4
  #### The following features are available.
5
5
  - Creates (create, read, update, destroy) action methods for resources.
6
6
  - Has render helpers for API or socket responses. ex. Converting models to its designated serializer.
7
- - Converts snake case request params (from js standard) to underscore params (ruby standard)
7
+ - Converts snake case request params (from js standard) to underscore params (ruby standard)
8
8
  - Searches layer under app/searches. Usually used for form searches.
9
9
  - Services layer under app/services. For single responsibility domain-specific logic code.
10
10
  - Exception notifier and API error response handler.
11
11
 
12
12
  ## Basic Usage
13
- ####Controllers
13
+ #### Controllers
14
14
  ```ruby
15
- #app/controllers
15
+ # app/controllers
16
+ # create,show,update,destroy methods are available by default
16
17
  class ProjectsController < Upframework::ResourcesController
18
+ # Example of broadcasting with a serialized object using ActionCables.
19
+ def udate
20
+ super do
21
+ channel = @project.user
22
+ broadcast_serialized(channel, resource: @project, event: "Project Updated")
23
+ end
24
+ end
25
+
26
+ # Example of rendering serialized responsed. This is using fast_jsonapi serializer.
27
+ def custom_action
28
+ render_serialized @project
29
+ end
30
+ end
31
+ ```
32
+
33
+
34
+ #### Serializers
35
+ ```ruby
36
+ # app/serializers
37
+ # classes extending Upframework::BaseSerializer has pagination and meta data enabled
38
+ class ProjectSerializer < Upframework::BaseSerializer
39
+ belongs_to :user
40
+
41
+ has_many :tasks
42
+
43
+ default_includes [:user]
17
44
  end
18
45
  ```
19
46
 
20
- ####Searches
47
+ #### Searches
21
48
  ```ruby
22
49
  #app/searches
23
50
  class ProjectSearch < Upframework::BaseSearch
51
+ def post_initialize
52
+ @per_page = 10
53
+ @scope = Project.accessible_by(@current_ability)
54
+ end
55
+
56
+ def execute
57
+ # query logic here using scope object defined above
58
+ # by default results are paginated
59
+ end
24
60
  end
25
61
  ```
62
+ ```
63
+ #search api available in
64
+ /search?resource=Project&arg1=""&arg2=""
65
+ ```
26
66
 
27
- ####Services
67
+ #### Services
28
68
  ```ruby
29
69
  #app/services
30
- class Project::SubmitService < Upframework::BaseService
70
+ class Project::SubmitService < Upframework::BaseService
71
+ def post_initialize(id:, **attrs)
72
+ @project = Project.find(id)
73
+ end
74
+
75
+ def execute
76
+ # put main logic here
77
+ # ...
78
+ project.save
79
+ end
80
+
81
+ def result
82
+ project
83
+ end
31
84
  end
85
+
86
+ service = Project::SubmitService.run
87
+ service.result => <Project: Instance>
88
+ service.success? => true/false
32
89
  ```
33
90
 
34
- ####Routes
35
- app/services
91
+ #### Routes
36
92
  ```ruby
37
93
  #config/routes
38
94
  mount Upframework::Engine => /path
39
95
  ```
96
+ routes being available
97
+ ```
98
+ GET /search
99
+ POST /{resource}/services/:service_name
100
+ ```
40
101
 
41
102
  ## Installation
42
103
  Add this line to your application's Gemfile:
@@ -7,20 +7,18 @@ class Upframework::BaseSearch < Upframework::BaseService
7
7
  end
8
8
 
9
9
  def query(field)
10
- @model_scope = yield if present_value?(field)
10
+ @model_scope = yield if field.present?
11
11
  end
12
12
 
13
13
  def paginate_scope
14
+ return if @model_scope.nil?
15
+
14
16
  @model_scope = @model_scope.
15
17
  page(@page || DEFAULT_PAGE).
16
18
  per(@per_page || DEFAULT_PER_PAGE).
17
19
  order(created_at: :desc)
18
20
  end
19
21
 
20
- def present_value?(field)
21
- instance_variable_get("@#{field}").present?
22
- end
23
-
24
22
  module ExecuteWrapper
25
23
  def execute
26
24
  super
@@ -0,0 +1,56 @@
1
+ module Upframework
2
+ class BaseSerializer
3
+ include JSONAPI::Serializer
4
+
5
+ attr_reader :resource, :current_controller
6
+
7
+ delegate :view_context, to: :current_controller
8
+
9
+ set_key_transform :camel_lower
10
+ attributes :created_at, :updated_at
11
+
12
+ def initialize(resource, current_controller: nil, **args)
13
+ @resource = resource
14
+ @current_controller = current_controller
15
+
16
+ if args[:format] == :minimal
17
+ args[:fields] = set_format
18
+ end
19
+
20
+ if @current_controller && resource.respond_to?(:total_pages)
21
+ args.merge!(pagination)
22
+ end
23
+
24
+ super(resource, **args)
25
+ end
26
+
27
+ def set_format
28
+ resource_klass = resource.class.name
29
+ resource_klass = resource.klass.name if resource_klass == 'ActiveRecord::Relation'
30
+ resource_klass = resource.first.class.name if resource.kind_of?(Array)
31
+
32
+ { resource_klass.camelize(:lower) => [:id] }
33
+ end
34
+
35
+ def pagination
36
+ {
37
+ meta: {
38
+ per_page: resource.size,
39
+ total_pages: resource.total_pages,
40
+ },
41
+ links: {
42
+ prev: view_context.path_to_prev_page(resource),
43
+ next: view_context.path_to_next_page(resource),
44
+ },
45
+ }.deep_transform_keys { |key| key.to_s.camelize(:lower).to_sym }
46
+ end
47
+
48
+ def self.default_includes(relations = [])
49
+ @relations ||= relations
50
+ end
51
+
52
+ class << self
53
+ delegate :url_helpers, to: :'Rails.application.routes'
54
+ end
55
+ end
56
+ end
@@ -1,3 +1,3 @@
1
1
  module Upframework
2
- VERSION = '0.2.2'
2
+ VERSION = '0.2.8'
3
3
  end
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.2.2
4
+ version: 0.2.8
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-05-26 00:00:00.000000000 Z
11
+ date: 2020-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -45,19 +45,19 @@ dependencies:
45
45
  - !ruby/object:Gem::Version
46
46
  version: 3.1.0
47
47
  - !ruby/object:Gem::Dependency
48
- name: fast_jsonapi
48
+ name: jsonapi-serializer
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '1.5'
53
+ version: '2.0'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '1.5'
60
+ version: '2.0'
61
61
  description: Rails framework extensions
62
62
  email:
63
63
  - jcalimbas@fullscale.io
@@ -82,6 +82,7 @@ files:
82
82
  - app/mailers/upframework/application_mailer.rb
83
83
  - app/models/upframework/application_record.rb
84
84
  - app/searches/upframework/base_search.rb
85
+ - app/serializers/upframework/base_serializer.rb
85
86
  - app/services/concerns/upframework/service_endpoint.rb
86
87
  - app/services/upframework/base_service.rb
87
88
  - app/views/layouts/upframework/application.html.erb