staticpress 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ task :tests, :path do |t, args|
8
8
  args.with_defaults(:path => 'tests')
9
9
 
10
10
  run_recursively = lambda do |dir|
11
- Pathname.new(dir).expand_path.children.each do |dir_or_test|
11
+ Pathname(dir).expand_path.children.each do |dir_or_test|
12
12
  if dir_or_test.directory?
13
13
  run_recursively.call dir_or_test
14
14
  elsif dir_or_test.to_s.end_with? '_test.rb'
@@ -19,3 +19,48 @@ task :tests, :path do |t, args|
19
19
 
20
20
  run_recursively.call args[:path]
21
21
  end
22
+
23
+ desc 'Enumerate annotations. Optionally takes a pipe-separated list of tags to process'
24
+ task :notes, :types do |t, args|
25
+ args.with_defaults :types => 'FIXME|TODO'
26
+
27
+ types = args[:types].split '|'
28
+ finder = /.*# ?(?<type>[A-Z]+):? (?<note>.+)$/
29
+ result = Hash.new { |hash, key| hash[key] = {} }
30
+
31
+ `git ls-files`.split("\n").each do |p|
32
+ path = Pathname(p)
33
+ line_number = 0
34
+
35
+ path.each_line do |line|
36
+ line_number += 1
37
+
38
+ if match = finder.match(line)
39
+ result[path][line_number] = { :type => match[:type], :note => match[:note] } if types.include? match[:type]
40
+ end
41
+ end rescue nil
42
+ end
43
+
44
+ numbers = []
45
+
46
+ result.each do |path, lines|
47
+ lines.each do |number, note|
48
+ numbers << number
49
+ end
50
+ end
51
+
52
+ number_width = numbers.max.to_s.length
53
+ type_width = types.max_by { |type| type.to_s.length }.to_s.length
54
+
55
+ result.each do |path, lines|
56
+ puts "\e[1m#{path}\e[0m:"
57
+
58
+ lines.each do |number, note|
59
+ line_number = "[\e[1m#{number.to_s.rjust(number_width)}\e[0m]"
60
+ type = "[\e[0;37m#{note[:type]}\e[0m]"
61
+ puts " * #{line_number} #{type.ljust(type_width + type.length - note[:type].length)} #{note[:note]}"
62
+ end
63
+
64
+ puts
65
+ end
66
+ end
@@ -93,6 +93,11 @@ Feature: The happy path
93
93
  | public/index.html |
94
94
  | public/about/index.html |
95
95
 
96
+ Scenario: Building a site (verbose)
97
+ Given a blog with content exists
98
+ When I run `staticpress build --verbose`
99
+ Then the output should contain " page public/about/index.html"
100
+
96
101
  Scenario: Building a site a custom homepage
97
102
  Given a blog with content exists
98
103
  And I write to "content/index.markdown" with:
@@ -102,6 +107,11 @@ Feature: The happy path
102
107
  ---
103
108
  in custom page
104
109
  """
110
+ # FIXME hacky-hack to keep Tilt happy
111
+ # NOTE this does not seem to be an issue when running this command for real
112
+ And I require "haml"
113
+ And I require "redcarpet"
114
+ And I require "sass"
105
115
  When I run `staticpress build`
106
116
  Then the file "public/index.html" should contain exactly:
107
117
  """
@@ -16,6 +16,10 @@ Given /^the blog has been previously built$/ do
16
16
  Staticpress::CLI.new.build
17
17
  end
18
18
 
19
+ Given /^I require "([^"]*)"$/ do |library|
20
+ require library
21
+ end
22
+
19
23
 
20
24
  Then /^a post named "([^"]*)" should exist$/ do |post_title|
21
25
  now = Time.now.utc
@@ -2,7 +2,7 @@ require 'pathname'
2
2
 
3
3
  module Staticpress
4
4
  def self.blog_path
5
- Pathname.new(@path || '.').expand_path
5
+ Pathname(@path || '.').expand_path
6
6
  end
7
7
 
8
8
  def self.blog_path=(path)
@@ -10,6 +10,6 @@ module Staticpress
10
10
  end
11
11
 
12
12
  def self.root
13
- Pathname.new File.expand_path('..', __FILE__)
13
+ Pathname File.expand_path('..', __FILE__)
14
14
  end
15
15
  end
@@ -1,7 +1,6 @@
1
1
  # http://practicingruby.com/articles/shared/ozkzbsdmagcm
2
2
 
3
3
  require 'fileutils'
4
- require 'pathname'
5
4
  require 'rack'
6
5
  require 'thor'
7
6
 
@@ -10,6 +9,7 @@ require 'staticpress/error'
10
9
  require 'staticpress/helpers'
11
10
  require 'staticpress/plugin'
12
11
  require 'staticpress/pusher'
