activegroonga 1.0.0 → 1.0.1

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/NEWS.ja.rdoc CHANGED
@@ -1,5 +1,22 @@
1
1
  = お知らせ
2
2
 
3
+ == 1.0.1: 2010-11-29
4
+
5
+ === 改良
6
+
7
+ * ジェネレータ: テーブルの種類の指定に対応。
8
+ * ActiveGroonga::Base.exists?を追加。
9
+ * ActiveGroonga::Base.allを追加。
10
+
11
+ === 変更
12
+
13
+ * ハッシュテーブル・パトリシアトライを利用しているときはレコード識別子
14
+ としてIDではなくキーを使うように変更。
15
+
16
+ == 1.0.0: 2010-11-29
17
+
18
+ * Rails 3対応
19
+
3
20
  == 0.0.7: 2009-10-02
4
21
 
5
22
  * Ruby/groonga 0.0.7対応
data/NEWS.rdoc CHANGED
@@ -1,5 +1,22 @@
1
1
  = NEWS
2
2
 
3
+ == 1.0.1: 2010-11-29
4
+
5
+ === Improvments
6
+
7
+ * generator: Supported table type customize.
8
+ * Added ActiveGroonga::Base.exists?.
9
+ * Added ActiveGroonga::Base.all.
10
+
11
+ === Changes
12
+
13
+ * Changed to use record key instead of record ID for record
14
+ identifier for hash table and patricia trie.
15
+
16
+ == 1.0.0: 2010-11-29
17
+
18
+ * Support Rails 3.
19
+
3
20
  == 0.0.7: 2009-10-02
4
21
 
5
22
  * Support Ruby/groonga 0.0.7.
data/Rakefile CHANGED
@@ -34,12 +34,12 @@ truncate_base_dir = Proc.new do |x|
34
34
  x.gsub(/^#{Regexp.escape(base_dir + File::SEPARATOR)}/, '')
35
35
  end
36
36
 
37
- @groonga_base_dir = File.expand_path(File.join(base_dir, '..', 'groonga'))
38
- groonga_ext_dir = File.join(@groonga_base_dir, 'src')
39
- groonga_lib_dir = File.join(groonga_ext_dir, 'lib')
40
- $LOAD_PATH.unshift(groonga_ext_dir)
41
- $LOAD_PATH.unshift(groonga_lib_dir)
42
- ENV["RUBYLIB"] = "#{groonga_lib_dir}:#{groonga_ext_dir}:#{ENV['RUBYLIB']}"
37
+ @rroonga_base_dir = File.expand_path(File.join(base_dir, '..', 'rroonga'))
38
+ rroonga_ext_dir = File.join(@rroonga_base_dir, 'ext', "groonga")
39
+ rroonga_lib_dir = File.join(@rroonga_base_dir, 'lib')
40
+ $LOAD_PATH.unshift(rroonga_ext_dir)
41
+ $LOAD_PATH.unshift(rroonga_lib_dir)
42
+ ENV["RUBYLIB"] = "#{rroonga_lib_dir}:#{rroonga_ext_dir}:#{ENV['RUBYLIB']}"
43
43
 
44
44
  active_groonga_lib_dir = File.join(base_dir, "lib")
45
45
  $LOAD_PATH.unshift(active_groonga_lib_dir)
@@ -164,7 +164,7 @@ def apply_template(file, head, header, footer)
164
164
  end
165
165
 
166
166
  def erb_template(name)
167
- file = File.join(@groonga_base_dir, "html", "#{name}.html.erb")
167
+ file = File.join(@rroonga_base_dir, "html", "#{name}.html.erb")
168
168
  template = File.read(file)
169
169
  erb = ERB.new(template, nil, "-")
170
170
  erb.filename = file
@@ -182,10 +182,9 @@ task :prepare_docs_for_publishing do
182
182
  end
183
183
  end
184
184
 
185
+ desc "Tag the current revision."
185
186
  task :tag do
186
- repository = "svn+ssh://rubyforge.org/var/svn/groonga/activegroonga"
187
- sh("svn cp -m 'release #{version}!!!' " +
188
- "#{repository}/trunk #{repository}/tags/#{version}")
187
+ sh("git tag -a #{version} -m 'release #{version}!!!'")
189
188
  end
190
189
 
191
190
  desc "generate activegroonga.gemspec"
@@ -79,17 +79,32 @@ module ActiveGroonga
79
79
  instantiate(record)
80
80
  end
81
81
 
82
- def select(options={})
83
- if block_given?
84
- records = table.select do |record|
85
- yield(record)
86
- end
87
- ResultSet.new(records, self, :expression => records.expression)
82
+ def exists?(record_id)
83
+ record_id = record_id.record_id if record_id.respond_to?(:record_id)
84
+ if table.support_key?
85
+ not table[record_id].nil?
88
86
  else
89
- ResultSet.new(table, self)
87
+ begin
88
+ record_id = Integer(record_id)
89
+ rescue ArgumentError
90
+ return false
91
+ end
92
+ table.exist?(record_id)
90
93
  end
91
94
  end
92
95
 
96
+ def select(options={})
97
+ return all(options) unless block_given?
98
+ records = table.select do |record|
99
+ yield(record)
100
+ end
101
+ ResultSet.new(records, self, :expression => records.expression)
102
+ end
103
+
104
+ def all(options={})
105
+ ResultSet.new(table, self)
106
+ end
107
+
93
108
  def count
94
109
  table.size
95
110
  end
@@ -238,6 +253,10 @@ module ActiveGroonga
238
253
  id
239
254
  end
240
255
 
256
+ def to_key
257
+ persisted? ? [record_id] : nil
258
+ end
259
+
241
260
  def attributes
242
261
  @attributes
243
262
  end
@@ -17,7 +17,7 @@ module ActiveGroonga
17
17
  module VERSION
18
18
  MAJOR = 1
19
19
  MINOR = 0
20
- TINY = 0
20
+ TINY = 1
21
21
 
22
22
  STRING = [MAJOR, MINOR, TINY].join(".")
23
23
  end
@@ -43,7 +43,7 @@ module ActiveGroonga
43
43
 
44
44
  private
45
45
  def parse_columns! #:nodoc:
46
- self.columns = (columns || []).map do |key_value|
46
+ self.columns = (columns || []).collect do |key_value|
47
47
  name, type, *options = key_value.split(':')
48
48
  Column.new(name, type, options)
49
49
  end
@@ -14,14 +14,13 @@
14
14
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15
15
 
16
16
  require 'rails/generators/active_groonga'
17
+ require 'rails/generators/active_groonga/migration/column'
17
18
 
18
19
  module ActiveGroonga
19
20
  module Generators
20
21
  class ModelGenerator < Base
21
- argument(:attributes,
22
- :type => :array,
23
- :default => [],
24
- :banner => "field:type field:type")
22
+ argument(:columns, :type => :array, :default => [],
23
+ :banner => "name:type[:option:option] name:type[:option:option]")
25
24
 
26
25
  check_class_collision
27
26
 
@@ -31,6 +30,15 @@ module ActiveGroonga
31
30
  :type => :string,
32
31
  :desc => "The parent class for the generated model")
