middleman-navigation 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,4 +1,5 @@
1
1
  *.gem
2
2
  .bundle
3
3
  Gemfile.lock
4
- .rvmrc
4
+ .rvmrc
5
+ tmp
data/Gemfile CHANGED
@@ -2,3 +2,23 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in middleman-navigation.gemspec
4
4
  gemspec
5
+
6
+ group :development do
7
+ gem "rake", "~> 0.9.2"
8
+ gem "rdoc", "~> 3.9"
9
+ gem "yard", "~> 0.8.0"
10
+ end
11
+
12
+ group :test do
13
+ gem "sinatra"
14
+ gem "cucumber", "~> 1.2.0"
15
+ gem "fivemat"
16
+ gem "aruba", "~> 0.4.11"
17
+ gem "rspec", "~> 2.7"
18
+ gem "timecop", "~> 0.4.0"
19
+ gem "kramdown"
20
+
21
+ platforms :ruby do
22
+ gem "redcarpet", "~> 2.1.1"
23
+ end
24
+ end
data/History.md ADDED
@@ -0,0 +1,21 @@
1
+
2
+ 1.0.2 / 2013-01-28
3
+ ==================
4
+
5
+ * Added support for including root node in navigation.
6
+
7
+ 1.0.1 / 2013-01-25
8
+ ==================
9
+
10
+ * Added matcher to support active page detection for directory indexes.
11
+ * Refactored frontmatter defaults, monkey patching defaults into the frontmatter_manager until we're allowed to specify them via middleman.
12
+ * Added support for app http_prefix configuration.
13
+ * Refactored simple-navigation patch to duplicate less code.
14
+ * Prevented simple-navigation from remembering @selected on navigation items.
15
+ * Resolved current_path issue, refactored to not run on every request.
16
+ * Refactoring for middleman 3 and simple-navigation.
17
+
18
+ 1.0.0 / 2013-01-18
19
+ ==================
20
+
21
+ * Removed things from .gitignore that should be in global config. See: https://help.github.com/articles/ignoring-files
data/Rakefile CHANGED
@@ -1,13 +1,7 @@
1
- require 'jeweler'
2
- Jeweler::Tasks.new do |gem|
3
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
4
- gem.name = "middleman-navigation"
5
- gem.homepage = "http://github.com/michaek/middleman-navigation"
6
- gem.license = "MIT"
7
- gem.summary = %q{Add simple navigation helpers for your Middleman project}
8
- gem.description = %q{Add simple navigation helpers for your Middleman project}
9
- gem.email = ["giovanni.cangiani@epfl.ch", "m@hellm.com"]
10
- gem.authors = ["Giovanni Cangiani", "Michael Hellein"]
11
- # dependencies defined in Gemfile
1
+ require 'cucumber/rake/task'
2
+
3
+ Cucumber::Rake::Task.new do |t|
4
+ t.cucumber_opts = %w{--format pretty}
12
5
  end
13
- Jeweler::RubygemsDotOrgTasks.new
6
+
7
+ task :default => :cucumber
@@ -0,0 +1,14 @@
1
+ Feature: Simple flat navigation
2
+ Scenario: Navigation should render
3
+ Given the Server is running at "basic-app"
4
+ When I go to "/index.html"
5
+ Then I should see "Home."
6
+ Then the Home menu item should be selected
7
+ When I go to "/subpage.html"
8
+ Then I should see "Subpage."
9
+ Then the Subpage menu item should be selected
10
+ Then the Another menu item should not be selected
11
+ When I go to "/another.html"
12
+ Then I should see "Subpage."
13
+ Then the Another menu item should be selected
14
+ Then the Subpage menu item should not be selected
@@ -0,0 +1,6 @@
1
+ Then /^the ([\w\s]+) menu item should (not )?be selected$/ do |name, negate|
2
+ expectation = negate ? :should_not : :should
3
+ doc = Nokogiri::HTML(@browser.last_response.body)
4
+ selected = doc.css('li.selected').map(&:content).join
5
+ selected.send(expectation, match(name))
6
+ end
@@ -0,0 +1,9 @@
1
+ ENV["TEST"] = "true"
2
+ ENV["AUTOLOAD_SPROCKETS"] = "false"
3
+
4
+ PROJECT_ROOT_PATH = File.dirname(File.dirname(File.dirname(__FILE__)))
5
+ require "sinatra"
6
+ require "nokogiri"
7
+ require "middleman-core"
8
+ require "middleman-core/step_definitions"
9
+ require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman-navigation')
@@ -0,0 +1 @@
1
+ activate :navigation
@@ -0,0 +1,7 @@
1
+ ---
2
+ title: Another
3
+ ---
4
+
5
+ Subpage.
6
+
7
+ <%= render_navigation %>
@@ -0,0 +1,7 @@
1
+ ---
2
+ title: Home
3
+ ---
4
+
5
+ Home.
6
+
7
+ <%= render_navigation %>
@@ -0,0 +1,7 @@
1
+ ---
2
+ title: Subpage
3
+ ---
4
+
5
+ Subpage.
6
+
7
+ <%= render_navigation %>
@@ -12,15 +12,21 @@ module Middleman
12
12
  end
