plain_record 0.3 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -44,7 +44,7 @@ module PlainRecord
44
44
  attr_accessor :virtuals
45
45
 
46
46
  # Storage type: +:entry+ or +:list+.
47
- attr_reader :storage
47
+ attr_reader :storage
48
48
 
49
49
  # Content of already loaded files.
50
50
  attr_accessor :loaded
@@ -85,8 +85,8 @@ module PlainRecord
85
85
  # Write all loaded entries to +file+.
86
86
  def save_file(file)
87
87
  if @loaded.has_key? file
88
- File.open(file, 'w') do |io|
89
- io.write entries_string(@loaded[file]).slice(5..-1)
88
+ ::File.open(file, 'w') do |io|
89
+ io << entries_string(@loaded[file]).slice(5..-1)
90
90
  end
91
91
  end
92
92
  end
@@ -202,7 +202,7 @@ module PlainRecord
202
202
 
203
203
  # Delete file, cache and empty dirs in path.
204
204
  def delete_file(file)
205
- File.delete(file)
205
+ ::File.delete(file)
206
206
  @loaded.delete(file)
207
207
 
208
208
  path = Pathname(file).dirname
@@ -0,0 +1,38 @@
1
+ =begin
2
+ Ruby on Rails integration.
3
+
4
+ Copyright (C) 2012 Andrey “A.I.” Sitnik <andrey@sitnik.ru>,
5
+ sponsored by Evil Martians.
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU Lesser General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU Lesser General Public License for more details.
16
+
17
+ You should have received a copy of the GNU Lesser General Public License
18
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ =end
20
+
21
+ ActiveSupport.on_load(:after_initialize) do
22
+ PlainRecord.root = Rails.root.join('data')
23
+ PlainRecord::Extra::Image.dir = Rails.root.join('app/assets/images/data/')
24
+ PlainRecord::Extra::Image.url = 'data/'
25
+ end
26
+
27
+ module PlainRecord::RailsController
28
+ private
29
+ def plain_record_convert_images
30
+ Dir.glob(Rails.root.join('app/models/**/*.rb')) { |i| require_dependency i }
31
+ PlainRecord::Extra::Image.convert_images!
32
+ end
33
+ end
34
+
35
+ if Rails.env.development?
36
+ ActionController::Base.send(:include, PlainRecord::RailsController)
37
+ ActionController::Base.send(:before_filter, :plain_record_convert_images)
38
+ end
@@ -48,12 +48,13 @@ module PlainRecord
48
48
  # text :content
49
49
  # end
50
50
  module Resource
51
- class << self
52
- def included(base)
53
- base.send :extend, Model
54
- end
51
+ def self.included(base)
52
+ base.send :extend, Model
53
+ base.send :extend, PlainRecord::File::Model
55
54
  end
56
55
 
56
+ include PlainRecord::File
57
+
57
58
  # Fields values.
58
59
  attr_reader :data
59
60
 
