my_dashboard 0.4.1
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.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/.travis.yml +9 -0
- data/CHANGELOG.md +23 -0
- data/Gemfile +20 -0
- data/MIT-LICENSE +20 -0
- data/README.md +223 -0
- data/Rakefile +7 -0
- data/app/assets/javascripts/my_dashboard/application.js +17 -0
- data/app/assets/javascripts/my_dashboard/my_dashboard.coffee +0 -0
- data/app/assets/stylesheets/my_dashboard/application.css +13 -0
- data/app/controllers/my_dashboard/application_controller.rb +23 -0
- data/app/controllers/my_dashboard/dashboards_controller.rb +31 -0
- data/app/controllers/my_dashboard/events_controller.rb +28 -0
- data/app/controllers/my_dashboard/widgets_controller.rb +45 -0
- data/app/helpers/my_dashboard/application_helper.rb +4 -0
- data/app/views/layouts/my_dashboard/dashboard.html.erb +30 -0
- data/app/views/my_dashboard/widgets/clock.html +2 -0
- data/app/views/my_dashboard/widgets/comments.html +7 -0
- data/app/views/my_dashboard/widgets/graph.html +5 -0
- data/app/views/my_dashboard/widgets/iframe.html +1 -0
- data/app/views/my_dashboard/widgets/image.html +1 -0
- data/app/views/my_dashboard/widgets/list.html +18 -0
- data/app/views/my_dashboard/widgets/meter.html +7 -0
- data/app/views/my_dashboard/widgets/number.html +11 -0
- data/app/views/my_dashboard/widgets/text.html +7 -0
- data/bin/rails +8 -0
- data/config/routes.rb +15 -0
- data/lib/assets/javascripts/my_dashboard.gridster.coffee +0 -0
- data/lib/generators/my_dashboard/install_generator.rb +36 -0
- data/lib/generators/my_dashboard/job_generator.rb +15 -0
- data/lib/generators/my_dashboard/widget_generator.rb +17 -0
- data/lib/generators/templates/dashboards/sample.html.erb +28 -0
- data/lib/generators/templates/initializer.rb +58 -0
- data/lib/generators/templates/jobs/new.rb +3 -0
- data/lib/generators/templates/jobs/sample.rb +9 -0
- data/lib/generators/templates/layouts/dashboard.html.erb +30 -0
- data/lib/generators/templates/widgets/index.css +12 -0
- data/lib/generators/templates/widgets/index.js +13 -0
- data/lib/generators/templates/widgets/new.coffee +9 -0
- data/lib/generators/templates/widgets/new.html +1 -0
- data/lib/generators/templates/widgets/new.scss +10 -0
- data/lib/my_dashboard.rb +50 -0
- data/lib/my_dashboard/configuration.rb +63 -0
- data/lib/my_dashboard/engine.rb +7 -0
- data/lib/my_dashboard/railtie.rb +31 -0
- data/lib/my_dashboard/version.rb +3 -0
- data/lib/tasks/my_dashboard_tasks.rake +4 -0
- data/my_dashboard.gemspec +31 -0
- data/spec/controllers/my_dashboard/application_controller_spec.rb +21 -0
- data/spec/controllers/my_dashboard/dashboards_controller_spec.rb +46 -0
- data/spec/controllers/my_dashboard/events_controller_spec.rb +11 -0
- data/spec/controllers/my_dashboard/widgets_controller_spec.rb +72 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/images/.keep +0 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/javascripts/my_dashboard/widgets/foo.coffee +0 -0
- data/spec/dummy/app/assets/javascripts/my_dashboard/widgets/index.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/assets/stylesheets/my_dashboard/widgets/foo.scss +0 -0
- data/spec/dummy/app/assets/stylesheets/my_dashboard/widgets/index.css +12 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/controllers/concerns/.keep +0 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/jobs/sample.rb +9 -0
- data/spec/dummy/app/mailers/.keep +0 -0
- data/spec/dummy/app/models/.keep +0 -0
- data/spec/dummy/app/models/concerns/.keep +0 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/app/views/layouts/my_dashboard/dashboard.html.erb +30 -0
- data/spec/dummy/app/views/my_dashboard/dashboards/foo.erb +0 -0
- data/spec/dummy/app/views/my_dashboard/dashboards/sample.html.erb +28 -0
- data/spec/dummy/app/views/my_dashboard/widgets/foo.html +0 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +23 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +29 -0
- data/spec/dummy/config/environments/production.rb +80 -0
- data/spec/dummy/config/environments/test.rb +36 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/my_dashboard.rb +58 -0
- data/spec/dummy/config/initializers/secret_token.rb +12 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +3 -0
- data/spec/dummy/lib/assets/.keep +0 -0
- data/spec/dummy/log/.keep +0 -0
- data/spec/dummy/public/404.html +58 -0
- data/spec/dummy/public/422.html +58 -0
- data/spec/dummy/public/500.html +57 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/lib/generators/widget_generator_spec.rb +26 -0
- data/spec/lib/my_dashboard/configuration_spec.rb +66 -0
- data/spec/lib/my_dashboard_spec.rb +55 -0
- data/spec/spec_helper.rb +52 -0
- data/spec/support/controller_spec_helpers.rb +9 -0
- data/vendor/assets/fonts/my_dashboard/fontawesome-webfont.eot +0 -0
- data/vendor/assets/fonts/my_dashboard/fontawesome-webfont.svg +414 -0
- data/vendor/assets/fonts/my_dashboard/fontawesome-webfont.ttf +0 -0
- data/vendor/assets/fonts/my_dashboard/fontawesome-webfont.woff +0 -0
- data/vendor/assets/javascripts/my_dashboard/batman.jquery.js +163 -0
- data/vendor/assets/javascripts/my_dashboard/batman.js +13680 -0
- data/vendor/assets/javascripts/my_dashboard/d3-3.2.8.min.js +5 -0
- data/vendor/assets/javascripts/my_dashboard/default_widgets/clock.coffee +18 -0
- data/vendor/assets/javascripts/my_dashboard/default_widgets/comments.coffee +24 -0
- data/vendor/assets/javascripts/my_dashboard/default_widgets/graph.coffee +37 -0
- data/vendor/assets/javascripts/my_dashboard/default_widgets/iframe.coffee +9 -0
- data/vendor/assets/javascripts/my_dashboard/default_widgets/image.coffee +9 -0
- data/vendor/assets/javascripts/my_dashboard/default_widgets/index.js +13 -0
- data/vendor/assets/javascripts/my_dashboard/default_widgets/list.coffee +6 -0
- data/vendor/assets/javascripts/my_dashboard/default_widgets/meter.coffee +14 -0
- data/vendor/assets/javascripts/my_dashboard/default_widgets/number.coffee +25 -0
- data/vendor/assets/javascripts/my_dashboard/default_widgets/text.coffee +1 -0
- data/vendor/assets/javascripts/my_dashboard/es5-shim.js +1021 -0
- data/vendor/assets/javascripts/my_dashboard/index.js +21 -0
- data/vendor/assets/javascripts/my_dashboard/jquery.gridster.js +3987 -0
- data/vendor/assets/javascripts/my_dashboard/jquery.js +4 -0
- data/vendor/assets/javascripts/my_dashboard/jquery.knob.js +646 -0
- data/vendor/assets/javascripts/my_dashboard/jquery.leanModal.min.js +5 -0
- data/vendor/assets/javascripts/my_dashboard/jquery.timeago.js +184 -0
- data/vendor/assets/javascripts/my_dashboard/moment.min.js +6 -0
- data/vendor/assets/javascripts/my_dashboard/my_dashboard.coffee +0 -0
- data/vendor/assets/javascripts/my_dashboard/rickshaw-1.5.1.min.js +3 -0
- data/vendor/assets/stylesheets/my_dashboard/font-awesome.scss +1338 -0
- data/vendor/assets/stylesheets/my_dashboard/index.css +15 -0
- data/vendor/assets/stylesheets/my_dashboard/jquery.gridster.css +121 -0
- data/vendor/assets/stylesheets/my_dashboard/my_dashboard.scss +302 -0
- data/vendor/assets/stylesheets/my_dashboard/widgets/clock.scss +13 -0
- data/vendor/assets/stylesheets/my_dashboard/widgets/comments.scss +33 -0
- data/vendor/assets/stylesheets/my_dashboard/widgets/graph.scss +65 -0
- data/vendor/assets/stylesheets/my_dashboard/widgets/iframe.scss +8 -0
- data/vendor/assets/stylesheets/my_dashboard/widgets/image.scss +13 -0
- data/vendor/assets/stylesheets/my_dashboard/widgets/index.css +12 -0
- data/vendor/assets/stylesheets/my_dashboard/widgets/list.scss +60 -0
- data/vendor/assets/stylesheets/my_dashboard/widgets/meter.scss +35 -0
- data/vendor/assets/stylesheets/my_dashboard/widgets/number.scss +39 -0
- data/vendor/assets/stylesheets/my_dashboard/widgets/text.scss +32 -0
- metadata +373 -0
@@ -0,0 +1 @@
|
|
1
|
+
<!-- Your new widget html -->
|
@@ -0,0 +1,10 @@
|
|
1
|
+
// ----------------------------------------------------------------------------
|
2
|
+
// Sass declarations
|
3
|
+
// ----------------------------------------------------------------------------
|
4
|
+
|
5
|
+
// ----------------------------------------------------------------------------
|
6
|
+
// Widget-<%= class_name.downcase %> styles
|
7
|
+
// ----------------------------------------------------------------------------
|
8
|
+
.widget-<%= class_name.downcase %> {
|
9
|
+
|
10
|
+
}
|
data/lib/my_dashboard.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
module MyDashboard
|
2
|
+
class << self
|
3
|
+
|
4
|
+
delegate :scheduler, :redis, to: :config
|
5
|
+
|
6
|
+
attr_accessor :configuration
|
7
|
+
|
8
|
+
def config
|
9
|
+
self.configuration ||= Configuration.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def configure
|
13
|
+
yield config if block_given?
|
14
|
+
end
|
15
|
+
|
16
|
+
def first_dashboard
|
17
|
+
files = Dir[config.dashboards_views_path.join('*')].collect { |f| File.basename(f, '.*') }
|
18
|
+
files.sort.first
|
19
|
+
end
|
20
|
+
|
21
|
+
def send_event(id, data)
|
22
|
+
event = data.merge(id: id, updatedAt: Time.now.utc.to_i).to_json
|
23
|
+
redis.hset("#{MyDashboard.config.redis_namespace}.latest", id, event)
|
24
|
+
redis.publish("#{MyDashboard.config.redis_namespace}.create", event)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
begin
|
31
|
+
require 'rails'
|
32
|
+
rescue LoadError
|
33
|
+
end
|
34
|
+
|
35
|
+
$stderr.puts <<-EOC if !defined?(Rails)
|
36
|
+
warning: no framework detected.
|
37
|
+
|
38
|
+
Your Gemfile might not be configured properly.
|
39
|
+
---- e.g. ----
|
40
|
+
Rails:
|
41
|
+
gem 'my_dashboard'
|
42
|
+
|
43
|
+
EOC
|
44
|
+
|
45
|
+
require 'my_dashboard/configuration'
|
46
|
+
|
47
|
+
if defined? Rails
|
48
|
+
require 'my_dashboard/engine'
|
49
|
+
require 'my_dashboard/railtie'
|
50
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'rufus-scheduler'
|
2
|
+
require 'redis'
|
3
|
+
require 'connection_pool'
|
4
|
+
|
5
|
+
module MyDashboard
|
6
|
+
class Configuration
|
7
|
+
|
8
|
+
attr_reader :redis
|
9
|
+
attr_accessor :redis_host, :redis_port, :redis_password, :redis_namespace, :redis_timeout
|
10
|
+
attr_accessor :auth_token, :devise_allowed_models
|
11
|
+
attr_accessor :jobs_path
|
12
|
+
attr_accessor :default_dashboard, :dashboards_views_path, :dashboard_layout_path
|
13
|
+
attr_accessor :widgets_views_path, :widgets_js_path, :widgets_css_path
|
14
|
+
attr_accessor :engine_path, :scheduler
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
@engine_path = '/my_dashboard'
|
18
|
+
@scheduler = ::Rufus::Scheduler.new
|
19
|
+
|
20
|
+
# Redis
|
21
|
+
@redis_host = '127.0.0.1'
|
22
|
+
@redis_port = '6379'
|
23
|
+
@redis_password = nil
|
24
|
+
@redis_namespace = 'my_dashboard_events'
|
25
|
+
@redis_timeout = 3
|
26
|
+
|
27
|
+
# Authorization
|
28
|
+
@auth_token = nil
|
29
|
+
@devise_allowed_models = []
|
30
|
+
|
31
|
+
# Jobs
|
32
|
+
@jobs_path = Rails.root.join('app', 'jobs')
|
33
|
+
|
34
|
+
# Dashboards
|
35
|
+
@default_dashboard = nil
|
36
|
+
@dashboards_views_path = Rails.root.join('app', 'views', 'my_dashboard', 'dashboards')
|
37
|
+
@dashboard_layout_path = 'my_dashboard/dashboard'
|
38
|
+
|
39
|
+
# Widgets
|
40
|
+
@widgets_views_path = Rails.root.join('app', 'views', 'my_dashboard', 'widgets')
|
41
|
+
@widgets_js_path = Rails.root.join('app', 'assets', 'javascripts', 'my_dashboard')
|
42
|
+
@widgets_css_path = Rails.root.join('app', 'assets', 'stylesheets', 'my_dashboard')
|
43
|
+
end
|
44
|
+
|
45
|
+
def redis
|
46
|
+
@redis ||= ::ConnectionPool::Wrapper.new(size: request_thread_count, timeout: redis_timeout) { new_redis_connection }
|
47
|
+
end
|
48
|
+
|
49
|
+
def new_redis_connection
|
50
|
+
::Redis.new(host: redis_host, port: redis_port, password: redis_password)
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def request_thread_count
|
56
|
+
if defined?(::Puma) && ::Puma.respond_to?(:cli_config)
|
57
|
+
::Puma.cli_config.options.fetch(:max_threads, 5).to_i
|
58
|
+
else
|
59
|
+
5
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module MyDashboard
|
2
|
+
class Railtie < ::Rails::Railtie
|
3
|
+
|
4
|
+
initializer 'configure assets' do |app|
|
5
|
+
app.configure do
|
6
|
+
config.assets.paths.unshift MyDashboard::Engine.root.join('vendor', 'assets', 'fonts', 'my_dashboard')
|
7
|
+
config.assets.paths.unshift MyDashboard::Engine.root.join('vendor', 'assets', 'javascripts', 'my_dashboard')
|
8
|
+
config.assets.paths.unshift MyDashboard::Engine.root.join('vendor', 'assets', 'stylesheets', 'my_dashboard')
|
9
|
+
config.assets.paths.unshift MyDashboard.config.widgets_js_path
|
10
|
+
config.assets.paths.unshift MyDashboard.config.widgets_css_path
|
11
|
+
|
12
|
+
config.assets.precompile << /\.(?:svg|eot|woff|ttf)$/
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
initializer 'require my_dashboard jobs' do
|
17
|
+
Dir[MyDashboard.config.jobs_path.join('**', '*.rb')].each { |file| require file }
|
18
|
+
end
|
19
|
+
|
20
|
+
initializer 'fix redis child connection' do
|
21
|
+
if defined?(::PhusionPassenger)
|
22
|
+
::PhusionPassenger.on_event(:starting_worker_process) do |forked|
|
23
|
+
if forked
|
24
|
+
::MyDashboard.redis.client.disconnect
|
25
|
+
::MyDashboard.redis.client.connect
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'my_dashboard/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'my_dashboard'
|
8
|
+
spec.version = MyDashboard::VERSION
|
9
|
+
spec.platform = Gem::Platform::RUBY
|
10
|
+
spec.authors = ['Danilo Vaz']
|
11
|
+
spec.email = ['danilo.vaz@mlabs.com.br']
|
12
|
+
spec.description = 'Generate awesome widgets dashboard for Rails with FlexBox.'
|
13
|
+
spec.summary = 'Generate awesome widgets dasboard for Rails with FlexBox.'
|
14
|
+
spec.homepage = 'https://github.com/danilovaz/my_dashboard'
|
15
|
+
spec.license = 'MIT'
|
16
|
+
|
17
|
+
spec.files = `git ls-files`.split($/)
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency 'rails', '>= 4.0'
|
22
|
+
spec.add_dependency 'jquery-rails', '>= 3.0'
|
23
|
+
spec.add_dependency 'coffee-script', '>= 2.0'
|
24
|
+
spec.add_dependency 'rufus-scheduler', '~> 3.2'
|
25
|
+
spec.add_dependency 'redis', '~> 3.2'
|
26
|
+
spec.add_dependency 'connection_pool', '~> 2.2'
|
27
|
+
|
28
|
+
spec.add_development_dependency 'bundler', '>= 1.8'
|
29
|
+
spec.add_development_dependency 'pry-rails'
|
30
|
+
spec.add_development_dependency 'better_errors'
|
31
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MyDashboard::ApplicationController do
|
4
|
+
|
5
|
+
describe '#authentication_with_devise' do
|
6
|
+
|
7
|
+
let(:models) { [:user, :admin] }
|
8
|
+
|
9
|
+
before do
|
10
|
+
MyDashboard.stub_chain(:config, :devise_allowed_models).and_return(models)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'calls devise authenticate method' do
|
14
|
+
expect(controller).to receive("authenticate_#{models.first.to_s}!")
|
15
|
+
expect(controller).to receive("authenticate_#{models.last.to_s}!")
|
16
|
+
controller.send(:authentication_with_devise)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MyDashboard::DashboardsController do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@routes = MyDashboard::Engine.routes
|
7
|
+
end
|
8
|
+
|
9
|
+
describe 'GET "index"' do
|
10
|
+
|
11
|
+
def action
|
12
|
+
get :index
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'responds success' do
|
16
|
+
action
|
17
|
+
expect(response).to be_success
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
describe 'GET "show"' do
|
23
|
+
|
24
|
+
def action(params = {})
|
25
|
+
get :show, params
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'when template exists' do
|
29
|
+
|
30
|
+
it 'responds success' do
|
31
|
+
action(name: 'foo')
|
32
|
+
expect(response).to be_success
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'when template does not exist' do
|
38
|
+
|
39
|
+
it { expect { action }.to raise_error }
|
40
|
+
it { expect { action(name: 'bar') }.to raise_error }
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MyDashboard::WidgetsController do
|
4
|
+
|
5
|
+
let(:redis) { double }
|
6
|
+
|
7
|
+
before do
|
8
|
+
stub_redis(redis)
|
9
|
+
@routes = MyDashboard::Engine.routes
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'GET "show"' do
|
13
|
+
|
14
|
+
def action(params = {})
|
15
|
+
get :show, params
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'when default template exists' do
|
19
|
+
|
20
|
+
it 'responds success' do
|
21
|
+
action(name: 'text')
|
22
|
+
expect(response).to be_success
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'when template exists in main app' do
|
28
|
+
|
29
|
+
it 'responds success' do
|
30
|
+
action(name: 'foo')
|
31
|
+
expect(response).to be_success
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'when template does not exist' do
|
37
|
+
|
38
|
+
it { expect { action }.to raise_error }
|
39
|
+
it { expect { action(name: 'bar') }.to raise_error }
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
describe 'PUT "update"' do
|
46
|
+
|
47
|
+
def action(params = {})
|
48
|
+
put :update, params
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'when valid' do
|
52
|
+
|
53
|
+
before do
|
54
|
+
expect(redis).to receive(:publish)
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'responds success' do
|
58
|
+
action(name: 'foo')
|
59
|
+
expect(response).to be_success
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'when not valid' do
|
65
|
+
|
66
|
+
it { expect { action }.to raise_error }
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
== README
|
2
|
+
|
3
|
+
This README would normally document whatever steps are necessary to get the
|
4
|
+
application up and running.
|
5
|
+
|
6
|
+
Things you may want to cover:
|
7
|
+
|
8
|
+
* Ruby version
|
9
|
+
|
10
|
+
* System dependencies
|
11
|
+
|
12
|
+
* Configuration
|
13
|
+
|
14
|
+
* Database creation
|
15
|
+
|
16
|
+
* Database initialization
|
17
|
+
|
18
|
+
* How to run the test suite
|
19
|
+
|
20
|
+
* Services (job queues, cache servers, search engines, etc.)
|
21
|
+
|
22
|
+
* Deployment instructions
|
23
|
+
|
24
|
+
* ...
|
25
|
+
|
26
|
+
|
27
|
+
Please feel free to use a different markup language if you do not plan to run
|
28
|
+
<tt>rake doc:app</tt>.
|
data/spec/dummy/Rakefile
ADDED
File without changes
|
@@ -0,0 +1,13 @@
|
|
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
|
+
// compiled file.
|
9
|
+
//
|
10
|
+
// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
|
11
|
+
// about supported directives.
|
12
|
+
//
|
13
|
+
//= require_tree .
|
File without changes
|
@@ -0,0 +1,13 @@
|
|
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_tree .
|