bread 0.0.6 → 0.0.7
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 +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