ratchetio 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. data/.gitignore +1 -0
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +2 -0
  4. data/Rakefile +7 -1
  5. data/lib/generators/ratchetio/ratchetio_generator.rb +1 -1
  6. data/lib/ratchetio/configuration.rb +9 -10
  7. data/lib/ratchetio/rails/controller_methods.rb +3 -3
  8. data/lib/ratchetio/rails/middleware/exception_catcher.rb +2 -4
  9. data/lib/ratchetio/version.rb +1 -1
  10. data/lib/ratchetio.rb +87 -60
  11. data/ratchetio.gemspec +16 -1
  12. data/spec/controllers/home_controller_spec.rb +41 -0
  13. data/spec/dummyapp/.gitignore +74 -0
  14. data/spec/dummyapp/Gemfile +19 -0
  15. data/spec/dummyapp/README +19 -0
  16. data/spec/dummyapp/README.textile +80 -0
  17. data/spec/dummyapp/Rakefile +7 -0
  18. data/spec/dummyapp/app/assets/javascripts/application.js +15 -0
  19. data/spec/dummyapp/app/assets/javascripts/home.js.coffee +3 -0
  20. data/spec/dummyapp/app/assets/stylesheets/application.css.scss +37 -0
  21. data/spec/dummyapp/app/assets/stylesheets/home.css.scss +3 -0
  22. data/spec/dummyapp/app/controllers/application_controller.rb +3 -0
  23. data/spec/dummyapp/app/controllers/home_controller.rb +21 -0
  24. data/spec/dummyapp/app/controllers/users_controller.rb +12 -0
  25. data/spec/dummyapp/app/helpers/application_helper.rb +2 -0
  26. data/spec/dummyapp/app/helpers/home_helper.rb +2 -0
  27. data/spec/dummyapp/app/mailers/.gitkeep +0 -0
  28. data/spec/dummyapp/app/models/.gitkeep +0 -0
  29. data/spec/dummyapp/app/models/user.rb +11 -0
  30. data/spec/dummyapp/app/views/devise/registrations/edit.html.erb +27 -0
  31. data/spec/dummyapp/app/views/devise/registrations/new.html.erb +20 -0
  32. data/spec/dummyapp/app/views/devise/shared/_links.html.erb +25 -0
  33. data/spec/dummyapp/app/views/home/cause_exception.html.erb +1 -0
  34. data/spec/dummyapp/app/views/home/index.html.erb +4 -0
  35. data/spec/dummyapp/app/views/home/report_exception.html.erb +1 -0
  36. data/spec/dummyapp/app/views/layouts/_messages.html.erb +5 -0
  37. data/spec/dummyapp/app/views/layouts/_navigation.html.erb +21 -0
  38. data/spec/dummyapp/app/views/layouts/application.html.erb +25 -0
  39. data/spec/dummyapp/app/views/users/index.html.erb +8 -0
  40. data/spec/dummyapp/app/views/users/show.html.erb +3 -0
  41. data/spec/dummyapp/config/application.rb +76 -0
  42. data/spec/dummyapp/config/boot.rb +6 -0
  43. data/spec/dummyapp/config/cucumber.yml +8 -0
  44. data/spec/dummyapp/config/environment.rb +5 -0
  45. data/spec/dummyapp/config/environments/development.rb +54 -0
  46. data/spec/dummyapp/config/environments/production.rb +87 -0
  47. data/spec/dummyapp/config/environments/test.rb +41 -0
  48. data/spec/dummyapp/config/initializers/backtrace_silencers.rb +7 -0
  49. data/spec/dummyapp/config/initializers/devise.rb +233 -0
  50. data/spec/dummyapp/config/initializers/generators.rb +2 -0
  51. data/spec/dummyapp/config/initializers/inflections.rb +15 -0
  52. data/spec/dummyapp/config/initializers/mime_types.rb +5 -0
  53. data/spec/dummyapp/config/initializers/ratchetio.rb +20 -0
  54. data/spec/dummyapp/config/initializers/secret_token.rb +7 -0
  55. data/spec/dummyapp/config/initializers/session_store.rb +8 -0
  56. data/spec/dummyapp/config/initializers/wrap_parameters.rb +14 -0
  57. data/spec/dummyapp/config/locales/devise.en.yml +58 -0
  58. data/spec/dummyapp/config/locales/en.yml +5 -0
  59. data/spec/dummyapp/config/routes.rb +11 -0
  60. data/spec/dummyapp/config.ru +4 -0
  61. data/spec/dummyapp/db/migrate/20121121184652_devise_create_users.rb +46 -0
  62. data/spec/dummyapp/db/migrate/20121121184654_add_name_to_users.rb +5 -0
  63. data/spec/dummyapp/db/schema.rb +35 -0
  64. data/spec/dummyapp/db/seeds.rb +12 -0
  65. data/spec/dummyapp/lib/assets/.gitkeep +0 -0
  66. data/spec/dummyapp/lib/tasks/.gitkeep +0 -0
  67. data/spec/dummyapp/lib/tasks/cucumber.rake +65 -0
  68. data/spec/dummyapp/public/404.html +26 -0
  69. data/spec/dummyapp/public/422.html +26 -0
  70. data/spec/dummyapp/public/500.html +25 -0
  71. data/spec/dummyapp/public/favicon.ico +0 -0
  72. data/spec/dummyapp/public/humans.txt +20 -0
  73. data/spec/dummyapp/public/robots.txt +5 -0
  74. data/spec/dummyapp/script/cucumber +10 -0
  75. data/spec/dummyapp/script/rails +6 -0
  76. data/spec/dummyapp/vendor/assets/javascripts/.gitkeep +0 -0
  77. data/spec/dummyapp/vendor/assets/stylesheets/.gitkeep +0 -0
  78. data/spec/dummyapp/vendor/plugins/.gitkeep +0 -0
  79. data/spec/ratchetio_spec.rb +233 -1
  80. data/spec/spec_helper.rb +36 -0
  81. data/spec/support/devise.rb +3 -0
  82. metadata +350 -3
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ *.swp
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Change Log
2
2
 
