rs-rails-base 0.1.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.
Files changed (80) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +75 -0
  5. data/.travis.yml +5 -0
  6. data/CODE_OF_CONDUCT.md +74 -0
  7. data/Gemfile +9 -0
  8. data/LICENSE.md +9 -0
  9. data/README.md +61 -0
  10. data/Rakefile +7 -0
  11. data/bin/bundle +3 -0
  12. data/bin/rails +7 -0
  13. data/bin/rake +16 -0
  14. data/bin/rs_rails_base +37 -0
  15. data/bin/setup +8 -0
  16. data/circle.yml +12 -0
  17. data/config.reek +109 -0
  18. data/docs/chat.md +14 -0
  19. data/docs/facebook.md +10 -0
  20. data/docs/twilio.md +21 -0
  21. data/images/chat_flow.png +0 -0
  22. data/images/chat_struct.png +0 -0
  23. data/lib/rs-rails-base/cli_actions.rb +16 -0
  24. data/lib/rs-rails-base/commands.rb +81 -0
  25. data/lib/rs-rails-base/constants.rb +7 -0
  26. data/lib/rs-rails-base/features.rb +16 -0
  27. data/lib/rs-rails-base/features/chat.rb +91 -0
  28. data/lib/rs-rails-base/features/facebook.rb +41 -0
  29. data/lib/rs-rails-base/features/twilio.rb +18 -0
  30. data/lib/rs-rails-base/file_manipulation.rb +55 -0
  31. data/lib/rs-rails-base/git_actions.rb +13 -0
  32. data/lib/rs-rails-base/rails_actions.rb +27 -0
  33. data/lib/rs_rails_base.rb +10 -0
  34. data/lib/templates/chat/channel.rb +4 -0
  35. data/lib/templates/chat/chat_channel.rb +15 -0
  36. data/lib/templates/chat/chat_service.rb +28 -0
  37. data/lib/templates/chat/chats_controller.rb +56 -0
  38. data/lib/templates/chat/connection.rb +24 -0
  39. data/lib/templates/chat/jbuilder/_info.json.jbuilder +2 -0
  40. data/lib/templates/chat/jbuilder/_message.json.jbuilder +2 -0
  41. data/lib/templates/chat/jbuilder/index.json.jbuilder +3 -0
  42. data/lib/templates/chat/jbuilder/messages_create.json.jbuilder +3 -0
  43. data/lib/templates/chat/jbuilder/messages_create_info.json.jbuilder +7 -0
  44. data/lib/templates/chat/jbuilder/show.json.jbuilder +3 -0
  45. data/lib/templates/chat/messages_controller.rb +23 -0
  46. data/lib/templates/chat/migration-models/add_chat.rb +9 -0
  47. data/lib/templates/chat/migration-models/add_message.rb +15 -0
  48. data/lib/templates/chat/migration-models/add_participant.rb +12 -0
  49. data/lib/templates/chat/migration-models/chat.rb +30 -0
  50. data/lib/templates/chat/migration-models/message.rb +43 -0
  51. data/lib/templates/chat/migration-models/participant.rb +28 -0
  52. data/lib/templates/chat/migration-models/user.rb +3 -0
  53. data/lib/templates/chat/routes.rb +6 -0
  54. data/lib/templates/chat/routes_2.rb +1 -0
  55. data/lib/templates/chat/sessions_controller.rb +7 -0
  56. data/lib/templates/chat/specs/chat_channel_spec.rb +25 -0
  57. data/lib/templates/chat/specs/chat_factory.rb +20 -0
  58. data/lib/templates/chat/specs/chat_service_spec.rb +19 -0
  59. data/lib/templates/chat/specs/chat_spec.rb +27 -0
  60. data/lib/templates/chat/specs/connection_spec.rb +10 -0
  61. data/lib/templates/chat/specs/message_factory.rb +7 -0
  62. data/lib/templates/chat/specs/message_spec.rb +40 -0
  63. data/lib/templates/chat/specs/participant_factory.rb +7 -0
  64. data/lib/templates/chat/specs/participant_spec.rb +21 -0
  65. data/lib/templates/chat/specs/rails_helper.rb +1 -0
  66. data/lib/templates/facebook/apiary.apib +28 -0
  67. data/lib/templates/facebook/en.yml +4 -0
  68. data/lib/templates/facebook/facebook_service.rb +13 -0
  69. data/lib/templates/facebook/facebook_spec.rb +146 -0
  70. data/lib/templates/facebook/factories_user.rb +6 -0
  71. data/lib/templates/facebook/routes.rb +3 -0
  72. data/lib/templates/facebook/sessions_controller.rb +9 -0
  73. data/lib/templates/facebook/sessions_controller_2.rb +7 -0
  74. data/lib/templates/facebook/sessions_routing_spec.rb +4 -0
  75. data/lib/templates/facebook/user_spec.rb +5 -0
  76. data/lib/templates/twilio/twilio.rb +4 -0
  77. data/lib/templates/twilio/twilio_service.rb +21 -0
  78. data/rs-rails-base.gemspec +29 -0
  79. data/tasks/code_analysis.rake +4 -0
  80. metadata +206 -0
