tdiary-io-mongodb 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 68f93930b365924ed1a58946c9a22e400bf6f1c7
4
- data.tar.gz: 08c80ed7a8a4cd91190ddf6865f69d3f6f4d0e18
3
+ metadata.gz: 114f562916eb47fba2815a72cb0a4aed1a028f5e
4
+ data.tar.gz: f41a5913047cf0c763f6831f6c64a2fbeb98476d
5
5
  SHA512:
6
- metadata.gz: 263dc101abb96dec4c02f49a2f3c2df9890963adf45f78308ba5cf579ff0f2a70b77d82fb362331daf4662324f3ac4140dcc9e87fe67bcd4f1eec757831cfe9a
7
- data.tar.gz: 1cba6bb3d0eef4d96a2f42cb2dda1657013874be3143d8180832b45c6860d48e9f67af50a505c8f571c04c52a43618737d552d2bec4fa9deb54327606cac6162
6
+ metadata.gz: f64701eff4db012e0d29403ae3213a90e49168f25aca9ff8e619719f0b0e8f616afb6ebc8969b4a68c2b158e42d849717593bbda0e6c085ee55dc44370442f5a
7
+ data.tar.gz: 30e2ff164dee5657d62e0baceac33a53a98daa7df64894839cbf413d55edeffd42853021fb3bd85dbbcb352787563002e9bdc85b24c3acaf80de0e30a6f403e1
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - 2.1
6
+ script: bundle exec rake spec
7
+ services:
8
+ - mongodb
data/Rakefile CHANGED
@@ -1 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+ require 'erb'
5
+ require 'tdiary/view_helper'
6
+ require 'tdiary/base'
7
+ require 'tdiary/comment'
8
+ require 'tdiary/comment_manager'
9
+ require 'tdiary/referer_manager'
10
+ require 'tdiary/style'
11
+ require 'tdiary/cache/file'
12
+ require 'ostruct'
13
+
14
+ def load_diaries(data_path, style_path)
15
+ require 'tdiary/io/default'
16
+
17
+ options = {
18
+ 'style.path' => style_path
19
+ }
20
+ conf = OpenStruct.new({
21
+ data_path: "#{data_path}/",
22
+ options: options
23
+ })
24
+ tdiary = OpenStruct.new({conf: conf})
25
+ default_io = TDiary::IO::Default.new(tdiary)
26
+
27
+ default_io.calendar.each do |y, ms|
28
+ ms.each do |m|
29
+ puts "loading #{y}-#{m}"
30
+ month = Time.local(y.to_i, m.to_i)
31
+ default_io.transaction(month) do |diaries|
32
+ yield month, diaries
33
+ TDiary::TDiaryBase::DIRTY_NONE
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ def update_diaries(mongodb_io, month, new_diaries)
40
+ mongodb_io.transaction(month) do |diaries|
41
+ diaries.update(new_diaries)
42
+ TDiary::TDiaryBase::DIRTY_DIARY | TDiary::TDiaryBase::DIRTY_COMMENT
43
+ end
44
+ end
45
+
46
+ def store_diaries(data_path, style_path, mongo_url = nil)
47
+ require 'tdiary/io/mongodb'
48
+
49
+ options = {'style.path' => [style_path]}
50
+ conf = OpenStruct.new({options: options, database_url: mongo_url})
51
+ tdiary = OpenStruct.new({conf: conf})
52
+ TDiary::IO::MongoDB.load_cgi_conf(conf)
53
+ mongodb_io = TDiary::IO::MongoDB.new(tdiary)
54
+
55
+ load_diaries(data_path, style_path) do |month, diaries|
56
+ update_diaries(mongodb_io, month, diaries)
57
+ end
58
+ end
59
+
60
+ def store_conf(conf_path, mongo_url = nil)
61
+ require 'tdiary/io/mongodb'
62
+
63
+ conf = OpenStruct.new({options: {}, database_url: mongo_url})
64
+ tdiary = OpenStruct.new({conf: conf})
65
+
66
+ TDiary::IO::MongoDB.save_cgi_conf(conf, open(conf_path, &:read))
67
+ end
68
+
69
+ args = {}
70
+ OptionParser.new do |opts|
71
+ opts.banner = 'Usage: tdiary-mongodb-convert [options] <data_path>'
72
+ opts.on('-c CONF', '--conf=CONF', 'store only tdiary.conf'){|v| args[:conf] = v}
73
+ opts.on('-s PATH', '--style=STYLE', 'style path'){|v| args[:style] = v}
74
+ opts.on('-m URL', '--mongo=URL', 'URL of mongoDB'){|v| args[:mongo] = v}
75
+ opts.parse!(ARGV)
76
+
77
+ args[:data] = ARGV.shift
78
+ unless args[:data] || args[:conf]
79
+ $stderr.print opts.help
80
+ exit 1
81
+ end
82
+ end
83
+
84
+ if args[:conf]
85
+ store_conf(args[:conf], args[:mongo])
86
+ else
87
+ store_diaries(args[:data], args[:style], args[:mongo])
88
+ end
@@ -58,12 +58,50 @@ module TDiary
58
58
  field :body, type: String
