introspective_grape 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/.travis.yml +16 -3
  4. data/CHANGELOG.md +16 -8
  5. data/README.md +6 -6
  6. data/gemfiles/2.0.0-Gemfile +1 -1
  7. data/gemfiles/Gemfile.rails.3.2.22 +1 -1
  8. data/gemfiles/Gemfile.rails.4.1.13 +1 -1
  9. data/gemfiles/Gemfile.rails.4.2.7.1 +1 -1
  10. data/gemfiles/Gemfile.rails.4.2.7.1.new.swagger +1 -1
  11. data/gemfiles/Gemfile.rails.4.2.8 +1 -1
  12. data/gemfiles/Gemfile.rails.5.0.1 +1 -1
  13. data/gemfiles/Gemfile.rails.master +1 -1
  14. data/introspective_grape.gemspec +2 -2
  15. data/lib/introspective_grape/api.rb +16 -16
  16. data/lib/introspective_grape/camel_snake.rb +5 -4
  17. data/lib/introspective_grape/filters.rb +2 -2
  18. data/lib/introspective_grape/formatter/camel_json.rb +12 -9
  19. data/lib/introspective_grape/helpers.rb +3 -3
  20. data/lib/introspective_grape/snake_params.rb +2 -1
  21. data/lib/introspective_grape/traversal.rb +5 -5
  22. data/lib/introspective_grape/validators.rb +1 -1
  23. data/lib/introspective_grape/version.rb +1 -1
  24. data/spec/dummy/app/api/dummy/chat_api.rb +4 -4
  25. data/spec/dummy/app/api/dummy/company_api.rb +1 -1
  26. data/spec/dummy/app/api/dummy/location_api.rb +2 -2
  27. data/spec/dummy/app/api/dummy/project_api.rb +1 -1
  28. data/spec/dummy/app/api/dummy/sessions.rb +3 -3
  29. data/spec/dummy/app/api/dummy/user_api.rb +1 -1
  30. data/spec/dummy/app/api/dummy_api.rb +0 -3
  31. data/spec/dummy/app/api/error_handlers.rb +2 -2
  32. data/spec/dummy/app/models/admin_user.rb +1 -1
  33. data/spec/dummy/app/models/chat.rb +1 -1
  34. data/spec/dummy/app/models/chat_message.rb +1 -1
  35. data/spec/dummy/app/models/chat_user.rb +1 -1
  36. data/spec/dummy/app/models/company.rb +1 -1
  37. data/spec/dummy/app/models/image.rb +1 -1
  38. data/spec/dummy/app/models/project.rb +1 -1
  39. data/spec/dummy/app/models/user.rb +1 -1
  40. data/spec/dummy/app/models/user/chatter.rb +4 -4
  41. data/spec/dummy/app/models/user_location.rb +4 -4
  42. data/spec/dummy/app/policies/location_policy.rb +1 -1
  43. data/spec/dummy/app/policies/project_policy.rb +5 -5
  44. data/spec/dummy/app/policies/role_policy.rb +2 -2
  45. data/spec/dummy/app/policies/user_policy.rb +1 -1
  46. data/spec/dummy/db/migrate/20150414213154_add_user_authentication_token.rb +1 -1
  47. data/spec/dummy/db/migrate/20150601212924_create_location_beacons.rb +1 -1
  48. data/spec/dummy/db/migrate/20150616205336_add_role_user_constraint.rb +1 -1
  49. data/spec/dummy/db/migrate/20150727214950_add_confirmable_to_devise.rb +1 -1
  50. data/spec/dummy/db/migrate/20150820190524_add_user_names.rb +2 -2
  51. data/spec/models/project_spec.rb +3 -3
  52. data/spec/models/role_spec.rb +6 -6
  53. data/spec/models/team_spec.rb +2 -2
  54. data/spec/models/team_user_spec.rb +4 -4
  55. data/spec/models/user_location_spec.rb +1 -1
  56. data/spec/models/user_project_job_spec.rb +2 -2
  57. data/spec/models/user_spec.rb +10 -10
  58. data/spec/requests/chat_api_spec.rb +7 -7
  59. data/spec/requests/company_api_spec.rb +4 -4
  60. data/spec/requests/location_api_spec.rb +10 -10
  61. data/spec/requests/project_api_spec.rb +18 -18
  62. data/spec/requests/role_api_spec.rb +1 -1
  63. data/spec/requests/sessions_api_spec.rb +3 -3
  64. data/spec/requests/swagger_spec.rb +1 -1
  65. data/spec/requests/user_api_spec.rb +13 -13
  66. data/spec/support/blueprints.rb +10 -10
  67. data/spec/support/location_helper.rb +6 -6
  68. data/spec/support/request_helpers.rb +4 -3
  69. metadata +6 -10
  70. data/lib/.DS_Store +0 -0
  71. data/spec/.DS_Store +0 -0
  72. data/spec/dummy/app/api/.DS_Store +0 -0
