bread 0.0.11 → 0.0.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -4
- data/Rakefile +15 -19
- data/lib/bread/controller.rb +26 -0
- data/lib/bread/manager/actions.rb +1 -21
- data/lib/bread/manager/crumbs.rb +1 -16
- data/lib/bread/reloader.rb +30 -0
- data/lib/bread/version.rb +1 -1
- data/lib/bread.rb +12 -1
- data/lib/generators/bread/install_generator.rb +17 -2
- data/{test/dummy/app/lib → lib/generators/bread/templates}/bread/actions.rb +18 -18
- data/lib/generators/bread/templates/bread/crumbs.rb +20 -0
- data/lib/generators/bread/templates/view.html.erb +9 -0
- data/spec/controllers/photos_controller_spec.rb +94 -0
- data/spec/controllers/products_controller_spec.rb +94 -0
- data/{test → spec}/dummy/README.rdoc +0 -0
- data/{test → spec}/dummy/Rakefile +0 -0
- data/{test → spec}/dummy/app/assets/javascripts/application.js +0 -0
- data/{test → spec}/dummy/app/assets/stylesheets/application.css +0 -0
- data/{test → spec}/dummy/app/controllers/application_controller.rb +0 -0
- data/spec/dummy/app/controllers/photos_controller.rb +96 -0
- data/spec/dummy/app/controllers/products_controller.rb +98 -0
- data/{test → spec}/dummy/app/helpers/application_helper.rb +0 -0
- data/spec/dummy/app/lib/bread/actions.rb +18 -0
- data/{test → spec}/dummy/app/lib/bread/crumbs.rb +26 -25
- data/spec/dummy/app/models/category.rb +7 -0
- data/spec/dummy/app/models/photo.rb +11 -0
- data/spec/dummy/app/models/product.rb +12 -0
- data/spec/dummy/app/views/layouts/application.html.erb +23 -0
- data/spec/dummy/app/views/photos/_form.html.erb +21 -0
- data/spec/dummy/app/views/photos/edit.html.erb +6 -0
- data/spec/dummy/app/views/photos/index.html.erb +25 -0
- data/spec/dummy/app/views/photos/new.html.erb +5 -0
- data/spec/dummy/app/views/photos/show.html.erb +9 -0
- data/{test → spec}/dummy/app/views/products/_form.html.erb +4 -4
- data/{test → spec}/dummy/app/views/products/edit.html.erb +0 -0
- data/{test → spec}/dummy/app/views/products/index.html.erb +1 -3
- data/{test → spec}/dummy/app/views/products/new.html.erb +0 -0
- data/{test → spec}/dummy/app/views/products/show.html.erb +0 -0
- data/{test → spec}/dummy/bin/bundle +0 -0
- data/{test → spec}/dummy/bin/rails +0 -0
- data/{test → spec}/dummy/bin/rake +0 -0
- data/{test → spec}/dummy/config/application.rb +8 -0
- data/{test → spec}/dummy/config/boot.rb +0 -0
- data/{test → spec}/dummy/config/database.yml +1 -3
- data/{test → spec}/dummy/config/environment.rb +0 -0
- data/{test → spec}/dummy/config/environments/development.rb +0 -0
- data/{test → spec}/dummy/config/environments/production.rb +0 -0
- data/{test → spec}/dummy/config/environments/test.rb +0 -1
- data/{test → spec}/dummy/config/initializers/backtrace_silencers.rb +0 -0
- data/{test → spec}/dummy/config/initializers/filter_parameter_logging.rb +0 -0
- data/{test → spec}/dummy/config/initializers/inflections.rb +0 -0
- data/{test → spec}/dummy/config/initializers/mime_types.rb +0 -0
- data/{test → spec}/dummy/config/initializers/secret_token.rb +1 -1
- data/{test → spec}/dummy/config/initializers/session_store.rb +0 -0
- data/{test → spec}/dummy/config/initializers/wrap_parameters.rb +0 -0
- data/{test → spec}/dummy/config/locales/en.yml +0 -0
- data/{test → spec}/dummy/config/routes.rb +1 -3
- data/{test → spec}/dummy/config.ru +0 -0
- data/{test → spec}/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20140912040816_create_foos.rb +9 -0
- data/spec/dummy/db/migrate/20140912042735_create_admin_foos.rb +9 -0
- data/{test/dummy/db/migrate/20140203163238_create_products.rb → spec/dummy/db/migrate/20150312182743_create_products.rb} +1 -1
- data/spec/dummy/db/migrate/20150312182826_create_categories.rb +9 -0
- data/spec/dummy/db/migrate/20150312183119_create_photos.rb +10 -0
- data/{test/dummy/app/controllers/concerns/.keep → spec/dummy/db/production.sqlite3} +0 -0
- data/{test → spec}/dummy/db/schema.rb +22 -21
- data/{test → spec}/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/lib/templates/rails/scaffold_controller/controller.rb +101 -0
- data/spec/dummy/log/development.log +167 -0
- data/spec/dummy/log/production.log +66 -0
- data/spec/dummy/log/test.log +21931 -0
- data/{test → spec}/dummy/public/404.html +0 -0
- data/{test → spec}/dummy/public/422.html +0 -0
- data/{test → spec}/dummy/public/500.html +0 -0
- data/{test → spec}/dummy/public/favicon.ico +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/spec/rails_helper.rb +78 -0
- data/spec/requests/photos_spec.rb +12 -0
- data/spec/requests/products_spec.rb +11 -0
- data/spec/spec_helper.rb +85 -0
- data/spec/support/bread_spec_controller_methods.rb +11 -0
- data/spec/support/controllers/bread_spec_controller_methods.rb +12 -0
- metadata +254 -193
- data/.gitignore +0 -22
- data/Gemfile +0 -26
- data/LICENSE.txt +0 -22
- data/bread.gemspec +0 -24
- data/lib/bread/helper.rb +0 -16
- data/lib/generators/bread/templates/skeleton.rb +0 -12
- data/test/dummy/app/assets/javascripts/product_photos.js +0 -2
- data/test/dummy/app/assets/javascripts/products.js +0 -2
- data/test/dummy/app/assets/stylesheets/product_photos.css +0 -4
- data/test/dummy/app/assets/stylesheets/products.css +0 -4
- data/test/dummy/app/assets/stylesheets/scaffold.css +0 -56
- data/test/dummy/app/controllers/product_photos_controller.rb +0 -63
- data/test/dummy/app/controllers/products_controller.rb +0 -72
- data/test/dummy/app/helpers/product_photos_helper.rb +0 -2
- data/test/dummy/app/helpers/products_helper.rb +0 -2
- data/test/dummy/app/lib/bread/actions_next.rb +0 -43
- data/test/dummy/app/lib/bread/crumbs_next.rb +0 -77
- data/test/dummy/app/mailers/.keep +0 -0
- data/test/dummy/app/models/.keep +0 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/models/product.rb +0 -10
- data/test/dummy/app/models/product_photo.rb +0 -10
- data/test/dummy/app/models/user.rb +0 -6
- data/test/dummy/app/views/layouts/application.html.erb +0 -34
- data/test/dummy/app/views/product_photos/_form.html.erb +0 -25
- data/test/dummy/app/views/product_photos/edit.html.erb +0 -6
- data/test/dummy/app/views/product_photos/index.html.erb +0 -31
- data/test/dummy/app/views/product_photos/new.html.erb +0 -5
- data/test/dummy/app/views/product_photos/show.html.erb +0 -19
- data/test/dummy/config/breadcrumbs.rb +0 -18
- data/test/dummy/config/initializers/devise.rb +0 -254
- data/test/dummy/config/locales/devise.en.yml +0 -59
- data/test/dummy/db/migrate/20140306111733_devise_create_users.rb +0 -42
- data/test/dummy/db/migrate/20140306114935_create_product_photos.rb +0 -11
- data/test/dummy/lib/assets/.keep +0 -0
- data/test/dummy/lib/templates/rails/scaffold_controller/controller.rb +0 -146
- data/test/dummy/log/.keep +0 -0
- data/test/dummy/test/bread_test.rb +0 -7
- data/test/dummy/test/controllers/product_photos_controller_test.rb +0 -98
- data/test/dummy/test/controllers/products_controller_test.rb +0 -114
- data/test/dummy/test/fixtures/product_photos.yml +0 -11
- data/test/dummy/test/fixtures/products.yml +0 -9
- data/test/dummy/test/fixtures/users.yml +0 -11
- data/test/dummy/test/helpers/product_photos_helper_test.rb +0 -4
- data/test/dummy/test/helpers/products_helper_test.rb +0 -4
- data/test/dummy/test/integration/devise_test.rb +0 -166
- data/test/dummy/test/integration/navigation_test.rb +0 -10
- data/test/dummy/test/models/product_photo_test.rb +0 -7
- data/test/dummy/test/models/product_test.rb +0 -7
- data/test/dummy/test/models/user_test.rb +0 -7
- data/test/dummy/test/support/asserts.rb +0 -38
- data/test/dummy/test/support/others.rb +0 -20
- data/test/test_helper.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22fc8ab013401209b7266f7394f4c05b669006b9
|
4
|
+
data.tar.gz: f308152160d62da729751655ebee6799b31ded8f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 660bb67452220e69c74580688d9de62afd8a9865415571cde22d6185814623c101f3b9d7b555d708aa49cc44f7670fc534b861c786c739fae34845bc9c4bb35b
|
7
|
+
data.tar.gz: 7a87b8476e81eedfd0178c21a9b052ebd4299bcac1d96e15fc863ab628d9dd3496c9408289b3872619f1235d92817b1a76eeaf78270c18c347ae4dff222c4d6b
|
data/README.md
CHANGED
@@ -8,13 +8,10 @@ __This gem is under development and is not considered production-ready__
|
|
8
8
|
## Status
|
9
9
|
|
10
10
|
[![Gem Version](https://badge.fury.io/rb/bread.svg)](http://badge.fury.io/rb/bread)
|
11
|
-
|
12
11
|
[![Build Status](https://travis-ci.org/bread-gem/bread.svg?branch=master)](https://travis-ci.org/bread-gem/bread)
|
13
|
-
|
14
12
|
[![Code Climate](https://codeclimate.com/github/bread-gem/bread.png)](https://codeclimate.com/github/bread-gem/bread)
|
15
|
-
|
13
|
+
[![Code Climate](https://codeclimate.com/github/bread-gem/bread/coverage.png)](https://codeclimate.com/github/bread-gem/bread)
|
16
14
|
[![Dependency Status](https://gemnasium.com/bread-gem/bread.svg)](https://gemnasium.com/bread-gem/bread)
|
17
|
-
|
18
15
|
[![Inline docs](http://inch-ci.org/github/bread-gem/bread.png?branch=master)](http://inch-ci.org/github/bread-gem/bread)
|
19
16
|
|
20
17
|
|
data/Rakefile
CHANGED
@@ -1,34 +1,30 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
|
1
3
|
begin
|
2
4
|
require 'bundler/setup'
|
3
5
|
rescue LoadError
|
4
6
|
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
7
|
end
|
6
8
|
|
7
|
-
|
9
|
+
APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
|
10
|
+
load 'rails/tasks/engine.rake'
|
8
11
|
|
9
|
-
|
10
|
-
rdoc.rdoc_dir = 'rdoc'
|
11
|
-
rdoc.title = 'Permissions'
|
12
|
-
rdoc.options << '--line-numbers'
|
13
|
-
rdoc.rdoc_files.include('README.rdoc')
|
14
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
-
end
|
12
|
+
Bundler::GemHelper.install_tasks
|
16
13
|
|
17
|
-
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
18
|
-
load 'rails/tasks/engine.rake'
|
19
14
|
|
20
15
|
|
21
16
|
|
22
|
-
Bundler::GemHelper.install_tasks
|
23
17
|
|
24
|
-
|
18
|
+
Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each {|f| load f }
|
25
19
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
20
|
+
require 'rspec/core'
|
21
|
+
require 'rspec/core/rake_task'
|
22
|
+
require 'rspec/rails'
|
23
|
+
|
24
|
+
|
25
|
+
desc "Run all specs in spec directory (excluding plugin specs)"
|
26
|
+
RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare')
|
27
|
+
|
28
|
+
task :default => :spec
|
32
29
|
|
33
30
|
|
34
|
-
task default: :test
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Bread
|
2
|
+
module Controller
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
helper_method :bread
|
7
|
+
end
|
8
|
+
|
9
|
+
def bread
|
10
|
+
controller = if respond_to?(:controller)
|
11
|
+
controller
|
12
|
+
else
|
13
|
+
self
|
14
|
+
end
|
15
|
+
crumbset = Bread.actions.get_crumbset(controller_path, action_name)
|
16
|
+
Bread.crumbs.crumbs_for(controller, crumbset)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
if defined? ActionController::Base
|
23
|
+
ActionController::Base.class_eval do
|
24
|
+
include Bread::Controller
|
25
|
+
end
|
26
|
+
end
|
@@ -8,30 +8,10 @@ module Bread
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def get_crumbset(controller_path, action_name)
|
11
|
-
reload
|
11
|
+
Bread.reload!
|
12
12
|
@top_scope.get_controller_scope(controller_path).get_crumbset(action_name)
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def reload
|
24
|
-
config_file = Rails.root.join "app/lib/bread/actions.rb"
|
25
|
-
unless File.exists? config_file
|
26
|
-
#`rails g bread:install`
|
27
|
-
raise "should have config actions file"
|
28
|
-
end
|
29
|
-
|
30
|
-
load(config_file)
|
31
|
-
self
|
32
|
-
end
|
33
|
-
|
34
|
-
|
35
15
|
end
|
36
16
|
end
|
37
17
|
end
|
data/lib/bread/manager/crumbs.rb
CHANGED
@@ -2,15 +2,13 @@ module Bread
|
|
2
2
|
class Manager
|
3
3
|
class Crumbs
|
4
4
|
|
5
|
-
|
6
|
-
|
7
5
|
def config(&block)
|
8
6
|
@top_scope = TopScope.new
|
9
7
|
@top_scope.instance_eval(&block)
|
10
8
|
end
|
11
9
|
|
12
10
|
def crumbs_for(controller, crumbset)
|
13
|
-
reload
|
11
|
+
Bread.reload!
|
14
12
|
crumb_scope = CrumbScope.new(controller)
|
15
13
|
crumb_blocks_for(crumbset).each do |bl|
|
16
14
|
crumb_scope.instance_eval(&bl)
|
@@ -34,19 +32,6 @@ module Bread
|
|
34
32
|
crumbs
|
35
33
|
end
|
36
34
|
|
37
|
-
def reload
|
38
|
-
config_file = Rails.root.join "app/lib/bread/crumbs.rb"
|
39
|
-
unless File.exists? config_file
|
40
|
-
#`rails g bread:install`
|
41
|
-
raise "should have config crumbs file"
|
42
|
-
end
|
43
|
-
|
44
|
-
load(config_file)
|
45
|
-
self
|
46
|
-
end
|
47
|
-
|
48
|
-
|
49
|
-
|
50
35
|
end
|
51
36
|
end
|
52
37
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Bread
|
2
|
+
class Reloader
|
3
|
+
include Singleton
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@files = Dir["#{Rails.root}/app/lib/bread/*"]
|
7
|
+
@checker = ActiveSupport::FileUpdateChecker.new(@files) do
|
8
|
+
@files.each { |f| load f }
|
9
|
+
puts " Bread has reloaded!".light_blue
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def reload!
|
14
|
+
@checker.execute if updated?
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def updated?
|
20
|
+
if not @started
|
21
|
+
@started = true
|
22
|
+
elsif not Rails.env.development?
|
23
|
+
@checker.updated?
|
24
|
+
else
|
25
|
+
false
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
data/lib/bread/version.rb
CHANGED
data/lib/bread.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "bread/version"
|
2
2
|
|
3
|
-
require "bread/
|
3
|
+
require "bread/reloader"
|
4
|
+
require "bread/controller"
|
4
5
|
require "bread/data/crumb"
|
5
6
|
require "bread/manager/manager"
|
6
7
|
require "bread/manager/actions"
|
@@ -12,6 +13,11 @@ require "bread/manager/crumbs/top_scope"
|
|
12
13
|
require "bread/manager/crumbs/crumb_scope"
|
13
14
|
|
14
15
|
|
16
|
+
require 'colorize'
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
|
15
21
|
module Bread
|
16
22
|
def self.actions
|
17
23
|
Manager.instance.actions
|
@@ -20,4 +26,9 @@ module Bread
|
|
20
26
|
def self.crumbs
|
21
27
|
Manager.instance.crumbs
|
22
28
|
end
|
29
|
+
|
30
|
+
def self.reload!
|
31
|
+
Reloader.instance.reload!
|
32
|
+
end
|
23
33
|
end
|
34
|
+
|
@@ -3,9 +3,24 @@ module Bread
|
|
3
3
|
class InstallGenerator < Rails::Generators::Base
|
4
4
|
source_root File.expand_path('../templates', __FILE__)
|
5
5
|
|
6
|
-
def
|
7
|
-
|
6
|
+
def main_config_files
|
7
|
+
directory "bread", "app/lib/bread"
|
8
8
|
end
|
9
|
+
|
10
|
+
def inject_html
|
11
|
+
destination_path = 'app/views/layouts/application.html.erb'
|
12
|
+
template_path = File.join(File.expand_path('../templates', __FILE__), "view.html.erb")
|
13
|
+
html = open(template_path).read
|
14
|
+
after_regex = /<body(.*)>/i
|
15
|
+
|
16
|
+
inject_into_file destination_path, html, after: after_regex
|
17
|
+
|
18
|
+
rescue Errno::ENOENT
|
19
|
+
puts "\tGENERATOR HAS FAILED"
|
20
|
+
puts "\tINSERT THIS BLOCK ON #{destination_path}".red
|
21
|
+
puts html.green
|
22
|
+
end
|
23
|
+
|
9
24
|
end
|
10
25
|
end
|
11
26
|
end
|
@@ -1,18 +1,18 @@
|
|
1
|
-
Bread.actions.config do
|
2
|
-
|
3
|
-
controller :products, parent_crumbs: [:@root] do
|
4
|
-
actions(:index) { crumbs :@products }
|
5
|
-
actions(:new) { crumbs :@products, :@new_product }
|
6
|
-
actions(:by_category) { crumbs :@products, :@products_by_category }
|
7
|
-
actions(:show) { crumbs :@products, :@product }
|
8
|
-
actions(:edit) { crumbs :@products, :@product, :@edit_product }
|
9
|
-
end
|
10
|
-
|
11
|
-
controller :
|
12
|
-
actions(:index) { crumbs :@photos }
|
13
|
-
actions(:new) { crumbs :@photos, :@new_photo }
|
14
|
-
actions(:show) { crumbs :@photos, :@photo }
|
15
|
-
actions(:edit) { crumbs :@photos, :@photo, :@edit_photo }
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
1
|
+
Bread.actions.config do
|
2
|
+
|
3
|
+
controller :products, parent_crumbs: [:@root] do
|
4
|
+
actions(:index) { crumbs :@products }
|
5
|
+
actions(:new) { crumbs :@products, :@new_product }
|
6
|
+
actions(:by_category) { crumbs :@products, :@products_by_category }
|
7
|
+
actions(:show) { crumbs :@products, :@product }
|
8
|
+
actions(:edit) { crumbs :@products, :@product, :@edit_product }
|
9
|
+
end
|
10
|
+
|
11
|
+
controller :photos, parent_crumbs: [:@root, :@products, :@product] do
|
12
|
+
actions(:index) { crumbs :@photos }
|
13
|
+
actions(:new) { crumbs :@photos, :@new_photo }
|
14
|
+
actions(:show) { crumbs :@photos, :@photo }
|
15
|
+
actions(:edit) { crumbs :@photos, :@photo, :@edit_photo }
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Bread.crumbs.config do
|
2
|
+
|
3
|
+
crumb(:@root) { to "Home", :root, icon: 'home' }
|
4
|
+
|
5
|
+
# products
|
6
|
+
crumb(:@products) { to "Products", h.products_path }
|
7
|
+
crumb(:@new_product) { to "New", h.new_product_path }
|
8
|
+
crumb(:@edit_product) { to "Edit", h.edit_product_path }
|
9
|
+
crumb(:@product) { to @product.unchanged_name, h.product_path(@product) }
|
10
|
+
|
11
|
+
# photos
|
12
|
+
crumb(:@photos) { to "Photos", h.product_photos_path }
|
13
|
+
crumb(:@new_photo) { to "New", h.new_product_photo_path }
|
14
|
+
crumb(:@edit_photo) { to "Edit", h.edit_product_photo_path }
|
15
|
+
crumb(:@photo) { to @photo.unchanged_name, h.product_photo_path }
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
RSpec.describe PhotosController, type: :controller do
|
4
|
+
|
5
|
+
let(:product) { Product.create!(name: "Fake") }
|
6
|
+
let(:product_id) { product.id }
|
7
|
+
let(:photo) { photo = product.photos.create!(name: "Smile") }
|
8
|
+
let(:valid_session) { {} }
|
9
|
+
let(:invalid_attributes) { {name: "0"} }
|
10
|
+
|
11
|
+
before { photo } # touch
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
describe "GET #index" do
|
17
|
+
context "assigns all photos as @photos" do
|
18
|
+
it "Has Correct Breadcrumbs" do
|
19
|
+
get :index, {:product_id => product_id}, valid_session
|
20
|
+
expect(assigns(:photos)).to eq([photo])
|
21
|
+
expect(bread_titles).to eq ["Home", "Products", "Fake", "Photos"]
|
22
|
+
expect(bread_paths).to eq [:root, "/products", "/products/1", "/products/1/photos"]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "GET #show" do
|
28
|
+
context "assigns the requested photo as @photo" do
|
29
|
+
it "Has Correct Breadcrumbs" do
|
30
|
+
get :show, {:product_id => product_id, :id => photo.to_param}, valid_session
|
31
|
+
expect(assigns(:photo)).to eq(photo)
|
32
|
+
expect(bread_titles).to eq ["Home", "Products", "Fake", "Photos", "Smile"]
|
33
|
+
expect(bread_paths).to eq [:root, "/products", "/products/1", "/products/1/photos", "/products/1/photos/1"]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "GET #new" do
|
39
|
+
context "assigns a new photo as @photo" do
|
40
|
+
it "Has Correct Breadcrumbs" do
|
41
|
+
get :new, {:product_id => product_id}, valid_session
|
42
|
+
expect(assigns(:photo)).to be_a_new(Photo)
|
43
|
+
expect(bread_titles).to eq ["Home", "Products", "Fake", "Photos", "New"]
|
44
|
+
expect(bread_paths).to eq [:root, "/products", "/products/1", "/products/1/photos", "/products/1/photos/new"]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "GET #edit" do
|
50
|
+
context "assigns the requested photo as @photo" do
|
51
|
+
it "Has Correct Breadcrumbs" do
|
52
|
+
get :edit, {:product_id => product_id, :id => photo.to_param}, valid_session
|
53
|
+
expect(assigns(:photo)).to eq(photo)
|
54
|
+
expect(bread_titles).to eq ["Home", "Products", "Fake", "Photos", "Smile", "Edit"]
|
55
|
+
expect(bread_paths).to eq [:root, "/products", "/products/1", "/products/1/photos", "/products/1/photos/1", "/products/1/photos/1/edit"]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "POST #create with invalid params" do
|
61
|
+
context "assigns a newly created but unsaved photo as @photo" do
|
62
|
+
it "Has Correct Breadcrumbs" do
|
63
|
+
post :create, {:product_id => product_id, :photo => invalid_attributes}, valid_session
|
64
|
+
expect(assigns(:photo)).to be_a_new(Photo)
|
65
|
+
expect(bread_titles).to eq ["Home", "Products", "Fake", "Photos", "New"]
|
66
|
+
expect(bread_paths).to eq [:root, "/products", "/products/1", "/products/1/photos", "/products/1/photos/new"]
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe "PUT #update with invalid params" do
|
72
|
+
context "assigns the photo as @photo" do
|
73
|
+
it "Has Correct Breadcrumbs" do
|
74
|
+
put :update, {:product_id => product_id, :id => photo.to_param, :photo => invalid_attributes}, valid_session
|
75
|
+
expect(assigns(:photo)).to eq(photo)
|
76
|
+
expect(bread_titles).to eq ["Home", "Products", "Fake", "Photos", "0", "Edit"]
|
77
|
+
expect(bread_paths).to eq [:root, "/products", "/products/1", "/products/1/photos", "/products/1/photos/1", "/products/1/photos/1/edit"]
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "DELETE #destroy" do
|
83
|
+
context "cannot destroys the requested photo" do
|
84
|
+
it "Has Correct Breadcrumbs" do
|
85
|
+
expect {
|
86
|
+
delete :destroy, {:product_id => product_id, :id => photo.to_param}, valid_session
|
87
|
+
}.not_to change(Photo, :count).from(1)
|
88
|
+
expect(bread_titles).to eq ["Home", "Products", "Fake", "Photos", "Smile", "Edit"]
|
89
|
+
expect(bread_paths).to eq [:root, "/products", "/products/1", "/products/1/photos", "/products/1/photos/1", "/products/1/photos/1/edit"]
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
RSpec.describe ProductsController, type: :controller do
|
4
|
+
|
5
|
+
let(:invalid_attributes) { {name: "0"} }
|
6
|
+
let(:product) { Product.create! name: "Fake" }
|
7
|
+
let(:valid_session) { {} }
|
8
|
+
|
9
|
+
before { product } # touch
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
describe "GET #index" do
|
14
|
+
context "assigns all products as @products" do
|
15
|
+
render_views
|
16
|
+
|
17
|
+
it "Has Correct Breadcrumbs On Controller And View" do
|
18
|
+
get :index, {}, valid_session
|
19
|
+
expect(assigns(:products)).to eq([product])
|
20
|
+
expect(bread_titles).to eq ["Home", "Products"]
|
21
|
+
expect(bread_paths).to eq [:root, "/products"]
|
22
|
+
expect(response.body).to match /<ul id="breadcrumbs">/
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "GET #show" do
|
28
|
+
context "assigns the requested product as @product" do
|
29
|
+
it "Has Correct Breadcrumbs" do
|
30
|
+
get :show, {:id => product.to_param}, valid_session
|
31
|
+
expect(assigns(:product)).to eq(product)
|
32
|
+
expect(bread_titles).to eq ["Home", "Products", "Fake"]
|
33
|
+
expect(bread_paths).to eq [:root, "/products", "/products/1"]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "GET #new" do
|
39
|
+
context "assigns a new product as @product" do
|
40
|
+
it "Has Correct Breadcrumbs" do
|
41
|
+
get :new, {}, valid_session
|
42
|
+
expect(assigns(:product)).to be_a_new(Product)
|
43
|
+
expect(bread_titles).to eq ["Home", "Products", "New"]
|
44
|
+
expect(bread_paths).to eq [:root, "/products", "/products/new"]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "GET #edit" do
|
50
|
+
context "assigns the requested product as @product" do
|
51
|
+
it "Has Correct Breadcrumbs" do
|
52
|
+
get :edit, {:id => product.to_param}, valid_session
|
53
|
+
expect(assigns(:product)).to eq(product)
|
54
|
+
expect(bread_titles).to eq ["Home", "Products", "Fake", "Edit"]
|
55
|
+
expect(bread_paths).to eq [:root, "/products", "/products/1", "/products/1/edit"]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "POST #create with invalid params" do
|
61
|
+
context "assigns a newly created but unsaved product as @product" do
|
62
|
+
it "Has Correct Breadcrumbs" do
|
63
|
+
post :create, {:product => invalid_attributes}, valid_session
|
64
|
+
expect(assigns(:product)).to be_a_new(Product)
|
65
|
+
expect(bread_titles).to eq ["Home", "Products", "New"]
|
66
|
+
expect(bread_paths).to eq [:root, "/products", "/products/new"]
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe "PUT #update with invalid params" do
|
72
|
+
context "assigns the product as @product" do
|
73
|
+
it "Has Correct Breadcrumbs" do
|
74
|
+
put :update, {:id => product.to_param, :product => invalid_attributes}, valid_session
|
75
|
+
expect(assigns(:product)).to eq(product)
|
76
|
+
expect(bread_titles).to eq ["Home", "Products", "0", "Edit"]
|
77
|
+
expect(bread_paths).to eq [:root, "/products", "/products/1", "/products/1/edit"]
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "DELETE #destroy" do
|
83
|
+
context "cannot destroys the requested product" do
|
84
|
+
it "Has Correct Breadcrumbs" do
|
85
|
+
expect {
|
86
|
+
delete :destroy, {:id => product.to_param}, valid_session
|
87
|
+
}.not_to change(Product, :count).from(1)
|
88
|
+
expect(bread_titles).to eq ["Home", "Products", "Fake", "Edit"]
|
89
|
+
expect(bread_paths).to eq [:root, "/products", "/products/1", "/products/1/edit"]
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,96 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
class PhotosController < ApplicationController
|
4
|
+
|
5
|
+
# Use callbacks to share common setup or constraints between actions.
|
6
|
+
before_actions do
|
7
|
+
all { @product = Product.find(params[:product_id]) }
|
8
|
+
only(:index) { @photos = @product.photos }
|
9
|
+
only(:new) { @photo = @product.photos.build }
|
10
|
+
only(:create) { @photo = @product.photos.build(photo_params) }
|
11
|
+
only(:show, :edit, :update, :destroy) { @photo = @product.photos.find(params[:id]) }
|
12
|
+
end
|
13
|
+
|
14
|
+
# GET /photos
|
15
|
+
# GET /photos.json
|
16
|
+
def index
|
17
|
+
respond_to do |format|
|
18
|
+
format.html # index.html.erb
|
19
|
+
format.json { render json: @photos }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
# GET /photos/new
|
27
|
+
def new
|
28
|
+
end
|
29
|
+
|
30
|
+
# POST /photos
|
31
|
+
# POST /photos.json
|
32
|
+
def create
|
33
|
+
respond_to do |format|
|
34
|
+
if @photo.save
|
35
|
+
format.html { redirect_to [@product, @photo], notice: 'Photo was successfully created.' }
|
36
|
+
format.json { render json: @photo, status: :created }
|
37
|
+
else
|
38
|
+
format.html { render action: 'new' }
|
39
|
+
format.json { render json: @photo.errors, status: :unprocessable_entity }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
|
48
|
+
# GET /photos/1
|
49
|
+
# GET /photos/1.json
|
50
|
+
def show
|
51
|
+
respond_to do |format|
|
52
|
+
format.html # show.html.erb
|
53
|
+
format.json { render json: @photo }
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# GET /photos/1/edit
|
58
|
+
def edit
|
59
|
+
end
|
60
|
+
|
61
|
+
# PATCH/PUT /photos/1
|
62
|
+
# PATCH/PUT /photos/1.json
|
63
|
+
def update
|
64
|
+
respond_to do |format|
|
65
|
+
if @photo.update(photo_params)
|
66
|
+
format.html { redirect_to [@product, @photo], notice: 'Photo was successfully updated.' }
|
67
|
+
format.json { head :no_content }
|
68
|
+
else
|
69
|
+
format.html { render action: 'edit' }
|
70
|
+
format.json { render json: @photo.errors, status: :unprocessable_entity }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# DELETE /photos/1
|
76
|
+
# DELETE /photos/1
|
77
|
+
def destroy
|
78
|
+
respond_to do |format|
|
79
|
+
if @photo.destroy
|
80
|
+
format.html { redirect_to product_photos_url, notice: 'Photo was successfully destroyed.' }
|
81
|
+
format.json { head :no_content }
|
82
|
+
else
|
83
|
+
format.html { render action: 'edit' }
|
84
|
+
format.json { render json: @photo.errors, status: :unprocessable_entity }
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
# Only allow a trusted parameter "white list" through.
|
92
|
+
def photo_params
|
93
|
+
params.require(:photo).permit(:name)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|