59
59
  field :style, type: String
60
60
  field :last_modified, type: Integer
61
+ field :visible, type: Boolean
61
62
  has_many :comments, autosave: true
62
63
  has_many :referers, autosave: true
63
64
 
64
65
  index({diary_id: 1}, {unique: true})
65
66
  index('comments.no' => 1)
66
67
  end
68
+
69
+ class Plugin
70
+ include Mongoid::Document
71
+ include Mongoid::Timestamps
72
+ store_in collection: "plugins"
73
+
74
+ field :plugin, type: String
75
+ field :key, type: String
76
+ field :value, type: String
77
+
78
+ def self.get(plugin_name, key)
79
+ record = where(plugin: plugin_name, key: key).first
80
+ return record ? record.value : nil
81
+ end
82
+
83
+ def self.set(plugin_name, key, value)
84
+ record = where(plugin: plugin_name, key: key).first
85
+ if record
86
+ record.update_attributes(value: value)
87
+ else
88
+ record = self.new(plugin: plugin_name, key: key, value: value)
89
+ record.save!
90
+ end
91
+ end
92
+
93
+ def self.delete(plugin_name, key)
94
+ record = where(plugin: plugin_name, key: key).first
95
+ if record
96
+ record.delete
97
+ end
98
+ end
99
+
100
+ def self.keys(plugin_name)
101
+ records = where(plugin: plugin_name)
102
+ return records.map(&:key) rescue []
103
+ end
104
+ end
67
105
 
68
106
  include Cache
69
107
 
@@ -92,6 +130,31 @@ module TDiary
92
130
  {sessions:{default:{uri:(conf.database_url || 'mongodb://localhost:27017/tdiary')}}}
93
131
  )
94
132
  end
133
+
134
+ def plugin_open(conf)
135
+ return nil
136
+ end
137
+
138
+ def plugin_close(storage)
139
+ # do nothing
140
+ end
141
+
142
+ def plugin_transaction(storage, plugin_name)
143
+ db = plugin_name.dup
144
+ def db.get(key)
145
+ Plugin.get(self, key)
146
+ end
147
+ def db.set(key, value)
148
+ Plugin.set(self, key, value)
149
+ end
150
+ def db.delete(key)
151
+ Plugin.delete(self, key)
152
+ end
153
+ def db.keys
154
+ Plugin.keys(self)
155
+ end
156
+ yield db
157
+ end
95
158
  end
96
159
 
97
160
  #
@@ -1,8 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe TDiary::IO::MongoDB do
4
- it 'is_a TDiary::IO::Base' do
5
- expect { TDiary::IO::MongoDB.is_a?(TDiary::IO::Base) }.to be_true
4
+ it 'is based on TDiary::IO::Base' do
5
+ expect(TDiary::IO::MongoDB < TDiary::IO::Base).to be true
6
6
  end
