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 +4 -4
- data/README.md +69 -8
- data/app/searches/upframework/base_search.rb +3 -5
- data/app/serializers/upframework/base_serializer.rb +56 -0
- data/lib/upframework/version.rb +1 -1
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65b7cd4203031fe204ae2db4b2e9f15234f70b9f8319c0b0eb0479a93b8d775d
|
4
|
+
data.tar.gz: bab9c34c224ae19444350453b103a6658bba142351ef54a516d602b34f869ca5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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
|
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
|
data/lib/upframework/version.rb
CHANGED
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.
|
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-
|
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:
|
48
|
+
name: jsonapi-serializer
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
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: '
|
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
|