@@ -102,8 +103,8 @@ module PlainRecord
102
103
  unless self.class.path =~ /[\*\[\?\{]/
103
104
  self.file = self.class.path
104
105
  else
105
- raise ArgumentError, "There isn't file to save entry. " +
106
- "Set filepath fields or file."
106
+ raise ArgumentError,
107
+ "There isn't file to save entry. Set filepath fields or file."
107
108
  end
108
109
  end
109
110
 
@@ -75,6 +75,7 @@ module PlainRecord
75
75
  Time => 'v.is_a?(String) ? Time.parse(v) : v',
76
76
  Date => 'v.is_a?(String) ? Date.parse(v) : v'
77
77
  }
78
+
78
79
  Type.stringifies = {
79
80
  String => 'v ? v.to_s : v',
80
81
  Integer => 'v ? v.to_i : v',
@@ -82,5 +83,6 @@ module PlainRecord
82
83
  Time => 'v ? v.strftime("%Y-%m-%d %H:%M:%S %Z") : v',
83
84
  Date => 'v'
84
85
  }
86
+
85
87
  end
86
88
  end
@@ -1,3 +1,3 @@
1
1
  module PlainRecord
2
- VERSION = '0.3' unless defined? PlainRecord::VERSION
2
+ VERSION = '0.4' unless defined? PlainRecord::VERSION
3
3
  end
data/lib/plain_record.rb CHANGED
@@ -31,13 +31,15 @@ require dir + 'filepath'
31
31
  require dir + 'association_proxy'
32
32
  require dir + 'associations'
33
33
  require dir + 'type'
34
+ require dir + 'file'
34
35
  require dir + 'model'
35
36
  require dir + 'resource'
36
37
 
37
38
  module PlainRecord
38
39
  module Extra
39
- autoload :Git, 'plain_record/extra/git'
40
- autoload :I18n, 'plain_record/extra/i18n'
40
+ autoload :Git, 'plain_record/extra/git'
41
+ autoload :I18n, 'plain_record/extra/i18n'
42
+ autoload :Image, 'plain_record/extra/image'
41
43
  end
42
44
 
43
45
  class << self
@@ -47,7 +49,7 @@ module PlainRecord
47
49
  # as <tt>/content/</tt>).
48
50
  def root=(value)
49
51
  value = value.to_s
50
- value += File::SEPARATOR if File::SEPARATOR != value[-1..-1]
52
+ value += ::File::SEPARATOR if ::File::SEPARATOR != value[-1..-1]
51
53
  @root = value
52
54
  end
53
55
 
@@ -55,13 +57,9 @@ module PlainRecord
55
57
  #
56
58
  # If you set +path+ it will be added to root path.
57
59
  def root(path = '')
58
- File.join(@root, path)
60
+ ::File.join(@root, path)
59
61
  end
60
62
  end
61
63
  end
62
64
 
63
- if defined? Rails
64
- ActiveSupport.on_load(:after_initialize) do
65
- PlainRecord.root = Rails.root.join('data')
66
- end
67
- end
65
+ require(dir + 'rails') if defined? Rails
data/plain_record.gemspec CHANGED
@@ -22,11 +22,14 @@ Gem::Specification.new do |s|
22
22
  s.email = 'andrey@sitnik.ru'
23
23
  s.homepage = 'https://github.com/ai/plain_record'
24
24
 
25
+ s.add_dependency "escape", [">= 0"]
26
+
25
27
  s.add_development_dependency "bundler", [">= 1.0.10"]
26
28
  s.add_development_dependency "yard", [">= 0"]
27
29
  s.add_development_dependency "rake", [">= 0"]
28
30
  s.add_development_dependency "rspec", [">= 0"]
29
31
  s.add_development_dependency "redcarpet", [">= 0"]
30
- s.add_development_dependency "r18n-core", [">= 0"]
32
+ s.add_development_dependency "r18n-core", [">= 1.0.0"]
31
33
  s.add_development_dependency "i18n", [">= 0"]
34
+ s.add_development_dependency "rmagick", [">= 0"]
32
35
  end
@@ -9,8 +9,9 @@ describe PlainRecord::Associations do
9
9
 
10
10
  class ::RatedPost
11
11
  include PlainRecord::Resource
12
- entry_in 'data/3/post.md'
13
- field :rate, one(::Rate)
12
+ entry_in 'data/*/post.md'
13
+ virtual :name, in_filepath(1)
14
+ field :rate, one(::Rate)
14
15
  end
15
16
 
16
17
  class ::Comment
@@ -51,17 +52,21 @@ describe PlainRecord::Associations do
51
52
  end
52
53
 
53
54
  it "should load one-to-one real association" do
54
- rate = ::RatedPost.first().rate
55
+ rate = ::RatedPost.first(:name => '3').rate
55
56
  rate.should be_instance_of(::Rate)
56
57
  rate.path.should == 'data/3/post.md'
57
58
  rate.data.should == { 'subject' => 5, 'text' => 2 }
58
59
  end
59
60
 
61
+ it "should return nil if one-to-one real association is empty" do
62
+ ::RatedPost.first(:name => '1').rate.should be_nil
63
+ end
64
+
60
65
  it "should save one-to-one real association" do
61
66
  file = StringIO.new
62
67
  File.should_receive(:open).with(anything(), 'w').and_yield(file)
63
68
 
64
- ::RatedPost.first().save()
69
+ ::RatedPost.first(:name => '3').save()
65
70
 
66
71
  file.should has_yaml({ 'title' => 'Third',
67
72
  'rate' => { 'text' => 2, 'subject' => 5 } })
data/spec/file_spec.rb ADDED
@@ -0,0 +1,88 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe PlainRecord::File do
4
+
5
+ it "should calculate file path" do
6
+ locale = 'en'
7
+ klass = Class.new do
8
+ include PlainRecord::Resource
9
+ field :name
10
+ virtual :a, file('a')
11
+ virtual :b, file { |i| "#{i.name}.#{locale}" }
12
+ end
13
+ one = klass.new
14
+
15
+ one.name = '1'
16
+ one.field_filepath(:a).should == PlainRecord.root('a')
17
+ one.field_filepath(:b).should == PlainRecord.root('1.en')
18
+ end
19
+
20
+ it "should read field from file" do
21
+ File.stub!(:exists?).and_return(true)
22
+ File.stub!(:read)
23
+
24
+ type = '1'
25
+ klass = Class.new do
26
+ include PlainRecord::Resource
27
+ virtual :a, file { type }
28
+ end
29
+
30
+ one = klass.new
31
+ File.should_receive(:read).with(PlainRecord.root('1')).and_return('A')
32
+ one.a.should == 'A'
33
+
34
+ type = '2'
35
+ File.should_receive(:read).with(PlainRecord.root('2')).and_return('B')
36
+ one.a.should == 'B'
37
+ end
38
+
39
+ it "should return if file is not exists" do
40
+ klass = Class.new do
41
+ include PlainRecord::Resource
42
+ virtual :a, file { 'a' }
43
+ end
44
+
45
+ one = klass.new
46
+ one.a.should be_nil
47
+ end
48
+
49
+ it "should cache new value" do
50
+ type = '1'
51
+ klass = Class.new do
52
+ include PlainRecord::Resource
53
+ virtual :a, file { type }
54
+ end
55
+
56
+ one = klass.new
57
+ one.a = 1
58
+ one.unsaved_files.should == { PlainRecord.root('1') => 1 }
59
+ one.a.should == 1
60
+
61
+ type = '2'
62
+ one.a = 2
63
+ one.unsaved_files.should == { PlainRecord.root('1') => 1,
64
+ PlainRecord.root('2') => 2 }
65
+ one.a.should == 2
66
+ end
67
+
68
+ it "should save new value to file" do
69
+ file = ''
70
+ File.stub!(:open)
71
+ File.should_receive(:open).with(PlainRecord.root('a'), 'w').and_yield(file)
72
+ File.should_receive(:open).with(PlainRecord.root('file'), 'w').and_yield("")
73
+
74
+ klass = Class.new do
75
+ include PlainRecord::Resource
76
+ entry_in 'file'
77
+ virtual :a, file('a')
78
+ end
79
+
80
+ one = klass.new
81
+ one.a = 'B'
82
+ one.save
83
+
84
+ one.unsaved_files.should == { }
85
+ file.should == 'B'
86
+ end
87
+
88
+ end
@@ -0,0 +1,149 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe PlainRecord::Extra::Image do
4
+
5
+ before do
6
+ PlainRecord::Extra::Image.dir = 'images/data/'
7
+ PlainRecord::Extra::Image.url = 'data/'
8
+
9
+ @klass = Class.new do
10
+ include PlainRecord::Resource
11
+ include PlainRecord::Extra::Image
12
+
13
+ image_from { |entry, field| "#{entry.name}/#{field}.png" }
14
+ image_url { |entry, field, size| "#{field}.#{size}.png" }
15
+
16
+ field :name
17
+ virtual :logo, image(:small => '16x16')
18
+ virtual :photo, image
19
+ end
20
+
21
+ @entry = @klass.new
22
+ @entry.name = 'a'
23
+ end
24
+
25
+ it "should throw error if there is no image_to" do
26
+ PlainRecord::Extra::Image.dir = nil
27
+ PlainRecord::Extra::Image.url = nil
28
+
29
+ lambda {
30
+ @klass.get_image_file(@entry, :logo, :small)
31
+ }.should raise_error(ArgumentError, /Image.dir/)
32
+
33
+ lambda {
34
+ PlainRecord::Extra::Image.convert_images!
35
+ }.should raise_error(ArgumentError, /Image.dir/)
36
+
37
+ lambda {
38
+ @klass.get_image_url(@entry, :logo, :small)
39
+ }.should raise_error(ArgumentError, /Image.url/)
40
+ end
41
+
42
+ it "should calculate paths" do
43
+ @klass.get_image_from(@entry, :logo).should ==
44
+ PlainRecord.root('a/logo.png')
45
+ @klass.get_image_file(@entry, :logo, :small).should ==
46
+ 'images/data/logo.small.png'
47
+ @klass.get_image_url(@entry, :logo, :small).should ==
48
+ 'data/logo.small.png'
49
+ end
50
+
51
+ it "should return image data" do
52
+ @entry.logo.should_not be_exists
53
+ File.stub!(:exists?).and_return(true)
54
+ @entry.logo.should be_exists
55
+
56
+ @entry.logo.original.should == PlainRecord.root('a/logo.png')
57
+ @entry.logo.file.should be_nil
58
+ @entry.logo.url.should be_nil
59
+ @entry.logo(:small).url.should == 'data/logo.small.png'
60
+ @entry.logo(:small).file.should == 'images/data/logo.small.png'
61
+ @entry.logo(:small).size.should == '16x16'
62
+ @entry.logo(:small).width.should == 16
63
+ @entry.logo(:small).height.should == 16
64
+ @entry.logo(:small).size_name.should == :small
65
+ @entry.photo.url.should == 'data/photo..png'
66
+ end
67
+
68
+ it "should copy image without size" do
69
+ File.stub!(:exists?)
70
+ File.should_receive(:exists?).
71
+ with(PlainRecord.root('a/logo.png')).and_return(false)
72
+ File.should_receive(:exists?).
73
+ with(PlainRecord.root('a/photo.png')).and_return(true)
74
+
75
+ FileUtils.stub!(:cp)
76
+ FileUtils.should_receive(:cp).
77
+ with(PlainRecord.root('a/photo.png'), 'images/data/photo..png')
78
+
79
+ @entry.convert_images!
80
+ end
81
+
82
+ it "should resize image", :unless => is_rbx do
83
+ File.stub!(:exists?)
84
+ File.should_receive(:exists?).
85
+ with(PlainRecord.root('a/logo.png')).and_return(true)
86
+
87
+ thumb = double('thumb')
88
+ thumb.stub!(:write)
89
+ thumb.should_receive(:write).with('images/data/logo.small.png')
90
+
91
+ original = double('original')
92
+ original.stub!(:resize)
93
+ original.should_receive(:resize).with(16, 16).and_return(thumb)
94
+
95
+ require 'RMagick'
96
+ Magick::Image.stub!(:read)
97
+ Magick::Image.should_receive(:read).
98
+ with(PlainRecord.root('a/logo.png')).and_return([original])
99
+
100
+ @entry.convert_images!
101
+ end
102
+
103
+ it "should remember all models, which use extention" do
104
+ PlainRecord::Extra::Image.included_in = []
105
+
106
+ one = Class.new do
107
+ include PlainRecord::Resource
108
+ include PlainRecord::Extra::Image
109
+ end
110
+ two = Class.new do
111
+ include PlainRecord::Resource
112
+ include PlainRecord::Extra::Image
113
+ end
114
+
115
+ PlainRecord::Extra::Image.included_in.should == [one, two]
116
+ end
117
+
118
+ it "should delete all old image" do
119
+ PlainRecord::Extra::Image.included_in = [@klass]
120
+
121
+ def @klass.entry
122
+ @entry ||= self.new
123
+ end
124
+ def @klass.all
125
+ [entry]
126
+ end
127
+
128
+ Dir.stub!(:glob).and_yield('images/data/a.png')
129
+ Dir.should_receive(:glob).with('images/data/**/*')
130
+
131
+ File.stub!(:exists?).and_return(true)
132
+ File.should_receive(:exists?).with('images/data/a.png')
133
+
134
+ FileUtils.stub!(:rm_r)
135
+ FileUtils.should_receive(:rm_r).with('images/data/a.png')
136
+
137
+ @klass.entry.stub(:convert_images!)
138
+ @klass.entry.should_receive(:convert_images!)
139
+
140
+ PlainRecord::Extra::Image.convert_images!
141
+ end
142
+
143
+ it "should return right error on wrong size" do
144
+ lambda {
145
+ @entry.logo(:no)
146
+ }.should raise_error(ArgumentError, "Field `logo` doesn't have `no` size")
147
+ end
148
+
149
+ end
data/spec/spec_helper.rb CHANGED
@@ -61,3 +61,7 @@ RSpec::Matchers.define :has_yaml do |data|
61
61
  YAML.load(file.read).should == data
62
62
  end
63
63
  end
64
+
65
+ def is_rbx
66
+ defined?(RUBY_ENGINE) and RUBY_ENGINE == 'rbx'
67
+ end
metadata CHANGED
@@ -1,93 +1,160 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: plain_record
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.3'
5
4
  prerelease:
5
+ version: '0.4'
6
6
  platform: ruby
7
7
  authors:
8
8
  - Andrey "A.I." Sitnik
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-29 00:00:00.000000000 Z
12
+ date: 2013-01-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
+ type: :runtime
16
+ name: escape
17
+ version_requirements: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ requirement: !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ! '>='
27
+ - !ruby/object:Gem::Version
28
+ version: '0'
29
+ prerelease: false
30
+ - !ruby/object:Gem::Dependency
31
+ type: :development
15
32
  name: bundler
16
- requirement: &23439240 !ruby/object:Gem::Requirement
33
+ version_requirements: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: 1.0.10
39
+ requirement: !ruby/object:Gem::Requirement
17
40
  none: false
18
41
  requirements:
19
42
  - - ! '>='
20
43
  - !ruby/object:Gem::Version
21
44
  version: 1.0.10
22
- type: :development
23
45
  prerelease: false
24
- version_requirements: *23439240
25
46
  - !ruby/object:Gem::Dependency
47
+ type: :development
26
48
  name: yard
27
- requirement: &23438660 !ruby/object:Gem::Requirement
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ requirement: !ruby/object:Gem::Requirement
28
56
  none: false
29
57
  requirements:
30
58
  - - ! '>='
31
59
  - !ruby/object:Gem::Version
32
60
  version: '0'
33
- type: :development
34
61
  prerelease: false
35
- version_requirements: *23438660
36
62
  - !ruby/object:Gem::Dependency
63
+ type: :development
37
64
  name: rake
38
- requirement: &23438060 !ruby/object:Gem::Requirement
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ requirement: !ruby/object:Gem::Requirement
39
72
  none: false
40
73
  requirements:
41
74
  - - ! '>='
42
75
  - !ruby/object:Gem::Version
43
76
  version: '0'
44
- type: :development
45
77
  prerelease: false
46
- version_requirements: *23438060
47
78
  - !ruby/object:Gem::Dependency
79
+ type: :development
48
80
  name: rspec
49
- requirement: &23437480 !ruby/object:Gem::Requirement
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ requirement: !ruby/object:Gem::Requirement
50
88
  none: false
51
89
  requirements:
52
90
  - - ! '>='
53
91
  - !ruby/object:Gem::Version
54
92
  version: '0'
55
- type: :development
56
93
  prerelease: false
57
- version_requirements: *23437480
58
94
  - !ruby/object:Gem::Dependency
95
+ type: :development
59
96
  name: redcarpet
60
- requirement: &23436940 !ruby/object:Gem::Requirement
97
+ version_requirements: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ requirement: !ruby/object:Gem::Requirement
61
104
  none: false
62
105
  requirements:
63
106
  - - ! '>='
64
107
  - !ruby/object:Gem::Version
65
108
  version: '0'
66
- type: :development
67
109
  prerelease: false
68
- version_requirements: *23436940
69
110
  - !ruby/object:Gem::Dependency
111
+ type: :development
70
112
  name: r18n-core
71
- requirement: &23436360 !ruby/object:Gem::Requirement
113
+ version_requirements: !ruby/object:Gem::Requirement
72
114
  none: false
73
115
  requirements:
74
116
  - - ! '>='
75
117
  - !ruby/object:Gem::Version
76
- version: '0'
77
- type: :development
118
+ version: 1.0.0
119
+ requirement: !ruby/object:Gem::Requirement
120
+ none: false
121
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: 1.0.0
78
125
  prerelease: false
79
- version_requirements: *23436360
80
126
  - !ruby/object:Gem::Dependency
127
+ type: :development
81
128
  name: i18n
82
- requirement: &23435760 !ruby/object:Gem::Requirement
129
+ version_requirements: !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ requirement: !ruby/object:Gem::Requirement
83
136
  none: false
84
137
  requirements:
85
138
  - - ! '>='
86
139
  - !ruby/object:Gem::Version
87
140
  version: '0'
141
+ prerelease: false
142
+ - !ruby/object:Gem::Dependency
88
143
  type: :development
144
+ name: rmagick
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ! '>='
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ requirement: !ruby/object:Gem::Requirement
152
+ none: false
153
+ requirements:
154
+ - - ! '>='
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
89
157
  prerelease: false
90
- version_requirements: *23435760
91
158
  description: ! " Plain Record is a data persistence, which use human editable and\n
92
159
  \ readable plain text files. It's ideal for static generated sites,\n like
93
160
  blog or homepage.\n"
@@ -116,10 +183,13 @@ files:
116
183
  - lib/plain_record/default.rb
117
184
  - lib/plain_record/extra/git.rb
118
185
  - lib/plain_record/extra/i18n.rb
186
+ - lib/plain_record/extra/image.rb
187
+ - lib/plain_record/file.rb
119
188
  - lib/plain_record/filepath.rb
120
189
  - lib/plain_record/model.rb
121
190
  - lib/plain_record/model/entry.rb
122
191
  - lib/plain_record/model/list.rb
192
+ - lib/plain_record/rails.rb
123
193
  - lib/plain_record/resource.rb
124
194
  - lib/plain_record/type.rb
125
195
  - lib/plain_record/version.rb
@@ -135,9 +205,11 @@ files:
135
205
  - spec/data/authors/intern.yml
136
206
  - spec/data/best/4/post.md
137
207
  - spec/default_spec.rb
208
+ - spec/file_spec.rb
138
209
  - spec/filepath_spec.rb
139
210
  - spec/git_spec.rb
140
211
  - spec/i18n_spec.rb
212
+ - spec/image_spec.rb
141
213
  - spec/model_spec.rb
142
214
  - spec/plain_record_spec.rb
143
215
  - spec/resource_spec.rb
@@ -154,22 +226,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
154
226
  requirements:
155
227
  - - ! '>='
156
228
  - !ruby/object:Gem::Version
157
- version: '0'
158
229
  segments:
159
230
  - 0
160
- hash: -2998465728385447997
231
+ hash: -1633277468961939816
232
+ version: '0'
161
233
  required_rubygems_version: !ruby/object:Gem::Requirement
162
234
  none: false
163
235
  requirements:
164
236
  - - ! '>='
165
237
  - !ruby/object:Gem::Version
166
238
  version: '0'
167
- segments:
168
- - 0
169
- hash: -2998465728385447997
170
239
  requirements: []
171
240
  rubyforge_project:
172
- rubygems_version: 1.8.11
241
+ rubygems_version: 1.8.23
173
242
  signing_key:
174
243
  specification_version: 3
175
244
  summary: Data persistence, which use human editable and readable plain text files.