@@ -3,10 +3,10 @@ require 'rails_helper'
3
3
  RSpec.describe Role, type: :model do
4
4
  before :all do
5
5
  end
6
- let(:user) { User.make! }
7
- let(:company) { Company.make! }
8
- let(:project) { Project.make! }
9
-
6
+ let(:user) { User.make! }
7
+ let(:company) { Company.make! }
8
+ let(:project) { Project.make! }
9
+
10
10
  it "allows user assignment to company admin" do
11
11
  ur = Role.create(user:user, ownable: company)
12
12
  ur.valid?.should be_truthy
@@ -17,7 +17,7 @@ RSpec.describe Role, type: :model do
17
17
  ur.valid?.should be_falsey
18
18
  end
19
19
 
20
- context "User helper methods" do
20
+ context "User helper methods" do
21
21
  it "should register a user as a super user" do
22
22
  user.superuser?.should == false
23
23
  user.superuser = true
@@ -31,7 +31,7 @@ RSpec.describe Role, type: :model do
31
31
  user.admin?(company).should == true
32
32
  end
33
33
 
34
- it "should register a project administrator" do
34
+ it "should register a project administrator" do
35
35
  user.admin?(project).should == false
36
36
  Role.create!(user:user, ownable: project)
37
37
  user.reload
@@ -6,11 +6,11 @@ RSpec.describe Team, type: :model do
6
6
  Team.make.valid?.should == true
7
7
  end
8
8
 
9
- it "should save a valid instance" do
9
+ it "should save a valid instance" do
10
10
  Team.make!.should == Team.last
11
11
  end
12
12
 
13
- it "should be created by a user" do
13
+ it "should be created by a user" do
14
14
  Team.make.creator.kind_of?(User).should == true
15
15
  end
16
16
 
@@ -1,17 +1,17 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  RSpec.describe TeamUser, type: :model do
4
-
4
+
5
5
  it "should make a valid instance" do
6
6
  TeamUser.make.valid?.should == true
7
7
  end
8
8
 
9
- it "should save a valid instance" do
9
+ it "should save a valid instance" do
10
10
  TeamUser.make!.should == TeamUser.last
11
11
  end
12
12
 
13
- it "should validate the user belongs to the project" do
14
- t = TeamUser.make(team: Team.make!, user: User.make!)
13
+ it "should validate the user belongs to the project" do
14
+ t = TeamUser.make(team: Team.make!, user: User.make!)
15
15
  t.valid?.should == false
16
16
  t.errors.messages[:user].first.should =~ /is not on the \w+ project/
17
17
  end
@@ -8,7 +8,7 @@ RSpec.describe UserLocation, type: :model do
8
8
 
9
9
  let(:user) { User.make! }
10
10
 
11
- it "validates the detectable type" do
11
+ it "validates the detectable type" do
12
12
  ul = UserLocation.new(user: user, location: Location.last, detectable: Location.last, coords: rand_coords)
13
13
  ul.valid?.should == false
14
14
  ul.errors[:detectable_type].should == ["is not included in the list"]
@@ -14,7 +14,7 @@ RSpec.describe UserProjectJob, type: :model do
14
14
  UserProjectJob.make.title.should_not == nil
15
15
  end
16
16
 
17
- it "should scope job options by project" do
17
+ it "should scope job options by project" do
18
18
  ProjectJob.make!
19
19
  ProjectJob.make!
20
20
 
