resourcey 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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,5 @@
1
+ require 'action_controller'
2
+
3
+ require 'resourcey/config'
4
+ require 'resourcey/controller'
5
+ require 'resourcey/serializer'
@@ -0,0 +1,19 @@
1
+ module Resourcey
2
+ class Config
3
+ attr_accessor :foo
4
+
5
+ def initialize
6
+ self.foo = 'foo'
7
+ end
8
+ end
9
+
10
+ class << self
11
+ attr_accessor :config
12
+ end
13
+
14
+ @config ||= Config.new
15
+
16
+ def self.configure
17
+ yield @config
18
+ end
19
+ end
@@ -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
@@ -0,0 +1,8 @@
1
+ require 'active_model_serializers'
2
+ require 'active_model/serializer'
3
+
4
+ module Resourcey
5
+ class Serializer < ActiveModel::Serializer
6
+ attribute :id
7
+ end
8
+ 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: []