12
+ require 'staticpress/settings'
13
13
  require 'staticpress/site'
14
14
  require 'staticpress/version'
15
15
 
@@ -23,11 +23,18 @@ module Staticpress
23
23
  map ['-h', '--help'] => :help
24
24
  map ['-v', '--version'] => :version
25
25
 
26
+ class_option '--verbose', :type => :boolean, :default => false, :required => false, :desc => 'Output information as the task is running'
27
+
28
+ def initialize(*args)
29
+ super
30
+ Staticpress::Settings.set! options
31
+ end
32
+
26
33
  desc 'help [task]', 'Describe available tasks or one specific task'
27
34
  def help(*args)
28
35
  general_usage = <<-USAGE
29
36
  Usage:
30
- staticpress <task> <required-argument> [option-argument]
37
+ staticpress <task> <required-argument> [option-argument] [--options...]
31
38
 
32
39
  USAGE
33
40
  puts general_usage if args.empty?
@@ -97,9 +104,10 @@ customizations. If [theme-name] is blank, copies the currently configured theme
97
104
  end
98
105
 
99
106
  desc 'list [method]', 'Send [method] to every content and output the result, or list all content if [method] is not present'
100
- def list(method = nil)
101
- all_content = Staticpress::Site.new.all_content
102
- puts(method ? all_content.map(&method.to_sym) : all_content)
107
+ def list(method = :to_s)
108
+ Staticpress::Site.new.each do |content|
109
+ puts(content.respond_to?(method) ? content.send(method) : content)
110
+ end
103
111
  end
104
112
 
105
113
  desc 'build', 'Prepare blog for deployment'
@@ -16,7 +16,7 @@ module Staticpress::Content
16
16
 
17
17
  attr_reader :params
18
18
 
19
- def initialize(params)
19
+ def initialize(params = {})
20
20
  clean_params = params.select { |key, value| value }.map do |key, value|
21
21
  cast_value = case Staticpress::Route::REGEX_STUBS[key].klass
22
22
  when :integer then Integer value rescue value
@@ -101,10 +101,19 @@ module Staticpress::Content
101
101
  end
102
102
 
103
103
  def save
104
- unless output_path.file?
105
- FileUtils.mkdir_p output_path.dirname
106
- output_path.open('w') { |f| f.write render }
104
+ save! unless output_path.file?
105
+ end
106
+
107
+ def save!
108
+ if settings.verbose
109
+ width = config.routes.to_hash.keys.max_by { |sym| sym.to_s.length }.to_s.length
110
+ type = self.class.type.rjust width
111
+ path = output_path.to_s.sub Staticpress.blog_path.to_s + '/', ''
112
+ puts "#{type} #{path}"
107
113
  end
114
+
115
+ FileUtils.mkdir_p output_path.dirname
116
+ output_path.open('w') { |f| f.write render }
108
117
  end
109
118
 
110
119
  def template_context
@@ -8,8 +8,19 @@ module Staticpress::Content
8
8
  extend CollectionContent
9
9
  extend ResourceContent
10
10
 
11
+ attr_reader :name
12
+
13
+ def initialize(params)
14
+ @name = params[:name]
15
+ super
16
+ end
17
+
11
18
  def optional_param_defaults
12
- { :number => 1 }
19
+ { :number => pages_count }
20
+ end
21
+
22
+ def pages_count
23
+ (self.class.content_by_category[name].count / config.posts_per_page.to_f).ceil
13
24
  end
14
25
 
15
26
  def sub_content
@@ -21,9 +32,15 @@ module Staticpress::Content
21
32
  end
22
33
 
23
34
  def self.all
24
- categories.map do |category|
25
- new :name => category, :number => '1'
35
+ reply = []
36
+
37
+ content_by_category.each do |category, posts|
38
+ 1.upto paginate(posts).count do |number|
39
+ reply << new(:name => category, :number => number)
40
+ end
26
41
  end
42
+
43
+ reply
27
44
  end
28
45
 
29
46
  def self.categories
@@ -31,7 +48,7 @@ module Staticpress::Content
31
48
  end
32
49
 
33
50
  def self.content_by_category
34
- reply = {}
51
+ reply = Hash.new { |hash, key| hash[key] = [] }
35
52
  Staticpress::Content::Post.all.each do |post|
36
53
  (post.meta.categories || []).each do |category|
37
54
  (reply[category] ||= []) << post
@@ -1,5 +1,6 @@
1
1
  require 'staticpress'
2
2
  require 'staticpress/content/base'
3
+ require 'staticpress/content/post'
3
4
  require 'staticpress/content/collection_content'
4
5
 
5
6
  module Staticpress::Content
@@ -7,11 +8,15 @@ module Staticpress::Content
7
8
  extend CollectionContent
8
9
 
9
10
  def optional_param_defaults