13
13
  end
14
14
 
15
+ def self.with_defaults(navigation)
16
+ navigation = {} if navigation.blank?
17
+ Middleman::Navigation::FRONTMATTER_DEFAULTS.merge navigation
18
+ end
19
+
15
20
  def self.traverse(resource, navigation)
16
21
  children = visible_children(resource)
17
22
 
18
- unless children.blank?
19
- navigation.items do |level|
20
- if resource == @root
21
- add_navigation_node @root, level unless @root.data.navigation[:hidden]
22
- end
23
+ navigation.items do |level|
24
+ if resource == @root
25
+ options = with_defaults @root.data.navigation
26
+ add_navigation_node @root, level unless options[:hidden]
27
+ end
23
28
 
29
+ unless children.blank?
24
30
  children.each do |child|
25
31
  add_navigation_node child, level
26
32
  traverse child, level
@@ -30,18 +36,19 @@ module Middleman
30
36
  end
31
37
 
32
38
  def self.visible_children(resource)
33
- visible = resource.children.select {|child| child.data.navigation.present?}
34
- visible.select!{|child| !child.data.navigation[:hidden]}
35
- visible.sort! {|a, b| a.data.navigation[:weight] <=> b.data.navigation[:weight]}
39
+ visible = resource.children
40
+ visible.select!{|child| !with_defaults(child.data.navigation)[:hidden]}
41
+ visible.sort! {|a, b| with_defaults(a.data.navigation)[:weight] <=> with_defaults(b.data.navigation)[:weight]}
36
42
  visible
37
43
  end
38
44
 
39
45
  def self.add_navigation_node(node, level)
40
- title = node.data.navigation[:title] || node.data.title
41
- url = node.data.navigation[:destination] || node.url
46
+ options = with_defaults(node.data.navigation)
47
+ title = options[:title] || node.data.title
48
+ url = options[:destination] || node.url
42
49
 
43
- level.item node.destination_path, title, url, :highlights_on => %r(#{url}(#{@app.index_file})?)
50
+ level.item node.destination_path, title, url, :highlights_on => %r(^#{url}(#{@app.index_file})?$)
44
51
  end
45
52
  end
46
53
  end
47
- end
54
+ end
@@ -1,5 +1,5 @@
1
1
  module Middleman
2
2
  module Navigation
3
- VERSION = "1.0.2"
3
+ VERSION = "1.0.3"
4
4
  end
5
5
  end
@@ -1,9 +1,12 @@
1
1
  require 'middleman-navigation/tree'
2
2
  require 'middleman-navigation/resource_list_manipulator'
3
- require 'middleman-navigation/front_matter'
3
+
4
4
  require 'simple-navigation'
5
5
  require 'simple-navigation/adapters/sinatra-middleman'
6
6
  require 'simple-navigation/core/item'
7
+
8
+ require 'active_support/hash_with_indifferent_access'
9
+
7
10
  SimpleNavigation::config_file_paths << File.expand_path("../simple-navigation", __FILE__)
8
11
 
9
12
  module Middleman
@@ -13,7 +16,7 @@ module Middleman
13
16
  title: nil,
14
17
  destination: nil,
15
18
  weight: 0,
16
- }.stringify_keys
19
+ }.with_indifferent_access
17
20
 
18
21
  class << self
19
22
  def registered(app)
@@ -1,11 +1,13 @@
1
1
  module SimpleNavigation
2
2
  module Adapters
3
3
  class Sinatra < Base
4
- cattr_accessor :middleman_app
4
+ def self.middleman_app=(app)
5
+ @@middleman_app = app
6
+ end
5
7
 
6
8
  # Our request doesn't have a fullpath, so we must return path instead.
7
9
  def request_uri
8
- @prefix ||= middleman_app.nil? ? '/' : middleman_app.inst.http_prefix
10
+ @prefix ||= @@middleman_app.nil? ? '/' : @@middleman_app.inst.http_prefix
9
11
  @prefix + request.path
10
12
  end
11
13
  end