3
+ **0.4.3**
4
+ - Add RSpec test suite. A few minor code changes.
5
+
6
+ **0.4.2**
7
+ - Add "ignore" filter level to completely ignore exceptions by class.
8
+
3
9
  **0.4.1**
4
10
  - Recursively filter files out of the params hash. Thanks to [trisweb](https://github.com/trisweb) for the pull request.
5
11
 
data/README.md CHANGED
@@ -105,3 +105,5 @@ If you run into any issues, please email us at `support@ratchet.io`
105
105
  3. Commit your changes (`git commit -am 'Added some feature'`)
106
106
  4. Push to the branch (`git push origin my-new-feature`)
107
107
  5. Create new Pull Request
108
+
109
+ We're using RSpec for testing. Run the test suite with `rake spec`. Tests for pull requests are appreciated but not required. (If you don't include a test, we'll write one before merging.)
data/Rakefile CHANGED
@@ -1,2 +1,8 @@
1
1
  #!/usr/bin/env rake
2
- require "bundler/gem_tasks"
2
+ require 'bundler/gem_tasks'
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new('spec')
6
+
7
+ desc 'Run tests'
8
+ task :default => :spec
@@ -4,7 +4,7 @@ require 'rails/generators/named_base'
4
4
  module Ratchetio
5
5
  module Generators
6
6
  class RatchetioGenerator < ::Rails::Generators::Base
7
- argument :access_token, :type => :string, :banner => "access_token"
7
+ argument :access_token, :type => :string, :banner => 'access_token'
8
8
 
9
9
  source_root File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
10
10
 
@@ -2,20 +2,19 @@ module Ratchetio
2
2
  class Configuration
3
3
 
4
4
  attr_accessor :access_token
5
- attr_accessor :environment
6
- attr_accessor :root
7
5
  attr_accessor :branch
8
- attr_accessor :framework
9
6
  attr_accessor :endpoint
10
7
  attr_accessor :exception_level_filters
8
+ attr_accessor :environment
9
+ attr_accessor :framework
10
+ attr_accessor :logger
11
11
  attr_accessor :person_method
12
12
  attr_accessor :person_id_method
13
13
  attr_accessor :person_username_method
14
14
  attr_accessor :person_email_method
15
+ attr_accessor :root
15
16
 
16
- attr_accessor :logger
17
-
18
- DEFAULT_ENDPOINT = "https://submit.ratchet.io/api/1/item/"
17
+ DEFAULT_ENDPOINT = 'https://submit.ratchet.io/api/1/item/'
19
18
 
20
19
  def initialize
21
20
  @endpoint = DEFAULT_ENDPOINT
@@ -25,10 +24,10 @@ module Ratchetio
25
24
  'AbstractController::ActionNotFound' => 'warning',
26
25
  'ActionController::RoutingError' => 'warning'
27
26
  }
