raygun4ruby 3.0.0 → 3.2.3.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +11 -5
  5. data/CHANGELOG.md +26 -0
  6. data/Gemfile +0 -0
  7. data/LICENSE.txt +0 -0
  8. data/README.md +3 -3
  9. data/Rakefile +9 -2
  10. data/examples/sinatras_raygun.rb +0 -0
  11. data/lib/generators/raygun/install_generator.rb +0 -0
  12. data/lib/raygun.rb +4 -5
  13. data/lib/raygun/affected_user.rb +0 -0
  14. data/lib/raygun/breadcrumbs.rb +0 -0
  15. data/lib/raygun/breadcrumbs/breadcrumb.rb +4 -0
  16. data/lib/raygun/breadcrumbs/store.rb +10 -0
  17. data/lib/raygun/client.rb +4 -1
  18. data/lib/raygun/configuration.rb +6 -0
  19. data/lib/raygun/error.rb +0 -0
  20. data/lib/raygun/javascript_tracker.rb +42 -0
  21. data/lib/raygun/middleware/breadcrumbs_store_initializer.rb +0 -0
  22. data/lib/raygun/middleware/javascript_exception_tracking.rb +32 -0
  23. data/lib/raygun/middleware/rack_exception_interceptor.rb +0 -0
  24. data/lib/raygun/middleware/rails_insert_affected_user.rb +0 -0
  25. data/lib/raygun/railtie.rb +2 -1
  26. data/lib/raygun/services/apply_whitelist_filter_to_payload.rb +0 -0
  27. data/lib/raygun/sidekiq.rb +3 -0
  28. data/lib/raygun/testable.rb +0 -0
  29. data/lib/raygun/version.rb +1 -1
  30. data/lib/raygun4ruby.rb +0 -0
  31. data/lib/resque/failure/raygun.rb +0 -0
  32. data/lib/tasks/raygun.tasks +0 -0
  33. data/raygun4ruby.gemspec +9 -2
  34. data/spec/dummy/.gitignore +17 -0
  35. data/spec/dummy/Gemfile +47 -0
  36. data/spec/dummy/README.rdoc +28 -0
  37. data/spec/dummy/Rakefile +6 -0
  38. data/spec/dummy/app/assets/config/manifest.js +3 -0
  39. data/spec/dummy/app/assets/images/.keep +0 -0
  40. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  41. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  42. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  43. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  44. data/spec/dummy/app/controllers/home_controller.rb +4 -0
  45. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  46. data/spec/dummy/app/mailers/.keep +0 -0
  47. data/spec/dummy/app/models/.keep +0 -0
  48. data/spec/dummy/app/models/concerns/.keep +0 -0
  49. data/spec/dummy/app/views/home/index.html.erb +3 -0
  50. data/spec/dummy/app/views/home/index.json.erb +1 -0
  51. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  52. data/spec/dummy/bin/bundle +3 -0
  53. data/spec/dummy/bin/rails +9 -0
  54. data/spec/dummy/bin/rake +9 -0
  55. data/spec/dummy/bin/setup +29 -0
  56. data/spec/dummy/bin/spring +17 -0
  57. data/spec/dummy/config.ru +4 -0
  58. data/spec/dummy/config/application.rb +26 -0
  59. data/spec/dummy/config/boot.rb +3 -0
  60. data/spec/dummy/config/database.yml +25 -0
  61. data/spec/dummy/config/environment.rb +5 -0
  62. data/spec/dummy/config/environments/development.rb +41 -0
  63. data/spec/dummy/config/environments/production.rb +79 -0
  64. data/spec/dummy/config/environments/test.rb +42 -0
  65. data/spec/dummy/config/initializers/assets.rb +11 -0
  66. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  67. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  68. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  69. data/spec/dummy/config/initializers/inflections.rb +16 -0
  70. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  71. data/spec/dummy/config/initializers/session_store.rb +3 -0
  72. data/spec/dummy/config/initializers/to_time_preserves_timezone.rb +10 -0
  73. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  74. data/spec/dummy/config/locales/en.yml +23 -0
  75. data/spec/dummy/config/routes.rb +58 -0
  76. data/spec/dummy/config/secrets.yml +22 -0
  77. data/spec/dummy/db/seeds.rb +7 -0
  78. data/spec/dummy/lib/assets/.keep +0 -0
  79. data/spec/dummy/lib/tasks/.keep +0 -0
  80. data/spec/dummy/public/404.html +67 -0
  81. data/spec/dummy/public/422.html +67 -0
  82. data/spec/dummy/public/500.html +66 -0
  83. data/spec/dummy/public/favicon.ico +0 -0
  84. data/spec/dummy/public/robots.txt +5 -0
  85. data/spec/dummy/test/controllers/.keep +0 -0
  86. data/spec/dummy/test/fixtures/.keep +0 -0
  87. data/spec/dummy/test/helpers/.keep +0 -0
  88. data/spec/dummy/test/integration/.keep +0 -0
  89. data/spec/dummy/test/mailers/.keep +0 -0
  90. data/spec/dummy/test/models/.keep +0 -0
  91. data/spec/dummy/test/test_helper.rb +10 -0
  92. data/spec/dummy/vendor/assets/javascripts/.keep +0 -0
  93. data/spec/dummy/vendor/assets/stylesheets/.keep +0 -0
  94. data/spec/features/javascript_spec.rb +48 -0
  95. data/spec/rails_helper.rb +4 -0
  96. data/{specs → spec}/raygun/breadcrumbs/breadcrumb_spec.rb +56 -19
  97. data/{specs → spec}/raygun/breadcrumbs/store_spec.rb +45 -23
  98. data/{specs → spec}/raygun/raygun_spec.rb +5 -8
  99. data/{specs → spec}/services/apply_whitelist_filter_to_payload_spec.rb +9 -9
  100. data/spec/spec_helper.rb +24 -0
  101. data/spec/support/fake_logger.rb +17 -0
  102. data/test/integration/client_test.rb +0 -0
  103. data/test/test_helper.rb +2 -1
  104. data/test/unit/affected_user_test.rb +0 -0
  105. data/test/unit/client_test.rb +3 -1
  106. data/test/unit/configuration_test.rb +12 -0
  107. data/test/unit/raygun_test.rb +0 -0
  108. data/test/unit/resque_failure_test.rb +0 -0
  109. data/test/unit/sidekiq_failure_test.rb +0 -0
  110. metadata +168 -17
  111. data/specs/spec_helper.rb +0 -29
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 61736f6afdee2839d8085205074cc3e36a0d1ab2
4
- data.tar.gz: 91f356594710741eec38c69f2e1122eb7bfdf3e9
2
+ SHA256:
3
+ metadata.gz: 84452b508afb10629e9422d50d1ad50d50d39fa55b02b6b5f8acb8a4ae90dc5d
4
+ data.tar.gz: 9467456b70b0f9bade783999435f146547de3620f2921766bc43df4ece319558
5
5
  SHA512:
