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 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: []