bread 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +4 -1
- data/bread.gemspec +1 -1
- data/lib/bread.rb +15 -10
- data/lib/bread/{crumb.rb → data/crumb.rb} +4 -4
- data/lib/bread/helper.rb +3 -25
- data/lib/bread/manager/actions.rb +37 -0
- data/lib/bread/manager/actions/action_scope.rb +32 -0
- data/lib/bread/manager/actions/controller_scope.rb +69 -0
- data/lib/bread/manager/actions/top_scope.rb +26 -0
- data/lib/bread/manager/crumbs.rb +52 -0
- data/lib/bread/manager/crumbs/crumb_scope.rb +39 -0
- data/lib/bread/manager/crumbs/top_scope.rb +25 -0
- data/lib/bread/manager/manager.rb +14 -0
- data/lib/bread/version.rb +1 -1
- data/test/dummy/app/assets/javascripts/product_photos.js +2 -0
- data/test/dummy/app/assets/stylesheets/product_photos.css +4 -0
- data/test/dummy/app/controllers/product_photos_controller.rb +67 -0
- data/test/dummy/app/controllers/products_controller.rb +12 -23
- data/test/dummy/app/helpers/product_photos_helper.rb +2 -0
- data/test/dummy/app/lib/bread/actions.rb +18 -0
- data/test/dummy/app/lib/bread/actions_next.rb +43 -0
- data/test/dummy/app/lib/bread/crumbs.rb +22 -0
- data/test/dummy/app/lib/bread/crumbs_next.rb +77 -0
- data/test/dummy/app/models/product.rb +8 -0
- data/test/dummy/app/models/product_photo.rb +10 -0
- data/test/dummy/app/models/user.rb +6 -0
- data/test/dummy/app/views/layouts/application.html.erb +10 -5
- data/test/dummy/app/views/product_photos/_form.html.erb +29 -0
- data/test/dummy/app/views/product_photos/edit.html.erb +6 -0
- data/test/dummy/app/views/product_photos/index.html.erb +31 -0
- data/test/dummy/app/views/product_photos/new.html.erb +5 -0
- data/test/dummy/app/views/product_photos/show.html.erb +19 -0
- data/test/dummy/config/initializers/devise.rb +254 -0
- data/test/dummy/config/locales/devise.en.yml +59 -0
- data/test/dummy/config/routes.rb +4 -1
- data/test/dummy/db/migrate/20140306111733_devise_create_users.rb +42 -0
- data/test/dummy/db/migrate/20140306114935_create_product_photos.rb +11 -0
- data/test/dummy/db/schema.rb +29 -1
- data/test/{bread_test.rb → dummy/test/bread_test.rb} +1 -0
- data/test/dummy/test/controllers/product_photos_controller_test.rb +98 -0
- data/test/dummy/test/controllers/products_controller_test.rb +94 -30
- data/test/dummy/test/fixtures/product_photos.yml +11 -0
- data/test/dummy/test/fixtures/products.yml +4 -4
- data/test/dummy/test/fixtures/users.yml +11 -0
- data/test/dummy/test/helpers/product_photos_helper_test.rb +4 -0
- data/test/{integration → dummy/test/integration}/navigation_test.rb +0 -0
- data/test/dummy/test/models/product_photo_test.rb +7 -0
- data/test/dummy/test/models/user_test.rb +7 -0
- data/test/dummy/test/support/asserts.rb +17 -0
- data/test/test_helper.rb +1 -1
- metadata +68 -14
- data/lib/bread/commands/config_command.rb +0 -15
- data/lib/bread/commands/controller_layout_command.rb +0 -44
- data/lib/bread/commands/crumb_to_command.rb +0 -23
- data/lib/bread/commands/ivars_command.rb +0 -16
- data/lib/bread/config.rb +0 -24
- data/lib/bread/controller.rb +0 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 512440b0923520d6c7e88b2697f3ed09805f7417
|
4
|
+
data.tar.gz: d5a96a75101e8bbd427711a8abc6b53466ab0ae7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b5882b890a6a09ef316e5df023b12669bbd98663c3e6c571748dddc0aa2f43a4bf44efdfc7ace8f14c206e87ef26714dfe851f7b6c5b83b741ba9804ef4bd54
|
7
|
+
data.tar.gz: ddd232dec7b8ddd7d0398476dc02ad9ea87168cab6b5e90eac619f764ca1d45e467fb3802102d35fae68a40a2eac9c74411ae1cb2f256b4c9ed52e3f3805b3c9
|
data/Gemfile
CHANGED
data/bread.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["tapgyn@gmail.com"]
|
11
11
|
spec.description = %q{Simple and organized Breadcrumbs for Rails 3 and 4}
|
12
12
|
spec.summary = %q{Set up all your breadcrumbs with on a dependency-based simple block of code}
|
13
|
-
spec.homepage = "https://github.com/
|
13
|
+
spec.homepage = "https://github.com/hi/bread"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
data/lib/bread.rb
CHANGED
@@ -1,18 +1,23 @@
|
|
1
1
|
require "bread/version"
|
2
2
|
|
3
|
-
require "bread/commands/controller_layout_command"
|
4
|
-
require "bread/commands/config_command"
|
5
|
-
require "bread/commands/ivars_command"
|
6
|
-
require "bread/commands/crumb_to_command"
|
7
|
-
|
8
|
-
require "bread/controller"
|
9
3
|
require "bread/helper"
|
10
|
-
require "bread/crumb"
|
11
|
-
require "bread/
|
4
|
+
require "bread/data/crumb"
|
5
|
+
require "bread/manager/manager"
|
6
|
+
require "bread/manager/actions"
|
7
|
+
require "bread/manager/actions/top_scope"
|
8
|
+
require "bread/manager/actions/controller_scope"
|
9
|
+
require "bread/manager/actions/action_scope"
|
10
|
+
require "bread/manager/crumbs"
|
11
|
+
require "bread/manager/crumbs/top_scope"
|
12
|
+
require "bread/manager/crumbs/crumb_scope"
|
12
13
|
|
13
14
|
|
14
15
|
module Bread
|
15
|
-
def self.
|
16
|
-
|
16
|
+
def self.actions
|
17
|
+
Manager.instance.actions
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.crumbs
|
21
|
+
Manager.instance.crumbs
|
17
22
|
end
|
18
23
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module Bread
|
2
2
|
class Crumb < Hash
|
3
3
|
|
4
|
-
def initialize(
|
5
|
-
self.
|
4
|
+
def initialize(controller, title, path, options)
|
5
|
+
self.controller = controller
|
6
6
|
options.merge(title: title, path: path).each do |k, v|
|
7
7
|
self[k] = v
|
8
8
|
end
|
@@ -25,12 +25,12 @@ module Bread
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def current?
|
28
|
-
|
28
|
+
controller.view_context.current_page? path
|
29
29
|
end
|
30
30
|
|
31
31
|
private
|
32
32
|
|
33
|
-
attr_accessor :
|
33
|
+
attr_accessor :controller
|
34
34
|
|
35
35
|
end
|
36
36
|
end
|
data/lib/bread/helper.rb
CHANGED
@@ -2,30 +2,8 @@ module Bread
|
|
2
2
|
module Helper
|
3
3
|
|
4
4
|
def bread
|
5
|
-
|
6
|
-
|
7
|
-
crumb_definitions = Config.instance.crumb_definitions
|
8
|
-
keys_for_current_action = controller.bread_keys
|
9
|
-
|
10
|
-
@crumbs = []
|
11
|
-
keys_for_current_action.map do |key|
|
12
|
-
crumbs_to_block = crumb_definitions[key] || :crumb_definitions_not_found
|
13
|
-
self.instance_eval(&crumbs_to_block)
|
14
|
-
end
|
15
|
-
@crumbs = determinate_first_and_last(@crumbs)
|
16
|
-
@crumbs
|
17
|
-
end
|
18
|
-
|
19
|
-
def crumb_to(title, path, options={})
|
20
|
-
@crumbs << Crumb.new(self, title, path, options)
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def determinate_first_and_last(crumbs)
|
26
|
-
crumbs.first[:_first] = true
|
27
|
-
crumbs.last[:_last] = true
|
28
|
-
crumbs
|
5
|
+
crumbset = Bread.actions.get_crumbset(controller_name, action_name)
|
6
|
+
Bread.crumbs.crumbs_for(controller, crumbset)
|
29
7
|
end
|
30
8
|
|
31
9
|
end
|
@@ -35,4 +13,4 @@ if defined? ActionView::Base
|
|
35
13
|
ActionView::Base.class_eval do
|
36
14
|
include Bread::Helper
|
37
15
|
end
|
38
|
-
end
|
16
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Bread
|
2
|
+
class Manager
|
3
|
+
class Actions
|
4
|
+
|
5
|
+
def config(&block)
|
6
|
+
@top_scope = TopScope.new
|
7
|
+
@top_scope.instance_eval(&block)
|
8
|
+
end
|
9
|
+
|
10
|
+
def get_crumbset(controller_name, action_name)
|
11
|
+
reload
|
12
|
+
@top_scope.get_controller_scope(controller_name).get_crumbset(action_name)
|
13
|
+
end
|
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
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Bread
|
2
|
+
class Manager
|
3
|
+
class Actions
|
4
|
+
class ActionScope
|
5
|
+
|
6
|
+
attr_reader :crumbset
|
7
|
+
|
8
|
+
def initialize(controller_scope, action_name)
|
9
|
+
@controller_scope = controller_scope
|
10
|
+
@action_name = action_name
|
11
|
+
@crumbset = []
|
12
|
+
prepend_parent_crumbs
|
13
|
+
end
|
14
|
+
|
15
|
+
def crumbs(*symbols)
|
16
|
+
@crumbset += symbols.flatten
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def prepend_parent_crumbs
|
26
|
+
crumbs(@controller_scope.parent_crumbs)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module Bread
|
2
|
+
class Manager
|
3
|
+
class Actions
|
4
|
+
class ControllerScope
|
5
|
+
|
6
|
+
attr_reader :top_scope, :parent_crumbs
|
7
|
+
|
8
|
+
def initialize(top_scope, controller_name, options)
|
9
|
+
@top_scope = top_scope
|
10
|
+
@controller_name = controller_name
|
11
|
+
@action_scopes = {}
|
12
|
+
@aliases = {}
|
13
|
+
@options = options
|
14
|
+
define_parent_crumbs
|
15
|
+
raise_if_any_invalid_option
|
16
|
+
prepend_default_alias_actions
|
17
|
+
end
|
18
|
+
|
19
|
+
def alias_actions(action_name, *aliases)
|
20
|
+
aliases.each do |a|
|
21
|
+
@aliases[a.to_s] = action_name.to_s
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_crumbset(action_name)
|
26
|
+
action_name = get_aliased_action_name(action_name)
|
27
|
+
action_scope = @action_scopes[action_name] || raise("no action scope for '#{action_name}'")
|
28
|
+
action_scope.crumbset
|
29
|
+
end
|
30
|
+
|
31
|
+
def actions(*action_names, &block)
|
32
|
+
action_names.each { |action_name| action(action_name, &block) }
|
33
|
+
end
|
34
|
+
|
35
|
+
def action(action_name, &block)
|
36
|
+
action_name = action_name.to_s
|
37
|
+
@action_scopes[action_name] = action_scope = ActionScope.new(self, action_name)
|
38
|
+
action_scope.instance_eval(&block)
|
39
|
+
true
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def get_aliased_action_name(action_name)
|
49
|
+
@aliases[action_name] || action_name
|
50
|
+
end
|
51
|
+
|
52
|
+
def prepend_default_alias_actions
|
53
|
+
alias_actions :new, :create
|
54
|
+
alias_actions :edit, :update, :destroy
|
55
|
+
end
|
56
|
+
|
57
|
+
def define_parent_crumbs
|
58
|
+
@parent_crumbs = @options[:parent_crumbs] || []
|
59
|
+
raise "parent_crumbs must be an Array ----> controller(:#{controller_name})" if !@parent_crumbs.is_a?(Array)
|
60
|
+
end
|
61
|
+
|
62
|
+
def raise_if_any_invalid_option
|
63
|
+
invalid_option = (@options.keys - [:parent_crumbs]).first
|
64
|
+
raise "Invalid option :#{invalid_option} ----> controller(:#{controller_name}, #{invalid_option}: '...') do" if invalid_option
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Bread
|
2
|
+
class Manager
|
3
|
+
class Actions
|
4
|
+
class TopScope
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@controllers = {}
|
8
|
+
end
|
9
|
+
|
10
|
+
def controller(controller_name, options={}, &block)
|
11
|
+
@controllers[controller_name] = controller_scope = ControllerScope.new(self, controller_name, options)
|
12
|
+
controller_scope.instance_eval(&block)
|
13
|
+
true
|
14
|
+
end
|
15
|
+
|
16
|
+
def get_controller_scope(controller_name)
|
17
|
+
@controllers[controller_name.to_sym] || raise("no controller #{controller_name}")
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Bread
|
2
|
+
class Manager
|
3
|
+
class Crumbs
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
def config(&block)
|
8
|
+
@top_scope = TopScope.new
|
9
|
+
@top_scope.instance_eval(&block)
|
10
|
+
end
|
11
|
+
|
12
|
+
def crumbs_for(controller, crumbset)
|
13
|
+
reload
|
14
|
+
crumb_scope = CrumbScope.new(controller)
|
15
|
+
crumb_blocks_for(crumbset).each do |bl|
|
16
|
+
crumb_scope.instance_eval(&bl)
|
17
|
+
end
|
18
|
+
append_first_and_last(crumb_scope.crumbset)
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def crumb_blocks_for(crumbset)
|
28
|
+
crumbset.map { |token| @top_scope.get_crumb_block(token) }
|
29
|
+
end
|
30
|
+
|
31
|
+
def append_first_and_last(crumbs)
|
32
|
+
crumbs.first[:_first] = true
|
33
|
+
crumbs.last[:_last] = true
|
34
|
+
crumbs
|
35
|
+
end
|
36
|
+
|
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
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Bread
|
2
|
+
class Manager
|
3
|
+
class Crumbs
|
4
|
+
class CrumbScope
|
5
|
+
|
6
|
+
attr_reader :crumbset, :controller
|
7
|
+
|
8
|
+
def initialize(controller)
|
9
|
+
@controller = controller
|
10
|
+
@crumbset = []
|
11
|
+
bring_instance_vars(controller)
|
12
|
+
end
|
13
|
+
|
14
|
+
def h
|
15
|
+
controller.view_context
|
16
|
+
end
|
17
|
+
|
18
|
+
def to(text, path, options={})
|
19
|
+
@crumbset << Crumb.new(@controller, text, path, options={})
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def bring_instance_vars(target)
|
29
|
+
target.instance_variables.each do |key|
|
30
|
+
ivar = target.instance_variable_get(key)
|
31
|
+
self.instance_variable_set(key, ivar)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Bread
|
2
|
+
class Manager
|
3
|
+
class Crumbs
|
4
|
+
class TopScope
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@crumb_blocks = {}
|
8
|
+
end
|
9
|
+
|
10
|
+
def crumb(token, &block)
|
11
|
+
@crumb_blocks[token] = block
|
12
|
+
true
|
13
|
+
end
|
14
|
+
|
15
|
+
def get_crumb_block(token)
|
16
|
+
@crumb_blocks[token] || raise("no crumb block for: :#{token}")
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/bread/version.rb
CHANGED