6
- metadata.gz: 1c5a29513ec9b6603e798381c89005802a87ac470bcfdb6e77f2287523d880f4db7dc0fe6122254e8f8722aa5e54fb5f418b72702fa1b4a2cb5defc69626556b
7
- data.tar.gz: b44748b701d56a4359644c679abe517ef9540049c9a8acd960babbe2614d68d27457ec2563298d625ed4485f6f2d6705ffc512bba0e6e4f36b3ed193b2cf0919
6
+ metadata.gz: d54eaf8070ed7fe63f3d1fbc65453c036bba550762f28ce7279a055fd692faeb03081c91b2d60f371136df413e97c175bbef143b5f22c8e63a518ed4be5ec515
7
+ data.tar.gz: c51ab8b3f6e4743d2d95600c5325c485ecad3fce332e87adf61ed93a051939963e8d09f8064fccb126e536ce76c44144057c9012ba6cf97ef67ec4249633fe58
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ spec/dummy/log
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --require spec_helper
@@ -1,14 +1,20 @@
1
+ language: ruby
2
+
1
3
  before_install:
2
- - gem install bundler
4
+ - gem uninstall -v '>= 2' -i $(rvm gemdir)@global -ax bundler || true
5
+ - gem install bundler -v '< 2'
3
6
 
4
7
  script:
5
8
  - bundle exec rake
6
9
 
7
10
  rvm:
8
- - 2.0.0
9
- - 2.2.5
10
- - 2.3.3
11
- - 2.4.0
11
+ - 2.0.0-p648
12
+ - 2.1.0
13
+ - 2.2.10
14
+ - 2.3.8
15
+ - 2.4.5
16
+ - 2.5.3
17
+ - 2.6.1
12
18
 