@@ -22,7 +22,7 @@ RSpec.describe UserProjectJob, type: :model do
22
22
  j = Job.make!
23
23
  p.jobs.push j
24
24
  p.save
25
- UserProjectJob.make!(project: p, job: j)
25
+ UserProjectJob.make!(project: p, job: j)
26
26
  UserProjectJob.options_for_job(p).should == p.jobs
27
27
  end
28
28
 
@@ -2,24 +2,24 @@ require 'rails_helper'
2
2
  include ActionDispatch::TestProcess # -> fixture_file_upload
3
3
 
4
4
  RSpec.describe User, type: :model do
5
- context 'User::Chatter' do
5
+ context 'User::Chatter' do
6
6
 
7
7
  def user(email)
8
- User.find_by_email(email) || User.make!(email: email)
8
+ User.find_by_email(email) || User.make!(email: email)
9
9
  end
10
10
 
11
- it "uploads an avatar to AWS" do
11
+ it "uploads an avatar to AWS" do
12
12
  u = User.make
13
13
  u.avatar = Image.new(file: fixture_file_upload( Rails.root+'../fixtures/images/exif.jpeg'))
14
14
  u.save
15
15
  u.avatar.file_processing?.should == false
16
-
16
+
17
17
  #u.avatar_url.should =~ /medium\/exif.jpeg/
18
18
  #u.avatar_url(:original).should =~ /original\/exif.jpeg/
19
19
  #u.avatar_url(:thumb).should =~ /thumb\/exif.jpeg/
20
20
  end
21
21
 
22
- context "chatting" do
22
+ context "chatting" do
23
23
  let(:sender) { user('sender@springshot.com') }
24
24
  let(:target) { user('target1@springshot.com') }
25
25
  let(:target2) { user('target2@springshot.com') }
@@ -28,20 +28,20 @@ RSpec.describe User, type: :model do
28
28
  let(:discussion) {
29
29
  c = sender.chat([target,target2], 'Hey guys')
30
30
  target2.reply( c, "What's up?")
31
- c
31
+ c
32
32
  }
33
33
 
34
34
 
35
- before :all do
35
+ before :all do
36
36
  Chat.destroy_all
37
37
  end
38
38
 
39
- it "chatting a user returns a chat" do
39
+ it "chatting a user returns a chat" do
40
40
  c = sender.chat(target, 'a private message')
41
41
  c.kind_of?(Chat).should be_truthy
42
42
  end
43
43
 
44
- it "a user sees that she has new messages in a discussion" do
44
+ it "a user sees that she has new messages in a discussion" do
45
45
  discussion.save! # invoke create hooks on ChatMessage for ChatMessageUser
46
46
  sender.new_messages?(discussion)[discussion.id].should == 1
47
47
  target2.new_messages?(discussion)[discussion.id].should == 0
@@ -57,7 +57,7 @@ RSpec.describe User, type: :model do
57
57
  target2.new_messages?[chat2.id].should == 2
58
58
  end
59
59
 
60
- it "a user sees her new messages" do
60
+ it "a user sees her new messages" do
61
61
  discussion.save!
62
62
 
63
63
  sender.read_messages.size.should == 1
@@ -1,7 +1,7 @@
1
1
  require "rails_helper"
2
2
  describe Dummy::ChatAPI, type: :request do
3
3
 
4
- before :all do
4
+ before :all do
5
5
  User.destroy_all
6
6
  @without_authentication = true
7
7
 
@@ -23,7 +23,7 @@ describe Dummy::ChatAPI, type: :request do
23
23
  context "while current_user is the current user" do
24
24
 
25
25
  before :each do
26
- @chat.reload
26
+ @chat.reload
27
27
  Grape::Endpoint.before_each do |endpoint|
28
28
  allow(endpoint).to receive(:current_user) { @current_user }
29
29
  end
@@ -58,7 +58,7 @@ describe Dummy::ChatAPI, type: :request do
58
58
  end
59
59
  end
60
60
 
61
- context :messages do
61
+ context :messages do
62
62
 
63
63
  it "should get no new chat messages if user was last to reply" do
64
64
  get "/api/v1/chats/messages", id: @chat.id, new: true