28
- @person_method = "current_user"
29
- @person_id_method = "id"
30
- @person_username_method = "username"
31
- @person_email_method = "email"
27
+ @person_method = 'current_user'
28
+ @person_id_method = 'id'
29
+ @person_username_method = 'username'
30
+ @person_email_method = 'email'
32
31
  end
33
32
 
34
33
  # allow params to be read like a hash
@@ -45,7 +45,7 @@ module Ratchetio
45
45
  :size => v.tempfile.size
46
46
  }
47
47
  rescue
48
- filtered[k] = "Uploaded file"
48
+ filtered[k] = 'Uploaded file'
49
49
  end
50
50
  elsif v.is_a? Hash
51
51
  filtered[k] = ratchetio_filter_params v
@@ -67,11 +67,11 @@ module Ratchetio
67
67
 
68
68
  def ratchetio_user_ip
69
69
  # priority: X-Real-Ip, then X-Forwarded-For, then request.remote_ip
70
- real_ip = request.env["HTTP_X_REAL_IP"]
70
+ real_ip = request.env['HTTP_X_REAL_IP']
71
71
  if real_ip
72
72
  return real_ip
73
73
  end
74
- forwarded_for = request.env["HTTP_X_FORWARDED_FOR"]
74
+ forwarded_for = request.env['HTTP_X_FORWARDED_FOR']
75
75
  if forwarded_for
76
76
  return forwarded_for
77
77
  end
@@ -7,16 +7,14 @@ module Ratchetio
7
7
  end
8
8
 
9
9
  def render_exception_with_ratchetio(env, exception)
10
- # wrap everything in a begin-rescue block
11
10
  begin
12
11
  controller = env['action_controller.instance']
13
12
  request_data = controller.try(:ratchetio_request_data)
14
13
  person_data = controller.try(:ratchetio_person_data)
15
14
  Ratchetio.report_exception(exception, request_data, person_data)
16
- rescue Exception => exc
15
+ rescue => e
17
16
  # TODO use logger here?
18
- puts "[Ratchet.io] Exception while reporting exception to Ratchet.io: "
19
- puts exc
17
+ puts "[Ratchet.io] Exception while reporting exception to Ratchet.io: #{e}"
20
18
  end
21
19
 
22
20
  # now continue as normal
@@ -1,3 +1,3 @@
1
1
  module Ratchetio
2
- VERSION = "0.4.2"
2
+ VERSION = "0.4.3"
3
3
  end
data/lib/ratchetio.rb CHANGED
@@ -7,75 +7,106 @@ require 'ratchetio/configuration'
7
7
  require 'ratchetio/railtie'
8
8
 
9
9
  module Ratchetio
10
-
11
10
  class << self
12
11
  attr_writer :configuration
13
12
 
13
+ # Configures the gem.
14
+ #
15
+ # Call on app startup to set the `access_token` (required) and other config params.
16
+ # In a Rails app, this is called by `config/initializers/ratchetio.rb` which is generated
17
+ # with `rails generate ratchetio access-token-here`
18
+ #
19
+ # @example
20
+ # Ratchetio.configure do |config|
21
+ # config.access_token = 'abcdefg'
22
+ # end
14
23
  def configure
15
24
  yield(configuration)
16
25
  end
17
26
 
27
+ # Returns the configuration object.
28
+ #
29
+ # @return [Ratchetio::Configuration] The configuration object
18
30
  def configuration
19
31
  @configuration ||= Configuration.new
20
32
  end
21
33
 
