hal_api-rails 0.2.1 → 0.2.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: d831a60c614c402a648f44afb3297217d3467614
4
- data.tar.gz: 4ab61c8d1411723268b4fd8c804de3506e712d8b
3
+ metadata.gz: 210b5c17cacf07522c44de62e2ac3aa6a10120df
4
+ data.tar.gz: 6e2b59bc821a8b40043e796637e9b350f8a34323
5
5
  SHA512:
6
- metadata.gz: d2165a6cf92e03aaae6e2f66124a13540392c4bcc8d68c5ce0bbdaab1b26b149b6b331a52d433d37f3c8f9923e435797b27f26d29f28697da70f144db14535d7
7
- data.tar.gz: abda4c8cadeb338abfbd892d76b77616eff964013696b41ba1f40bbaca8ba27bea3a2c51399909df8ab5433d37c874b9cd52320caedde2e8cdaff60f875d19ec
6
+ metadata.gz: 7e69e13451aca32729cb733846becf67d49fbd1c131c7d252e5af275517163a1e8211e08e8fff6a3983f39f85f5ee87c1dca22453b42542729ec9784982e84bb
7
+ data.tar.gz: a09e666bb380e0753d32ae9dff0dbfdbda31fc4557070fb8224f1dcc81fc41418150bd544905fdfefd931131a6551743902c0a87b682618e1cbe315e1a023e4c
@@ -30,4 +30,5 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency "bundler", "~> 1.10"
31
31
  spec.add_development_dependency "rake", "~> 10.0"
32
32
  spec.add_development_dependency "minitest"
33
+ spec.add_development_dependency "kaminari"
33
34
  end
@@ -12,7 +12,7 @@ module HalApi::Controller::Actions
12
12
  consume_with_content_type! res
13
13
  hal_authorize res
14
14
  res.save!
15
- respond_with root_resource(res), show_options
15
+ respond_with root_resource(res), create_options
16
16
  end
17
17
  end
18
18
 
@@ -42,6 +42,13 @@ module HalApi::Controller::Actions
42
42
  def index_options
43
43
  valid_params_for_action(:index).tap do |options|
44
44
  options[:_keys] = options.keys
45
+ options[:represent_with] = Api::PagedCollectionRepresenter
46
+ end
47
+ end
48
+
49
+ def create_options
50
+ show_options.tap do |options|
51
+ options[:location] = ''
45
52
  end
46
53
  end
47
54
 
@@ -17,7 +17,7 @@ module HalApi::Controller::Exceptions
17
17
  end
18
18
 
19
19
  def log_error(env, wrapper)
20
- logger = env['action_dispatch.logger'] || ActiveSupport::Logger.new($stderr)
20
+ logger = env['action_dispatch.logger'] || self.logger || ActiveSupport::Logger.new($stderr)
21
21
  return unless logger
22
22
 
23
23
  exception = wrapper.exception
@@ -14,10 +14,14 @@ module HalApi::Controller::Resources
14
14
 
15
15
  def show_resource
16
16
  resource
17
+ rescue ::ActiveRecord::RecordNotFound
18
+ raise HalApi::Errors::NotFound.new
17
19
  end
18
20
 
19
21
  def update_resource
20
22
  resource
23
+ rescue ::ActiveRecord::RecordNotFound
24
+ raise HalApi::Errors::NotFound.new
21
25
  end
22
26
 
23
27
  def create_resource
@@ -26,6 +30,8 @@ module HalApi::Controller::Resources
26
30
 
27
31
  def destroy_resource
28
32
  resource
33
+ rescue ::ActiveRecord::RecordNotFound
34
+ raise HalApi::Errors::NotFound.new
29
35
  end
30
36
 
31
37
  def resource
data/lib/hal_api/rails.rb CHANGED
@@ -6,10 +6,8 @@ module HalApi::Rails
6
6
 
7
7
  Mime::Type.register 'application/hal+json', :hal
8
8
 
9
- # roar fix for 4.1
10
- # https://github.com/apotonick/roar-rails/issues/65
11
- ::ActionController::Renderers.add :hal do |js, options|
12
- self.content_type ||= Mime::HAL
13
- js.to_json
9
+ ::ActionController::Renderers.add :hal do |obj, options|
10
+ self.content_type ||= Mime[:hal]
11
+ obj
14
12
  end
15
13
  end
@@ -1,5 +1,5 @@
1
1
  module HalApi
2
2
  module Rails
3
- VERSION = "0.2.1"
3
+ VERSION = "0.2.2"
4
4
  end
5
5
  end
@@ -1,6 +1,12 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  class HalApi::Representer < Roar::Decorator
4
+ include Roar::Hypermedia
5
+ include Roar::JSON::HAL
6
+ include Roar::JSON::HAL::Links
7
+ include Roar::JSON
8
+ require 'roar/rails/hal'
9
+
4
10
  require 'hal_api/representer/caches'
5
11
  require 'hal_api/representer/curies'
6
12
  require 'hal_api/representer/embeds'
@@ -8,7 +14,6 @@ class HalApi::Representer < Roar::Decorator
8
14
  require 'hal_api/representer/link_serialize'
9
15
  require 'hal_api/representer/uri_methods'
10
16
 
11
- include Roar::JSON::HAL
12
17
  include HalApi::Representer::FormatKeys
13
18
  include HalApi::Representer::UriMethods