@@ -73,7 +73,7 @@ describe Dummy::ChatAPI, type: :request do
73
73
  json.size.should == 1
74
74
  end
75
75
 
76
- it "should mark all new messages from all chats as read if mark_as_read is true" do
76
+ it "should mark all new messages from all chats as read if mark_as_read is true" do
77
77
  @sender.reply(@chat, 'A new response.')
78
78
  @current_user.new_messages?.keys.size.should == 2
79
79
  get "/api/v1/chats/messages", new: true, mark_as_read: true
@@ -84,7 +84,7 @@ describe Dummy::ChatAPI, type: :request do
84
84
  end
85
85
 
86
86
 
87
- context :users do
87
+ context :users do
88
88
  it "should list the users in a chat" do
89
89
  get "/api/v1/chats/users", id: @chat.id
90
90
  response.should be_success
@@ -126,7 +126,7 @@ describe Dummy::ChatAPI, type: :request do
126
126
 
127
127
  it "should raise an error when an outsider tries to add themselves to a chat" do
128
128
  post "/api/v1/chats/users", id: @lurk.id, user_ids: @current_user.id
129
- response.status.should == 400
129
+ response.status.should == 400
130
130
  json['error'].should == 'Only current chat participants can add users.'
131
131
  @lurk.reload
132
132
  @lurk.active_users.include?(@current_user).should == false
@@ -160,7 +160,7 @@ describe Dummy::ChatAPI, type: :request do
160
160
  @chat.active_users.include?(@current_user).should == false
161
161
  end
162
162
 
163
- it "should only allow chat participants to reply" do
163
+ it "should only allow chat participants to reply" do
164
164
  @current_user.leave_chat(@chat)
165
165
  @current_user.reload
166
166
  put "/api/v1/chats/#{@chat.id}", message: "I'm an interloper"
@@ -55,12 +55,12 @@ describe Dummy::CompanyAPI, type: :request do
55
55
 
56
56
 
57
57
  it "should create a company" do
58
- post "/api/v1/companies", { name: 'Test 123', short_name: 'T123' }
58
+ post "/api/v1/companies", { name: 'Test 123', short_name: 'T123' }
59
59
  response.should be_success
60
60
  json['name'].should == "Test 123"
61
61
  json['short_name'].should == "T123"
62
62
  end
63
-
63
+
64
64
  it "should validate a new company" do
65
65
  post "/api/v1/companies", { name: 'a'*257, short_name: 'a'*11 }
66
66
  response.code.should == "400"
@@ -70,7 +70,7 @@ describe Dummy::CompanyAPI, type: :request do
70
70
 
71
71
  it "should update the company" do
72
72
  new_name = 'New Test 1234'
73
- put "/api/v1/companies/#{company.id}", { name: new_name }
73
+ put "/api/v1/companies/#{company.id}", { name: new_name }
74
74
  response.should be_success
75
75
  company.reload
76
76
  company.name.should == new_name
@@ -88,7 +88,7 @@ describe Dummy::CompanyAPI, type: :request do
88
88
 
89
89
  it "should validate json parameters" do
90
90
  put "/api/v1/companies/#{company.id}", { gizmos: "garbage" }
91
- json["error"].should eq "gizmos must be valid JSON!"
91
+ json["error"].should eq "gizmos must be valid JSON!"
92
92
  end
93
93
 
94
94
  it "should validate json array parameters" do
@@ -7,7 +7,7 @@ describe Dummy::LocationAPI, type: :request do
7
7
 
8
8
  before :all do
9
9
  create_test_airport
10
- Location.make!(name: "TEST2", kind: "airport")
10
+ Location.make!(name: "TEST2", kind: "airport")
11
11
  end
12
12
 
13
13
 
@@ -32,7 +32,7 @@ describe Dummy::LocationAPI, type: :request do
32
32
  end
33
33
 
34
34
 
35
- it "should generate basic filters on the whitelisted model attributes" do
35
+ it "should generate basic filters on the whitelisted model attributes" do
36
36
  get '/api/v1/locations', { name: "TEST" }
37
37
  response.should be_success
38
38
  json.length.should eq 1
@@ -40,7 +40,7 @@ describe Dummy::LocationAPI, type: :request do
40
40
  end
41
41
 