22
- def report_exception(exception, request_data={}, person_data={})
23
- begin
24
- filtered_level = configuration.exception_level_filters[exception.class.name]
25
- if filtered_level == 'ignore'
26
- # ignored - do nothing
27
- return
28
- end
29
-
30
- data = exception_data(exception, filtered_level)
31
- if request_data
32
- data[:request] = request_data
33
- end
34
- if person_data
35
- data[:person] = person_data
36
- end
37
-
38
- payload = build_payload(data)
39
- send_payload(payload)
40
- rescue Exception => e
41
- logger.error "[Ratchet.io] Error reporting exception to Ratchet.io: #{e}"
34
+ # Reports an exception to Ratchet.io
35
+ #
36
+ # @example
37
+ # begin
38
+ # foo = bar
39
+ # rescue => e
40
+ # Ratchetio.report_exception(e)
41
+ # end
42
+ #
43
+ # @param exception [Exception] The exception object to report
44
+ # @param request_data [Hash] Data describing the request. Should be the result of calling
45
+ # `ratchetio_request_data`.
46
+ # @param person_data [Hash] Data describing the affected person. Should be the result of calling
47
+ # `ratchetio_person_data`
48
+ def report_exception(exception, request_data = nil, person_data = nil)
49
+ filtered_level = configuration.exception_level_filters[exception.class.name]
50
+ if filtered_level == 'ignore'
51
+ # ignored - do nothing
52
+ return
42
53
  end
54
+
55
+ data = exception_data(exception, filtered_level)
56
+ data[:request] = request_data if request_data
57
+ data[:person] = person_data if person_data
58
+
59
+ payload = build_payload(data)
60
+ send_payload(payload)
61
+ rescue => e
62
+ logger.error "[Ratchet.io] Error reporting exception to Ratchet.io: #{e}"
43
63
  end
44
64
 
45
- def report_message(message, level="info", extra_data={})
46
- begin
47
- data = base_data(level)
48
-
49
- data[:body] = {
50
- :message => {
51
- :body => message.to_s
52
- }
53
- }
54
- data[:body][:message].merge!(extra_data)
55
- data[:server] = server_data
56
-
57
- payload = build_payload(data)
58
- send_payload(payload)
59
- rescue Exception => e
60
- logger.error "[Ratchet.io] Error reporting message to Ratchet.io: #{e}"
61
- end
65
+ # Reports an arbitrary message to Ratchet.io
66
+ #
67
+ # @example
68
+ # Ratchetio.report_message("User login failed", 'info', :user_id => 123)
69
+ #
70
+ # @param message [String] The message body. This will be used to identify the message within
71
+ # Ratchet. For best results, avoid putting variables in the message body; pass them as
72
+ # `extra_data` instead.
73
+ # @param level [String] The level. One of: 'critical', 'error', 'warning', 'info', 'debug'
74
+ # @param extra_data [Hash] Additional data to include alongside the body. Don't use 'body' as
75
+ # it is reserved.
76
+ def report_message(message, level = 'info', extra_data = {})
77
+ data = message_data(message, level, extra_data)
78
+ payload = build_payload(data)
79
+ send_payload(payload)
80
+ rescue => e
81
+ logger.error "[Ratchet.io] Error reporting message to Ratchet.io: #{e}"
62
82
  end
63
83
 
64
- private
84
+ private
85
+
86
+ def message_data(message, level, extra_data)
87
+ data = base_data(level)
88
+
89
+ data[:body] = {
90
+ :message => {
91
+ :body => message.to_s
92
+ }
93
+ }
94
+ data[:body][:message].merge!(extra_data)
95
+ data[:server] = server_data
96
+
97
+ data
98
+ end
65
99
 
66
100
  def exception_data(exception, force_level = nil)
67
101
  data = base_data
68
102
 
69
- if force_level
70
- data[:level] = force_level
71
- end
103
+ data[:level] = force_level if force_level
72
104
 
73
105
  # parse backtrace
