my_dashboard 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- 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 .
|