13
19
  gemfile:
14
20
  - Gemfile
@@ -1,3 +1,29 @@
1
+ ## 3.2.2 (10/06/2020):
2
+ - Introduce support for Raygun APM exceptions correlation ([#154](https://github.com/MindscapeHQ/raygun4ruby/pull/154))
3
+
4
+ ## 3.2.1 (25/02/2019):
5
+ Bugfix:
6
+ - Remove Ruby 2.3 syntax to retain support for Ruby >= 2.0 ([#148](https://github.com/MindscapeHQ/raygun4ruby/pull/148))
7
+
8
+ ## 3.2.0 (21/02/2019):
9
+ Bugfix:
10
+ - Fix NoMethodError Exception: undefined method `include?' for nil:NilClass in `JavascriptExceptionTracking` class. Thanks @yamanaltereh for this ([#141](https://github.com/MindscapeHQ/raygun4ruby/pull/141))
11
+ - Fix ([#145](https://github.com/MindscapeHQ/raygun4ruby/issues/145)), "raygun4ruby will load pry if it is in the gem bundle". Thanks to @eoinkelly for reporting this
12
+
13
+ Feature:
14
+ - If you have recorded a large number of Breadcrumbs, or just very large ones, Raygun4Ruby will now only send up to 100KB of them instead of all of them, potentially going over the 128KB payload limit Raygun accepts ([#147](https://github.com/MindscapeHQ/raygun4ruby/pull/147))
15
+
16
+ ## 3.1.1 (16/01/2019):
17
+ Bugfix:
18
+ - Don't attempt to modify response unless JS api key is present
19
+ - Don't attempt to modify response unless it responds to indexing ([])
20
+ - See PR ([#140](https://github.com/MindscapeHQ/raygun4ruby/pull/140))
21
+
22
+ ## 3.1.0 (15/01/2019):
23
+
24
+ Feature:
25
+ - Ability to automatically configure Raygun4JS on the client side by injecting it into outbound HTML pages. Thanks @MikeRogers0 for this ([#138](https://github.com/MindscapeHQ/raygun4ruby/pull/138))
26
+
1
27
  ## 3.0.0 (18/12/2018):
2
28
  Breaking changes:
3
29
  Parameter filters are now applied if you are using the `filter_payload_with_whitelist` functionality. Previously if this was set to true the parameter filtering was bailed out of ([#136](https://github.com/MindscapeHQ/raygun4ruby/pull/136/files))
data/Gemfile CHANGED
File without changes
File without changes
data/README.md CHANGED
@@ -19,7 +19,7 @@ Or install it yourself as:
19
19
 
20
20
  ## Usage
21
21
 
22
- ### Rails 3/4
22
+ ### Rails 3/4/5
23
23
 
24
24
  Run:
25
25
 
@@ -83,7 +83,7 @@ rescue => e
83
83
  end
84
84
  ```
85
85
 
86
- You can also pass a Hash as the second parameter to `track_exception`. It should look like a [Rack Env Hash](http://rack.rubyforge.org/doc/SPEC.html)
86
+ You can also pass a Hash as the second parameter to `track_exception`. It should look like a [Rack Env Hash](https://www.rubydoc.info/github/rack/rack/master/file/SPEC)
87
87
 
88
88
  ### Customizing The Parameter Filtering
89
89
 
@@ -182,7 +182,7 @@ Raygun.setup do |config|
182
182
  config.api_key = "YOUR_RAYGUN_API_KEY"
183
183
  config.filter_payload_with_whitelist = true
184
184
 
185
- config.whitelist_payload_keys do |payload|
185
+ config.whitelist_payload_shape do |payload|
186
186
  # Return the payload mutated into your desired form
187
187
  payload
188
188
  end
data/Rakefile CHANGED
@@ -7,7 +7,7 @@ namespace :test do
7
7
 
8
8
  desc "Test the basics of the adapter"
9
9
  Rake::TestTask.new(:units) do |t|
10
- t.test_files = FileList["test/unit/*_test.rb", "specs/**/*_spec.rb"]
10
+ t.test_files = FileList["test/unit/*_test.rb"]
11
11
  end
12
12
 
13
13
  desc "Run a test against the live API"
@@ -15,6 +15,13 @@ namespace :test do
15
15
  t.test_files = FileList["test/integration/*_test.rb"]
16
16
  end
17
17
 
18
+ begin
19
+ require 'rspec/core/rake_task'
20
+
21
+ RSpec::Core::RakeTask.new(:spec)
22
+
23
+ rescue LoadError
24
+ end
18
25
  end
19
26
 
20
- task default: "test:units"
27
+ task default: ["test:units", "test:spec"]
File without changes
@@ -6,16 +6,13 @@ require "socket"
6
6
  require "rack"
7
7
  require "ostruct"
8
8
 
9
- begin
10
- require "pry"
11
- rescue LoadError
12
- end
13
-
14
9
  require "raygun/version"
15
10
  require "raygun/configuration"
16
11
  require "raygun/client"
12
+ require "raygun/javascript_tracker"
17
13
  require "raygun/middleware/rack_exception_interceptor"
18
14
  require "raygun/middleware/breadcrumbs_store_initializer"
15
+ require "raygun/middleware/javascript_exception_tracking"
19
16
  require "raygun/testable"
20
17
  require "raygun/error"
21
18
  require "raygun/affected_user"
@@ -150,6 +147,8 @@ module Raygun
150
147
  env[:custom_data] ||= {}
151
148
  env[:custom_data].merge!(original_stacktrace: exception_instance.backtrace)
152
149
 
150
+ ::Raygun::Breadcrumbs::Store.clear
151
+
153
152
  track_exception(new_exception, env, user, retry_count - 1)
154
153
  else
155
154
  raise e
File without changes
File without changes
@@ -25,6 +25,10 @@ module Raygun
25
25
  v != nil
26
26
  end]
27
27
  end
28
+
29
+ def size
30
+ return message.length + 100
31
+ end
28
32
  end
29
33
  end
30
34
  end
@@ -47,6 +47,16 @@ module Raygun
47
47
  stored != nil && stored.length > 0
48
48
  end
49
49
 
50
+ def self.take_until_size(size)
51
+ breadcrumb_size = 0
52
+
53
+ stored.reverse.take_while do |crumb|
54
+ breadcrumb_size += crumb.size
55
+
56
+ breadcrumb_size < size
57
+ end.reverse
58
+ end
59
+
50
60
  private
51
61
 
52
62
  def self.should_record?(crumb)
@@ -5,6 +5,7 @@ module Raygun
5
5
 
6
6
  ENV_IP_ADDRESS_KEYS = %w(action_dispatch.remote_ip raygun.remote_ip REMOTE_ADDR)
7
7
  NO_API_KEY_MESSAGE = "[RAYGUN] Just a note, you've got no API Key configured, which means we can't report exceptions. Specify your Raygun API key using Raygun#setup (find yours at https://app.raygun.io)"
8
+ MAX_BREADCRUMBS_SIZE = 100_000
8
9
 
9
10
  include HTTParty
10
11
 
@@ -191,6 +192,7 @@ module Raygun
191
192
  Raygun.log('set tags')
192
193
 
193
194
  grouping_key = env.delete(:grouping_key)
195
+ correlation_id = env.delete(:correlation_id)
194
196
 
195
197
  configuration_custom_data = Raygun.configuration.custom_data
196
198
  configured_custom_data = if configuration_custom_data.is_a?(Proc)
@@ -214,11 +216,12 @@ module Raygun
214
216
  }
215
217
  }
216
218
  store = ::Raygun::Breadcrumbs::Store
217
- error_details[:breadcrumbs] = store.stored.map(&:build_payload) if store.any?
219
+ error_details[:breadcrumbs] = store.take_until_size(MAX_BREADCRUMBS_SIZE).map(&:build_payload) if store.any?
218
220
 
219
221
  Raygun.log('set details and breadcrumbs')
220
222
 
221
223
  error_details.merge!(groupingKey: grouping_key) if grouping_key
224
+ error_details.merge!(correlationId: correlation_id) if correlation_id
222
225
 
223
226
  user_details = if affected_user_present?(env)
224
227
  user_information(env)
@@ -25,6 +25,12 @@ module Raygun
25
25
  # Your Raygun API Key - this can be found on your dashboard at Raygun.io
26
26
  config_option :api_key
27
27
 
28
+ # Your JS Raygun API Key - Should be different to your api_key, it's best practice to separate your errors between front end and back end.
29
+ config_option :js_api_key
30
+
31
+ # Your JS Raygun API Version, defaults to latest as found on https://raygun.com/raygun-providers/javascript
32
+ config_option :js_api_version
33
+
28
34
  # Array of exception classes to ignore
29
35
  config_option :ignore
30
36
 
File without changes
@@ -0,0 +1,42 @@
1
+ # Client for injecting JavaScript code for tracking front end exceptions
2
+ # https://raygun.com/docs/languages/javascript
3
+ module Raygun
4
+ class JavaScriptTracker
5
+ def head_html
6
+ return unless js_api_key?
7
+ [
8
+ '<script type="text/javascript">',
9
+ '!function(a,b,c,d,e,f,g,h){a.RaygunObject=e,a[e]=a[e]||function(){',
10
+ '(a[e].o=a[e].o||[]).push(arguments)},f=b.createElement(c),g=b.getElementsByTagName(c)[0],',
11
+ 'f.async=1,f.src=d,g.parentNode.insertBefore(f,g),h=a.onerror,a.onerror=function(b,c,d,f,g){',
12
+ 'h&&h(b,c,d,f,g),g||(g=new Error(b)),a[e].q=a[e].q||[],a[e].q.push({',
13
+ 'e:g})}}(window,document,"script","//cdn.raygun.io/raygun4js/' + js_api_version + 'raygun.min.js","rg4js");',
14
+ '</script>'
15
+ ].join('').html_safe
16
+ end
17
+
18
+ def body_html
19
+ return unless js_api_key?
20
+ [
21
+ '<script type="text/javascript">',
22
+ "rg4js('apiKey', '#{js_api_key}');",
23
+ "rg4js('enableCrashReporting', true);",
24
+ '</script>'
25
+ ].join('').html_safe
26
+ end
27
+
28
+ private
29
+
30
+ def js_api_key
31
+ @js_api_key ||= Raygun.configuration.js_api_key
32
+ end
33
+
34
+ def js_api_version
35
+ @js_api_version ||= Raygun.configuration.js_api_version ? "#{Raygun.configuration.js_api_version}/" : ''
36
+ end
37
+
38
+ def js_api_key?
39
+ js_api_key.present?
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,32 @@
1
+ module Raygun::Middleware
2
+ class JavascriptExceptionTracking
3
+ def initialize(app)
4
+ @app = app
5
+ end
6
+
7
+ def call(env)
8
+ status, headers, response = @app.call(env)
9
+
10
+ # It's a html file, inject our JS
11
+ if headers['Content-Type'] && headers['Content-Type'].include?('text/html')
12
+ response = inject_javascript_to_response(response)
13
+ end
14
+
15
+ [status, headers, response]
16
+ end
17
+
18
+ def inject_javascript_to_response(response)
19
+ if Raygun.configuration.js_api_key.present? && response.respond_to?('[]')
20
+ response[0].gsub!('</head>', "#{js_tracker.head_html}</head>")
21
+ response[0].gsub!('</body>', "#{js_tracker.body_html}</body>")
22
+ end
23
+
24
+ response
25
+ end
26
+
27
+ private
28
+ def js_tracker
29
+ @js_tracker = Raygun::JavaScriptTracker.new
30
+ end
31
+ end
32
+ end
@@ -19,7 +19,8 @@ class Raygun::Railtie < Rails::Railtie
19
19
  raygun_middleware = [
20
20
  Raygun::Middleware::RailsInsertAffectedUser,
21
21
  Raygun::Middleware::RackExceptionInterceptor,
22
- Raygun::Middleware::BreadcrumbsStoreInitializer
22
+ Raygun::Middleware::BreadcrumbsStoreInitializer,
23
+ Raygun::Middleware::JavascriptExceptionTracking
23
24
  ]
24
25
  raygun_middleware = raygun_middleware.map(&:to_s) unless Rails::VERSION::STRING >= "5"
25
26
  raygun_middleware.each do |m|
@@ -25,6 +25,9 @@ module Raygun
25
25
  sidekiq_context: context_hash
26
26
  }
27
27
  }
28
+ if correlation_id = exception.instance_variable_get(:@__raygun_correlation_id)
29
+ data.merge!(correlation_id: correlation_id)
30
+ end
28
31
  ::Raygun.track_exception(
29
32
  exception,
30
33
  data,
File without changes
@@ -1,3 +1,3 @@
1
1
  module Raygun
2
- VERSION = "3.0.0"
2
+ VERSION = "3.2.3.pre"
3
3
  end
File without changes
File without changes
File without changes
@@ -26,13 +26,20 @@ Gem::Specification.new do |spec|
26
26
  spec.add_runtime_dependency "concurrent-ruby"
27
27
 
28
28
  spec.add_development_dependency "bundler", ">= 1.1"
29
- spec.add_development_dependency "rake", "~> 11"
29
+ spec.add_development_dependency "rake", ">= 12.3.3"
30
30
  spec.add_development_dependency "timecop"
31
- spec.add_development_dependency "minitest", "~> 4.2"
31
+ spec.add_development_dependency "minitest", "~> 5.11"
32
32
  spec.add_development_dependency "redis-namespace", ">= 1.3.1"
33
33
  spec.add_development_dependency "resque"
34
34
  spec.add_development_dependency "sidekiq", [">= 3", "< 3.2.2"]
35
35
  spec.add_development_dependency "mocha"
36
36
  spec.add_development_dependency "pry"
37
37
  spec.add_development_dependency "webmock"
38
+
39
+ spec.add_development_dependency 'rails', "= 4.2.11"
40
+ spec.add_development_dependency 'sqlite3', '~> 1.3.6'
41
+ spec.add_development_dependency 'capybara'
42
+ spec.add_development_dependency "rspec-rails", '~> 3.9'
43
+ spec.add_development_dependency "launchy"
44
+ spec.add_development_dependency "simplecov"
38
45
  end
@@ -0,0 +1,17 @@
1
+ # See https://help.github.com/articles/ignoring-files for more about ignoring files.
2
+ #
3
+ # If you find yourself ignoring temporary files generated by your text editor
4
+ # or operating system, you probably want to add a global ignore instead:
5
+ # git config --global core.excludesfile '~/.gitignore_global'
6
+
7
+ # Ignore bundler config.
8
+ /.bundle
9
+
10
+ # Ignore the default SQLite database.
11
+ /db/*.sqlite3
12
+ /db/*.sqlite3-journal
13
+
14
+ # Ignore all logfiles and tempfiles.
15
+ /log/*
16
+ !/log/.keep
17
+ /tmp
@@ -0,0 +1,47 @@
1
+ source 'https://rubygems.org'
2
+
3
+
4
+ # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
5
+ gem 'rails', '4.2.11'
6
+ # Use sqlite3 as the database for Active Record
7
+ gem 'sqlite3'
8
+ # Use SCSS for stylesheets
9
+ gem 'sass-rails', '~> 5.0'
10
+ # Use Uglifier as compressor for JavaScript assets
11
+ gem 'uglifier', '>= 1.3.0'
12
+ # Use CoffeeScript for .coffee assets and views
13
+ gem 'coffee-rails', '~> 4.1.0'
14
+ # See https://github.com/rails/execjs#readme for more supported runtimes
15
+ # gem 'therubyracer', platforms: :ruby
16
+
17
+ # Use jquery as the JavaScript library
18
+ gem 'jquery-rails'
19
+ # Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
20
+ gem 'turbolinks'
21
+ # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
22
+ gem 'jbuilder', '~> 2.0'
23
+ # bundle exec rake doc:rails generates the API under doc/api.
24
+ gem 'sdoc', '~> 0.4.0', group: :doc
25
+
26
+ # Use ActiveModel has_secure_password
27
+ # gem 'bcrypt', '~> 3.1.7'
28
+
29
+ # Use Unicorn as the app server
30
+ # gem 'unicorn'
31
+
32
+ # Use Capistrano for deployment
33
+ # gem 'capistrano-rails', group: :development
34
+
35
+ group :development, :test do
36
+ # Call 'byebug' anywhere in the code to stop execution and get a debugger console
37
+ gem 'byebug'
38
+ end
39
+
40
+ group :development do
41
+ # Access an IRB console on exception pages or by using <%= console %> in views
42
+ gem 'web-console', '~> 2.0'
43
+
44
+ # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
45
+ gem 'spring'
46
+ end
47
+