rest_area 1.3.0 → 1.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: 5c8f8f0f8e9b81b6b69d66a82d61d091c454bfcb
4
- data.tar.gz: 7c4da3d6e130d702badcf918bf13435b466e9d86
3
+ metadata.gz: e2a0fb366b1d63f0237015c0caf879b90d820d6a
4
+ data.tar.gz: 6075713f04ee8bed1eb86d998b0ecb6fdc83e9e6
5
5
  SHA512:
6
- metadata.gz: 6bbb1278401a35464d7272ac8be4d087c4213bcdf8b6fdda65bb4bef98055f7989542afda9bb979502bb930eb03ab4a69478e88d6f70fef1c5123309587c92ea
7
- data.tar.gz: 3827ad996b8a7495d41a84d45b009acede693ac6d80d5ece6bb1d26a3b7ca06a267460178899a7399fb9579c8d6f93fac87f6e07781d4250a7b7e95cb6616292
6
+ metadata.gz: 3bed81e4903dad18c62e3764437ffd55c6a3702661cab8e7796678228d837799e9ae16bc988f5b7cf8936cd9aa67b6d68c69b6ff2e02986fd95dc3fba1dc9497
7
+ data.tar.gz: 15bcbc3497b30f460ca5a175fc93d361f5a7723ebcdca287b77dc456c19f29c38c36f44d2eb5bb63d8e02a11347bf551a401ec3ae16bbc3b34dabef6b5e0ba0f
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(params[@root.to_sym])
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 = "1.3.0"
2
+ VERSION = "1.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: 1.3.0
4
+ version: 1.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-18 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.3
171
185
  signing_key:
172
186
  specification_version: 4
173
187
  summary: Adds a restfull controller and api to a Rails Application