plain_record 0.3 → 0.4

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.
@@ -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.