spandex 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -10,3 +10,4 @@ tmp/**/*
10
10
  bin/**
11
11
  .sass-cache/**
12
12
  Gemfile.lock
13
+ pkg
@@ -16,6 +16,7 @@ module Spandex
16
16
  end
17
17
 
18
18
  def get(path)
19
+ path = Page.pathify path
19
20
  load(Page.file_from_path(path, @base_dir), path)
20
21
  end
21
22
 
@@ -39,6 +40,10 @@ module Spandex
39
40
  .sort {|x, y| y.date <=> x.date }
40
41
  end
41
42
 
43
+ def find_pages(conditions)
44
+ find_inside(all_pages, conditions)
45
+ end
46
+
42
47
  def find_articles(conditions)
43
48
  find_inside(all_articles, conditions)
44
49
  end
@@ -64,6 +69,7 @@ module Spandex
64
69
  private
65
70
 
66
71
  def load(filename, key = Page.path_from_file(filename, @base_dir))
72
+ key = key.to_s
67
73
  return nil unless filename && key && File.exists?(filename)
68
74
  if @pages && @pages[key] && File.mtime(filename) < @pages[key].mtime
69
75
  @pages[key]
@@ -81,6 +87,7 @@ module Spandex
81
87
  next unless v
82
88
  cond = case k
83
89
  when :tag then lambda {|p| p.tags.include?(v) }
90
+ when :title then lambda {|p| p.title.match(v)}
84
91
  else lambda{|p| true}
85
92
  end
86
93
  output = output.select(&cond)
data/lib/spandex/page.rb CHANGED
@@ -7,16 +7,6 @@ module Spandex
7
7
  class Page
8
8
  attr_reader :path, :mtime, :extension, :render_options
9
9
 
10
- def self.from_path(path, base_path, render_options = {})
11
- path = fix_path path
12
- filename = file_from_path(path, base_path)
13
- if filename
14
- metadata, content = parse_file(filename)
15
- Page.new(path, content, filename.extname, metadata, render_options)
16
- else nil
17
- end
18
- end
19
-
20
10
  def self.from_filename(filename, base_path, render_options = {})
21
11
  pathname = Pathname.new(filename)
22
12
  return nil unless pathname.exist?
@@ -27,14 +17,6 @@ module Spandex
27
17
  Page.new(path, content, pathname.extname, metadata, render_options)
28
18
  end
29
19
 
30
- def self.mtime(path, base_path)
31
- file = file_from_path(path, base_path)
32
- if File.exists?(path)
33
- File.mtime(file)
34
- else nil
35
- end
36
- end
37
-
38
20
  def self.file_from_path(path, base_path)
39
21
  path = fix_path path
40
22
  paths = Pathname.glob(File.join(base_path, "#{path}.*"))
@@ -101,7 +83,7 @@ module Spandex
101
83
  end
102
84
 
103
85
  def self.pathify(path_or_string)
104
- path_or_string.is_a?(String) ? Pathname.new(path_or_string) : path_or_string
86
+ path_or_string.is_a?(String) ? Pathname.new(fix_path path_or_string) : path_or_string
105
87
  end
106
88
 
107
89
  def self.parse_file(filename)
@@ -1,3 +1,3 @@
1
1
  module Spandex
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/spandex.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Isaac Cambron"]
10
10
  s.email = ["icambron@alum.mit.edu"]
11
- s.homepage = ""
11
+ s.homepage = "https://github.com/icambron/spandex"
12
12
  s.summary = "A simple content engine"
13
13
  s.description = "Spandex manages a store of markup files and their metadata, useful in building blogs or blog engines"
14
14
 
data/spec/finder_spec.rb CHANGED
@@ -9,23 +9,23 @@ describe Spandex::Finder do
9
9
  context "when getting all pages" do
10
10
 
11
11
  it "can find files" do
12
- create_file("lasers.md", "You know it's 18 when you throw your dice.")
13
- create_file("cheese.textile", "You've climbed that mountain not only once but twice.")
12
+ create_file("lasers.md")
13
+ create_file("cheese.textile")
14
14
  make_finder.all_pages.size.should == 2
15
15
  end
16
16
 
17
17
  it "won't find repeated files roots" do
18
- create_file("stuff.md", "Some say you're a loner but I know your kind.")
19
- create_file("stuff.textile", "It's sad to see that's why I fake that I'm blind.")
18
+ create_file("stuff.md")
19
+ create_file("stuff.textile")
20
20
 
21
21
  make_finder.all_pages.size.should == 1
22
22
  end
23
23
 
24
24
  it "finds thing with populated attributes" do
25
- create_file("stuff.md", "Some say you're a loner but I know your kind.", :title => "The")
26
- create_file("more_stuff.textile", "It's sad to see that's why I fake that I'm blind.", :title => "Sounds")
25
+ create_file("stuff.md", :title => "The")
26
+ create_file("more_stuff.textile", :title => "Sounds")
27
27
 
28
- make_finder.all_pages.map{|p| p.title}.should == ["The", "Sounds"]
28
+ make_finder.all_pages.map{|p| p.title}.should =~ ["The", "Sounds"]
29
29
  end
30
30
 
31
31
  end
@@ -37,8 +37,8 @@ describe Spandex::Finder do
37
37
  end
38
38
 
39
39
  it "only finds pages with dates" do
40
- create_file("stuff.md", "You don't float like butterfly or fight like Ali.", :date => "2011/5/25")
41
- create_file("more_stuff.md", "Dress like Prince but to the lowest degree.")
40
+ create_file("stuff.md", :date => "2011/5/25")
41
+ create_file("more_stuff.md")
42
42
 
43
43
  results = make_finder.all_articles
44
44
  results.size.should == 1
@@ -46,9 +46,9 @@ describe Spandex::Finder do
46
46
  end
47
47
 
48
48
  it "sorts by date descending" do
49
- create_file("stuff.md", "I like that you can't slow down.", :date => "1986/5/25")
50
- create_file("more_stuff.md", "Step back! 'Cause you ain't no one.", :date => "1982/5/25")
51
- create_file("even_more_stuff.md", "You're living in a lie.", :date => "2011/5/25")
49
+ create_file("stuff.md", :date => "1986/5/25")
50
+ create_file("more_stuff.md", :date => "1982/5/25")
51
+ create_file("even_more_stuff.md", :date => "2011/5/25")
52
52
 
53
53
  results = make_finder.all_articles
54
54
 
@@ -59,7 +59,7 @@ describe Spandex::Finder do
59
59
  end
60
60
 
61
61
  it "ignores stray files" do
62
- create_file("stuff.md~", "I like that you can't slow down.", :date => "1986/5/25")
62
+ create_file("stuff.md~", :date => "1986/5/25")
63
63
  make_finder.all_articles.should be_empty
64
64
  end
65
65
 
@@ -68,8 +68,8 @@ describe Spandex::Finder do
68
68
  context "when generating an atom feed" do
69
69
 
70
70
  it "generates real atom content" do
71
- create_file("stuff.md", "You ain't nothing but a BFI", :date => "1986/5/25", :title => "BFI")
72
- create_file("more_stuff.md", "Leaving town on a two wheeler while your kids are home", :date => "1982/5/25")
71
+ create_file("stuff.md", :date => "1986/5/25", :title => "BFI")
72
+ create_file("more_stuff.md", :date => "1982/5/25")
73
73
 
74
74
  #generate and then reparse
75
75
  feed = make_finder.atom_feed(3, "The Sounds", "sounds.test.org", "articles.xml")
@@ -85,9 +85,9 @@ describe Spandex::Finder do
85
85
  end
86
86
 
87
87
  it "should only show the top n articles" do
88
- create_file("stuff.md", "Giving up your love and life for some silver chrome", :date => "1986/5/25")
89
- create_file("more_stuff.md", "You're acting like a fool so take my advice.", :date => "1986/5/25")
90
- create_file("even_more_stuff.md", "It's not so hard to keep your eyes on the price.", :date => "1986/5/25")
88
+ create_file("stuff.md", :date => "1986/5/25")
89
+ create_file("more_stuff.md", :date => "1986/5/25")
90
+ create_file("even_more_stuff.md", :date => "1986/5/25")
91
91
 
92
92
  feed = make_finder.atom_feed(2, "The Sounds", "sounds.test.org", "articles.xml")
93
93
  ratom = Atom::Feed.load_feed(feed)
@@ -96,8 +96,8 @@ describe Spandex::Finder do
96
96
  end
97
97
 
98
98
  it "only includes pages with dates" do
99
- create_file("stuff.md", "You don't float like butterfly or fight like Ali.", :date => "2011/5/25")
100
- create_file("more_stuff.md", "Dress like Prince but to the lowest degree.")
99
+ create_file("stuff.md", :date => "2011/5/25")
100
+ create_file("more_stuff.md")
101
101
 
102
102
  feed = make_finder.atom_feed(2, "The Sounds", "sounds.test.org", "articles.xml")
103
103
  ratom = Atom::Feed.load_feed(feed)
@@ -110,33 +110,33 @@ describe Spandex::Finder do
110
110
  context "when listing tags" do
111
111
 
112
112
  it "can list tags" do
113
- create_file("stuff.md", "Excuses are all I ever get from you", :tags => "Sweedish, New Wave")
114
- create_file("more_stuff.md", "And we both know it's true", :tags => "Indie Rock")
113
+ create_file("stuff.md", :tags => "Sweedish, New Wave")
114
+ create_file("more_stuff.md", :tags => "Indie Rock")
115
115
 
116
116
  tags = make_finder.tags
117
- tags.should == ["Sweedish", "New Wave", "Indie Rock"]
117
+ tags.should =~ ["Sweedish", "New Wave", "Indie Rock"]
118
118
  end
119
119
 
120
120
  it "has unique tags" do
121
- create_file("stuff.md", "It's not me, it is you", :tags => "Sweedish, Indie Rock")
122
- create_file("more_stuff.md", "And nothing matters at all", :tags => "Indie Rock")
121
+ create_file("stuff.md", :tags => "Sweedish, Indie Rock")
122
+ create_file("more_stuff.md", :tags => "Indie Rock")
123
123
 
124
124
  tags = make_finder.tags
125
- tags.should == ["Sweedish", "Indie Rock"]
125
+ tags.should =~ ["Sweedish", "Indie Rock"]
126
126
  end
127
127
  end
128
128
 
129
129
  context "loading a specific page" do
130
130
 
131
131
  it "does in fact load it" do
132
- create_file("stuff.md", "It felt so right at the time")
132
+ create_file("stuff.md")
133
133
  page = make_finder.get("stuff")
134
134
  page.should_not be_nil
135
135
  end
136
136
 
137
137
  it "finds the first file tilt knows" do
138
- create_file("stuff.snoogledoobers", "But we lost it all")
139
- create_file("stuff.md", "You committed a crime")
138
+ create_file("stuff.snoogledoobers")
139
+ create_file("stuff.md")
140
140
  page = make_finder.get("stuff")
141
141
  page.extension.should == "md"
142
142
  end
@@ -149,23 +149,40 @@ describe Spandex::Finder do
149
149
  it "caches individual files" do
150
150
  finder = make_finder
151
151
 
152
- create_file("stuff.md", "And did it matter to you", :tags => "yeah")
152
+ create_file("stuff.md", :tags => "yeah")
153
153
  finder.get("stuff").tags.should == ["yeah"]
154
154
 
155
- create_file("stuff.md", "Now you lost it all", :tags => "nah")
155
+ create_file("stuff.md", :tags => "nah")
156
156
  finder.get("stuff").tags.should == ["yeah"]
157
157
  end
158
158
 
159
+ it "doesn't muck up the cache" do
160
+ create_file("stuff.md")
161
+ finder = make_finder
162
+ finder.all_pages
163
+ finder.get("stuff")
164
+ finder.all_pages.size.should == 1
165
+ end
166
+
159
167
  it "ignores trailing slashes" do
160
- create_file("stuff.md", "Well, you're not so bright")
168
+ create_file("stuff.md")
161
169
  make_finder.get("stuff/").should_not be_nil
162
170
  end
163
171
 
172
+ it "doesn't create a separate cache entry for trailing slashes" do
173
+ create_file("stuff.md")
174
+ finder = make_finder
175
+ finder.all_pages
176
+ finder.get("stuff/")
177
+
178
+ finder.all_pages.size.should == 1
179
+ end
180
+
164
181
  end
165
182
 
166
183
  context "when loading by filename" do
167
184
  it "does in fact load something" do
168
- create_file("stuff.md", "You don't have to say you're sorry")
185
+ create_file("stuff.md")
169
186
  page = make_finder.get_by_filename(File.join(TEMP_DIR, "stuff.md"))
170
187
  page.should_not be_nil
171
188
  end
@@ -177,21 +194,35 @@ describe Spandex::Finder do
177
194
 
178
195
  end
179
196
 
180
- context "when finding articles" do
197
+ context "when find pages" do
181
198
  it "can find them by tag" do
182
- create_file("no.md", "You never mean it when you say you're sorry", :tags => "nono", :date => "2011/5/25")
183
- create_file("yeah.md", "No guts, no glory, no time to worry", :tags => "yeahyeah", :date => "2011/5/26", :title => "Yeah Yeah Yeah")
199
+ create_file("no.md", :tags => "nono")
200
+ create_file("yeah.md", :tags => "yeahyeah")
184
201
 
185
202
 
186
- results = make_finder.find_articles(:tag => "yeahyeah")
203
+ results = make_finder.find_pages(:tag => "yeahyeah")
187
204
  results.size.should == 1
188
205
  results.first.title == "Yeah Yeah Yeah"
189
206
  end
190
207
 
208
+ it "can find them by titles" do
209
+ create_file("no.md", :title => "This has the wrong title")
210
+ create_file("yeah.md", :title => "This has the correct title")
211
+ end
212
+
213
+ it "can find them by multiple metrics" do
214
+ create_file("no.md", :tags => "yeah", :title => "This has the wrong title")
215
+ create_file("yeah.md", :tags => "no", :title => "This has the correct title")
216
+ create_file("definitely.md", :tags => "yeah", :title => "This has the correct title")
217
+
218
+ make_finder.find_pages(:tags => "yeah", :title => "correct")
219
+ end
220
+ end
221
+
222
+ context "when finding articles" do
191
223
  it "only finds articles" do
192
- create_file("no.md", "No happy ending to your story", :tags => "yeahyeah")
193
- create_file("yeah.md", "In moments like this, don't give a fuck about you", :tags => "yeahyeah", :date => "2011/5/26", :title => "Yeah Yeah Yeah")
194
-
224
+ create_file("no.md", :tags => "yeahyeah")
225
+ create_file("yeah.md", :tags => "yeahyeah", :date => "2011/5/26", :title => "Yeah Yeah Yeah")
195
226
 
196
227
  results = make_finder.find_articles(:tag => "yeahyeah")
197
228
  results.size.should == 1
data/spec/page_spec.rb CHANGED
@@ -9,44 +9,44 @@ describe Spandex::Page do
9
9
 
10
10
  context "when parsing a file" do
11
11
  it "determines the extension" do
12
- page = create_page("test.md", "Oh my love we gotta save ourselves")
12
+ page = create_page("test.md")
13
13
  page.extension.should=="md"
14
14
  end
15
15
 
16
16
  it "can have a title" do
17
- page = create_page("test.md", "If we wanna safe the world", :title => "The Best of Me")
17
+ page = create_page("test.md", :title => "The Best of Me")
18
18
  page.title.should == "The Best of Me"
19
19
  end
20
20
 
21
21
  it "can have a tag" do
22
- page = create_page("test.md", "Don't give in to your hate", :tags => "sappy")
22
+ page = create_page("test.md", :tags => "sappy")
23
23
  page.tags.should have(1).tags
24
24
  page.tags.should == ["sappy"]
25
25
  end
26
26
 
27
27
  it "can have multiple tags" do
28
- page = create_page("test.md", "When you know you can change", :tags => "sappy,slightly trite")
28
+ page = create_page("test.md", :tags => "sappy,slightly trite")
29
29
  page.tags.should == ['sappy', 'slightly trite']
30
30
  end
31
31
 
32
32
  it "can have multiple tags with weird spacing" do
33
- page = create_page("test.md", "It's hitting home when you feel so strange", :tags => " sappy , slightly trite ")
33
+ page = create_page("test.md", :tags => " sappy , slightly trite ")
34
34
  page.tags.should == ['sappy', 'slightly trite']
35
35
  end
36
36
 
37
37
  it "can also have tags called 'categories'" do
38
- page = create_page("test.md", "I wanna say those words", :categories => "sappy,slightly trite")
38
+ page = create_page("test.md", :categories => "sappy,slightly trite")
39
39
  page.tags.should have(2).tags
40
40
  end
41
41
 
42
42
  it "can parse the body" do
43
- page = create_page("test.md", "But it's not that easy")
43
+ page = create_page("test.md", :content => "But it's not that easy")
44
44
  page.body.should == Redcarpet::Markdown.new(Redcarpet::Render::HTML).render("But it's not that easy")
45
45
  end
46
46
 
47
47
  it "pass in rendering options" do
48
48
  text = "```\nI smile but it doesn't make things right```"
49
- create_file("test.md", text)
49
+ create_file("test.md", :content => text)
50
50
  page = Spandex::Page.from_filename(File.join(TEMP_DIR, "test.md"), TEMP_DIR, :fenced_code_blocks => true)
51
51
  page.render_options.should have_key(:fenced_code_blocks)
52
52
  markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, :fenced_code_blocks => true)
@@ -54,17 +54,17 @@ describe Spandex::Page do
54
54
  end
55
55
 
56
56
  it "can have a date" do
57
- page = create_page("test.md", "test_content", :date => "2011/5/25")
57
+ page = create_page("test.md", :date => "2011/5/25")
58
58
  page.date.should == Date.civil(2011, 5, 25)
59
59
  end
60
60
 
61
61
  it "can omit the date" do
62
- page = create_page("test.md", "test_content")
62
+ page = create_page("test.md")
63
63
  page.date.should be_nil
64
64
  end
65
65
 
66
66
  it "produces good atom output" do
67
- page = create_page("test.md", "test_content", :title => "hello!", :date => "2011/5/25")
67
+ page = create_page("test.md", :title => "hello!", :date => "2011/5/25")
68
68
  entry = page.to_atom_entry("http://test.org")
69
69
  entry.title.should == "hello!"
70
70
  end
data/spec/spec_helper.rb CHANGED
@@ -17,9 +17,12 @@ end
17
17
  module PageFactory
18
18
  include TempFileHelper
19
19
 
20
- def create_file(name, content, metadata = {})
20
+ def create_file(name, metadata = {})
21
21
  full_name = File.join(TEMP_DIR, name)
22
- metatext = metadata.map { |key, value| "#{key}: #{value}" }.join("\n")
22
+ metatext = metadata
23
+ .select { |key, value| key != :content}
24
+ .map { |key, value| "#{key}: #{value}" }.join("\n")
25
+ content = metadata[:content] ? metadata[:content] : "Some stuff"
23
26
  contents =<<-EOF
24
27
  #{metatext}
25
28
 
@@ -29,8 +32,8 @@ EOF
29
32
  full_name
30
33
  end
31
34
 
32
- def create_page(name, content, metadata = {})
33
- full_name = create_file(name, content, metadata)
35
+ def create_page(name, metadata = {})
36
+ full_name = create_file(name, metadata)
34
37
  Spandex::Page.from_filename(full_name, TEMP_DIR)
35
38
  end
36
39
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: spandex
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.2
5
+ version: 0.0.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Isaac Cambron
@@ -10,8 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-09-27 00:00:00 -04:00
14
- default_executable:
13
+ date: 2011-09-30 00:00:00 Z
15
14
  dependencies:
16
15
  - !ruby/object:Gem::Dependency
17
16
  name: tilt
@@ -80,8 +79,7 @@ files:
80
79
  - spec/page_spec.rb
81
80
  - spec/spec_helper.rb
82
81
  - spec/wrapper_spec.rb
83
- has_rdoc: true
84
- homepage: ""
82
+ homepage: https://github.com/icambron/spandex
85
83
  licenses: []
86
84
 
87
85
  post_install_message:
@@ -104,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
102
  requirements: []
105
103
 
106
104
  rubyforge_project:
107
- rubygems_version: 1.6.2
105
+ rubygems_version: 1.8.10
108
106
  signing_key:
109
107
  specification_version: 3
110
108
  summary: A simple content engine