skinny_controllers 0.7.2 → 0.7.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ba15227b9adedda091b2ab60873770d72841113a
4
- data.tar.gz: 0785496d5b14b0b8b6d528206c6e53ea3afac60b
3
+ metadata.gz: a12f7c66cb3fb07308f8aa6ab246be35b70831e7
4
+ data.tar.gz: 6e6acbd5421a2da92d57c3db2ac144f2eae343b9
5
5
  SHA512:
6
- metadata.gz: e18a2022b30e4ce519424d2e4338466baf1dbc96510a99a84b741394ece1d7f999d1b27b666002fb8077f67aa9fc5e16f2118f11448a6a9b392e4a188c0c1b37
7
- data.tar.gz: 25a46fa59a9aabddb3f58c535ca02e17845dd01c0af00abecca0414854b8817c77e9a73eb27e36bce6b4e88a6f736137618a3cc9ba46a35b0288a55606597e0d
6
+ metadata.gz: cbd2f49c04417e59e35c426c537da234608b93ce4c58fa7609c6b1b786f9bf734d710eaacf7120207640325b9d3d61f66596cb1f4787760bb9c962a746b0df5d
7
+ data.tar.gz: 9ca0a73f862a34887ecd528efb4cf62ba6b5615e26a374b8462c9681003ca6b99018df0129367c185063cbe50c43f67869f102d0458de2294d563ad6df3da932
data/README.md CHANGED
@@ -9,9 +9,7 @@ An implementation of role-based policies and operations to help controllers lose
9
9
 
10
10
  The goal of this project is to help API apps be more slim, and separate logic as much as possible.
11
11
 
12
- This gem is inspired by [trailblazer](https://github.com/apotonick/trailblazer), following similar patterns, yet allowing the structure of the rails app to not be entirely overhauled.
13
-
14
- Please note that this is a work in progress, and that the defaults are subject to change. If you have an idea or suggestion for improved defaults, please submit an issue or pull request. :-)
12
+ If you have an idea or suggestion for improved defaults, please submit an issue or pull request. :-)
15
13
 
16
14
  # Installation
17
15
 
@@ -110,6 +108,16 @@ def host_params
110
108
  end