33
32
 
33
+ def initialize(args, *options)
34
+ super
35
+ @key = nil
36
+ @table_type = nil
37
+ @key_normalize = false
38
+ @default_tokenizer = nil
39
+ parse_columns!
40
+ end
41
+
34
42
  def create_migration_file
35
43
  return unless options[:migration] && options[:parent].nil?
36
44
  migration_template("migration.rb",
@@ -49,12 +57,56 @@ module ActiveGroonga
49
57
  end
50
58
  end
51
59
 
60
+ def create_table_code
61
+ code = "create_table(:#{table_name}"
62
+ options = []
63
+ options << ":type => :#{@table_type}" if @table_type
64
+ options << ":key_type => \"#{@key}\"" if @key
65
+ options << ":key_normalize => #{@key_normalize}" if @key_normalize
66
+ options << ":default_tokenizer => \"#{@tokenizer}\"" if @tokenizer
67
+ code << ", #{options.join(', ')}" unless options.empty?
68
+ code << ")"
69
+ code
70
+ end
71
+
72
+ def remove_table_code
73
+ "remove_table(:#{table_name})"
74
+ end
75
+
52
76
  hook_for :test_framework
53
77
 
54
78
  protected
55
79
  def parent_class_name
56
80
  options[:parent] || "ActiveGroonga::Base"
57
81
  end
82
+
83
+ private
84
+ def parse_columns! #:nodoc:
85
+ parsed_columns = []
86
+ (columns || []).each do |key_value|
87
+ name, type, *options = key_value.split(':')
88
+ case name
89
+ when "key"
90
+ @key = Groonga::Schema.normalize_type(type)
91
+ @table_type = options.find do |option|
92
+ ["hash", "patricia_trie"].include?(option)
93
+ end
94
+ key_normalize = options.include?("normalize")
95
+ @table_type ||= @key_normalize ? "patricia_trie" : "hash"
96
+ if @table_type == "patricia_trie"
97
+ @key_normalize = key_normalize
98
+ end
99
+ tokenizer_label_index = options.index("tokenizer")
100
+ if tokenizer_label_index
101
+ tokenizer = options[tokenizer_label_index + 1]
102
+ @tokenizer = Groonga::Schema.normalize_type(tokenizer)
103
+ end
104
+ else
105
+ parsed_columns << Column.new(name, type, options)
106
+ end
107
+ end
108
+ self.columns = parsed_columns
109
+ end
58
110
  end
59
111
  end
60
112
  end
@@ -1,8 +1,8 @@
1
1
  class <%= migration_class_name %> < ActiveGroonga::Migration
2
2
  def up
3
- create_table(:<%= table_name %>) do |table|
4
- <% attributes.each do |attribute| -%>
5
- table.<%= attribute.type %>(:<%= attribute.name %>)
3
+ <%= create_table_code %> do |table|
4
+ <% columns.each do |column| -%>
5
+ table.<%= column.create_code %>
6
6
  <% end -%>
7
7
  <% if options[:timestamps] -%>
8
8
  table.timestamps
@@ -11,6 +11,6 @@ class <%= migration_class_name %> < ActiveGroonga::Migration
11
11
  end
12
12
 
13
13
  def down
14
- remove_table(:<%= table_name %>)
14
+ <%= remove_table_code %>
15
15
  end
16
16
  end
data/test/test-base.rb CHANGED
@@ -209,4 +209,11 @@ class TestBase < Test::Unit::TestCase
209
209
  assert_equal([google],
210
210
  Bookmark.select {|record| record.content =~ "Google"}.to_a)
211
211
  end
212
+
213
+ def test_exists?
214
+ daijiro = @user_records[:daijiro]
215
+ assert_true(User.exists?(daijiro.record_id))
216
+ daijiro.delete
217
+ assert_false(User.exists?(daijiro.record_id))
218
+ end
212
219
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activegroonga
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 0
10
- version: 1.0.0
9
+ - 1
10
+ version: 1.0.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kouhei Sutou
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-26 00:00:00 +09:00
18
+ date: 2010-11-29 00:00:00 +09:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency