resourcify 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
  SHA1:
3
- metadata.gz: b7870d7f333dea432afeed996936a2cb731f3632
4
- data.tar.gz: 147f8c9638fc801a08ba8bb01fbadfdbbbab4401
3
+ metadata.gz: 35ae2a1538823e8d0c2c5b48bed067a61c7617e1
4
+ data.tar.gz: 41ef92c2d410713392e2c1654a1f0b345ae5609c
5
5
  SHA512:
6
- metadata.gz: 3dd27cdb2437bb6124174683b42b9a9cbc23e1dc777e5231c29df09ed354dd234114fc012f2eeb2624a635495ff73c6dd6b454c99233d8ad7a5b4a68f1c2d372
7
- data.tar.gz: e68314c16e70de51aee74180094bd41f36c4c7473329a90b920d7293d9ea50b6da234392e637012b9d16192b91b556bd880ce311651f5fcfc0126a7da7f1ede5
6
+ metadata.gz: 9f5d18268a7af685c16b8acdb6a527a12c3cb65aaf6781564cef44e807c5f516321c41591f1d7e0a5ba1a67745eb5ee363247b8739013fb899035adf0e473ee2
7
+ data.tar.gz: c882e3506a2f7920bdd1b7edd3bfeee72c0cf6358ed2293c893591a7f2bdf7651845e29775a538b9e716e4368bd1a8c77cfa06329add29636e4106fb3b1bc848
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2014 YOURNAME
1
+ Copyright 2014 Stephen Baidu
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md ADDED
@@ -0,0 +1,120 @@
1
+ # Resourcify
2
+
3
+ Resourcify is a rails gem that helps to speed up development by giving you json api controllers that inherit all restful actions. It also makes your models easier to filter by adding a "resourcify_filter" method. This gem behaves as an "acts_as" gem by using ActiveSupport Concerns.
4
+
5
+ #### Caveat
6
+ The resourcify gem currently depends on
7
+ * [ActiveModel::Serializers](https://github.com/rails-api/active_model_serializers)
8
+ * [Pundit](https://github.com/elabs/pundit)
9
+
10
+ ## Installation
11
+
12
+ ### Rails 4
13
+
14
+ Include the gem in your Gemfile:
15
+
16
+ ```ruby
17
+ gem 'resourcify'
18
+ ```
19
+
20
+ ## Usage
21
+
22
+ Applies to different parts of Rails:
23
+
24
+ * [Controllers](#controllers)
25
+ * [Models](#models)
26
+
27
+ ### Controllers
28
+
29
+ Usage with controllers is very easy. Just add "resourcify" to your controller and your controller will inherit all the RESTful actions with json response.
30
+
31
+ ```ruby
32
+ class PostsController < ApplicationController
33
+ # Include the resourcify module
34
+ resourcify
35
+
36
+ end
37
+ ```
38
+
39
+ You can check the [base.rb file](https://github.com/stephenbaidu/resourcify/blob/master/lib/resourcify/controller/base.rb) to see the private methods that have been made available.
40
+
41
+ #### Strong Parameters
42
+
43
+ By default, your controller has a permitted_params method for rails strong parameters like this. "_RC" is the resource class or model class.
44
+
45
+ ```ruby
46
+ # Only allow a trusted parameter "white list" through.
47
+ def permitted_params
48
+ if self.respond_to? "#{controller_name.singularize}_params", true
49
+ self.send("#{controller_name.singularize}_params")
50
+ else
51
+ param_key = _RC.name.split('::').last.singularize.underscore.to_sym
52
+ excluded_fields = ["id", "created_at", "updated_at"]
53
+ permitted_fields = (_RC.column_names - excluded_fields).map { |f| f.to_sym }
54
+ params.fetch(param_key, {}).permit([]).tap do |wl|
55
+ permitted_fields.each { |f| wl[f] = params[param_key][f] if params[param_key].key?(f) }
56
+ end
57
+ end
58
+ end
59
+ ```
60
+ You can override this by defining a custom method called "permitted_params" (or "post_params" for PostsController) in your controller.
61
+
62
+ ### Models
63
+
64
+ Asuming you have the following models (Post, User) in your application.
65
+
66
+ ```ruby
67
+ class Post < ActiveRecord::Base
68
+ attr_accessible :title
69
+
70
+ belongs_to :user
71
+ end
72
+
73
+ class User < ActiveRecord::Base
74
+ attr_accessible :first_name, last_name, age
75
+ end
76
+ ```
77
+
78
+ Then you can add "resourcify" like this
79
+
80
+ ```ruby
81
+ class Post < ActiveRecord::Base
82
+ # Include the resourcify module
83
+ resourcify
84
+
85
+ attr_accessible :title
86
+
87
+ belongs_to :user
88
+ end
89
+
90
+ class User < ActiveRecord::Base
91
+ # Include the resourcify module
92
+ resourcify
93
+
94
+ attr_accessible :first_name, last_name, age
95
+ end
96
+ ```
97
+
98
+ This allows you to filter your models like this
99
+ ```ruby
100
+ # Post with title equal to 'My First Post'
101
+ Post.resourcify_filter("title::eq::My First Post")
102
+
103
+ # Users with first_name like 'Jo'
104
+ User.resourcify_filter("first_name::like::Jo")
105
+
106
+ # The following parameters are allowed:
107
+ # [eq(=), ne(!=), like(LIKE), lt(<), gt(>), lte(<=), gte(>=), in(IN [items]), nin(NOT IN [items])]
108
+ User.resourcify_filter("first_name::like::Jo;;last_name::eq::Doe")
109
+ User.resourcify_filter("age::gt::37")
110
+ User.resourcify_filter("age::gte::21;;age::lte::35")
111
+
112
+ # Users with age in [25, 26, 52, 62]
113
+ User.resourcify_filter("age::in::25,26,52,62")
114
+ ```
115
+
116
+ Each model with "resourcify" has a "policy_class" method which returns "ApiPolicy" that can be used by a generic api controller when using Pundit. This was added since the gem is currently tied with Pundit but will later be made optional.
117
+
118
+ ## License
119
+
120
+ Resourcify is free software, and may be redistributed under the terms specified in the [MIT-LICENSE](MIT-LICENSE) file.
@@ -5,8 +5,10 @@ module Controller::Actions
5
5
 
6
6
  recs = policy_scope(_RC.all)
7
7
 
8
- # apply filter if query is present
9
- recs = recs.filter(params[:query]) if params[:query].present?
8
+ # apply resourcify_filter if present and query param is also present
9
+ if recs.respond_to? "resourcify_filter" and params[:query].present?
10
+ recs = recs.resourcify_filter(params[:query])
11
+ end
10
12
 
11
13
  recs_total = recs.count
12
14
 
@@ -13,18 +13,18 @@ module Controller
13
13
  data: { total: 0, rows: [] },
14
14
  error: { type: '', errors: {}, messages: [] }
15
15
  }
16
- raise Resourcify::UndefinedError unless _RC.respond_to? 'resourcified?'
16
+ # raise Resourcify::UndefinedError unless _RC.respond_to? 'resourcified?'
17
17
  end
18
18
 
19
- def resource_not_resourcified
20
- @response_data[:success] = false
21
- @response_data[:error] = {
22
- type: 'resource_not_resourcified',
23
- messages: [ 'Resourcify::UndefinedError. Resource route not defined' ]
24
- }
19
+ # def resource_not_resourcified
20
+ # @response_data[:success] = false
21
+ # @response_data[:error] = {
22
+ # type: 'resource_not_resourcified',
23
+ # messages: [ 'Resourcify::UndefinedError. Resource route not defined' ]
24
+ # }
25
25
 
26
- render json: @response_data
27
- end
26
+ # render json: @response_data
27
+ # end
28
28
 
29
29
  def record_not_found
30
30
  @response_data[:success] = false
@@ -1,13 +1,13 @@
1
1
  module Model
2
- module Filter
3
- def filter(filters)
2
+ module ResourcifyFilter
3
+ def resourcify_filter(filter_string)
4
4
  records = self
5
- simple_ops = { eq: '=', lt: '<', gt: '>', lteq: '<=', gteq: '>=' }
6
- filters = filters.split(';;').map { |q| q.split('::') }
7
- filters = filters.map { |q| {name: q[0], op: q[1], value: q[2], type: q[3]} }
8
- filters = filters.select { |f| self.column_names.include?(f[:name]) }
5
+ simple_ops = { eq: '=', lt: '<', gt: '>', lte: '<=', gte: '>=' }
6
+ filter_string = filter_string.split(';;').map { |q| q.split('::') }
7
+ filter_string = filter_string.map { |q| {name: q[0], op: q[1], value: q[2], type: q[3]} }
8
+ filter_string = filter_string.select { |f| self.column_names.include?(f[:name]) }
9
9
 
10
- filters.each do |f|
10
+ filter_string.each do |f|
11
11
  next if f[:value].blank?
12
12
 
13
13
  operand = f[:op].to_s.to_sym
@@ -21,9 +21,11 @@ module Model
21
21
  else
22
22
  records = records.where("#{f[:name]} LIKE ?", "%#{f[:value]}%")
23
23
  end
24
+ elsif operand == :ne
25
+ records = records.where.not("#{f[:name]} = ?", f[:value])
24
26
  elsif operand == :in
25
27
  records = records.where("#{f[:name]} IN (?)", f[:value].split(','))
26
- elsif operand == :notin
28
+ elsif operand == :nin
27
29
  records = records.where.not("#{f[:name]} IN (?)", f[:value].split(','))
28
30
  end
29
31
  end
@@ -1,4 +1,4 @@
1
- require "resourcify/model/filter"
1
+ require "resourcify/model/resourcify_filter"
2
2
  require "resourcify/model/policy_class"
3
3
  require "resourcify/controller/base"
4
4
  require "resourcify/controller/actions/index"
@@ -21,7 +21,7 @@ module Resourcify
21
21
 
22
22
  if self.ancestors.include?(ActiveRecord::Base) # models
23
23
  # Include filter and tag as filterable?
24
- send :extend, Model::Filter
24
+ send :extend, Model::ResourcifyFilter
25
25
  def filterable?() true end
26
26
 
27
27
  # Add policy_class method for pundit
@@ -43,7 +43,7 @@ module Resourcify
43
43
  # Set rescue_froms with methods located in base.rb
44
44
  rescue_from ActiveRecord::RecordNotFound, with: :record_not_found
45
45
  rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
46
- rescue_from UndefinedError, with: :resource_not_resourcified
46
+ # rescue_from UndefinedError, with: :resource_not_resourcified
47
47
 
48
48
  # Include base.rb with before_action filters & rescue_from methods
49
49
  send :include, Controller::Base
@@ -1,3 +1,3 @@
1
1
  module Resourcify
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resourcify
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
  - Stephen Baidu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-12 00:00:00.000000000 Z
11
+ date: 2014-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -46,7 +46,7 @@ extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
48
  - MIT-LICENSE
49
- - README.rdoc
49
+ - README.md
50
50
  - Rakefile
51
51
  - lib/resourcify.rb
52
52
  - lib/resourcify/controller/actions/create.rb
@@ -55,8 +55,8 @@ files:
55
55
  - lib/resourcify/controller/actions/show.rb
56
56
  - lib/resourcify/controller/actions/update.rb
57
57
  - lib/resourcify/controller/base.rb
58
- - lib/resourcify/model/filter.rb
59
58
  - lib/resourcify/model/policy_class.rb
59
+ - lib/resourcify/model/resourcify_filter.rb
60
60
  - lib/resourcify/resourcify.rb
61
61
  - lib/resourcify/version.rb
62
62
  - lib/tasks/resourcify_tasks.rake
data/README.rdoc DELETED
@@ -1,3 +0,0 @@
1
- = Resourcify
2
-
3
- This project rocks and uses MIT-LICENSE.