111
109
  ```
112
110
 
111
+ The parameters for directly calling an operation are as follows:
112
+
113
+ | # | Parameter | Default when directly calling an operation | Implicit default via `model` | Purpose |
114
+ |---|-------------------|--------------------------------------------|------------------------------|------------------------------------------|
115
+ | 0 | current_user | n/a | `current_user` | the user performing the action |
116
+ | 1 | controller_params | n/a | `params` | the full params hash from the controller |
117
+ | 2 | params_for_action | `controller_params` | `create_params`, `index_params`, etc | e.g.: requiring a foreign key when looking up index |
118
+ | 3 | action | `controller_params[:action]` | `action_name` | the name of the current action |
119
+ | 4 | model_key | `nil` | underscored model class name | the underscored model class name |
120
+
113
121
  ### For JSON-API
114
122
 
115
123
  Strong parameters must be used on create/update actions.
@@ -255,7 +263,18 @@ The following options are available:
255
263
  |`accessible_to_scope`| `accessible_to`| scope / class method on an object that the user might be able to access |
256
264
  |`action_map`| see [skinny_controllers.rb](./lib/skinny_controllers.rb#L61)| |
257
265
 
258
- ## TODO
259
266
 
260
- - Configurable Error Renderer
261
- - Default to JSON API format errors?
267
+ -------------------------------------------------------
268
+
269
+ ## How is this different from trailblazer?
270
+
271
+ This may not be horribly apparent, but here is a table overviewing some highlevel differences
272
+
273
+ | Feature | - | skinny_controllers | [trailblazer](https://github.com/apotonick/trailblazer) |
274
+ |--|--|--|--|
275
+ | Purpose |-| API - works very well with [ActiveModel::Serializers](https://github.com/rails-api/active_model_serializers)| General - additional featers for server-side rendered views |
276
+ | Added Layers |-| Operations, Policies | Operations, Policies, Forms |
277
+ | Validation |-| stay in models | moved to operations via contract block |
278
+ | Additional objects| -| none | contacts, representers, callbacks, cells |
279
+ | Rendering | -| done in the controller, and up to the dev to decide how that is done. `ActiveModel::Serializers` with JSON-API is highly recommended | representers provide a way to define serializers for json, xml, json-api, etc |
280
+ | App Structure | - | same as rails. `app/operations` and `app/policies` are added | encourages a new structure 'concepts', where cells, view templates, assets, operations, etc are all under `concepts/{model-name}` |
@@ -3,8 +3,10 @@ module SkinnyControllers
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
- cattr_accessor :model_class
7
- cattr_accessor :model_key
6
+ class << self
7
+ attr_accessor :model_class
8
+ attr_accessor :model_key
9
+ end
8
10
  end
9
11
 
10
12
  # TODO: what if we want multiple operations per action?
@@ -14,7 +16,7 @@ module SkinnyControllers
14
16
  @operation ||= operation_class.new(
15
17
  current_user,
16
18
  params, params_for_action,
17
- action_name, model_key)
19
+ action_name, self.class.model_key)
18
20
  end
19
21
 
20
22
  # Assumes the operation name from the controller name
@@ -22,7 +24,7 @@ module SkinnyControllers
22
24
  # @example SomeObjectsController => Operation::SomeObject::Action
23
25
  # @return [Class] the operation class for the model and verb
24
26
  def operation_class
25
- Lookup::Operation.from_controller(self.class.name, verb_for_action, model_class)
27
+ Lookup::Operation.from_controller(self.class.name, verb_for_action, self.class.model_class)
26
28
  end
27
29
 
28
30
  # abstraction for `operation.run`
@@ -49,12 +51,15 @@ module SkinnyControllers
49
51
  def params_for_action
50
52
  return {} if action_name == 'destroy'
51
53
 
54
+ key = self.class.model_key
55
+ # model_class should be a class
56
+ klass = self.class.model_class
57
+
52
58
  model_key =
53
- if self.model_key.present?
54
- self.model_key
55
- elsif model_class
56
- # model_class should be a class
57
- model_class.name.underscore
59
+ if key.present?
60
+ key
61
+ elsif klass
62
+ klass.name.underscore
58
63
  else
59
64
  Lookup::Controller.model_name(self.class.name).underscore
60
65
  end
@@ -43,8 +43,6 @@ module SkinnyControllers
43
43
  namespace || Namespace.create_namespace(desired_namespace)
44
44
  end
45
45
 
46
-
47
-
48
46
  # @example 'Object' => 'ObjectOperations'
49
47
  # @return [String] the operation namespace based on the model name
50
48
  def namespace_from_model(model_name)
@@ -20,11 +20,11 @@ module SkinnyControllers
20
20
  default_policy = SkinnyControllers::Policy::Default
21
21
  namespace_klass = Object
22
22
  # if we are namespaced, we need to get / create the namespace if it doesn't exist already
23
- if (name.include?('::'))
23
+ if name.include?('::')
24
24
  namespaces = name.split('::')
25
25
  namespace = namespaces[0..-2].join('::').presence
26
26
  namespace = namespace == name ? 'Object' : namespace
27
- if (namespace.presence && namespace != name )
27
+ if namespace.presence && namespace != name
28
28
  namespace_klass = Namespace.create_namespace(namespace)
29
29
  end
30
30
  end
@@ -1,3 +1,3 @@
1
1
  module SkinnyControllers
2
- VERSION = '0.7.2'
2
+ VERSION = '0.7.3'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: skinny_controllers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.7.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - L. Preston Sego III
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-01 00:00:00.000000000 Z
11
+ date: 2016-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -222,8 +222,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
222
222
  version: '0'
223
223
  requirements: []
224
224
  rubyforge_project:
225
- rubygems_version: 2.4.8
225
+ rubygems_version: 2.5.1
226
226
  signing_key:
227
227
  specification_version: 4
228
- summary: SkinnyControllers-0.7.2
228
+ summary: SkinnyControllers-0.7.3
229
229
  test_files: []