rest_framework 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0ae8173bd8209fe5250ec9fe3a749d41d46307f7948d1c7597921ab5b4d2cae2
4
- data.tar.gz: 3ca1aa88dbde70ad327a65778bfa7e2a90499111dbf6e16a9d084aba2df42328
3
+ metadata.gz: 117f77ddfdeadf0ae912fe3211d78135db7f72adbb55e8531dfc4766954455cc
4
+ data.tar.gz: 064f2f56125d4af20753e3a8d88eeea5e1617c58e492f1b8517ed04c2f58b730
5
5
  SHA512:
6
- metadata.gz: bd56096773684dc55324b6a8d3fed2a7d214201fd9ac516862a24a111ecedcf70cebf20b61ff264f11a921d67e9a057da4a8b1c2d4c498d07bb042401993e5e3
7
- data.tar.gz: 2f9f5b01fa4a956f0047307ed0f9b7523607ad6487fa5f8fa15d9895b7ff814703c048e5a7a0261fad35f11b96f3078641e8b9dd9e897bdbbc15b36c775c084e
6
+ metadata.gz: ab6d2e0870adee08f98c0e7c89761ce59d5e5be9e051e0045b6b0c56625d1d09225ca34ac87223e2b3d41687fe9c35235514c5b2d0479f42ef576cc47d869c9d
7
+ data.tar.gz: f8f4c6e08d10cc7e7f7500412714835b67ac3aa234ecd619abba78677ea3d5055713dc12dc2993e6bce67a7b9bd10187f833b985173dcd4942f6c0e4bd417548
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # REST Framework
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/rest_framework.svg)](https://badge.fury.io/rb/rest_framework)
4
+ [![Build Status](https://travis-ci.org/gregschmit/rails-rest-framework.svg?branch=master)](https://travis-ci.org/gregschmit/rails-rest-framework)
5
+
3
6
  REST Framework helps you build awesome APIs in Ruby on Rails.
4
7
 
5
8
  **The Problem**: Building controllers for APIs usually involves writing a lot of redundant CRUD
@@ -65,13 +68,13 @@ end
65
68
  ```
66
69
 
67
70
  Note that you can also override `get_model` and `get_recordset` instance methods to override the API
68
- behavior based on each request.
71
+ behavior dynamically per-request.
69
72
 
70
73
  ### Routing
71
74
 
72
75
  You can use Rails' `resource`/`resources` routers to route your API, however if you want
73
- `@extra_actions`/`@extra_member_actions` to be routed automatically, then you can use the
74
- `rest_resource`/`rest_resources` routers provided by this gem. You can also use `rest_root` to route
76
+ `@extra_actions` / `@extra_member_actions` to be routed automatically, then you can use the
77
+ `rest_resource` / `rest_resources` routers provided by this gem. You can also use `rest_root` to route
75
78
  the root of your API:
76
79
 
77
80
  ```
@@ -0,0 +1,3 @@
1
+ h1, h2, h3, h4, h5, h6 {
2
+ width: 100%;
3
+ }
@@ -0,0 +1,47 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title><%= @title %></title>
5
+ <meta charset="utf-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
7
+ <%= csrf_meta_tags %>
8
+ <%= csp_meta_tag %>
9
+
10
+ <%= favicon_link_tag 'rest_framework_favicon.ico' %>
11
+
12
+ <%= stylesheet_link_tag 'application', media: 'all' %>
13
+ <%= javascript_include_tag 'application' %>
14
+ <%= stylesheet_link_tag 'rest_framework', media: 'all' %>
15
+ <%= javascript_include_tag 'rest_framework' %>
16
+ </head>
17
+
18
+ <body>
19
+ <div class="bg-dark">
20
+ <div class="w-100 m-0 p-0" style="height: .3em; background-color: #a00;"></div>
21
+ <nav class="navbar navbar-dark bg-dark">
22
+ <div class="container">
23
+ <span class="navbar-brand p-0">
24
+ <h1 class="text-light font-weight-light m-0 p-0" style="font-size: 1em"><%= @template_logo_text %></h1>
25
+ </span>
26
+ </div>
27
+ </nav>
28
+ </div>
29
+ <div class="container py-3">
30
+ <div class="container">
31
+ <div class="row">
32
+ <h1><%= @title %></h1>
33
+ </div>
34
+ <div class="row">
35
+ <h2>Payload</h2><br>
36
+ <div><pre><%= JSON.pretty_generate(JSON.parse(@payload.to_json)) %></pre></div>
37
+ </div>
38
+ <% unless @routes.blank? %>
39
+ <div class="row">
40
+ <h2>Routes</h2>
41
+ <%= render partial: 'rest_framework/routes' %>
42
+ </div>
43
+ <% end %>
44
+ </div>
45
+ </div>
46
+ </body>
47
+ </html>
@@ -0,0 +1,18 @@
1
+ <table class="table">
2
+ <thead>
3
+ <tr>
4
+ <th scope="col">Verb</th>
5
+ <th scope="col">Path</th>
6
+ <th scope="col">Action</th>
7
+ </tr>
8
+ </thead>
9
+ <tbody>
10
+ <% @routes.each do |r| %>
11
+ <tr>
12
+ <td><%= r[:verb] %></td>
13
+ <td><%= r[:path] %></td>
14
+ <td><%= r[:action] %></td>
15
+ </tr>
16
+ <% end %>
17
+ </tbody>
18
+ </table>
@@ -2,5 +2,6 @@ module RESTFramework
2
2
  end
3
3
 
4
4
  require_relative "rest_framework/controllers"
5
+ require_relative "rest_framework/engine"
5
6
  require_relative "rest_framework/routers"
6
7
  require_relative "rest_framework/version"
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
@@ -53,6 +53,7 @@ module RESTFramework
53
53
  # end
54
54
 
55
55
  _restframework_attr_reader(:extra_actions, default: {})
56
+ _restframework_attr_reader(:template_logo_text, default: 'Rails REST Framework')
56
57
 
57
58
  def skip_actions(skip_undefined: true)
58
59
  # first, skip explicitly skipped actions
@@ -73,11 +74,42 @@ module RESTFramework
73
74
  base.extend ClassMethods
74
75
  end
75
76
 
77
+ def _get_routes
78
+ begin
79
+ formatter = ActionDispatch::Routing::ConsoleFormatter::Sheet
80
+ rescue NameError
81
+ formatter = ActionDispatch::Routing::ConsoleFormatter
82
+ end
83
+ return ActionDispatch::Routing::RoutesInspector.new(Rails.application.routes.routes).format(
84
+ formatter.new
85
+ ).lines[1..].map { |r| r.split.last(3) }.map { |r|
86
+ {verb: r[0], path: r[1], action: r[2]}
87
+ }.select { |r| r[:path].start_with?(request.path) }
88
+ end
89
+
76
90
  # Helper alias for `respond_to`/`render`, and replace nil responses with blank ones.
77
- def api_response(value, **kwargs)
91
+ def api_response(payload, html_kwargs: nil, json_kwargs: nil, **kwargs)
92
+ html_kwargs ||= {}
93
+ json_kwargs ||= {}
94
+
78
95
  respond_to do |format|
79
- format.html
80
- format.json { render json: value || '', **kwargs }
96
+ format.html {
97
+ kwargs = kwargs.merge(html_kwargs)
98
+ @template_logo_text ||= "Rails REST Framework"
99
+ @title ||= self.controller_name.camelize
100
+ @routes ||= self._get_routes
101
+ @payload = payload
102
+ begin
103
+ render(**kwargs)
104
+ rescue ActionView::MissingTemplate # fallback to rest_framework default view
105
+ kwargs[:template] = "rest_framework/default"
106
+ end
107
+ render(**kwargs)
108
+ }
109
+ format.json {
110
+ kwargs = kwargs.merge(json_kwargs)
111
+ render(json: payload || '', **kwargs)
112
+ }
81
113
  end
82
114
  end
83
115
  end
@@ -0,0 +1,2 @@
1
+ class RESTFramework::Engine < ::Rails::Engine
2
+ end
@@ -25,10 +25,10 @@ module ActionDispatch::Routing
25
25
 
26
26
  # convert class name to class
27
27
  begin
28
- controller = mod.const_get(name, false)
28
+ controller = mod.const_get(name)
29
29
  rescue NameError
30
30
  if fallback_reverse_pluralization
31
- controller = mod.const_get(name_reverse, false)
31
+ controller = mod.const_get(name_reverse)
32
32
  else
33
33
  raise
34
34
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rest_framework
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregory N. Schmit
@@ -33,11 +33,18 @@ extra_rdoc_files: []
33
33
  files:
34
34
  - LICENSE
35
35
  - README.md
36
+ - app/assets/images/rest_framework_favicon.ico
37
+ - app/assets/javascripts/rest_framework.js
38
+ - app/assets/stylesheets/rest_framework.css
39
+ - app/views/layouts/rest_framework.html.erb
40
+ - app/views/rest_framework/_routes.html.erb
41
+ - app/views/rest_framework/default.html.erb
36
42
  - lib/rest_framework.rb
37
43
  - lib/rest_framework/VERSION_STAMP
38
44
  - lib/rest_framework/controllers.rb
39
45
  - lib/rest_framework/controllers/base.rb
40
46
  - lib/rest_framework/controllers/models.rb
47
+ - lib/rest_framework/engine.rb
41
48
  - lib/rest_framework/routers.rb
42
49
  - lib/rest_framework/version.rb
43
50
  homepage: https://github.com/gregschmit/rails-rest-framework
@@ -50,6 +57,7 @@ post_install_message:
50
57
  rdoc_options: []
51
58
  require_paths:
52
59
  - lib
60
+ - app
53
61
  required_ruby_version: !ruby/object:Gem::Requirement
54
62
  requirements:
55
63
  - - ">="