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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -1
  3. data/bread.gemspec +1 -1
  4. data/lib/bread.rb +15 -10
  5. data/lib/bread/{crumb.rb → data/crumb.rb} +4 -4
  6. data/lib/bread/helper.rb +3 -25
  7. data/lib/bread/manager/actions.rb +37 -0
  8. data/lib/bread/manager/actions/action_scope.rb +32 -0
  9. data/lib/bread/manager/actions/controller_scope.rb +69 -0
  10. data/lib/bread/manager/actions/top_scope.rb +26 -0
  11. data/lib/bread/manager/crumbs.rb +52 -0
  12. data/lib/bread/manager/crumbs/crumb_scope.rb +39 -0
  13. data/lib/bread/manager/crumbs/top_scope.rb +25 -0
  14. data/lib/bread/manager/manager.rb +14 -0
  15. data/lib/bread/version.rb +1 -1
  16. data/test/dummy/app/assets/javascripts/product_photos.js +2 -0
  17. data/test/dummy/app/assets/stylesheets/product_photos.css +4 -0
  18. data/test/dummy/app/controllers/product_photos_controller.rb +67 -0
  19. data/test/dummy/app/controllers/products_controller.rb +12 -23
  20. data/test/dummy/app/helpers/product_photos_helper.rb +2 -0
  21. data/test/dummy/app/lib/bread/actions.rb +18 -0
  22. data/test/dummy/app/lib/bread/actions_next.rb +43 -0
  23. data/test/dummy/app/lib/bread/crumbs.rb +22 -0
  24. data/test/dummy/app/lib/bread/crumbs_next.rb +77 -0
  25. data/test/dummy/app/models/product.rb +8 -0
  26. data/test/dummy/app/models/product_photo.rb +10 -0
  27. data/test/dummy/app/models/user.rb +6 -0
  28. data/test/dummy/app/views/layouts/application.html.erb +10 -5
  29. data/test/dummy/app/views/product_photos/_form.html.erb +29 -0
  30. data/test/dummy/app/views/product_photos/edit.html.erb +6 -0
  31. data/test/dummy/app/views/product_photos/index.html.erb +31 -0
  32. data/test/dummy/app/views/product_photos/new.html.erb +5 -0
  33. data/test/dummy/app/views/product_photos/show.html.erb +19 -0
  34. data/test/dummy/config/initializers/devise.rb +254 -0
  35. data/test/dummy/config/locales/devise.en.yml +59 -0
  36. data/test/dummy/config/routes.rb +4 -1
  37. data/test/dummy/db/migrate/20140306111733_devise_create_users.rb +42 -0
  38. data/test/dummy/db/migrate/20140306114935_create_product_photos.rb +11 -0
  39. data/test/dummy/db/schema.rb +29 -1
  40. data/test/{bread_test.rb → dummy/test/bread_test.rb} +1 -0
  41. data/test/dummy/test/controllers/product_photos_controller_test.rb +98 -0
  42. data/test/dummy/test/controllers/products_controller_test.rb +94 -30
  43. data/test/dummy/test/fixtures/product_photos.yml +11 -0
  44. data/test/dummy/test/fixtures/products.yml +4 -4
  45. data/test/dummy/test/fixtures/users.yml +11 -0
  46. data/test/dummy/test/helpers/product_photos_helper_test.rb +4 -0
  47. data/test/{integration → dummy/test/integration}/navigation_test.rb +0 -0
  48. data/test/dummy/test/models/product_photo_test.rb +7 -0
  49. data/test/dummy/test/models/user_test.rb +7 -0
  50. data/test/dummy/test/support/asserts.rb +17 -0
  51. data/test/test_helper.rb +1 -1
  52. metadata +68 -14
  53. data/lib/bread/commands/config_command.rb +0 -15
  54. data/lib/bread/commands/controller_layout_command.rb +0 -44
  55. data/lib/bread/commands/crumb_to_command.rb +0 -23
  56. data/lib/bread/commands/ivars_command.rb +0 -16
  57. data/lib/bread/config.rb +0 -24
  58. data/lib/bread/controller.rb +0 -30
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 657afe5153a81090fcf0df69e85ac8c5ff45e4de
4
- data.tar.gz: c285e78eec2c8e826dd235a24b3a2a7788c57d8d
3
+ metadata.gz: 512440b0923520d6c7e88b2697f3ed09805f7417
4
+ data.tar.gz: d5a96a75101e8bbd427711a8abc6b53466ab0ae7
5
5
  SHA512:
6
- metadata.gz: 8e85b52f169c79262d9c42bc7f6658fb18ab5cdb285d352f86e52d1961c4ea7bd10b93181202de46d992e9a76203ec4c2b94c66a5292a234febcd0c2fa11727c
7
- data.tar.gz: f86d02ac35ab55ea7bebdc215becdb70df9b577702f53d6b0194203d0771138cd7eec177cbb1ede0179f6e0734dcfa1a8a6f66cdbb2b07219868c4855deeacbe
6
+ metadata.gz: 4b5882b890a6a09ef316e5df023b12669bbd98663c3e6c571748dddc0aa2f43a4bf44efdfc7ace8f14c206e87ef26714dfe851f7b6c5b83b741ba9804ef4bd54
7
+ data.tar.gz: ddd232dec7b8ddd7d0398476dc02ad9ea87168cab6b5e90eac619f764ca1d45e467fb3802102d35fae68a40a2eac9c74411ae1cb2f256b4c9ed52e3f3805b3c9
data/Gemfile CHANGED
@@ -16,4 +16,7 @@ gemspec
16
16
  gem 'rails', '4.0.0' # June 25, 2013
17
17
  gem 'sqlite3'
18
18
  gem 'turn'
19
- gem 'colorize'
19
+ gem 'colorize'
20
+
21
+ # dummy app
22
+ gem 'devise'
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/yakko/bread"
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/config"
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.config(&block)
16
- Config.instance.config(&block)
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(context, title, path, options)
5
- self.context = context
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
- context.current_page? path
28
+ controller.view_context.current_page? path
29
29
  end
30
30
 
31
31
  private
32
32
 
33
- attr_accessor :context
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
- Config.instance.reload! # if should_reload?
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
@@ -0,0 +1,14 @@
1
+ module Bread
2
+ class Manager
3
+ include Singleton
4
+
5
+ def actions
6
+ @actions ||= Actions.new
7
+ end
8
+
9
+ def crumbs
10
+ @crumbs ||= Crumbs.new
11
+ end
12
+
13
+ end
14
+ end
data/lib/bread/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Bread
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end