bread 0.0.6 → 0.0.7

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