introspective_grape 0.3.2 → 0.3.3

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