rest_area 2.3.0 → 2.4.0

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: 0274aeb1e1e15d33636be9f1feb5126170e4d46f
4
- data.tar.gz: e0717d08f0861bbfb70fb3fe21eb4da6fb2ba267
3
+ metadata.gz: 7f6547726c4969be02a1a29abb2e4f09738e2575
4
+ data.tar.gz: 2853fad441916762135dff21d82c449f64c96863
5
5
  SHA512:
6
- metadata.gz: ddbb98f4f8ada3c7548e3b8d56a7862f50fb320fe2921dd9673049391b32c1664e3e3d40f3b9fa60be7ea7f2c9772462c089447dccbb64761575dc0961503562
7
- data.tar.gz: d54160d2367c66ea6b852a49216ec90def9ab1aa6316318adb8e73b323e0fc5b0691f2b848e430e8f0ccf47d7662d1a3751c9523d4f7d515b9c208ddc501bebf
6
+ metadata.gz: abbc2c88bfabd44811fb13cb42f5767cb191296525f4fae5000e3e3af4fc4368baa30c30f940d45f39632152424fa53c8df32f56ae38b50b4248e6e423a5cb00
7
+ data.tar.gz: 73e42b278c59a87980d637e56beebee6201facf739fad4ed56cec4c95531ea0a0d2d2776864d02695cb29649c62702b2db74841bd775b3ae653a11a3c56850db
data/README.md CHANGED
@@ -32,6 +32,10 @@ If you are using Rails 4.1.x you should use the master branch and/or versions/ta
32
32
  resources :cereal, :thing do
33
33
  action :index, :show, :create, :update, :delete
34
34
  key :name
35
+ headers({
36
+ 'Cache-Control' => 'public, max-age=86400'
37
+ 'Expires' => ->{Date.today + 1}
38
+ })
35
39
  end
36
40
 
37
41
  resource :supermarket do
@@ -65,6 +69,8 @@ With in the `resource` / `resources` block,
65
69
  + Use `message` or `messages` to whitelist methods for a class. Methods much be defined at
66
70
  launch. Methods must respond with an object that responds to `.to_json`
67
71
 
72
+ + Use `headers` to specify the response headers hash, this will be merged with existing headers
73
+
68
74
  # Serializers
69
75
 
70
76
  But what if I want to customize the JSON that comes back? Simple this
@@ -8,7 +8,8 @@ module GetsKlass
8
8
  def get_klass
9
9
  rescue_uninitialized_constant do
10
10
  klass = params[:klass].classify.constantize
11
- @klass = RestArea.resources[klass.name.underscore.to_sym]
11
+ @resource = RestArea.resources[klass.name.underscore.to_sym]
12
+ @klass = @resource.klass
12
13
  end
13
14
  test_class(@klass)
14
15
 
@@ -5,11 +5,11 @@ module RestArea
5
5
 
6
6
  def get
7
7
  if @message_serializer
8
- render json: @klass.find(params[:id]).send(@message).all, each_serializer: @message_serializer, root:@message
8
+ render json: @resource.find(params[:id]).send(@message).all, each_serializer: @message_serializer, root:@message
9
9
  elsif @message_class
10
- render json: { @message => @klass.find(params[:id]).send(@message).all }.to_json(root:false)
11
- elsif @klass.can_send?(@message)
12
- render json: @klass.find(params[:id]).send(@message).to_json(root:false)
10
+ render json: { @message => @resource.find(params[:id]).send(@message).all }.to_json(root:false)
11
+ elsif @resource.can_send?(@message)
12
+ render json: @resource.find(params[:id]).send(@message).to_json(root:false)
13
13
  else
14
14
  raise ActionController::RoutingError.new("Resource Does Not Exist")
15
15
  end
@@ -6,6 +6,7 @@ module RestArea
6
6
  include GetsKlass
7
7
  before_filter :test_action
8
8
  before_filter :set_class_serializer
9
+ before_filter :add_headers
9
10
  before_filter :add_query_params, :only => [:index]
10
11
 
11
12
  # GET
@@ -18,7 +19,7 @@ module RestArea
18
19
  end
19
20
 
20
21
  def show
21
- render json: @klass.find(params[:id]), root: @root
22
+ render json: @resource.find(params[:id]), root: @root
22
23
  end
23
24
  alias_method :edit, :show
24
25
 
@@ -34,7 +35,7 @@ module RestArea
34
35
 
35
36
  # PUT
36
37
  def update
37
- object = @klass.find(params[:id])
38
+ object = @resource.find(params[:id])
38
39
  if object.update_attributes(klass_params)
