text_record 0.0.1 → 0.0.2
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 +1 -0
- data/VERSION +1 -1
- data/lib/text_record/base.rb +27 -6
- data/lib/text_record/collection.rb +23 -0
- data/lib/text_record/errors.rb +4 -0
- data/lib/text_record.rb +2 -1
- data/spec/app/content/blog_posts/ActiveRecord/attributes.yml +5 -0
- data/spec/app/content/blog_posts/ActiveRecord/post.markdown +1 -0
- data/spec/app/content/stories/Story1/attributes.yml +3 -0
- data/spec/app/content/stories/Story2/attributes.yml +3 -0
- data/spec/app/content/stories/Story3/attributes.yml +3 -0
- data/spec/app/models/story.rb +5 -0
- data/spec/base_spec.rb +34 -1
- data/spec/blog_post_spec.rb +14 -0
- data/spec/collection_spec.rb +65 -0
- data/text_record.gemspec +67 -0
- metadata +13 -2
data/.gitignore
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
data/lib/text_record/base.rb
CHANGED
@@ -8,7 +8,7 @@ module TextRecord
|
|
8
8
|
attr_reader :slug
|
9
9
|
|
10
10
|
def_delegators :configuration, :content_path, :attribute_file
|
11
|
-
|
11
|
+
|
12
12
|
# Since attributes are unique to each subclass, have to the object's metaclass since it will be
|
13
13
|
# unique to each subclass
|
14
14
|
|
@@ -27,12 +27,25 @@ module TextRecord
|
|
27
27
|
|
28
28
|
@attributes << Attribute.for_options(options).new(name, options)
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
|
+
def directory
|
32
|
+
File.join(TextRecord.configuration.content_path, self.name.pluralize.underscore)
|
33
|
+
end
|
34
|
+
|
35
|
+
def all
|
36
|
+
items = Collection.new
|
37
|
+
Dir["#{directory}/*"].map do |dir|
|
38
|
+
slug = File.basename dir
|
39
|
+
items.push(new(slug))
|
40
|
+
end
|
41
|
+
items
|
42
|
+
end
|
43
|
+
|
44
|
+
def where(options)
|
45
|
+
all.where(options)
|
46
|
+
end
|
47
|
+
end
|
31
48
|
|
32
|
-
# class methods
|
33
|
-
def self.directory
|
34
|
-
File.join(TextRecord.configuration.content_path, self.name.pluralize.underscore)
|
35
|
-
end
|
36
49
|
|
37
50
|
# Instance Methods
|
38
51
|
def initialize(path)
|
@@ -45,6 +58,14 @@ module TextRecord
|
|
45
58
|
end
|
46
59
|
end
|
47
60
|
|
61
|
+
def ==(other_model)
|
62
|
+
!other_model.nil? && (other_model.class == self.class) && self.slug.eql?(other_model.slug)
|
63
|
+
end
|
64
|
+
|
65
|
+
def eql?(other_model)
|
66
|
+
self == other_model
|
67
|
+
end
|
68
|
+
|
48
69
|
def configuration
|
49
70
|
TextRecord.configuration
|
50
71
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module TextRecord
|
2
|
+
class Collection < Array
|
3
|
+
def where(options = {})
|
4
|
+
select do |object|
|
5
|
+
options.keys.inject(true) do |flag, attribute|
|
6
|
+
object.send(attribute).eql?(options[attribute]) && flag
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
def order(options)
|
13
|
+
attribute = options.keys.first
|
14
|
+
order = options[attribute]
|
15
|
+
|
16
|
+
sort do |object1, object2|
|
17
|
+
comp = object1.send(attribute) <=> object2.send(attribute)
|
18
|
+
comp = (order == :asc) ? comp : comp * -1
|
19
|
+
comp
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/text_record/errors.rb
CHANGED
data/lib/text_record.rb
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
begin
|
3
3
|
require 'active_support'
|
4
4
|
rescue
|
5
|
-
require '
|
5
|
+
require 'activesupport'
|
6
6
|
end
|
7
7
|
|
8
8
|
module TextRecord
|
@@ -11,4 +11,5 @@ end
|
|
11
11
|
require 'text_record/configuration'
|
12
12
|
require 'text_record/errors'
|
13
13
|
require 'text_record/attribute'
|
14
|
+
require 'text_record/collection'
|
14
15
|
require 'text_record/base'
|
@@ -0,0 +1 @@
|
|
1
|
+
This is some markdown
|
data/spec/base_spec.rb
CHANGED
@@ -50,5 +50,38 @@ describe TextRecord::Base do
|
|
50
50
|
AttributeTest.attributes.first.options.should eql({:from => 'post.md'})
|
51
51
|
end
|
52
52
|
end
|
53
|
-
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "equality" do
|
56
|
+
it "should say two instances are the same if their slugs are the same using ==" do
|
57
|
+
story1 = Story.new('Story1')
|
58
|
+
story2 = Story.new('Story1')
|
59
|
+
|
60
|
+
(story1 == story2).should be_true
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should say two instances are the same if their slugs are the same using eql?" do
|
64
|
+
story1 = Story.new('Story1')
|
65
|
+
story2 = Story.new('Story1')
|
66
|
+
|
67
|
+
story2.eql?(story1).should be_true
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe "#all" do
|
72
|
+
it "should return all the stories" do
|
73
|
+
stories = Story.all
|
74
|
+
story1 = Story.new('Story1')
|
75
|
+
story2 = Story.new('Story2')
|
76
|
+
story3 = Story.new('Story3')
|
77
|
+
|
78
|
+
stories.include?(story1).should be_true
|
79
|
+
stories.include?(story2).should be_true
|
80
|
+
stories.include?(story3).should be_true
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should return a TextRecord::Collection" do
|
84
|
+
Story.all.should be_a(TextRecord::Collection)
|
85
|
+
end
|
86
|
+
end
|
54
87
|
end
|
data/spec/blog_post_spec.rb
CHANGED
@@ -81,4 +81,18 @@ describe "A Blog Post" do
|
|
81
81
|
BlogPost.new('TextRecord').directory.should eql(File.join(TextRecord.configuration.content_path, "blog_posts","TextRecord"))
|
82
82
|
end
|
83
83
|
end
|
84
|
+
|
85
|
+
describe "#eql?" do
|
86
|
+
it "should return true if the slugs are the same" do
|
87
|
+
blog_post1 = BlogPost.new('TextRecord')
|
88
|
+
blog_post2 = BlogPost.new('TextRecord')
|
89
|
+
blog_post1.eql?(blog_post2).should be_true
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should return false if the slugs are different" do
|
93
|
+
blog_post1 = BlogPost.new('TextRecord')
|
94
|
+
blog_post2 = BlogPost.new('ActiveRecord')
|
95
|
+
blog_post1.eql?(blog_post2).should be_false
|
96
|
+
end
|
97
|
+
end
|
84
98
|
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe TextRecord::Collection do
|
4
|
+
before(:each) do
|
5
|
+
@story1 = Story.new('Story1')
|
6
|
+
@story2 = Story.new('Story2')
|
7
|
+
@story3 = Story.new('Story3')
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#where" do
|
11
|
+
it "should find all the records matching :attribute => :value" do
|
12
|
+
found = Story.where :title => 'Story1'
|
13
|
+
found.should eql([@story1])
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should be able to except multiple key/value pairs" do
|
17
|
+
found = Story.where :title => 'Story1', :id => 5
|
18
|
+
found.should eql([])
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should return a new collection" do
|
22
|
+
all = Story.all
|
23
|
+
where = Story.all.where :id => 1
|
24
|
+
|
25
|
+
where.object_id.should_not eql(all.object_id)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#order" do
|
30
|
+
it "should order the collection by the id asc using a fixnum" do
|
31
|
+
stories = Story.all.order :id => :asc
|
32
|
+
|
33
|
+
test = [@story1, @story2, @story3]
|
34
|
+
stories.should eql(test)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should order the collection by the id asc using a fixnum" do
|
38
|
+
stories = Story.all.order :id => :desc
|
39
|
+
|
40
|
+
test = [@story3, @story2, @story1]
|
41
|
+
stories.should eql(test)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should order the collection by posted_on asc using a date" do
|
45
|
+
stories = Story.all.order :posted_on => :asc
|
46
|
+
|
47
|
+
test = [@story1, @story2, @story3]
|
48
|
+
stories.should eql(test)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should order the collection by posted_on desc using a date" do
|
52
|
+
stories = Story.all.order :posted_on => :desc
|
53
|
+
|
54
|
+
test = [@story3, @story2, @story1]
|
55
|
+
stories.should eql(test)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should return a new collection" do
|
59
|
+
stories = Story.all
|
60
|
+
ordered = Story.all.order :posted_on => :desc
|
61
|
+
|
62
|
+
stories.object_id.should_not eql(ordered.object_id)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/text_record.gemspec
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{text_record}
|
8
|
+
s.version = "0.0.2"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Adam Hawkins"]
|
12
|
+
s.date = %q{2010-02-05}
|
13
|
+
s.description = %q{Write your models in text files through YAML/Makdown/TextFile whatever you please. Take the forms out of your code and harness the power of your favorite editor.}
|
14
|
+
s.email = %q{Adman1965@gmaiil.com}
|
15
|
+
s.files = [
|
16
|
+
".gitignore",
|
17
|
+
"Rakefile",
|
18
|
+
"VERSION",
|
19
|
+
"lib/text_record.rb",
|
20
|
+
"lib/text_record/attribute.rb",
|
21
|
+
"lib/text_record/base.rb",
|
22
|
+
"lib/text_record/collection.rb",
|
23
|
+
"lib/text_record/configuration.rb",
|
24
|
+
"lib/text_record/errors.rb",
|
25
|
+
"readme.markdown",
|
26
|
+
"spec/app/content/blog_posts/ActiveRecord/attributes.yml",
|
27
|
+
"spec/app/content/blog_posts/ActiveRecord/post.markdown",
|
28
|
+
"spec/app/content/blog_posts/TextRecord/attributes.yml",
|
29
|
+
"spec/app/content/blog_posts/TextRecord/post.markdown",
|
30
|
+
"spec/app/content/stories/Story1/attributes.yml",
|
31
|
+
"spec/app/content/stories/Story2/attributes.yml",
|
32
|
+
"spec/app/content/stories/Story3/attributes.yml",
|
33
|
+
"spec/app/models/blog_post.rb",
|
34
|
+
"spec/app/models/story.rb",
|
35
|
+
"spec/base_spec.rb",
|
36
|
+
"spec/blog_post_spec.rb",
|
37
|
+
"spec/collection_spec.rb",
|
38
|
+
"spec/configuration_spec.rb",
|
39
|
+
"spec/spec_helper.rb",
|
40
|
+
"text_record.gemspec"
|
41
|
+
]
|
42
|
+
s.homepage = %q{http://github.com/Adman65/text_record}
|
43
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
44
|
+
s.require_paths = ["lib"]
|
45
|
+
s.rubygems_version = %q{1.3.5}
|
46
|
+
s.summary = %q{Models through text files}
|
47
|
+
s.test_files = [
|
48
|
+
"spec/app/models/blog_post.rb",
|
49
|
+
"spec/app/models/story.rb",
|
50
|
+
"spec/base_spec.rb",
|
51
|
+
"spec/blog_post_spec.rb",
|
52
|
+
"spec/collection_spec.rb",
|
53
|
+
"spec/configuration_spec.rb",
|
54
|
+
"spec/spec_helper.rb"
|
55
|
+
]
|
56
|
+
|
57
|
+
if s.respond_to? :specification_version then
|
58
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
59
|
+
s.specification_version = 3
|
60
|
+
|
61
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
62
|
+
else
|
63
|
+
end
|
64
|
+
else
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: text_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Hawkins
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-02-
|
12
|
+
date: 2010-02-05 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -28,16 +28,25 @@ files:
|
|
28
28
|
- lib/text_record.rb
|
29
29
|
- lib/text_record/attribute.rb
|
30
30
|
- lib/text_record/base.rb
|
31
|
+
- lib/text_record/collection.rb
|
31
32
|
- lib/text_record/configuration.rb
|
32
33
|
- lib/text_record/errors.rb
|
33
34
|
- readme.markdown
|
35
|
+
- spec/app/content/blog_posts/ActiveRecord/attributes.yml
|
36
|
+
- spec/app/content/blog_posts/ActiveRecord/post.markdown
|
34
37
|
- spec/app/content/blog_posts/TextRecord/attributes.yml
|
35
38
|
- spec/app/content/blog_posts/TextRecord/post.markdown
|
39
|
+
- spec/app/content/stories/Story1/attributes.yml
|
40
|
+
- spec/app/content/stories/Story2/attributes.yml
|
41
|
+
- spec/app/content/stories/Story3/attributes.yml
|
36
42
|
- spec/app/models/blog_post.rb
|
43
|
+
- spec/app/models/story.rb
|
37
44
|
- spec/base_spec.rb
|
38
45
|
- spec/blog_post_spec.rb
|
46
|
+
- spec/collection_spec.rb
|
39
47
|
- spec/configuration_spec.rb
|
40
48
|
- spec/spec_helper.rb
|
49
|
+
- text_record.gemspec
|
41
50
|
has_rdoc: true
|
42
51
|
homepage: http://github.com/Adman65/text_record
|
43
52
|
licenses: []
|
@@ -68,7 +77,9 @@ specification_version: 3
|
|
68
77
|
summary: Models through text files
|
69
78
|
test_files:
|
70
79
|
- spec/app/models/blog_post.rb
|
80
|
+
- spec/app/models/story.rb
|
71
81
|
- spec/base_spec.rb
|
72
82
|
- spec/blog_post_spec.rb
|
83
|
+
- spec/collection_spec.rb
|
73
84
|
- spec/configuration_spec.rb
|
74
85
|
- spec/spec_helper.rb
|