sitemapper 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -105,6 +105,22 @@ page title), short_description or description, tag_list or keywords.
105
105
 
106
106
  <% page(@event) %>
107
107
 
108
+ If you need to change the default method lookup for page, you have two ways:
109
+
110
+ ==== Add an initializer with the following content (that will change the default method lookup sequence):
111
+
112
+ Sitemapper.meta_lookup = {:title => [:my_default_title_method, :my_second_default_title_method]
113
+ :desc => [:my_default_description_method, :my_second_default_description_method],
114
+ :keywords => [:my_default_keywords_method, :my_second_default_keywords_methods]
115
+ }
116
+
117
+ ==== Configure per object (yes, object, not just ActiveRecord descendents) lookups:
118
+
119
+ class MyObject
120
+ map_fields :title => :weird_title, :desc => :weird_description, :keywords => :weird_keywords
121
+ ...
122
+ end
123
+
108
124
  If you want to suggest any other SEO technique, suggest it on
109
125
  carlos@milk-it.net
110
126
 
@@ -116,6 +132,7 @@ carlos@milk-it.net
116
132
  * Create separate files for dynamic and static routes (then, we'll can
117
133
  delete all the static on startup)
118
134
  * Write test code (sorry, I really didn't it)
135
+ * Write the Sitemapper::Map#map_urls method
119
136
 
120
137
  Copyright (c) 2008 Carlos Júnior, released under the MIT license
121
138
  Copyright (c) 2008 Milk-it Software House, released under the MIT license
data/Rakefile CHANGED
@@ -17,6 +17,7 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
17
17
  rdoc.rdoc_dir = 'rdoc'
18
18
  rdoc.title = 'Sitemaper'
19
19
  rdoc.options << '--line-numbers' << '--inline-source'
20
- rdoc.rdoc_files.include('README')
20
+ rdoc.rdoc_files.include('README.rdoc')
21
21
  rdoc.rdoc_files.include('lib/**/*.rb')
22
+ rdoc.main = 'README.rdoc'
22
23
  end
data/init.rb CHANGED
@@ -4,3 +4,4 @@ if Object.const_defined?('Rails')
4
4
  require 'sitemapper/adapters/rails_adapter'
5
5
  Sitemapper::Adapters::RailsAdapter.install!
6
6
  end
7
+ Object.send(:include, Sitemapper::ObjectMapper)
@@ -1,12 +1,14 @@
1
+ $:.unshift(File.dirname(__FILE__))
1
2
  require 'sitemapper/helpers'
2
3
  require 'sitemapper/map'
3
4
  require 'sitemapper/accessors'
5
+ require 'sitemapper/object_mapper'
4
6
 
5
7
  module Sitemapper
6
- MAJOR, MINOR, TINY = 0, 2, 0 #:nodoc:
8
+ MAJOR, MINOR, TINY = 0, 3, 0 #:nodoc:
7
9
 
8
10
  # Get the running version of Sitemapper
9
- def version
11
+ def self.version
10
12
  [MAJOR, MINOR, TINY].join('.')
11
13
  end
12
14
 
@@ -17,4 +19,30 @@ module Sitemapper
17
19
  def self.map
18
20
  @map or raise 'Uninitialized Sitemapper.map'
19
21
  end
22
+
23
+ # Define the default meta lookup for objects on <tt>page</tt> helper
24
+ #
25
+ # <tt>lookup</tt> is a hash with the following options:
26
+ #
27
+ # * <tt>:desc</tt> method to look for page description
28
+ # * <tt>:keywords</tt> method to look for page keywords
29
+ # * <tt>:title</tt> method to look for page title
30
+ #
31
+ # All these arguments can be an Array, String or Symbol and will
32
+ # be used to lookup a valid method when you call <tt>page</tt> using
33
+ # something different of a Hash as argument. For example:
34
+ #
35
+ # <% page(@contact) %>
36
+ #
37
+ def self.meta_lookup=(lookup)
38
+ @meta_lookup = lookup
39
+ end
40
+
41
+ def self.meta_lookup
42
+ @meta_lookup || {
43
+ :desc => [:short_description, :description],
44
+ :keywords => [:tag_list, :keywords],
45
+ :title => [:title, :name]
46
+ }
47
+ end
20
48
  end
@@ -18,27 +18,30 @@ module Sitemapper
18
18
  @_title = defs.delete(:title)
19
19
  @_desc = defs.delete(:desc)
20
20
  @_keys = defs.delete(:keywords)
21
+ return nil # dummies safe!
21
22
  end
22
23
 
23
24
  def page_with_object(defs) # :nodoc:
24
25
  return page_without_object(defs) if defs.is_a?(Hash)
25
- @_title = if defs.respond_to?(:title)
26
- defs.title
27
- elsif defs.respond_to?(:name)
28
- defs.name
29
- end
30
- @_desc = if defs.respond_to?(:short_description)
31
- defs.short_description
32
- elsif defs.respond_to?(:description)
33
- defs.description
34
- end
35
- @_keys = if defs.respond_to?(:tag_list)
36
- defs.tag_list
37
- elsif defs.respond_to?(:keywords)
38
- defs.keywords
39
- end
26
+
27
+ lookup_method = lambda do |obj, key|
28
+ methods = obj.class.respond_to?(:sitemapper_config)? obj.class.sitemapper_config : Sitemapper.meta_lookup
29
+ methods = methods[key]
30
+ method = if methods.is_a?(Array)
31
+ methods.find {|m| obj.respond_to?(m)}
32
+ elsif methods.is_a?(String) || methods.is_a?(Symbol)
33
+ methods
34
+ end
35
+ logger.debug(">>> #{method}")
36
+ return method.nil?? nil : obj.send(method)
37
+ end # Do you think it's ugly? You have to see my grandma in underwear
38
+
39
+ @_title = lookup_method.call(defs, :title)
40
+ @_desc = lookup_method.call(defs, :desc)
41
+ @_keys = lookup_method.call(defs, :keywords)
40
42
  end
41
- alias_method_chain :page, :object
43
+ alias_method :page_without_object, :page
44
+ alias_method :page, :page_with_object
42
45
 
43
46
  # Returns the title of the page with the website title
44
47
  #
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sitemapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlos Junior