ratchetio 0.4.2 → 0.4.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 (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/