42
42
  it "should parse more advanced JSON filters" do
43
- get '/api/v1/locations', filter: "{\"child_locations_locations\":{\"name\":\"Terminal A\"}}"
43
+ get '/api/v1/locations', filter: "{\"child_locations_locations\":{\"name\":\"Terminal A\"}}"
44
44
  response.should be_success
45
45
  json.length.should eq 1
46
46
  json.first['child_locations'].length.should eq 1
@@ -59,14 +59,14 @@ describe Dummy::LocationAPI, type: :request do
59
59
  end
60
60
 
61
61
  it "should create a location" do
62
- post "/api/v1/locations", { name: 'Test 123', kind: "terminal" }
62
+ post "/api/v1/locations", { name: 'Test 123', kind: "terminal" }
63
63
  response.should be_success
64
64
  json['name'].should == "Test 123"
65
65
  end
66
-
66
+
67
67
  it "should create a location with a beacon" do
68
68
  b = LocationBeacon.make(company: Company.last)
69
- post "/api/v1/locations", { name: 'Test 123', kind: "gate", beacons_attributes: [ b.attributes ] }
69
+ post "/api/v1/locations", { name: 'Test 123', kind: "gate", beacons_attributes: [ b.attributes ] }
70
70
  response.should be_success
71
71
  json['name'].should == "Test 123"
72
72
  l = Location.find(json['id'])
@@ -75,10 +75,10 @@ describe Dummy::LocationAPI, type: :request do
75
75
  created.minor.should == b.minor
76
76
  created.major.should == b.major
77
77
  end
78
-
78
+
79
79
  it "should create a location with gps coordinates" do
80
80
  gps = LocationGps.make
81
- post "/api/v1/locations", { name: 'Test 123', kind: "airport", gps_attributes: gps.attributes }
81
+ post "/api/v1/locations", { name: 'Test 123', kind: "airport", gps_attributes: gps.attributes }
82
82
  response.should be_success
83
83
  json['name'].should == "Test 123"
84
84
  l = Location.find(json['id'])
@@ -88,7 +88,7 @@ describe Dummy::LocationAPI, type: :request do
88
88
  created.lng.round(10).should == gps.lng.round(10)
89
89
  created.alt.should == gps.alt
90
90
  end
91
-
91
+
92
92
  it "should validate a new location" do
93
93
  post "/api/v1/locations", { name: 'test' }
94
94
  response.code.should == "400"
@@ -97,7 +97,7 @@ describe Dummy::LocationAPI, type: :request do
97
97
 
98
98
  it "should update the location" do
99
99
  new_name = 'New Test 1234'
100
- put "/api/v1/locations/#{location.id}", { name: new_name }
100
+ put "/api/v1/locations/#{location.id}", { name: new_name }
101
101
  response.should be_success
102
102
  location.reload
103
103
  location.name.should == new_name
@@ -14,9 +14,9 @@ describe Dummy::ProjectAPI, type: :request do
14
14
 
15
15
  cm.admin_companies.push c
16
16
  pm.admin_projects.push p
17
-
17
+
18
18
  cm.save!
19
- pm.save!
19
+ pm.save!
20
20
  end
21
21
 
22
22
  let(:company) { Company.find_by_name("Sprockets") }
@@ -41,7 +41,7 @@ describe Dummy::ProjectAPI, type: :request do
41
41
  response.code.should == "404"
42
42
  end
43
43
 
44
- context "edit a project team" do
44
+ context "edit a project team" do
45
45
 
46
46
  before(:each) do
47
47
  @team = Team.make!(project: project)
@@ -51,8 +51,8 @@ describe Dummy::ProjectAPI, type: :request do
51
51
  UserProjectJob.make!(project: project, job: project.jobs.first, user: @u2)
52
52
  end
53
53
 
54
- context "via nested attributes" do
55
- it "should create a team with users" do
54
+ context "via nested attributes" do
55
+ it "should create a team with users" do
56
56
  p = {
57
57
  name: 'New Team', team_users_attributes: [{ user_id: @u1.id }, { user_id: @u2.id }]
58
58
  }
@@ -62,9 +62,9 @@ describe Dummy::ProjectAPI, type: :request do
62
62
  Team.last.users.to_a.should == [@u1,@u2]