@@ -0,0 +1,10 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe ApplicationCable::Connection, type: :channel do
4
+ let(:user) { create(:user) }
5
+
6
+ it 'successfully connects' do
7
+ connect "/cable?user=#{user.id}"
8
+ expect(connection.current_user).to eq user
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :message do
3
+ chat { create(:chat) }
4
+ user { chat.users.first }
5
+ content { Faker::ChuckNorris.fact }
6
+ end
7
+ end
@@ -0,0 +1,40 @@
1
+ require 'rails_helper'
2
+
3
+ describe Message do
4
+ let(:user_1) { create(:user) }
5
+ let(:user_2) { create(:user) }
6
+ let(:chat) { create(:chat) }
7
+ let(:participant) { create(:participant, user: user_1, chat: chat) }
8
+
9
+ describe 'validates restrictions' do
10
+ it 'have a content' do
11
+ subject build(:message, user: user_1, chat: chat)
12
+ it { validate_presence_of(:content) }
13
+ end
14
+ end
15
+
16
+ describe 'validates last_message is updated' do
17
+ it 'be set for first time' do
18
+ new_message = 'next message'
19
+ expect(create(:message, user: user_1, chat: chat, content: new_message)).to
20
+ change(:participant.last_message).from(nil).to(new_message)
21
+ end
22
+
23
+ it 'change when new message' do
24
+ last_message = Message.last.pluck(:last_message)
25
+ new_message = 'next message'
26
+ expect(create(:message, user: user_1, chat: chat, content: new_message)).to
27
+ change(:participant.last_message).from(last_message).to(new_message)
28
+ end
29
+ end
30
+
31
+ describe 'validates user registered for chat' do
32
+ it 'allow user to send message' do
33
+ expect(build(:message, user: user_1, chat: chat)).to have(0).errors_on(:message)
34
+ end
35
+
36
+ it 'not allow user to send message' do
37
+ expect(build(:message, user: user_2, chat: chat)).to have(1).errors_on(:message)
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :participant do
3
+ user { create(:user) }
4
+ chat { create(:chat) }
5
+ last_connection nil
6
+ end
7
+ end
@@ -0,0 +1,21 @@
1
+ require 'rails_helper'
2
+
3
+ describe Participant do
4
+ let(:user_1) { create(:user) }
5
+ let(:user_2) { create(:user) }
6
+ let(:chat) { create(:chat) }
7
+
8
+ before(:each) do
9
+ create(:participant, user: user_1, chat: chat)
10
+ end
11
+
12
+ describe 'validate uniqueness of user for a chat' do
13
+ it 'fail due to user already in chat' do
14
+ expect(build(:participant, user: user_1, chat: chat)).to have(1).errors_on(:participant)
15
+ end
16
+
17
+ it 'step the user into the chat' do
18
+ expect(build(:participant, user: user_2, chat: chat)).to have(0).errors_on(:participant)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1 @@
1
+ require 'action_cable/testing/rspec'
@@ -0,0 +1,28 @@
1
+
2
+ ## Login with Facebook [/api/v1/user/facebook]
3
+
4
+ ### Login with Facebook [POST]
5
+
6
+
7
+ + Response 200 (application/json)
8
+ + Headers
9
+
10
+ access-token: sO2bm_Bpdyoo8r78jZ-fqg
11
+ client: QADgNCWRJj0LyRruqzYbBg
12
+ uid: test@test.com
13
+
14
+
15
+ + Body
16
+
17
+ {
18
+ "user":
19
+ {
20
+ "id": 366,
21
+ "email": "test@facebook.com",
22
+ "first_name": "Test",
23
+ "last_name": "test",
24
+ "username": "",
25
+ "provider": "facebook",
26
+ "uid": "1234567890"
27
+ }
28
+ }
@@ -0,0 +1,4 @@
1
+
2
+ facebook:
3
+ not_authorized: 'Not Authorized'
4
+ already_registerd: 'User already registered with email/password'
@@ -0,0 +1,13 @@
1
+ class FacebookService
2
+ def initialize(access_token)
3
+ @access_token = access_token
4
+ end
5
+
6
+ def profile
7
+ client.get_object('me?fields=email,first_name,last_name')
8
+ end
9
+
10
+ def client
11
+ Koala::Facebook::API.new(@access_token, ENV['FACEBOOK_SECRET'])
12
+ end
13
+ end
@@ -0,0 +1,146 @@
1
+ require 'rails_helper'
2
+
3
+ describe 'POST api/v1/users/facebook', type: :request do
4
+ let(:user) { create(:user) }
5
+ let(:facebook_path) { facebook_api_v1_user_path }
6
+ let(:facebook_api_path) { 'https://graph.facebook.com/me' }
7
+ let(:facebook_response) do
8
+ {
9
+ first_name: 'Test',
10
+ last_name: 'test',
11
+ email: 'test@facebook.com',
12
+ id: '1234567890'
13
+ }
14
+ end
15
+
16
+ shared_examples 'fail to login with facebook' do
17
+ it 'does not returns a successful response' do
18
+ post facebook_path, params: params, as: :json
19
+ expect(response).to_not have_http_status(:success)
20
+ end
21
+
22
+ it 'does not create an user' do
23
+ expect { post facebook_path, params: params, as: :json }.to change(User, :count).by(0)
24
+ end
25
+ end
26
+
27
+ context 'with valid params' do
28
+ let(:params) do
29
+ {
30
+ access_token: '123456'
31
+ }
32
+ end
33
+ before do
34
+ stub_request(:get, facebook_api_path)
35
+ .with(query: hash_including(access_token: '123456',
36
+ fields: 'email,first_name,last_name'))
37
+ .to_return(status: 200, body: facebook_response.to_json)
38
+ end
39
+
40
+ it 'returns a successful response' do
41
+ post facebook_path, params: params, as: :json
42
+ expect(response).to have_http_status(:success)
43
+ end
44
+
45
+ it 'creates an user' do
46
+ expect { post facebook_path, params: params, as: :json }.to change(User, :count).by(1)
47
+ end
48
+
49
+ it 'assigns the information properly' do
50
+ post facebook_path, params: params, as: :json
51
+ user = User.last
52
+ expect(user.first_name).to eq 'Test'
53
+ expect(user.email).to eq 'test@facebook.com'
54
+ expect(user.uid).to eq '1234567890'
55
+ expect(user.provider).to eq 'facebook'
56
+ expect(user.encrypted_password).to be_present
57
+ end
58
+
59
+ it 'returns a valid client and access token' do
60
+ post facebook_path, params: params, as: :json
61
+ token = response.header['access-token']
62
+ client = response.header['client']
63
+ user = User.last
64
+ expect(user.reload.valid_token?(token, client)).to be_truthy
65
+ end
66
+
67
+ context 'with an user having the same email' do
68
+ before do
69
+ create :user, email: 'test@facebook.com'
70
+ end
71
+
72
+ it_behaves_like 'fail to login with facebook'
73
+
74
+ it 'shows the right error' do
75
+ post facebook_path, params: params, as: :json
76
+ expect(json[:error]).to include 'already registered'
77
+ end
78
+ end
79
+
80
+ context 'without facebook email' do
81
+ let(:params) do
82
+ {
83
+ access_token: 'without_email'
84
+ }
85
+ end
86
+ before do
87
+ facebook_response[:email] = ''
88
+ fields = 'email,first_name,last_name'
89
+ stub_request(:get, facebook_api_path)
90
+ .with(query: hash_including(access_token: 'without_email', fields: fields))
91
+ .to_return(status: 200, body: facebook_response.to_json)
92
+ end
93
+
94
+ it 'creates an user' do
95
+ expect { post facebook_path, params: params, as: :json }.to change(User, :count).by(1)
96
+ end
97
+ end
98
+
99
+ context 'the user has already logged with facebook' do
100
+ before do
101
+ params = {
102
+ email: 'test@facebook.com',
103
+ provider: 'facebook',
104
+ uid: '1234567890'
105
+ }
106
+ FactoryGirl.create :user, params
107
+ end
108
+
109
+ it 'returns a successful response' do
110
+ post facebook_path, params: params, as: :json
111
+ expect(response).to have_http_status(:success)
112
+ end
113
+
114
+ it 'does not create an user' do
115
+ expect { post facebook_path, params: params, as: :json }.to change(User, :count).by(0)
116
+ end
117
+ end
118
+ end
119
+
120
+ context 'with invalid params' do
121
+ let(:params) do
122
+ {
123
+ access_token: 'invalid'
124
+ }
125
+ end
126
+ before do
127
+ facebook_response = {
128
+ error: {
129
+ message: 'Expired token',
130
+ type: 'OAuthException',
131
+ code: 190
132
+ }
133
+ }
134
+ stub_request(:get, facebook_api_path)
135
+ .with(query: hash_including(access_token: 'invalid', fields: 'email,first_name,last_name'))
136
+ .to_return(status: 400, body: facebook_response.to_json)
137
+ end
138
+
139
+ it_behaves_like 'fail to login with facebook'
140
+
141
+ it 'shows the right error' do
142
+ post facebook_path, params: params, as: :json
143
+ expect(json[:error]).to include 'Not Authorized'
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,6 @@
1
+
2
+ trait :with_fb do
3
+ password nil
4
+ email nil
5
+ provider 'facebook'
6
+ end
@@ -0,0 +1,3 @@
1
+ controller :sessions do
2
+ post :facebook, on: :collection
3
+ end
@@ -0,0 +1,9 @@
1
+ def facebook
2
+ user_params = FacebookService.new(params[:access_token]).profile
3
+ @resource = User.from_social_provider 'facebook', user_params
4
+ custom_sign_in
5
+ rescue Koala::Facebook::AuthenticationError
6
+ render json: { error: I18n.t('api.facebook.not_authorized') }, status: :forbidden
7
+ rescue ActiveRecord::RecordNotUnique
8
+ render json: { error: I18n.t('api.facebook.already_registerd') }, status: :bad_request
9
+ end
@@ -0,0 +1,7 @@
1
+ def custom_sign_in
2
+ sign_in(:api_v1_user, @resource)
3
+ new_auth_header = @resource.create_new_auth_token
4
+ # update response with the header that will be required by the next request
5
+ response.headers.merge!(new_auth_header)
6
+ render_create_success
7
+ end
@@ -0,0 +1,4 @@
1
+
2
+ it 'routes to #facebook' do
3
+ expect(post: '/api/v1/user/facebook').to route_to('api/v1/sessions#facebook', format: :json)
4
+ end
@@ -0,0 +1,5 @@
1
+ context 'when was created with facebook login' do
2
+ subject { build :user, :with_fb }
3
+ it { should_not validate_uniqueness_of(:email) }
4
+ it { should_not validate_presence_of(:email) }
5
+ end
@@ -0,0 +1,4 @@
1
+ Twilio.configure do |config|
2
+ config.account_sid = ENV['TWILIO_ACCOUNT_SID']
3
+ config.auth_token = ENV['TWILIO_ACCOUNT_TOKEN']
4
+ end
@@ -0,0 +1,21 @@
1
+ module TwilioService
2
+ extend self
3
+
4
+ def send_text_message(phone_to, message)
5
+ client = Twilio::REST::Client.new
6
+ client.messages.create(
7
+ from: ENV['TWILIO_PHONE_FROM'],
8
+ to: phone_to,
9
+ body: message
10
+ )
11
+ @logger.info { "Sent SMS to #{phone_to}." }
12
+ rescue Twilio::REST::RequestError => err
13
+ @logger.error do
14
+ "ERROR in Twilio call for sending message to number #{phone_to}. Error: #{err.message}"
15
+ end
16
+ end
17
+
18
+ def logger
19
+ @logger ||= Rails.logger
20
+ end
21
+ end
@@ -0,0 +1,29 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'rs-rails-base/constants'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'rs-rails-base'
7
+ spec.version = RailsBase::VERSION
8
+ spec.authors = ['Rootstrap']
9
+ spec.email = ['info@rootstrap.com']
10
+
11
+ spec.summary = 'All you need, all you wanted... and more'
12
+ spec.description = 'Rootstrap base engine'
13
+ spec.homepage = "http://github.com/rootstrap/rails_base"
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
+ f.match(%r{^(test|spec|features)/})
18
+ end
19
+ spec.files += Dir.glob('lib/**/*')
20
+
21
+ spec.executables = ['rs_rails_base']
22
+ spec.require_paths = ['lib']
23
+
24
+ spec.add_dependency 'tty-file', '~> 0.4.0'
25
+ spec.add_dependency 'commander', '~> 4.4', '>= 4.4.3'
26
+ spec.add_development_dependency 'bundler', '~> 1.9', '>=1.9.5'
27
+ spec.add_development_dependency 'rake', '~> 10.0'
28
+ spec.add_development_dependency 'rspec', '~> 3.0'
29
+ end
@@ -0,0 +1,4 @@
1
+ task :code_analysis do
2
+ sh 'bundle exec rubocop lib spec bin'
3
+ sh 'bundle exec reek lib bin'
4
+ end
metadata ADDED
@@ -0,0 +1,206 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rs-rails-base
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Rootstrap
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-07-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: tty-file
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.4.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.4.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: commander
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.4'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 4.4.3
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '4.4'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 4.4.3
47
+ - !ruby/object:Gem::Dependency
48
+ name: bundler
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.9'
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 1.9.5
57
+ type: :development
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '1.9'
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: 1.9.5
67
+ - !ruby/object:Gem::Dependency
68
+ name: rake
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '10.0'
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '10.0'
81
+ - !ruby/object:Gem::Dependency
82
+ name: rspec
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '3.0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '3.0'
95
+ description: Rootstrap base engine
96
+ email:
97
+ - info@rootstrap.com
98
+ executables:
99
+ - rs_rails_base
100
+ extensions: []
101
+ extra_rdoc_files: []
102
+ files:
103
+ - ".gitignore"
104
+ - ".rspec"
105
+ - ".rubocop.yml"
106
+ - ".travis.yml"
107
+ - CODE_OF_CONDUCT.md
108
+ - Gemfile
109
+ - LICENSE.md
110
+ - README.md
111
+ - Rakefile
112
+ - bin/bundle
113
+ - bin/rails
114
+ - bin/rake
115
+ - bin/rs_rails_base
116
+ - bin/setup
117
+ - circle.yml
118
+ - config.reek
119
+ - docs/chat.md
120
+ - docs/facebook.md
121
+ - docs/twilio.md
122
+ - images/chat_flow.png
123
+ - images/chat_struct.png
124
+ - lib/rs-rails-base/cli_actions.rb
125
+ - lib/rs-rails-base/commands.rb
126
+ - lib/rs-rails-base/constants.rb
127
+ - lib/rs-rails-base/features.rb
128
+ - lib/rs-rails-base/features/chat.rb
129
+ - lib/rs-rails-base/features/facebook.rb
130
+ - lib/rs-rails-base/features/twilio.rb
131
+ - lib/rs-rails-base/file_manipulation.rb
132
+ - lib/rs-rails-base/git_actions.rb
133
+ - lib/rs-rails-base/rails_actions.rb
134
+ - lib/rs_rails_base.rb
135
+ - lib/templates/chat/channel.rb
136
+ - lib/templates/chat/chat_channel.rb
137
+ - lib/templates/chat/chat_service.rb
138
+ - lib/templates/chat/chats_controller.rb
139
+ - lib/templates/chat/connection.rb
140
+ - lib/templates/chat/jbuilder/_info.json.jbuilder
141
+ - lib/templates/chat/jbuilder/_message.json.jbuilder
142
+ - lib/templates/chat/jbuilder/index.json.jbuilder
143
+ - lib/templates/chat/jbuilder/messages_create.json.jbuilder
144
+ - lib/templates/chat/jbuilder/messages_create_info.json.jbuilder
145
+ - lib/templates/chat/jbuilder/show.json.jbuilder
146
+ - lib/templates/chat/messages_controller.rb
147
+ - lib/templates/chat/migration-models/add_chat.rb
148
+ - lib/templates/chat/migration-models/add_message.rb
149
+ - lib/templates/chat/migration-models/add_participant.rb
150
+ - lib/templates/chat/migration-models/chat.rb
151
+ - lib/templates/chat/migration-models/message.rb
152
+ - lib/templates/chat/migration-models/participant.rb
153
+ - lib/templates/chat/migration-models/user.rb
154
+ - lib/templates/chat/routes.rb
155
+ - lib/templates/chat/routes_2.rb
156
+ - lib/templates/chat/sessions_controller.rb
157
+ - lib/templates/chat/specs/chat_channel_spec.rb
158
+ - lib/templates/chat/specs/chat_factory.rb
159
+ - lib/templates/chat/specs/chat_service_spec.rb
160
+ - lib/templates/chat/specs/chat_spec.rb
161
+ - lib/templates/chat/specs/connection_spec.rb
162
+ - lib/templates/chat/specs/message_factory.rb
163
+ - lib/templates/chat/specs/message_spec.rb
164
+ - lib/templates/chat/specs/participant_factory.rb
165
+ - lib/templates/chat/specs/participant_spec.rb
166
+ - lib/templates/chat/specs/rails_helper.rb
167
+ - lib/templates/facebook/apiary.apib
168
+ - lib/templates/facebook/en.yml
169
+ - lib/templates/facebook/facebook_service.rb
170
+ - lib/templates/facebook/facebook_spec.rb
171
+ - lib/templates/facebook/factories_user.rb
172
+ - lib/templates/facebook/routes.rb
173
+ - lib/templates/facebook/sessions_controller.rb
174
+ - lib/templates/facebook/sessions_controller_2.rb
175
+ - lib/templates/facebook/sessions_routing_spec.rb
176
+ - lib/templates/facebook/user_spec.rb
177
+ - lib/templates/twilio/twilio.rb
178
+ - lib/templates/twilio/twilio_service.rb
179
+ - rs-rails-base.gemspec
180
+ - tasks/code_analysis.rake
181
+ homepage: http://github.com/rootstrap/rails_base
182
+ licenses:
183
+ - MIT
184
+ metadata: {}
185
+ post_install_message:
186
+ rdoc_options: []
187
+ require_paths:
188
+ - lib
189
+ required_ruby_version: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ required_rubygems_version: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - ">="
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ requirements: []
200
+ rubyforge_project:
201
+ rubygems_version: 2.6.13
202
+ signing_key:
203
+ specification_version: 4
204
+ summary: All you need, all you wanted... and more
205
+ test_files: []
206
+ has_rdoc: