middleman-navigation 1.0.2 → 1.0.3

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.
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