74
- frames = []
75
- exception.backtrace.each { |frame|
106
+ frames = exception.backtrace.map { |frame|
76
107
  # parse the line
77
108
  match = frame.match(/(.*):(\d+)(?::in `([^']+)')?/)
78
- frames.push({ :filename => match[1], :lineno => match[2].to_i, :method => match[3] })
109
+ { :filename => match[1], :lineno => match[2].to_i, :method => match[3] }
79
110
  }
80
111
  # reverse so that the order is as ratchet expects
81
112
  frames.reverse!
@@ -100,7 +131,7 @@ module Ratchetio
100
131
  end
101
132
 
102
133
  def send_payload(payload)
103
- logger.info "[Ratchet.io] Sending payload"
134
+ logger.info '[Ratchet.io] Sending payload'
104
135
 
105
136
  uri = URI.parse(configuration.endpoint)
106
137
  http = Net::HTTP.new(uri.host, uri.port)
@@ -112,11 +143,10 @@ module Ratchetio
112
143
  response = http.request(request)
113
144
 
114
145
  if response.code == '200'
115
- logger.info "[Ratchet.io] Success"
146
+ logger.info '[Ratchet.io] Success'
116
147
  else
117
- logger.warn "[Ratchet.io] Got unexpected status code from Ratchet.io api: " + response.code
118
- logger.info "[Ratchet.io] Response:"
119
- logger.info response.body
148
+ logger.warn "[Ratchet.io] Got unexpected status code from Ratchet.io api: #{response.code}"
149
+ logger.info "[Ratchet.io] Response: #{response.body}"
120
150
  end
121
151
  end
122
152
 
@@ -128,16 +158,16 @@ module Ratchetio
128
158
  ActiveSupport::JSON.encode(payload)
129
159
  end
130
160
 
131
- def base_data(level="error")
161
+ def base_data(level = 'error')
132
162
  config = configuration
133
163
  {
134
164
  :timestamp => Time.now.to_i,
135
165
  :environment => config.environment,
136
166
  :level => level,
137
- :language => "ruby",
167
+ :language => 'ruby',
138
168
  :framework => config.framework,
139
169
  :notifier => {
140
- :name => "ratchetio-gem",
170
+ :name => 'ratchetio-gem',
141
171
  :version => VERSION
142
172
  }
143
173
  }
@@ -145,18 +175,15 @@ module Ratchetio
145
175
 
146
176
  def server_data
147
177
  config = configuration
178
+
148
179
  data = {
149
180
  :host => Socket.gethostname
150
181
  }
151
- if config.root
152
- data[:root] = config.root.to_s
153
- end
154
- if config.branch
155
- data[:branch] = config.branch
156
- end
182
+ data[:root] = config.root.to_s if config.root
183
+ data[:branch] = config.branch if config.branch
184
+
157
185
  data
158
186
  end
159
187
 
160
188
  end
161
189
  end
162
-
data/ratchetio.gemspec CHANGED
@@ -15,5 +15,20 @@ Gem::Specification.new do |gem|
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = Ratchetio::VERSION
17
17
 
18
- #gem.add_development_dependency "rspec", "~> 2.6"
18
+ gem.add_development_dependency 'rspec-rails', '~> 2.12'
19
+ gem.add_development_dependency 'rails', '~> 3.2.9'
20
+ gem.add_development_dependency 'sqlite3'
21
+ gem.add_development_dependency 'jquery-rails'
22
+ gem.add_development_dependency 'jquery-rails'
23
+
24
+ gem.add_development_dependency 'rspec-rails', '>= 2.11.4'
25
+ gem.add_development_dependency 'database_cleaner', '>= 0.9.1'
26
+ gem.add_development_dependency 'email_spec', '>= 1.4.0'
27
+ gem.add_development_dependency 'cucumber-rails', '>= 1.3.0'
28
+ gem.add_development_dependency 'launchy', '>= 2.1.2'
29
+ #gem.add_development_dependency 'capybara', '>= 1.1.3'
30
+ gem.add_development_dependency 'factory_girl_rails', '>= 4.1.0'
31
+ gem.add_development_dependency 'devise', '>= 2.1.2'
32
+ gem.add_development_dependency 'quiet_assets', '>= 1.0.1'
33
+
19
34
  end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ describe HomeController do
4
+
5
+ before(:each) do
6
+ Ratchetio.configure do |config|
7
+ config.logger = logger_mock
8
+ end
9
+ end
10
+
11
+ let(:logger_mock) { double("Rails.logger").as_null_object }
12
+
13
+ describe "GET 'index'" do
14
+ it "should be successful and report a message" do
15
+ logger_mock.should_receive(:info).with('[Ratchet.io] Sending payload')
16
+ get 'index'
17
+ response.should be_success
18
+ end
19
+ end
20
+
21
+ describe "GET 'report_exception'" do
22
+ it "should raise a NameError and report an exception" do
23
+ logger_mock.should_receive(:info).with('[Ratchet.io] Sending payload')
24
+
25
+ get 'report_exception'
26
+ response.should be_success
27
+ end
28
+ end
29
+
30
+ # TODO need to figure out how to make a test request that uses enough of the middleware
31
+ # that it invokes the ratchetio exception catcher. just plain "get 'some_url'" doesn't
32
+ # seem to work.
33
+ it "should report uncaught exceptions"
34
+
35
+ after(:each) do
36
+ Ratchetio.configure do |config|
37
+ config.logger = ::Rails.logger
38
+ end
39
+ end
40
+
41
+ end
@@ -0,0 +1,74 @@
1
+ #----------------------------------------------------------------------------
2
+ # Ignore these files when commiting to a git repository.
3
+ #
4
+ # See http://help.github.com/ignore-files/ for more about ignoring files.
5
+ #
6
+ # The original version of this file is found here:
7
+ # https://github.com/RailsApps/rails-composer/blob/master/files/gitignore.txt
8
+ #
9
+ # Corrections? Improvements? Create a GitHub issue:
10
+ # http://github.com/RailsApps/rails-composer/issues
11
+ #----------------------------------------------------------------------------
12
+
13
+ # bundler state
14
+ /.bundle
15
+ /vendor/bundle/
16
+ /vendor/ruby/
17
+
18
+ # minimal Rails specific artifacts
19
+ db/*.sqlite3
20
+ /log/*
21
+ /tmp/*
22
+
23
+ # various artifacts
24
+ **.war
25
+ *.rbc
26
+ *.sassc
27
+ .rspec
28
+ .redcar/
29
+ .sass-cache
30
+ /config/config.yml
31
+ /config/database.yml
32
+ /coverage.data
33
+ /coverage/
34
+ /db/*.javadb/
35
+ /db/*.sqlite3
36
+ /doc/api/
37
+ /doc/app/
38
+ /doc/features.html
39
+ /doc/specs.html
40
+ /public/cache
41
+ /public/stylesheets/compiled
42
+ /public/system/*
43
+ /spec/tmp/*
44
+ /cache
45
+ /capybara*
46
+ /capybara-*.html
47
+ /gems
48
+ /specifications
49
+ rerun.txt
50
+ pickle-email-*.html
51
+
52
+ # If you find yourself ignoring temporary files generated by your text editor
53
+ # or operating system, you probably want to add a global ignore instead:
54
+ # git config --global core.excludesfile ~/.gitignore_global
55
+ #
56
+ # Here are some files you may want to ignore globally:
57
+
58
+ # scm revert files
59
+ **.orig
60
+
61
+ # Mac finder artifacts
62
+ .DS_Store
63
+
64
+ # Netbeans project directory
65
+ /nbproject/
66
+
67
+ # RubyMine project files
68
+ .idea
69
+
70
+ # Textmate project files
71
+ /*.tmproj
72
+
73
+ # vim artifacts
74
+ **.swp
@@ -0,0 +1,19 @@
1
+ source 'https://rubygems.org'
2
+ gem 'rails', '3.2.9'
3
+ gem 'sqlite3'
4
+ group :assets do
5
+ gem 'sass-rails', '~> 3.2.3'
6
+ gem 'coffee-rails', '~> 3.2.1'
7
+ gem 'uglifier', '>= 1.0.3'
8
+ end
9
+ gem 'jquery-rails'
10
+ gem "rspec-rails", ">= 2.11.4", :group => [:development, :test]
11
+ gem "database_cleaner", ">= 0.9.1", :group => :test
12
+ gem "email_spec", ">= 1.4.0", :group => :test
13
+ gem "cucumber-rails", ">= 1.3.0", :group => :test, :require => false
14
+ gem "launchy", ">= 2.1.2", :group => :test
15
+ gem "capybara", ">= 1.1.3", :group => :test
16
+ gem "factory_girl_rails", ">= 4.1.0", :group => [:development, :test]
17
+ gem "devise", ">= 2.1.2"
18
+ gem "quiet_assets", ">= 1.0.1", :group => :development
19
+ gem "ratchetio", :path => "../.."
@@ -0,0 +1,19 @@
1
+ Dummyapp
2
+ ========================
3
+
4
+ This application was generated with the rails_apps_composer gem:
5
+ https://github.com/RailsApps/rails_apps_composer
6
+ provided by the RailsApps Project:
7
+ http://railsapps.github.com/
8
+
9
+ ________________________
10
+
11
+ Recipes:
12
+ ["controllers", "core", "email", "extras", "frontend", "gems", "git", "init", "models", "prelaunch", "railsapps", "readme", "routes", "saas", "setup", "testing", "views"]
13
+
14
+ Preferences:
15
+ {:git=>true, :railsapps=>"rails3-devise-rspec-cucumber", :database=>"sqlite", :unit_test=>"rspec", :integration=>"cucumber", :fixtures=>"factory_girl", :frontend=>"none", :email=>"gmail", :authentication=>"devise", :devise_modules=>"default", :authorization=>"none", :starter_app=>"users_app", :form_builder=>"none", :quiet_assets=>true, :dev_webserver=>"webrick", :templates=>"erb"}
16
+
17
+ ________________________
18
+
19
+ License
@@ -0,0 +1,80 @@
1
+ h1. Dummyapp
2
+
3
+ This application was generated with the "rails_apps_composer":https://github.com/RailsApps/rails_apps_composer gem provided by the "RailsApps Project":http://railsapps.github.com/.
4
+
5
+ h2. Diagnostics
6
+
7
+ This application was built with recipes that are known to work together.
8
+
9
+ This application was built with preferences that are known to work together.
10
+
11
+ If the application doesn't work as expected, please "report an issue":https://github.com/RailsApps/rails_apps_composer/issues and include these diagnostics:
12
+
13
+ We'd also like to know if you've found combinations of recipes or preferences that do work together.
14
+
15
+ Recipes:
16
+ ["controllers", "core", "email", "extras", "frontend", "gems", "git", "init", "models", "prelaunch", "railsapps", "readme", "routes", "saas", "setup", "testing", "views"]
17
+
18
+ Preferences:
19
+ {:git=>true, :railsapps=>"rails3-devise-rspec-cucumber", :database=>"sqlite", :unit_test=>"rspec", :integration=>"cucumber", :fixtures=>"factory_girl", :frontend=>"none", :email=>"gmail", :authentication=>"devise", :devise_modules=>"default", :authorization=>"none", :starter_app=>"users_app", :form_builder=>"none", :quiet_assets=>true, :dev_webserver=>"webrick", :templates=>"erb"}
20
+
21
+ h2. Ruby on Rails
22
+
23
+ This application requires:
24
+
25
+ * Ruby version 1.9.3
26
+ * Rails version 3.2.9
27
+
28
+ Learn more about "Installing Rails":http://railsapps.github.com/installing-rails.html.
29
+
30
+ h2. Database
31
+
32
+ This application uses SQLite with ActiveRecord.
33
+
34
+ h2. Development
35
+
36
+ * Template Engine: ERB
37
+ * Testing Framework: RSpec and Factory Girl and Cucumber
38
+ * Front-end Framework: None
39
+ * Form Builder: None
40
+ * Authentication: Devise
41
+ * Authorization: None
42
+
43
+ h2. Email
44
+
45
+ The application is configured to send email using a Gmail account.
46
+
47
+ h2. Getting Started
48
+
49
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
50
+
51
+ h2. Documentation and Support
52
+
53
+ This is the only documentation.
54
+
55
+ h4. Issues
56
+
57
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
58
+
59
+ h2. Similar Projects
60
+
61
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
62
+
63
+ h2. Contributing
64
+
65
+ If you make improvements to this application, please share with others.
66
+
67
+ * Fork the project on GitHub.
68
+ * Make your feature addition or bug fix.
69
+ * Commit with Git.
70
+ * Send the author a pull request.
71
+
72
+ If you add functionality to this application, create an alternative implementation, or build an application that is similar, please contact me and I'll add a note to the README so that others can find your work.
73
+
74
+ h2. Credits
75
+
76
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
77
+
78
+ h2. License
79
+
80
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env rake
2
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
3
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
4
+
5
+ require File.expand_path('../config/application', __FILE__)
6
+
7
+ Dummyapp::Application.load_tasks
@@ -0,0 +1,15 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // the compiled file.
9
+ //
10
+ // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
+ // GO AFTER THE REQUIRES BELOW.
12
+ //
13
+ //= require jquery
14
+ //= require jquery_ujs
15
+ //= require_tree .
@@ -0,0 +1,3 @@
1
+ # Place all the behaviors and hooks related to the matching controller here.
2
+ # All this logic will automatically be available in application.js.
3
+ # You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/