voyage 1.44.0.10 → 1.44.0.11

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: d2d85038fd4f02fe75a941bfbeb66bfb7c1ae2fc
4
- data.tar.gz: 00f7aa3152f0e7ec2bc036420d0f96a87926690b
3
+ metadata.gz: 020e914efdb3905ba6138a7f6254f4ca6b892875
4
+ data.tar.gz: 58588a11cad7bca57d36901847880b429ed67750
5
5
  SHA512:
6
- metadata.gz: 60ea2891a535d8abc0f216f5801f3cadbf37a97541b1fb5deaa2b9dae70d390d919e6fafe930b22145b9f6b6253881b72c4f85ee81aadf51920439187a413357
7
- data.tar.gz: 3309b6cefdefdc3696329becf3c23960fdd590f0ffd046f3122ca806ddf91db4e91c65f6c5c34752f61ab44da5f4250ab264494ab474c06636f21db52bc1c3e8
6
+ metadata.gz: f17b95dc22165a70acb1332c15735d3e3af887ce2e51da50fcabf79ef724168c0a9a938b64efbba9432c1e6aa7150f928265ae94c98e4c84c5600eb4e29c59b2
7
+ data.tar.gz: f4cff42782862f62f952b1e94727dea3457e62e376dbdd53ef0db9f6dd82ef60d87ae045d2a9d911e71ee4228b38fd7bfa0d513aeecb9315b31d80935e210db9
@@ -555,6 +555,26 @@ module Suspenders
555
555
  template '../templates/specs/support/request_spec_helper.rb', 'spec/support/request_spec_helper.rb', force: true
556
556
  end
557
557
 
558
+ def add_api_foundation
559
+ # Create /app/api/base_api_controller.rb
560
+ template '../templates/api_base_controller.rb', 'app/controllers/api/base_api_controller.rb', force: true
561
+
562
+ # Create /app/api/v1/users_controller.rb
563
+ template '../templates/api_users_controller.rb', 'app/controllers/api/v1/users_controller.rb', force: true
564
+
565
+ # Update routes to include namespaced API
566
+ inject_into_file 'config/routes.rb', before: /^end/ do <<-RUBY.gsub(/^ {6}/, '')
567
+
568
+ # API-specific routes
569
+ namespace 'api' do
570
+ namespace 'v1' do
571
+ resources :users, except: [:new, :edit]
572
+ end
573
+ end
574
+ RUBY
575
+ end
576
+ end
577
+
558
578
  def customize_application_js
559
579
  template '../templates/application.js', 'app/assets/javascripts/application.js', force: true
560
580
 
@@ -48,6 +48,7 @@ module Suspenders
48
48
 
49
49
 
50
50
  # Do these last
51
+ invoke :add_api_foundation
51
52
  invoke :rake_db_setup
52
53
  invoke :configure_rvm_prepend_bin_to_path
53
54
  invoke :run_rubocop_auto_correct
@@ -151,6 +152,10 @@ module Suspenders
151
152
  build :spin_up_webpacker
152
153
  end
153
154
 
155
+ def add_api_foundation
156
+ build :add_api_foundation
157
+ end
158
+
154
159
  def rake_db_setup
155
160
  build :rake_db_setup
156
161
  end
@@ -0,0 +1,38 @@
1
+ module Api
2
+ class BaseApiController < ApplicationController
3
+ # Disable CSRF protection for API calls
4
+ protect_from_forgery with: :null_session
5
+
6
+ # Disable cookie usage
7
+ before_action :destroy_session
8
+
9
+ # Handle objects that aren't found
10
+ rescue_from ActiveRecord::RecordNotFound, with: :not_found
11
+
12
+ def respond_with_errors(object)
13
+ serialized_errors = object.errors.messages.map do |field, errors|
14
+ errors.map do |error_message|
15
+ {
16
+ status: 422,
17
+ source: { pointer: "/data/attributes/#{field}" },
18
+ detail: error_message,
19
+ }
20
+ end
21
+ end.flatten
22
+
23
+ render json: { errors: serialized_errors },
24
+ status: :unprocessable_entity
25
+ end
26
+
27
+ private
28
+
29
+ def destroy_session
30
+ request.session_options[:skip] = true
31
+ end
32
+
33
+ def not_found
34
+ render json: { errors: 'Not found' },
35
+ status: 404
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,56 @@
1
+ module Api
2
+ module V1
3
+ class UsersController < BaseApiController
4
+ authorize_resource
5
+ respond_to :json
6
+
7
+ def index
8
+ respond_with(User.all)
9
+ end
10
+
11
+ def show
12
+ @user = User.find(params[:id])
13
+ respond_with(@user)
14
+ end
15
+
16
+ def create
17
+ @user = User.new(user_params)
18
+
19
+ if @user.save
20
+ respond_with @user do |format|
21
+ format.json { render json: @user, status: :created }
22
+ end
23
+ else
24
+ respond_with_errors(@user)
25
+ end
26
+ end
27
+
28
+ def update
29
+ @user = User.find(params[:id])
30
+
31
+ if @user.update_attributes(user_params)
32
+ respond_with(@user)
33
+ else
34
+ respond_with_errors(@user)
35
+ end
36
+ end
37
+
38
+ def destroy
39
+ user = User.find(params[:id])
40
+
41
+ if user.destroy
42
+ render json: {}, status: 204
43
+ else
44
+ render json: {}, status: 500
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ def user_params
51
+ params.require(:user).permit(:first_name, :last_name, :email,
52
+ :password, :password_confirmation)
53
+ end
54
+ end
55
+ end
56
+ end
@@ -5,5 +5,5 @@ module Voyage
5
5
  .read("#{File.dirname(__FILE__)}/../../.ruby-version")
6
6
  .strip
7
7
  .freeze
8
- VERSION = '1.44.0.10'.freeze
8
+ VERSION = '1.44.0.11'.freeze
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: voyage
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.44.0.10
4
+ version: 1.44.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - thoughtbot, headway
@@ -114,6 +114,8 @@ files:
114
114
  - lib/voyage/templates/analytics_alias.html.erb.erb
115
115
  - lib/voyage/templates/analytics_identify.html.erb.erb
116
116
  - lib/voyage/templates/analytics_ruby_initializer.rb
117
+ - lib/voyage/templates/api_base_controller.rb
118
+ - lib/voyage/templates/api_users_controller.rb
117
119
  - lib/voyage/templates/application.js
118
120
  - lib/voyage/templates/application_mailer.rb.erb
119
121
  - lib/voyage/templates/auto_annotate_models.rake