resourcey 0.0.1
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 +7 -0
- data/README.md +63 -0
- data/lib/resourcey.rb +5 -0
- data/lib/resourcey/config.rb +19 -0
- data/lib/resourcey/controller.rb +76 -0
- data/lib/resourcey/serializer.rb +8 -0
- metadata +132 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c1306a0fe33325bac9d437ed29f85897248fe1dc
|
4
|
+
data.tar.gz: 80d823122198934120719e54f9420397d53d6ec0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0df5cac0005f0a2767626299a7b10a3b44de828216a366ebe45a3a67c0576476b525e6bdeeb477a32cf7d5e1c5e124d33501fabd2ba1c1b21ae58301e3a49359
|
7
|
+
data.tar.gz: 27c5fed3a4b67376769c5abf96e810148a9c772e2de84d11b507199e888b3219372d7eadc9634167e0ed4d639d7d03065c637e5583934eaf3ed607096180a41d
|
data/README.md
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
# Resourcey
|
2
|
+
A lightweight gem for building resource-based APIs.
|
3
|
+
|
4
|
+
## Installation
|
5
|
+
Add Resourcey to your `Gemfile`:
|
6
|
+
```ruby
|
7
|
+
gem 'resourcey'
|
8
|
+
```
|
9
|
+
|
10
|
+
And then:
|
11
|
+
```
|
12
|
+
bundle
|
13
|
+
```
|
14
|
+
|
15
|
+
Or install it manually:
|
16
|
+
```
|
17
|
+
gem install resourcey
|
18
|
+
```
|
19
|
+
|
20
|
+
## Usage
|
21
|
+
### Controller
|
22
|
+
For a resource called `user`, just create `UsersController` in a correct namespace (e.g. 'api/v1')
|
23
|
+
```ruby
|
24
|
+
class Api::V1::UsersController < Resourcey::Controller
|
25
|
+
end
|
26
|
+
```
|
27
|
+
|
28
|
+
For further reading, [click here](/docs/CONTROLLER.md)
|
29
|
+
|
30
|
+
### Serializer
|
31
|
+
|
32
|
+
Now you need a serializer, let's assume that `User` has an email and an ID, go with this:
|
33
|
+
```ruby
|
34
|
+
class UserSerializer < Resourcey::Serializer
|
35
|
+
attributes :id, :email
|
36
|
+
end
|
37
|
+
```
|
38
|
+
|
39
|
+
For further reading, [click here](/docs/SERIALIZER.md)
|
40
|
+
|
41
|
+
### Fetch the data
|
42
|
+
|
43
|
+
Don't forget to create a correct route in your `routes.rb` file, and you're good to go!
|
44
|
+
Now just visit `/api/v1/users`, and see how your resources are rendered.
|
45
|
+
|
46
|
+
```json
|
47
|
+
/* example response */
|
48
|
+
|
49
|
+
[
|
50
|
+
{ "id": 1, "email": "john.doe@example.com" },
|
51
|
+
{ "id": 2, "email": "george.doe@example.com" }
|
52
|
+
]
|
53
|
+
```
|
54
|
+
|
55
|
+
## Gem development
|
56
|
+
If you want to take part in developing resourcey, fork this repository, commit your code, and create pull request.
|
57
|
+
|
58
|
+
### Requirements
|
59
|
+
- ruby 2.4.1
|
60
|
+
- bundler
|
61
|
+
|
62
|
+
### Running local tests
|
63
|
+
- rspec
|
data/lib/resourcey.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
module Resourcey
|
2
|
+
class Controller < ActionController::Base
|
3
|
+
def index
|
4
|
+
render json: serialized_collection(resources)
|
5
|
+
end
|
6
|
+
|
7
|
+
def show
|
8
|
+
find_resource
|
9
|
+
render json: @resource, serializer: serializer
|
10
|
+
end
|
11
|
+
|
12
|
+
def create
|
13
|
+
@resource = resource_model.new(resource_params)
|
14
|
+
|
15
|
+
if @resource.save
|
16
|
+
render json: @resource, serializer: serializer, status: :ok
|
17
|
+
else
|
18
|
+
render json: { errors: @resource.errors }, status: :bad_request
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def update
|
23
|
+
find_resource
|
24
|
+
@resource.assign_attributes(resource_params)
|
25
|
+
|
26
|
+
if @resource.save
|
27
|
+
render json: @resource, serializer: serializer, status: :ok
|
28
|
+
else
|
29
|
+
render json: { errors: @resource.errors }, status: :bad_request
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def destroy
|
34
|
+
find_resource
|
35
|
+
@resource.destroy
|
36
|
+
|
37
|
+
if @resource.destroyed?
|
38
|
+
render json: true, status: :ok
|
39
|
+
else
|
40
|
+
render json: { errors: @resource.errors }, status: :bad_request
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def find_resource
|
47
|
+
@resource = resource_model.find(params[:id])
|
48
|
+
end
|
49
|
+
|
50
|
+
def resource_model_name
|
51
|
+
@resource_model_name ||= controller_name.singularize.camelize
|
52
|
+
end
|
53
|
+
|
54
|
+
def resource_model
|
55
|
+
name = resource_model_name
|
56
|
+
name.safe_constantize || raise("Cannot find model #{name}")
|
57
|
+
end
|
58
|
+
|
59
|
+
def serializer
|
60
|
+
name = "#{resource_model_name}Serializer"
|
61
|
+
name.safe_constantize || raise("Cannot find serializer #{name}")
|
62
|
+
end
|
63
|
+
|
64
|
+
def resources
|
65
|
+
resource_model.all
|
66
|
+
end
|
67
|
+
|
68
|
+
def resource_params
|
69
|
+
raise('#resource_params must be defined!')
|
70
|
+
end
|
71
|
+
|
72
|
+
def serialized_collection(collection)
|
73
|
+
ActiveModel::Serializer::CollectionSerializer.new(collection, serializer: serializer)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
metadata
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: resourcey
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- polakowski
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-01-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.5'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: combustion
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.8.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.8.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: activerecord
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '4'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '4'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: railties
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '4'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '4'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: active_model_serializers
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.10.6
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.10.6
|
97
|
+
description: Lightweight utility to create simple JSON Apis
|
98
|
+
email: marek.polakowski@gmail.com
|
99
|
+
executables: []
|
100
|
+
extensions: []
|
101
|
+
extra_rdoc_files: []
|
102
|
+
files:
|
103
|
+
- README.md
|
104
|
+
- lib/resourcey.rb
|
105
|
+
- lib/resourcey/config.rb
|
106
|
+
- lib/resourcey/controller.rb
|
107
|
+
- lib/resourcey/serializer.rb
|
108
|
+
homepage: http://rubygems.org/gems/resourcey
|
109
|
+
licenses:
|
110
|
+
- MIT
|
111
|
+
metadata: {}
|
112
|
+
post_install_message:
|
113
|
+
rdoc_options: []
|
114
|
+
require_paths:
|
115
|
+
- lib
|
116
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '2.4'
|
121
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
requirements: []
|
127
|
+
rubyforge_project:
|
128
|
+
rubygems_version: 2.6.11
|
129
|
+
signing_key:
|
130
|
+
specification_version: 4
|
131
|
+
summary: resourcey
|
132
|
+
test_files: []
|