63
63
  end
64
64
 
65
- it "should add a team member" do
65
+ it "should add a team member" do
66
66
  p = { team_users_attributes: [
67
- { user_id: @u1.id }, { user_id: @u2.id }
67
+ { user_id: @u1.id }, { user_id: @u2.id }
68
68
  ] }
69
69
  put "/api/v1/projects/#{project.id}/teams/#{@team.id}", p
70
70
  response.should be_success
@@ -72,11 +72,11 @@ describe Dummy::ProjectAPI, type: :request do
72
72
  Team.last.users.to_a.should == [@u1,@u2]
73
73
  end
74
74
 
75
- it "should delete a team member" do
75
+ it "should delete a team member" do
76
76
  @team.users << [@u1,@u2]
77
77
  @team.save!
78
78
  p = { team_users_attributes: [
79
- { id: @team.team_users.where(user_id:@u1.id).first.id, _destroy: 1 }
79
+ { id: @team.team_users.where(user_id:@u1.id).first.id, _destroy: 1 }
80
80
  ] }
81
81
  put "/api/v1/projects/#{project.id}/teams/#{@team.id}", p
82
82
  response.should be_success
@@ -84,15 +84,15 @@ describe Dummy::ProjectAPI, type: :request do
84
84
  end
85
85
  end
86
86
 
87
- context "edit a project team via nested routes" do
88
- it "should add a team member" do
87
+ context "edit a project team via nested routes" do
88
+ it "should add a team member" do
89
89
  p = { user_id: @u1.id }
90
90
  post "/api/v1/projects/#{project.id}/teams/#{@team.id}/team_users", p
91
91
  response.should be_success
92
92
  Team.last.users.to_a.should == [@u1]
93
93
  end
94
94
 
95
- it "should delete a team member" do
95
+ it "should delete a team member" do
96
96
  @team.users << [@u1,@u2]
97
97
  @team.save!
98
98
  id = @team.team_users.where(user_id:@u1.id).first.id
@@ -105,14 +105,14 @@ describe Dummy::ProjectAPI, type: :request do
105
105
  end
106
106
 
107
107
  context "As a company admin" do
108
- before :all do
108
+ before :all do
109
109
  @without_authentication = true
110
110
  end
111
111
 
112
112
  before :each do
113
113
  Grape::Endpoint.before_each do |endpoint|
114
114
  allow(endpoint).to receive(:current_user) do
115
- User.find_by_email("company.admin@springshot.com")
115
+ User.find_by_email("company.admin@springshot.com")
116
116
  end
117
117
  end
118
118
  end
@@ -120,7 +120,7 @@ describe Dummy::ProjectAPI, type: :request do
120
120
  it "should return a list of all the company's projects" do
121
121
  get '/api/v1/projects', offset: 0
122
122
  response.should be_success
123
- json.length.should == 2
123
+ json.length.should == 2
124
124
  json.map{|c| c['name']}.include?("Manufacture Sprockets").should == true
125
125
  json.map{|c| c['name']}.include?("Disassemble Sprockets").should == true
126
126
  end
@@ -128,13 +128,13 @@ describe Dummy::ProjectAPI, type: :request do
128
128
  end
129
129
 
130
130
  context "As a project admin" do
131
- before :all do
131
+ before :all do
132
132
  @without_authentication = true
133
133
  end
134
134
  before :each do
135
135
  Grape::Endpoint.before_each do |endpoint|
136
136
  allow(endpoint).to receive(:current_user) do
137
- User.find_by_email("project.admin@springshot.com")
137
+ User.find_by_email("project.admin@springshot.com")
138
138
  end
139
139
  end
140
140
  end
@@ -142,7 +142,7 @@ describe Dummy::ProjectAPI, type: :request do
142
142
  it "should return a list of all the project admin's projects" do
143
143
  get '/api/v1/projects', offset: 0
144
144
  response.should be_success
145
- json.length.should == 1
145
+ json.length.should == 1
146
146
  json.map{|c| c['name']}.include?("Manufacture Sprockets").should == true
147
147
  json.map{|c| c['name']}.include?("Disassemble Sprockets").should == false
148
148
  end