39
40
  render json: object, root:@root
40
41
  else
@@ -44,7 +45,7 @@ module RestArea
44
45
 
45
46
  # DELETE
46
47
  def delete
47
- object = @klass.find(params[:id])
48
+ object = @resource.find(params[:id])
48
49
  if object.destroy
49
50
  render json: object, root:@root
50
51
  else
@@ -59,7 +60,7 @@ module RestArea
59
60
  end
60
61
 
61
62
  def test_action
62
- unless @klass.can_do?(params[:action].to_sym)
63
+ unless @resource.can_do?(params[:action].to_sym)
63
64
  raise ActionController::RoutingError.new("Resource Does Not Exist")
64
65
  end
65
66
  end
@@ -68,6 +69,10 @@ module RestArea
68
69
  params.require(@root.to_sym).permit!
69
70
  end
70
71
 
72
+ def add_headers
73
+ response.headers.merge! @resource.headers
74
+ end
75
+
71
76
  def add_query_params
72
77
  where_params = params.slice(*@klass.column_names)
73
78
  if where_params.any?
@@ -1,14 +1,22 @@
1
1
  ##
2
2
  # Used for configuring rest_area
3
3
  #
4
+ # Example:
5
+ #
4
6
  # RestArea.config do
5
7
  # resources :cereal, :thing do
6
8
  # action :index, :show, :create, :update, :delete
9
+ # messages :say_hello, :say_goodbye
10
+ # headers ({
11
+ # 'Cache-Control' => 'public, max-age=86400'
12
+ # 'Expires' => ->{Date.today + 1}
13
+ # })
7
14
  # end
8
15
  #
9
16
  # resource :supermarket do
10
17
  # read_only!
11
18
  # key :name
19
+ # message :ring_it_up
12
20
  # end
13
21
  # end
14
22
  #
@@ -1,12 +1,11 @@
1
1
  module RestArea
2
- class Resource < SimpleDelegator
2
+ class Resource
3
3
 
4
- attr_reader :actions
4
+ attr_reader :actions, :klass
5
5
 
6
- def initialize(klass)
6
+ def initialize(klss)
7
7
  @actions = []
8
- @klass = klass.to_s.classify.constantize
9
- super @klass
8
+ @klass = klss.to_s.classify.constantize
10
9
  end
11
10
 
12
11
  def action(*args)
@@ -26,14 +25,27 @@ module RestArea
26
25
 
27
26
  def message(msg)
28
27
  @messages ||= []
29
- if @klass.method_defined? msg
28
+ if klass.method_defined? msg
30
29
  @messages << msg
31
30
  @messages.uniq!
32
31
  else
33
- raise NoMethodError.new("#{@klass} will not respond to #{msg}")
32
+ raise NoMethodError.new("#{klass} will not respond to #{msg}")
34
33
  end
35
34
  end
36
35
 
36
+ def headers(hdrs = nil)
37
+ @headers ||= {}
38
+ if hdrs
39
+ @headers.merge! hdrs
40
+ else
41
+ @headers.inject({}){ |hash, (key, value)|
42
+ value = value.call if value.kind_of? Proc
43
+ hash.merge(key => value)
44
+ }
45
+ end
46
+ end
47
+ alias_method :headers=, :headers
48
+
37
49
  def read_only!
38
50
  @actions = [:index, :show]
39
51
  end
@@ -53,9 +65,9 @@ module RestArea
53
65
  # Wrapped Methods
54
66
  def find(*args)
55
67
  if key == :id
56
- super *args
68
+ klass.find(*args)
57
69
  else
58
- @klass.where(key => args[0]).first!
70
+ klass.where(key => args[0]).first!
59
71
  end
60
72
  end
61
73
 
@@ -1,3 +1,3 @@
1
1
  module RestArea
2
- VERSION = "2.3.0"
2
+ VERSION = "2.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rest_area
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Guest
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-17 00:00:00.000000000 Z
11
+ date: 2015-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0.7'
125
+ - !ruby/object:Gem::Dependency
126
+ name: timecop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 0.7.1
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 0.7.1
125
139
  description: RestArea adds a restfull controller and api to any Rails Application,
126
140
  simply add the gem and whitelist of available models
127
141
  email:
@@ -167,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
181
  version: '0'
168
182
  requirements: []
169
183
  rubyforge_project:
170
- rubygems_version: 2.2.2
184
+ rubygems_version: 2.4.2
171
185
  signing_key:
172
186
  specification_version: 4
173
187
  summary: Adds a restfull controller and api to a Rails Application