10
- { :number => 1 }
11
+ { :number => pages_count }
12
+ end
13
+
14
+ def pages_count
15
+ (self.class.all_posts.count / config.posts_per_page.to_f).ceil
11
16
  end
12
17
 
13
18
  def sub_content
14
- paginate(Staticpress::Content::Post.all)[params[:number] - 1]
19
+ paginate(self.class.all_posts.sort)[params[:number] - 1]
15
20
  end
16
21
 
17
22
  def template_path
@@ -19,9 +24,17 @@ module Staticpress::Content
19
24
  end
20
25
 
21
26
  def self.all
22
- [
23
- new(:number => '1')
24
- ]
27
+ reply = []
28
+
29
+ 1.upto paginate(all_posts).count do |number|
30
+ reply << new(:number => number)
31
+ end
32
+
33
+ reply
34
+ end
35
+
36
+ def self.all_posts
37
+ Staticpress::Content::Post.all
25
38
  end
26
39
  end
27
40
  end
@@ -18,7 +18,7 @@ module Staticpress::Content
18
18
  def initialize(params)
19
19
  super
20
20
 
21
- index = extensionless_basename Pathname.new(config.index_file)
21
+ index = extensionless_basename Pathname(config.index_file)
22
22
 
23
23
  @full_slug = params[:slug]
24
24
  @extension = find_supported_extension(Staticpress.blog_path + config.source_path + full_slug)
@@ -32,6 +32,10 @@ module Staticpress::Content
32
32
  end
33
33
  end
34
34
 
35
+ def save
36
+ save!
37
+ end
38
+
35
39
  def static?
36
40
  (Staticpress.blog_path + config.source_path + params[:slug]).file?
37
41
  end
@@ -64,7 +68,7 @@ module Staticpress::Content
64
68
  def self.find_by_path(path)
65
69
  if path.file?
66
70
  raw_slug = parse_slug(path, (Staticpress.blog_path + config.source_path)).first