14
19
  include HalApi::Representer::Curies
@@ -13,6 +13,7 @@ module HalApi::Representer::Caches
13
13
  super(options)
14
14
  end
15
15
 
16
+ # This isn't working, comment out this optimization
16
17
  # def create_representation_with(doc, options, format)
17
18
  # cache.fetch(cache_key(represented, options), cache_options) do
18
19
  # response = super(doc, options, format)
@@ -1,4 +1,6 @@
1
+ # encoding: utf-8
1
2
  require 'active_support/concern'
3
+ require 'hal_api/paged_collection'
2
4
 
3
5
  # expects underlying model to have filename, class, and id attributes
4
6
  module HalApi::Representer::Embeds
@@ -61,14 +63,12 @@ module HalApi::Representer::Embeds
61
63
  no_curies: true,
62
64
  item_class: options.delete(:item_class),
63
65
  url: options.delete(:url),
64
- item_decorator: options.delete(:item_decorator),
65
- per: options.delete(:per) || Kaminari.config.default_per_page
66
+ item_decorator: options.delete(:item_decorator)
66
67
  }
68
+ getter_per = options.delete(:per) || Kaminari.config.default_per_page
67
69
  options[:getter] ||= ->(*) do
68
- # set # per page based on default, option value integer, or special :all
69
- per = opts.delete(:per)
70
- per = self.send(name).count if per == :all
71
- PagedCollection.new(self.send(name).page(1).per(per), nil, opts.merge({parent: self}))
70
+ per = getter_per == :all ? send(name).count : getter_per
71
+ HalApi::PagedCollection.new(send(name).page(1).per(per), nil, opts.merge(parent: self))
72
72
  end
73
73
  options[:decorator] = Api::PagedCollectionRepresenter
74
74
  end
@@ -13,8 +13,8 @@ module HalApi::Representer::LinkSerialize
13
13
 
14
14
  def set_link_property(options)
15
15
  if options.is_a?(Hash) && (options.delete(:writeable) || options[:reader])
16
- name = options[:rel].to_s.split(':').last.split('/').last
17
- pname = "set_#{name}_uri"
16
+ name = options[:rel].to_s.split(':').last.split('/').last
17
+ pname = "set_#{name}_uri"
18
18
  reader = options.delete(:reader) || ->(doc, _args) do
19
19
  try("#{name}_id=", id_from_url(doc[pname])) if doc[pname]
20
20
  end
@@ -1,5 +1,4 @@
1
1
  # encoding: utf-8
2
-
3
2
  require 'active_support/concern'
4
3
 
5
4
  # expects underlying model to have filename, class, and id attributes
@@ -13,13 +12,13 @@ module HalApi::Representer::UriMethods
13
12
  link(:self) do
14
13
  {
15
14
  href: self_url(represented),
16
- profile: model_uri(represented)
15
+ profile: profile_url(represented)
17
16
  }
18
17
  end
19
18
  end
20
19
 
21
20
  def profile_link
22
- link(:profile) { model_uri(represented) }
21
+ link(:profile) { profile_url(represented) }
23
22
  end
24
23
 
25
24
  def alternate_link
@@ -57,7 +56,7 @@ module HalApi::Representer::UriMethods
57
56
  "http://#{self.class.profile_host}/model/#{joined_names(args)}"
58
57
  end
59
58
 
60
- alias_method :profil_url, :model_uri
59
+ alias_method :profile_url, :model_uri
61
60
 
62
61
  def joined_names(args)
63
62
  (Array(args.map { |arg| model_uri_part_to_string(arg) }) +
@@ -67,7 +66,11 @@ module HalApi::Representer::UriMethods
67
66
  def model_uri_suffix(args)
68
67
  represented = args.last
69
68
  klass = represented.try(:item_decorator) || self.class
70
- klass.name.deconstantize.underscore.dasherize.split('/')[1..-1] || []
69
+ find_model_name(klass).deconstantize.underscore.dasherize.split('/')[1..-1] || []
70
+ end
71
+
72
+ def find_model_name(klass)
73
+ klass.try(:name) || klass.ancestors.detect{|c| c.try(:name) }.name
71
74
  end
72
75
 
73
76
  def model_uri_part_to_string(part)
@@ -75,7 +78,7 @@ module HalApi::Representer::UriMethods
75
78
  part.to_s.dasherize
76
79
  else
77
80
  klass = part.is_a?(Class) ? part : (part.try(:item_class) || part.class)
78
- if klass.respond_to?(:base_class) && (klass.superclass != ActiveRecord::Base)
81
+ if klass.respond_to?(:base_class) && (klass.superclass != ActiveRecord::Base) && !klass.superclass.abstract_class
79
82
  base = klass.superclass.name.underscore.dasherize
80
83
  child = klass.name.underscore.gsub(/_#{base}$/, "").dasherize
81
84
  [base, child]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hal_api-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Rhoden
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-02-10 00:00:00.000000000 Z
12
+ date: 2016-04-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
@@ -151,6 +151,20 @@ dependencies:
151
151
  - - ">="
152
152
  - !ruby/object:Gem::Version
153
153
  version: '0'
154
+ - !ruby/object:Gem::Dependency
155
+ name: kaminari
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
154
168
  description: JSON HAL APIs on Rails in the style of PRX v4. Uses ROAR
155
169
  email:
156
170
  - carhoden@gmail.com