@@ -1,11 +1,6 @@
1
- module SimpleNavigation
2
- class Item
3
- # We want simple-navigation to be forgetful about @selected.
4
- def selected_with_forgetfulness?
5
- is_selected = selected_without_forgetfulness?
6
- @selected = nil
7
- is_selected
8
- end
9
- alias_method_chain :selected?, :forgetfulness
1
+ class SimpleNavigation::Item
2
+ # We want simple-navigation to be forgetful about @selected.
3
+ def selected?
4
+ selected_by_config? || selected_by_subnav? || selected_by_condition?
10
5
  end
11
6
  end
@@ -19,10 +19,11 @@ Gem::Specification.new do |s|
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = ["lib"]
21
21
 
22
- s.add_runtime_dependency("middleman", ["> 3.0.0"])
23
- s.add_runtime_dependency("simple-navigation", ["> 3.0.0"])
22
+ s.add_dependency("middleman-core", ["~> 3.2.1"])
23
+ s.add_dependency("simple-navigation", ["> 3.0.0"])
24
24
 
25
- s.add_development_dependency "rspec"
25
+ s.add_development_dependency "activesupport", ["~> 3.2.6"]
26
+ s.add_development_dependency "nokogiri"
26
27
  s.add_development_dependency "bundler"
27
28
  s.add_development_dependency "gem-release" # Seems a better fit than Jeweler.
28
29
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman-navigation
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,24 +10,24 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-01-29 00:00:00.000000000 Z
13
+ date: 2014-01-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: middleman
16
+ name: middleman-core
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
- - - ! '>'
20
+ - - ~>
21
21
  - !ruby/object:Gem::Version
22
- version: 3.0.0
22
+ version: 3.2.1
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  none: false
27
27
  requirements:
28
- - - ! '>'
28
+ - - ~>
29
29
  - !ruby/object:Gem::Version
30
- version: 3.0.0
30
+ version: 3.2.1
31
31
  - !ruby/object:Gem::Dependency
32
32
  name: simple-navigation
33
33
  requirement: !ruby/object:Gem::Requirement
@@ -45,7 +45,23 @@ dependencies:
45
45
  - !ruby/object:Gem::Version
46
46
  version: 3.0.0
47
47
  - !ruby/object:Gem::Dependency
48
- name: rspec
48
+ name: activesupport
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 3.2.6
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: 3.2.6
63
+ - !ruby/object:Gem::Dependency
64
+ name: nokogiri
49
65
  requirement: !ruby/object:Gem::Requirement
50
66
  none: false
51
67
  requirements:
@@ -102,10 +118,17 @@ extra_rdoc_files: []
102
118
  files:
103
119
  - .gitignore
104
120
  - Gemfile
121
+ - History.md
105
122
  - README.markdown
106
123
  - Rakefile
124
+ - features/basic.feature
125
+ - features/step_definitions/nav_steps.rb
126
+ - features/support/env.rb
127
+ - fixtures/basic-app/config.rb
128
+ - fixtures/basic-app/source/another.erb
129
+ - fixtures/basic-app/source/index.erb
130
+ - fixtures/basic-app/source/subpage.erb
107
131
  - lib/middleman-navigation.rb
108
- - lib/middleman-navigation/front_matter.rb
109
132
  - lib/middleman-navigation/resource_list_manipulator.rb
110
133
  - lib/middleman-navigation/tree.rb
111
134
  - lib/middleman-navigation/version.rb
@@ -134,8 +157,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
157
  version: '0'
135
158
  requirements: []
136
159
  rubyforge_project: middleman-navigation
137
- rubygems_version: 1.8.23
160
+ rubygems_version: 1.8.24
138
161
  signing_key:
139
162
  specification_version: 3
140
163
  summary: Add simple navigation helpers for your Middleman project
141
164
  test_files: []
165
+ has_rdoc:
@@ -1,27 +0,0 @@
1
- # This approach to defaults is gross, and it doesn't belong here!
2
- # TODO: There should be a way in middleman for extensions to provide frontmatter defaults.
3
- # TODO: Remove this when middleman supports that.
4
- module Middleman::CoreExtensions
5
- module FrontMatter
6
- class FrontmatterManager
7
- def with_defaults(data)
8
- unless data.first.blank?
9
- data.first['navigation'] ||= {}
10
- data.first['navigation'].reverse_merge! Middleman::Navigation::FRONTMATTER_DEFAULTS
11
- end
12
- data
13
- end
14
-
15
- def parse_yaml_front_matter_with_defaults(content)
16
- with_defaults parse_yaml_front_matter_without_defaults(content)
17
- end
18
-
19
- def parse_json_front_matter_with_defaults(content)
20
- with_defaults parse_json_front_matter_without_defaults(content)
21
- end
22
-
23
- alias_method_chain :parse_yaml_front_matter, :defaults
24
- alias_method_chain :parse_json_front_matter, :defaults
25
- end
26
- end
27
- end