67
- basename = extensionless_basename Pathname.new(config.index_file)
71
+ basename = extensionless_basename Pathname(config.index_file)
68
72
  slug = raw_slug.sub(/.*(\/?#{basename})$/, '')
69
73
  new :slug => slug
70
74
  end
@@ -1,3 +1,5 @@
1
+ require 'pathname'
2
+
1
3
  require 'staticpress'
2
4
  require 'staticpress/content/static_content'
3
5
 
@@ -6,7 +8,7 @@ module Staticpress::Content
6
8
  # FIXME add tests
7
9
  def find_supported_extension(extensionless_path)
8
10
  Staticpress::Content::StaticContent.supported_extensions.detect do |extension|
9
- extension.to_sym if Pathname.new("#{extensionless_path}.#{extension}").file?
11
+ extension.to_sym if Pathname("#{extensionless_path}.#{extension}").file?
10
12
  end
11
13
  end
12
14
 
@@ -8,8 +8,19 @@ module Staticpress::Content
8
8
  extend CollectionContent
9
9
  extend ResourceContent
10
10
 
11
+ attr_reader :name
12
+
13
+ def initialize(params)
14
+ @name = params[:name]
15
+ super
16
+ end
17
+
11
18
  def optional_param_defaults
12
- { :number => 1 }
19
+ { :number => pages_count }
20
+ end
21
+
22
+ def pages_count
23
+ (self.class.content_by_tag[name].count / config.posts_per_page.to_f).ceil
13
24
  end
14
25
 
15
26
  def sub_content
@@ -21,9 +32,15 @@ module Staticpress::Content
21
32
  end
22
33
 
23
34
  def self.all
24
- tags.map do |tag|
25
- new :name => tag, :number => '1'
35
+ reply = []
36
+
37
+ content_by_tag.each do |tag, posts|
38
+ 1.upto paginate(posts).count do |number|
39
+ reply << new(:name => tag, :number => number)
40
+ end
26
41
  end
42
+
43
+ reply
27
44
  end
28
45
 
29
46
  def self.tags
@@ -31,7 +48,7 @@ module Staticpress::Content
31
48
  end
32
49
 
33
50
  def self.content_by_tag
34
- reply = {}
51
+ reply = Hash.new { |hash, key| hash[key] = [] }
35
52
  Staticpress::Content::Post.all.each do |post|
36
53
  (post.meta.tags || []).each do |tag|
37
54
  (reply[tag] ||= []) << post
@@ -1,5 +1,8 @@
1
+ require 'pathname'
2
+
1
3
  require 'staticpress'
2
4
  require 'staticpress/configuration'
5
+ require 'staticpress/settings'
3
6
 
4
7
  module Staticpress
5
8
  module Helpers
@@ -14,7 +17,7 @@ module Staticpress
14
17
 
15
18
  def extensionless_path(pathname)
16
19
  path = pathname.to_path
17
- Pathname.new path[0...(path.length - pathname.extname.length)]
20
+ Pathname path[0...(path.length - pathname.extname.length)]
18
21
  end
19
22
 
20
23
  def hash_from_array(array, &block)
@@ -48,6 +51,10 @@ module Staticpress
48
51
  reply
49
52
  end
50
53
 
54
+ def settings
55
+ Staticpress::Settings.instance
56
+ end
57
+
51
58
  def spider_directory(dir, &block)
52
59
  dir.children.map do |child|
53
60
  if child.directory?
@@ -16,6 +16,10 @@ module Staticpress
16
16
  method_missing key.to_s.to_sym
17
17
  end
18
18
 
19
+ def merge(other)
20
+ self.class.new to_hash.merge(other.to_hash)
21
+ end
22
+
19
23
  def to_hash
20
24
  converted = {}
21
25
 
@@ -0,0 +1,18 @@
1
+ require 'staticpress'
2
+ require 'staticpress/js_object'
3
+
4
+ module Staticpress
5
+ class Settings < JSObject
6
+ def self.default
7
+ new 'verbose' => false
8
+ end
9
+
10
+ def self.instance
11
+ new(default.to_hash.merge(@runtime_settings || {}))
12
+ end
13
+
14
+ def self.set!(settings)
15
+ (@runtime_settings ||= {}).merge!(settings)
16
+ end
17
+ end
18
+ end
@@ -22,6 +22,7 @@ module Staticpress
22
22
  Staticpress::Content::Theme
23
23
  ]
24
24
 
25
+ include Enumerable
25
26
  include Staticpress::Helpers
26
27
 
27
28
  attr_reader :directory
@@ -30,8 +31,21 @@ module Staticpress
30
31
  @directory = Staticpress.blog_path + config.source_path
31
32
  end
32
33
 
33
- def all_content
34
- CONTENT_TYPES.map(&:all).flatten
34
+ def each(&block)
35
+ threads = []
36
+ semaphore = Mutex.new
37
+
38
+ CONTENT_TYPES.each do |content_type|
39
+ threads << Thread.new do
40
+ content_type.all.each do |content|
41
+ semaphore.synchronize do
42
+ block.call content
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ threads.each &:join
35
49
  end
36
50
 
37
51
  def find_content_by_env(env)
@@ -47,15 +61,13 @@ module Staticpress
47
61
 
48
62
  def meta
49
63
  # or something...
50
- all_content.inject(Staticpress::Metadata.new) do |m, page|
51
- m << page.meta
52
- end
64
+ inject(Staticpress::Metadata.new) { |meta, content| meta << content.meta }
53
65
  end
54
66
 
55
67
  def save
56
68
  destination = Staticpress.blog_path + config.destination_path
57
69
  FileUtils.rm_r destination if destination.directory?
58
- all_content.each &:save
70
+ each &:save
59
71
  end
60
72
  end
61
73
  end
@@ -1,12 +1,16 @@
1
1
  module Staticpress
2
- # TODO figure out how to implement Gem::Version properly
3
2
  class Version
4
- MAJOR = 0
5
- MINOR = 4
6
- PATCH = 0
3
+ extend Comparable
4
+
5
+ SIGNATURE = [0, 5, 0]
6
+
7
+ def self.<=>(other)
8
+ other = other.split('.').map(&:to_i) if other.respond_to? :split
9
+ SIGNATURE <=> Array(other)
10
+ end
7
11
 
8
12
  def self.to_s
9
- [ MAJOR, MINOR, PATCH ].join '.'
13
+ SIGNATURE.join('.')
10
14
  end
11
15
  end
12
16
  end
@@ -4,7 +4,7 @@ require File.expand_path('../lib/staticpress/version', __FILE__)
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = 'staticpress'
7
- s.version = Staticpress::Version.to_s
7
+ s.version = Staticpress::Version
8
8
  s.authors = ['Raving Genius']
9
9
  s.email = ['rg+code@ravinggenius.com']
10
10
  s.summary = 'Blog-centric static site builder'
@@ -13,7 +13,7 @@ class ContentBaseTest < TestCase
13
13
  let(:category_1) { Staticpress::Content::Category.new(:name => 'programming', :number => '1') }
14
14
  let(:category_2) { Staticpress::Content::Category.new(:name => 'programming', :number => '2') }
15
15
 
16
- let(:index) { Staticpress::Content::Index.new :number => 1 }
16
+ let(:index) { Staticpress::Content::Index.new }
17
17
  let(:index_2) { Staticpress::Content::Index.new :number => 2 }
18
18
 
19
19
  let(:page) { Staticpress::Content::Page.new(:slug => 'about') }
@@ -57,6 +57,7 @@ class ContentBaseTest < TestCase
57
57
  refute_operator asset_style, :==, nil
58
58
 
59
59
  refute_operator Staticpress::Content::Category.new(:name => 'programming'), :==, Staticpress::Content::Tag.new(:name => 'programming')
60
+ refute_operator Staticpress::Content::Tag.new(:name => 'charlotte'), :==, Staticpress::Content::Category.new(:name => 'charlotte')
60
61
  end
61
62
 
62
63
  def test_content_type
@@ -2,21 +2,44 @@ require_relative '../../test_case'
2
2
 
3
3
  require 'staticpress/content/category'
4
4
  require 'staticpress/content/post'
5
+ require 'staticpress/helpers'
5
6
 
6
7
  class ContentCategoryTest < TestCase
8
+ include Staticpress::Helpers
9
+
7
10
  let(:category) { Staticpress::Content::Category.new :name => 'programming' }
8
11
 
9
12
  def test_categories
10
13
  assert_equal [ 'programming', 'travel' ], Staticpress::Content::Category.categories
11
14
  end
12
15
 
16
+ def test_pages_count
17
+ assert_equal 1, category.pages_count
18
+
19
+ with_config :posts_per_page => 2 do
20
+ assert_equal 2, category.pages_count
21
+ end
22
+ end
23
+
13
24
  def test_sub_content
14
- assert_equal 3, category.sub_content.count
25
+ expected = [
26
+ Staticpress::Content::Post.new(:year => '2011', :month => '08', :day => '01', :title => 'announcing-staticpress'),
27
+ Staticpress::Content::Post.new(:year => '2011', :month => '08', :day => '02', :title => 'staticpress'),
28
+ Staticpress::Content::Post.new(:year => '2011', :month => '08', :day => '06', :title => 'blogging-with-staticpress')
29
+ ]
30
+ assert_equal expected, category.sub_content
15
31
  end
16
32
 
17
33
  def test_all
18
- assert_equal 2, Staticpress::Content::Category.all.count
19
- assert Staticpress::Content::Category.all.include?(category)
34
+ with_config :posts_per_page => 1 do
35
+ expected = [
36
+ Staticpress::Content::Category.new(:name => 'programming', :number => 1),
37
+ Staticpress::Content::Category.new(:name => 'programming', :number => 2),
38
+ Staticpress::Content::Category.new(:name => 'programming', :number => 3),
39
+ Staticpress::Content::Category.new(:name => 'travel', :number => 1)
40
+ ]
41
+ assert_equal expected, Staticpress::Content::Category.all
42
+ end
20
43
  end
21
44
 
22
45
  def test_content_by_category
@@ -1,6 +1,42 @@
1
1
  require_relative '../../test_case'
2
2
 
3
3
  require 'staticpress/content/index'
4
+ require 'staticpress/content/post'
5
+ require 'staticpress/helpers'
4
6
 
5
7
  class ContentIndexTest < TestCase
8
+ include Staticpress::Helpers
9
+
10
+ let(:index) { Staticpress::Content::Index.new }
11
+
12
+ def test_pages_count
13
+ assert_equal 1, index.pages_count
14
+
15
+ with_config :posts_per_page => 2 do
16
+ assert_equal 4, index.pages_count
17
+ end
18
+ end
19
+
20
+ def test_sub_content
21
+ with_config :posts_per_page => 4 do
22
+ # expect three most recent posts with oldest on top (index is lazy-evaluated)
23
+ expected = [
24
+ Staticpress::Content::Post.new(:year => '2011', :month => '08', :day => '06', :title => 'conferences'),
25
+ Staticpress::Content::Post.new(:year => '2011', :month => '08', :day => '06', :title => 'blogging-with-staticpress'),
26
+ Staticpress::Content::Post.new(:year => '2011', :month => '08', :day => '20', :title => 'forever')
27
+ ]
28
+ assert_equal expected, index.sub_content
29
+ end
30
+ end
31
+
32
+ def test_all
33
+ with_config :posts_per_page => 3 do
34
+ expected = [
35
+ Staticpress::Content::Index.new(:number => 1),
36
+ Staticpress::Content::Index.new(:number => 2),
37
+ Staticpress::Content::Index.new(:number => 3)
38
+ ]
39
+ assert_equal expected, Staticpress::Content::Index.all
40
+ end
41
+ end
6
42
  end
@@ -10,6 +10,10 @@ class ContentTagTest < TestCase
10
10
  assert_equal [ 'charlotte' ], Staticpress::Content::Tag.tags
11
11
  end
12
12
 
13
+ def test_pages_count
14
+ assert_equal 1, tag.pages_count
15
+ end
16
+
13
17
  def test_optional_param_defaults
14
18
  expected = { :number => 1 }
15
19
  assert_equal expected, Staticpress::Content::Tag.new(:name => 'charlotte').optional_param_defaults
@@ -17,12 +21,17 @@ class ContentTagTest < TestCase
17
21
  end
18
22
 
19
23
  def test_sub_content
20
- assert_equal 1, tag.sub_content.count
24
+ expected = [
25
+ Staticpress::Content::Post.new(:year => '2011', :month => '08', :day => '06', :title => 'in-charlotte')
26
+ ]
27
+ assert_equal expected, tag.sub_content
21
28
  end
22
29
 
23
30
  def test_all
24
- assert_equal 1, Staticpress::Content::Tag.all.count
25
- assert Staticpress::Content::Tag.all.include?(tag)
31
+ expected = [
32
+ Staticpress::Content::Tag.new(:name => 'charlotte', :number => 1)
33
+ ]
34
+ assert_equal expected, Staticpress::Content::Tag.all
26
35
  end
27
36
 
28
37
  def test_content_by_tag
@@ -8,19 +8,19 @@ class HelpersTest < TestCase
8
8
  include Staticpress::Helpers
9
9
 
10
10
  def test_extensionless_basename
11
- assert_equal 'extensionless', extensionless_basename(Pathname.new('extensionless'))
12
- assert_equal '.htaccess', extensionless_basename(Pathname.new('.htaccess'))
13
- assert_equal 'tyrannasaurus_rex', extensionless_basename(Pathname.new('tyrannasaurus_rex.rb'))
14
- assert_equal 'stegosaurus', extensionless_basename(Pathname.new('dinosaurs/stegosaurus.rb'))
15
- assert_equal 'stegosaurus', extensionless_basename(Pathname.new('/dinosaurs/stegosaurus.rb'))
11
+ assert_equal 'extensionless', extensionless_basename(Pathname('extensionless'))
12
+ assert_equal '.htaccess', extensionless_basename(Pathname('.htaccess'))
13
+ assert_equal 'tyrannasaurus_rex', extensionless_basename(Pathname('tyrannasaurus_rex.rb'))
14
+ assert_equal 'stegosaurus', extensionless_basename(Pathname('dinosaurs/stegosaurus.rb'))
15
+ assert_equal 'stegosaurus', extensionless_basename(Pathname('/dinosaurs/stegosaurus.rb'))
16
16
  end
17
17
 
18
18
  def test_extensionless_path
19
- assert_equal Pathname.new('extensionless'), extensionless_path(Pathname.new('extensionless'))
20
- assert_equal Pathname.new('.htaccess'), extensionless_path(Pathname.new('.htaccess'))
21
- assert_equal Pathname.new('tyrannasaurus_rex'), extensionless_path(Pathname.new('tyrannasaurus_rex.rb'))
22
- assert_equal Pathname.new('dinosaurs/stegosaurus'), extensionless_path(Pathname.new('dinosaurs/stegosaurus.rb'))
23
- assert_equal Pathname.new('/dinosaurs/stegosaurus'), extensionless_path(Pathname.new('/dinosaurs/stegosaurus.rb'))
19
+ assert_equal Pathname('extensionless'), extensionless_path(Pathname('extensionless'))
20
+ assert_equal Pathname('.htaccess'), extensionless_path(Pathname('.htaccess'))
21
+ assert_equal Pathname('tyrannasaurus_rex'), extensionless_path(Pathname('tyrannasaurus_rex.rb'))
22
+ assert_equal Pathname('dinosaurs/stegosaurus'), extensionless_path(Pathname('dinosaurs/stegosaurus.rb'))
23
+ assert_equal Pathname('/dinosaurs/stegosaurus'), extensionless_path(Pathname('/dinosaurs/stegosaurus.rb'))
24
24
  end
25
25
 
26
26
  def test_hash_from_empty_array
@@ -45,10 +45,11 @@ class HelpersTest < TestCase
45
45
  end
46
46
 
47
47
  def test_paginate
48
+ # a == oldest, z == newest
48
49
  assert_equal 3, paginate(:a..:z).count
49
- assert_equal (:a..:j).to_a, paginate(:a..:z)[0]
50
+ assert_equal (:a..:j).to_a, paginate(:a..:z)[0] # page 1 lists oldest, with oldest at top
50
51
  assert_equal (:k..:t).to_a, paginate(:a..:z)[1]
51
- assert_equal (:u..:z).to_a, paginate(:a..:z)[2]
52
+ assert_equal (:u..:z).to_a, paginate(:a..:z)[2] # page 3 lists newest, with newest at bottom (default page)
52
53
  assert_equal [], paginate(:a..:z)[5], 'Accessing an invalid index on anything that has been paginated should return an empty array'
53
54
  end
54
55
 
@@ -37,6 +37,12 @@ class JSObjectTest < TestCase
37
37
  assert_equal :hullabaloo, js_object.hoopla
38
38
  end
39
39
 
40
+ def test_merge
41
+ assert_nil js_object.some_key
42
+ enhanced = js_object.merge :some_key => 42
43
+ assert_equal 42, enhanced.some_key
44
+ end
45
+
40
46
  def test_to_hash
41
47
  assert_equal({ :key => :value, :nested => { :a => :b } }, js_object.to_hash)
42
48
  end
@@ -0,0 +1,13 @@
1
+ require_relative '../test_case'
2
+
3
+ class SettingsTest < TestCase
4
+ def test_default
5
+ refute Staticpress::Settings.instance.verbose
6
+ end
7
+
8
+ def test_set!
9
+ assert_equal nil, Staticpress::Settings.instance.favorite_number
10
+ Staticpress::Settings.set! :favorite_number => 42
11
+ assert_equal 42, Staticpress::Settings.instance.favorite_number
12
+ end
13
+ end
@@ -4,15 +4,15 @@ require 'pathname'
4
4
 
5
5
  class StaticpressTest < TestCase
6
6
  def test_blog_path
7
- assert_equal Pathname.new('tests/test_blog').expand_path, Staticpress.blog_path
7
+ assert_equal Pathname('tests/test_blog').expand_path, Staticpress.blog_path
8
8
  end
9
9
 
10
10
  def test_blog_path=
11
11
  Staticpress.blog_path = 'some/other/directory'
12
- assert_equal Pathname.new('some/other/directory').expand_path, Staticpress.blog_path
12
+ assert_equal Pathname('some/other/directory').expand_path, Staticpress.blog_path
13
13
  end
14
14
 
15
15
  def test_root
16
- assert_equal Pathname.new('lib/').expand_path, Staticpress.root
16
+ assert_equal Pathname('lib/').expand_path, Staticpress.root
17
17
  end
18
18
  end
@@ -1,6 +1,6 @@
1
1
  source :rubygems
2
2
 
3
- gem 'staticpress', :path => '../../../'
3
+ gem 'staticpress', :path => '../../'
4
4
 
5
5
  gem 'compass'
6
6
  gem 'haml'
@@ -40,4 +40,15 @@ class TestCase < MiniTest::Spec
40
40
  raise e
41
41
  end
42
42
  end
43
+
44
+ def with_config(options, &block)
45
+ original = self.config
46
+
47
+ begin
48
+ self.config.merge(options).save
49
+ block.call
50
+ ensure
51
+ original.save
52
+ end
53
+ end
43
54
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: staticpress
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -50,11 +50,11 @@ cert_chain:
50
50
  -----END CERTIFICATE-----
51
51
 
52
52
  '
53
- date: 2011-12-13 00:00:00.000000000 Z
53
+ date: 2011-12-28 00:00:00.000000000 Z
54
54
  dependencies:
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: aruba
57
- requirement: &15630400 !ruby/object:Gem::Requirement
57
+ requirement: &18072460 !ruby/object:Gem::Requirement
58
58
  none: false
59
59
  requirements:
60
60
  - - ! '>='
@@ -62,10 +62,10 @@ dependencies:
62
62
  version: '0'
63
63
  type: :development
64
64
  prerelease: false
65
- version_requirements: *15630400
65
+ version_requirements: *18072460
66
66
  - !ruby/object:Gem::Dependency
67
67
  name: compass
68
- requirement: &15646340 !ruby/object:Gem::Requirement
68
+ requirement: &18072040 !ruby/object:Gem::Requirement
69
69
  none: false
70
70
  requirements:
71
71
  - - ! '>='
@@ -73,10 +73,10 @@ dependencies:
73
73
  version: '0'
74
74
  type: :development
75
75
  prerelease: false
76
- version_requirements: *15646340
76
+ version_requirements: *18072040
77
77
  - !ruby/object:Gem::Dependency
78
78
  name: cucumber
79
- requirement: &15645920 !ruby/object:Gem::Requirement
79
+ requirement: &18071440 !ruby/object:Gem::Requirement
80
80
  none: false
81
81
  requirements:
82
82
  - - ! '>='
@@ -84,10 +84,10 @@ dependencies:
84
84
  version: '0'
85
85
  type: :development
86
86
  prerelease: false
87
- version_requirements: *15645920
87
+ version_requirements: *18071440
88
88
  - !ruby/object:Gem::Dependency
89
89
  name: haml
90
- requirement: &15645500 !ruby/object:Gem::Requirement
90
+ requirement: &18070840 !ruby/object:Gem::Requirement
91
91
  none: false
92
92
  requirements:
93
93
  - - ! '>='
@@ -95,10 +95,10 @@ dependencies:
95
95
  version: '0'
96
96
  type: :development
97
97
  prerelease: false
98
- version_requirements: *15645500
98
+ version_requirements: *18070840
99
99
  - !ruby/object:Gem::Dependency
100
100
  name: minitest
101
- requirement: &15645080 !ruby/object:Gem::Requirement
101
+ requirement: &18070260 !ruby/object:Gem::Requirement
102
102
  none: false
103
103
  requirements:
104
104
  - - ! '>='
@@ -106,10 +106,10 @@ dependencies:
106
106
  version: '0'
107
107
  type: :development
108
108
  prerelease: false
109
- version_requirements: *15645080
109
+ version_requirements: *18070260
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: ruby-debug19
112
- requirement: &15644660 !ruby/object:Gem::Requirement
112
+ requirement: &18069840 !ruby/object:Gem::Requirement
113
113
  none: false
114
114
  requirements:
115
115
  - - ! '>='
@@ -117,10 +117,10 @@ dependencies:
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
- version_requirements: *15644660
120
+ version_requirements: *18069840
121
121
  - !ruby/object:Gem::Dependency
122
122
  name: sass
123
- requirement: &15644240 !ruby/object:Gem::Requirement
123
+ requirement: &18069400 !ruby/object:Gem::Requirement
124
124
  none: false
125
125
  requirements:
126
126
  - - ! '>='
@@ -128,10 +128,10 @@ dependencies:
128
128
  version: '0'
129
129
  type: :development
130
130
  prerelease: false
131
- version_requirements: *15644240
131
+ version_requirements: *18069400
132
132
  - !ruby/object:Gem::Dependency
133
133
  name: bundler
134
- requirement: &15643820 !ruby/object:Gem::Requirement
134
+ requirement: &18068940 !ruby/object:Gem::Requirement
135
135
  none: false
136
136
  requirements:
137
137
  - - ! '>='
@@ -139,10 +139,10 @@ dependencies:
139
139
  version: '0'
140
140
  type: :runtime
141
141
  prerelease: false
142
- version_requirements: *15643820
142
+ version_requirements: *18068940
143
143
  - !ruby/object:Gem::Dependency
144
144
  name: rack
145
- requirement: &15643400 !ruby/object:Gem::Requirement
145
+ requirement: &18068240 !ruby/object:Gem::Requirement
146
146
  none: false
147
147
  requirements:
148
148
  - - ! '>='
@@ -150,10 +150,10 @@ dependencies:
150
150
  version: '0'
151
151
  type: :runtime
152
152
  prerelease: false
153
- version_requirements: *15643400
153
+ version_requirements: *18068240
154
154
  - !ruby/object:Gem::Dependency
155
155
  name: thor
156
- requirement: &15642980 !ruby/object:Gem::Requirement
156
+ requirement: &18067540 !ruby/object:Gem::Requirement
157
157
  none: false
158
158
  requirements:
159
159
  - - ! '>='
@@ -161,10 +161,10 @@ dependencies:
161
161
  version: '0'
162
162
  type: :runtime
163
163
  prerelease: false
164
- version_requirements: *15642980
164
+ version_requirements: *18067540
165
165
  - !ruby/object:Gem::Dependency
166
166
  name: tilt
167
- requirement: &15642560 !ruby/object:Gem::Requirement
167
+ requirement: &18066880 !ruby/object:Gem::Requirement
168
168
  none: false
169
169
  requirements:
170
170
  - - ! '>='
@@ -172,7 +172,7 @@ dependencies:
172
172
  version: '0'
173
173
  type: :runtime
174
174
  prerelease: false
175
- version_requirements: *15642560
175
+ version_requirements: *18066880
176
176
  description: ! 'Staticpress is a blog-focused static site generator. It uses Tilt
177
177
  for rendering nearly any template you can think of and come with a built-in Rack
178
178
  server for easy development previews.
@@ -231,6 +231,7 @@ files:
231
231
  - lib/staticpress/pusher.rb
232
232
  - lib/staticpress/route.rb
233
233
  - lib/staticpress/server.rb
234
+ - lib/staticpress/settings.rb
234
235
  - lib/staticpress/site.rb
235
236
  - lib/staticpress/theme.rb
236
237
  - lib/staticpress/version.rb
@@ -259,6 +260,7 @@ files:
259
260
  - tests/staticpress/pusher_test.rb
260
261
  - tests/staticpress/route_test.rb
261
262
  - tests/staticpress/server_test.rb
263
+ - tests/staticpress/settings_test.rb
262
264
  - tests/staticpress/site_test.rb
263
265
  - tests/staticpress/theme_test.rb
264
266
  - tests/staticpress/view_helpers_test.rb
@@ -314,7 +316,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
314
316
  version: '0'
315
317
  requirements: []
316
318
  rubyforge_project: staticpress
317
- rubygems_version: 1.8.12
319
+ rubygems_version: 1.8.13
318
320
  signing_key:
319
321
  specification_version: 3
320
322
  summary: Blog-centric static site builder
metadata.gz.sig CHANGED
Binary file