rest_area 1.3.0 → 1.4.0

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: 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