7
7
 
8
8
  describe "#save_cgi_conf and #load_cgi_conf" do
@@ -26,6 +26,50 @@ describe TDiary::IO::MongoDB do
26
26
  end
27
27
  end
28
28
 
29
+ describe "plugin storage support" do
30
+ it ".plugin_open returns nil" do
31
+ expect(TDiary::IO::MongoDB.plugin_open(nil)).to be nil
32
+ end
33
+
34
+ it ".plugin_close do nothing" do
35
+ # nothing
36
+ end
37
+
38
+ describe ".plugin_transaction" do
39
+ let(:storage){ TDiary::IO::MongoDB.plugin_open(nil) }
40
+
41
+ it "store/restore data" do
42
+ TDiary::IO::MongoDB.plugin_transaction(storage, 'test_plugin') do |db|
43
+ db.set('test_key', 'test_value')
44
+ expect(db.get('test_key')).to eq('test_value')
45
+ end
46
+ end
47
+
48
+ it "update data" do
49
+ TDiary::IO::MongoDB.plugin_transaction(storage, 'test_plugin') do |db|
50
+ db.set('test_key', 'test_update')
51
+ expect(db.get('test_key')).to eq('test_update')
52
+ end
53
+ end
54
+
55
+ it "delete data" do
56
+ TDiary::IO::MongoDB.plugin_transaction(storage, 'test_plugin') do |db|
57
+ db.set('test_key', 'test_delete')
58
+ db.delete('test_key')
59
+ expect(db.get('test_key')).to eq(nil)
60
+ end
61
+ end
62
+
63
+ it "keys" do
64
+ TDiary::IO::MongoDB.plugin_transaction(storage, 'test_plugin') do |db|
65
+ db.set('test_key1', 'test_value1')
66
+ db.set('test_key2', 'test_value2')
67
+ expect(db.keys).to match_array ['test_key1', 'test_key2']
68
+ end
69
+ end
70
+ end
71
+ end
72
+
29
73
  describe "#transaction" do
30
74
  let(:io) { TDiary::IO::MongoDB.new(DummyTDiary.new) }
31
75
  let(:today) { Time.now.strftime( '%Y%m%d' ) }
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "tdiary-io-mongodb"
7
- spec.version = "0.0.1"
7
+ spec.version = "0.0.2"
8
8
  spec.authors = ["TADA Tadashi"]
9
9
  spec.email = ["t@tdtds.jp"]
10
10
  spec.description = %q{MongoDB adapter for tDiary}
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ["lib"]
19
19
 
20
20
  spec.add_dependency "mongoid"
21
+ spec.add_dependency "hikidoc"
21
22
 
22
23
  spec.add_development_dependency "bundler", "~> 1.3"
23
24
  spec.add_development_dependency "rake"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tdiary-io-mongodb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - TADA Tadashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-21 00:00:00.000000000 Z
11
+ date: 2015-01-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mongoid
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: hikidoc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -83,15 +97,18 @@ dependencies:
83
97
  description: MongoDB adapter for tDiary
84
98
  email:
85
99
  - t@tdtds.jp
86
- executables: []
100
+ executables:
101
+ - tdiary-mongodb-convert
87
102
  extensions: []
88
103
  extra_rdoc_files: []
89
104
  files:
90
105
  - ".gitignore"
106
+ - ".travis.yml"
91
107
  - Gemfile
92
108
  - LICENSE.txt
93
109
  - README.md
94
110
  - Rakefile
111
+ - bin/tdiary-mongodb-convert
95
112
  - lib/tdiary/io/mongodb.rb
96
113
  - spec/spec_helper.rb
97
114
  - spec/tdiary/io/mongodb_spec.rb
@@ -116,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
133
  version: '0'
117
134
  requirements: []
118
135
  rubyforge_project:
119
- rubygems_version: 2.0.3
136
+ rubygems_version: 2.4.5
120
137
  signing_key:
121
138
  specification_version: 4
122
139
  summary: MongoDB adapter for tDiary