selectable_attr 0.3.11 → 0.3.12

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,4 +1,6 @@
1
1
  /*.gem
2
+ /.bundle
3
+ /Gemfile.lock
2
4
  /coverage
3
5
  /pkg
4
6
  /rdoc
data/Rakefile CHANGED
@@ -1,23 +1,35 @@
1
- require 'rubygems'
2
- gem 'rspec', '>= 1.1.4'
3
- require 'rake'
4
- require 'rake/rdoctask'
5
- require 'spec/rake/spectask'
6
- require 'spec/rake/verify_rcov'
7
-
1
+ require "bundler"
2
+ Bundler.setup
3
+ Bundler::GemHelper.install_tasks
4
+
5
+ require "rake"
6
+ require "yaml"
7
+
8
+ require "rake/rdoctask"
9
+ require "rspec/core/rake_task"
10
+ require "rspec/core/version"
11
+ # require "cucumber/rake/task"
12
+
8
13
  desc 'Default: run unit tests.'
9
14
  task :default => :spec
10
-
11
- task :pre_commit => [:spec, 'coverage:verify']
12
-
13
- desc 'Run all specs under spec/**/*_spec.rb'
14
- Spec::Rake::SpecTask.new(:spec => 'coverage:clean') do |t|
15
- t.spec_files = FileList['spec/**/*_spec.rb']
16
- t.spec_opts = ["-c", "--diff"]
17
- t.rcov = true
18
- t.rcov_opts = ["--include-file", "lib\/*\.rb", "--exclude", "spec\/"]
15
+ # task :default => [:spec, :cucumber]
16
+
17
+ desc "Run all examples"
18
+ RSpec::Core::RakeTask.new(:spec)
19
+
20
+ namespace :spec do
21
+ desc "Run all examples using rcov"
22
+ RSpec::Core::RakeTask.new(:rcov) do |t|
23
+ t.rcov = true
24
+ t.rcov_opts = %[--exclude "gems/*"]
25
+ # t.rcov_opts << %[--sort]
26
+ end
27
+ end
28
+
29
+ task :cleanup_rcov_files do
30
+ rm_rf 'coverage.data'
19
31
  end
20
-
32
+
21
33
  desc 'Generate documentation for the selectable_attr plugin.'
22
34
  Rake::RDocTask.new(:rdoc) do |rdoc|
23
35
  rdoc.rdoc_dir = 'rdoc'
@@ -26,29 +38,3 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
26
38
  rdoc.rdoc_files.include('README*')
27
39
  rdoc.rdoc_files.include('lib/**/*.rb')
28
40
  end
29
-
30
- namespace :coverage do
31
- desc "Delete aggregate coverage data."
32
- task(:clean) { rm_f "coverage" }
33
-
34
- desc "verify coverage threshold via RCov"
35
- RCov::VerifyTask.new(:verify => :spec) do |t|
36
- t.threshold = 100.0 # Make sure you have rcov 0.7 or higher!
37
- t.index_html = 'coverage/index.html'
38
- end
39
- end
40
-
41
- begin
42
- require 'jeweler'
43
- Jeweler::Tasks.new do |s|
44
- s.name = "selectable_attr"
45
- s.summary = "selectable_attr generates extra methods dynamically"
46
- s.description = "selectable_attr generates extra methods dynamically for attribute which has options"
47
- s.email = "akima@gmail.com"
48
- s.homepage = "http://github.com/akm/selectable_attr/"
49
- s.authors = ["Takeshi Akima"]
50
- end
51
- rescue LoadError
52
- puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
53
- end
54
-
@@ -4,21 +4,21 @@ module SelectableAttr
4
4
  def self.included(base)
5
5
  base.extend(ClassMethods)
6
6
  end
7
-
7
+
8
8
  ENUM_ARRAY_METHODS = {
9
- :none => {
9
+ :none => {
10
10
  :to_hash_array => Proc.new do |enum, attr_value|
11
11
  value = (attr_value || []).map(&:to_s)
12
12
  enum.to_hash_array do |hash|
13
13
  hash[:select] = value.include?(hash[:id].to_s)
14
14
  end
15
15
  end,
16
-
16
+
17
17
  :to_attr_value => Proc.new do |enum, hash_array|
18
18
  hash_array.select{|hash| hash[:select]}.map{|hash| hash[:id]}
19
19
  end
20
20
  },
21
-
21
+
22
22
  :comma_string => {
23
23
  :to_hash_array => Proc.new do |enum, attr_value|
24
24
  values = attr_value.is_a?(Array) ? attr_value.map{|v|v.to_s} :
@@ -27,13 +27,13 @@ module SelectableAttr
27
27
  hash[:select] = values.include?(hash[:id].to_s)
28
28
  end
29
29
  end,
30
-
30
+
31
31
  :to_attr_value => Proc.new do |enum, hash_array|
32
32
  hash_array.select{|hash| hash[:select]}.map{|hash| hash[:id]}.join(',')
33
33
  end
34
34
  },
35
-
36
-
35
+
36
+
37
37
  :binary_string => {
38
38
  :to_hash_array => Proc.new do |enum, attr_value|
39
39
  value = attr_value || ''
@@ -43,7 +43,7 @@ module SelectableAttr
43
43
  idx += 1
44
44
  end
45
45
  end,
46
-
46
+
47
47
  :to_attr_value => Proc.new do |enum, hash_array|
48
48
  result = ''
49
49
  hash_map = hash_array.inject({}){|dest, hash| dest[hash[:id]] = hash; dest}
@@ -55,23 +55,23 @@ module SelectableAttr
55
55
  end
56
56
  }
57
57
  }
58
-
58
+
59
59
  module ClassMethods
60
- def single_selectable_attrs
60
+ def single_selectable_attrs
61
61
  @single_selectable_attrs_hash ||= {};
62
62
  @single_selectable_attrs_hash[self] ||= []
63
63
  end
64
-
65
- def multi_selectable_attrs
64
+
65
+ def multi_selectable_attrs
66
66
  @multi_selectable_attrs_hash ||= {};
67
67
  @multi_selectable_attrs_hash[self] ||= []
68
68
  end
69
-
69
+
70
70
  def selectable_attr_type_for(attr)
71
71
  single_selectable_attrs.include?(attr.to_s) ? :single :
72
72
  multi_selectable_attrs.include?(attr.to_s) ? :multi : nil
73
73
  end
74
-
74
+
75
75
  def enum(*args, &block)
76
76
  process_definition(block, *args) do |enum, context|
77
77
  self.single_selectable_attrs << context[:attr].to_s
@@ -81,8 +81,8 @@ module SelectableAttr
81
81
  end
82
82
  alias_method :single_selectable_attr, :enum
83
83
  alias_method :selectable_attr, :enum
84
-
85
-
84
+
85
+
86
86
  def enum_array(*args, &block)
87
87
  base_options = args.last.is_a?(Hash) ? args.pop : {}
88
88
  args << base_options # .update({:attr_accessor => false})
@@ -93,7 +93,7 @@ module SelectableAttr
93
93
  end
94
94
  end
95
95
  alias_method :multi_selectable_attr, :enum_array
96
-
96
+
97
97
  def process_definition(block, *args)
98
98
  base_options = args.last.is_a?(Hash) ? args.pop : {}
99
99
  enum = base_options[:enum] || create_enum(&block)
@@ -115,7 +115,7 @@ module SelectableAttr
115
115
  end
116
116
  enum
117
117
  end
118
-
118
+
119
119
  def has_attr(attr)
120
120
  return true if self.method_defined?(attr)
121
121
  return false unless self.respond_to?(:columns)
@@ -129,11 +129,11 @@ module SelectableAttr
129
129
  (respond_to?(:table_exists?) && self.table_exists?) ?
130
130
  (self.columns || []).any?{|col|col.name.to_s == attr.to_s} : false
131
131
  end
132
-
132
+
133
133
  def attr_enumeable_base(*args, &block)
134
134
  @base_name_processor = block
135
135
  end
136
-
136
+
137
137
  def enum_base_name(attr)
138
138
  if @base_name_processor
139
139
  @base_name_processor.call(attr).to_s
@@ -141,40 +141,40 @@ module SelectableAttr
141
141
  attr.to_s.gsub(selectable_attr_name_pattern, '')
142
142
  end
143
143
  end
144
-
144
+
145
145
  DEFAULT_SELECTABLE_ATTR_NAME_PATTERN = /(_cd$|_code$|_cds$|_codes$)/
146
-
146
+
147
147
  def selectable_attr_name_pattern
148
148
  @selectable_attr_name_pattern ||= DEFAULT_SELECTABLE_ATTR_NAME_PATTERN
149
149
  end
150
150
  alias_method :enum_name_pattern, :selectable_attr_name_pattern
151
-
151
+
152
152
  def selectable_attr_name_pattern=(value)
153
153
  @selectable_attr_name_pattern = value
154
154
  end
155
155
  alias_method :enum_name_pattern=, :selectable_attr_name_pattern=
156
-
156
+
157
157
  def create_enum(&block)
158
158
  result = Enum.new
159
159
  result.instance_eval(&block)
160
160
  result
161
161
  end
162
-
162
+
163
163
  def define_enum(context)
164
164
  base_name = context[:base_name]
165
165
  const_name = "#{base_name.upcase}_ENUM"
166
166
  const_set(const_name, context[:enum]) unless const_defined?(const_name)
167
167
  end
168
-
168
+
169
169
  def enum_for(attr)
170
170
  base_name = enum_base_name(attr)
171
171
  name = "#{base_name.upcase}_ENUM"
172
172
  const_defined?(name) ? const_get(name) : nil
173
173
  end
174
-
174
+
175
175
  def define_accessor(context)
176
176
  attr = context[:attr]
177
- return unless (instance_methods & [attr, "#{attr}="]).empty?
177
+ return unless (instance_methods & [attr, "#{attr}="]).empty?
178
178
  if context[:attr_accessor]
179
179
  if context[:default]
180
180
  if respond_to?(:attr_accessor_with_default)
@@ -197,7 +197,7 @@ module SelectableAttr
197
197
  end
198
198
  end
199
199
  end
200
-
200
+
201
201
  def define_enum_class_methods(context)
202
202
  base_name = context[:base_name]
203
203
  enum = context[:enum]
@@ -225,7 +225,7 @@ module SelectableAttr
225
225
  end
226
226
  self.extend(mod)
227
227
  end
228
-
228
+
229
229
  def define_enum_instance_methods(context)
230
230
  attr = context[:attr]
231
231
  base_name = context[:base_name]
@@ -248,7 +248,7 @@ module SelectableAttr
248
248
  EOS
249
249
  self.module_eval(instance_methods)
250
250
  end
251
-
251
+
252
252
  def define_enum_array_instance_methods(context)
253
253
  attr = context[:attr]
254
254
  base_name = context[:base_name]
@@ -9,33 +9,33 @@ module SelectableAttr
9
9
  @@instances ||= []
10
10
  end
11
11
  end
12
-
12
+
13
13
  def initialize(&block)
14
14
  @entries = []
15
15
  instance_eval(&block) if block_given?
16
16
  SelectableAttr::Enum.instances << self
17
17
  end
18
-
18
+
19
19
  def entries
20
20
  @entries
21
21
  end
22
-
22
+
23
23
  def each(&block)
24
24
  entries.each(&block)
25
25
  end
26
-
26
+
27
27
  def define(id, key, name, options = nil, &block)
28
28
  entry = Entry.new(self, id, key, name, options, &block)
29
29
  entry.instance_variable_set(:@defined_in_code, true)
30
30
  @entries << entry
31
31
  end
32
32
  alias_method :entry, :define
33
-
33
+
34
34
  def i18n_scope(*path)
35
35
  @i18n_scope = path unless path.empty?
36
36
  @i18n_scope
37
37
  end
38
-
38
+
39
39
  def match_entry(entry, value, *attrs)
40
40
  attrs.any?{|attr| entry[attr].to_s == value.to_s}
41
41
  end
@@ -43,49 +43,49 @@ module SelectableAttr
43
43
  def entry_by(value, *attrs)
44
44
  entries.detect{|entry| match_entry(entry, value, *attrs)} || Entry::NULL
45
45
  end
46
-
46
+
47
47
  def entry_by_id(id)
48
48
  entry_by(id, :id)
49
49
  end
50
-
50
+
51
51
  def entry_by_key(key)
52
52
  entry_by(key, :key)
53
53
  end
54
-
54
+
55
55
  def entry_by_id_or_key(id_or_key)
56
56
  entry_by(id_or_key, :id, :key)
57
57
  end
58
-
58
+
59
59
  def entry_by_hash(attrs)
60
60
  entries.detect{|entry| attrs.all?{|(attr, value)| entry[attr].to_s == value.to_s }} || Entry::NULL
61
61
  end
62
-
62
+
63
63
  def [](arg)
64
64
  arg.is_a?(Hash) ? entry_by_hash(arg) : entry_by_id_or_key(arg)
65
65
  end
66
-
66
+
67
67
  def values(*args)
68
68
  args = args.empty? ? [:name, :id] : args
69
69
  result = entries.collect{|entry| args.collect{|arg| entry.send(arg) }}
70
70
  (args.length == 1) ? result.flatten : result
71
71
  end
72
-
72
+
73
73
  def map_attrs(attrs, *ids_or_keys)
74
74
  if attrs.is_a?(Array)
75
- ids_or_keys.empty? ?
76
- entries.map{|entry| attrs.map{|attr|entry.send(attr)}} :
75
+ ids_or_keys.empty? ?
76
+ entries.map{|entry| attrs.map{|attr|entry.send(attr)}} :
77
77
  ids_or_keys.map do |id_or_key|
78
78
  entry = entry_by_id_or_key(id_or_key)
79
79
  attrs.map{|attr|entry.send(attr)}
80
80
  end
81
81
  else
82
82
  attr = attrs
83
- ids_or_keys.empty? ?
84
- entries.map(&attr.to_sym) :
83
+ ids_or_keys.empty? ?
84
+ entries.map(&attr.to_sym) :
85
85
  ids_or_keys.map{|id_or_key|entry_by_id_or_key(id_or_key).send(attr)}
86
86
  end
87
87
  end
88
-
88
+
89
89
  def ids(*ids_or_keys); map_attrs(:id, *ids_or_keys); end
90
90
  def keys(*ids_or_keys); map_attrs(:key, *ids_or_keys); end
91
91
  def names(*ids_or_keys); map_attrs(:name, *ids_or_keys); end
@@ -95,13 +95,13 @@ module SelectableAttr
95
95
  def id_by_key(key); entry_by_key(key).id; end
96
96
  def name_by_id(id); entry_by_id(id).name; end
97
97
  def name_by_key(key); entry_by_key(key).name; end
98
-
98
+
99
99
  def find(options = nil, &block)
100
- entries.detect{|entry|
101
- block_given? ? yield(entry) : entry.match?(options)
100
+ entries.detect{|entry|
101
+ block_given? ? yield(entry) : entry.match?(options)
102
102
  } || Entry::NULL
103
103
  end
104
-
104
+
105
105
  def to_hash_array
106
106
  entries.map do |entry|
107
107
  result = entry.to_hash
@@ -109,7 +109,7 @@ module SelectableAttr
109
109
  result
110
110
  end
111
111
  end
112
-
112
+
113
113
  def length
114
114
  entries.length
115
115
  end
@@ -127,26 +127,26 @@ module SelectableAttr
127
127
  @options = options
128
128
  self.instance_eval(&block) if block
129
129
  end
130
-
130
+
131
131
  attr_reader :name
132
-
132
+
133
133
  def [](option_key)
134
134
  BASE_ATTRS.include?(option_key) ? send(option_key) :
135
135
  @options ? @options[option_key] : nil
136
136
  end
137
-
137
+
138
138
  def match?(options)
139
139
  @options === options
140
140
  end
141
-
141
+
142
142
  def null?
143
143
  false
144
144
  end
145
-
145
+
146
146
  def null_object?
147
147
  self.null?
148
148
  end
149
-
149
+
150
150
  def to_hash
151
151
  (@options || {}).merge(:id => @id, :key => @key, :name => name)
152
152
  end
@@ -162,7 +162,7 @@ module SelectableAttr
162
162
  def name; nil; end
163
163
  end
164
164
  end
165
-
165
+
166
166
  end
167
167
 
168
168
  end
@@ -12,6 +12,6 @@ module SelectableAttr
12
12
  end
13
13
  def logger=(value)
14
14
  @logger = value
15
- end
15
+ end
16
16
  end
17
17
  end
@@ -1,12 +1,15 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
1
4
  # -*- encoding: utf-8 -*-
2
5
 
3
6
  Gem::Specification.new do |s|
4
7
  s.name = %q{selectable_attr}
5
- s.version = "0.3.7"
8
+ s.version = "0.3.12"
6
9
 
7
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
11
  s.authors = ["Takeshi Akima"]
9
- s.date = %q{2009-08-17}
12
+ s.date = %q{2010-11-06}
10
13
  s.description = %q{selectable_attr generates extra methods dynamically for attribute which has options}
11
14
  s.email = %q{akima@gmail.com}
12
15
  s.extra_rdoc_files = [
@@ -34,7 +37,7 @@ Gem::Specification.new do |s|
34
37
  s.homepage = %q{http://github.com/akm/selectable_attr/}
35
38
  s.rdoc_options = ["--charset=UTF-8"]
36
39
  s.require_paths = ["lib"]
37
- s.rubygems_version = %q{1.3.4}
40
+ s.rubygems_version = %q{1.3.6}
38
41
  s.summary = %q{selectable_attr generates extra methods dynamically}
39
42
  s.test_files = [
40
43
  "spec/selectable_attr_base_alias_spec.rb",
@@ -3,7 +3,7 @@ require File.join(File.dirname(__FILE__), 'spec_helper')
3
3
  require 'stringio'
4
4
 
5
5
  describe SelectableAttr do
6
-
6
+
7
7
  def assert_enum_class_methods(klass, attr = :enum1)
8
8
  klass.send("#{attr}_enum").length.should == 3
9
9
  expected_hash_array = [
@@ -46,27 +46,27 @@ describe SelectableAttr do
46
46
  klass.send("#{attr}_name_by_id", 2).should == "エントリ2"
47
47
  klass.send("#{attr}_name_by_id", 3).should == "エントリ3"
48
48
  end
49
-
49
+
50
50
  def assert_single_enum_instance_methods(obj, attr = :enum1)
51
51
  obj.send("#{attr}=", 1)
52
52
  obj.send(attr).should == 1
53
- obj.enum1_key.should == :entry1
53
+ obj.enum1_key.should == :entry1
54
54
  obj.enum1_name.should == "エントリ1"
55
55
  obj.enum1_entry.to_hash.should == {:id => 1, :key => :entry1, :name => "エントリ1"}
56
-
56
+
57
57
  obj.enum1_key = :entry2
58
58
  obj.send(attr).should == 2
59
59
  obj.enum1_key.should == :entry2
60
60
  obj.enum1_name.should == "エントリ2"
61
61
  obj.enum1_entry.to_hash.should == {:id => 2, :key => :entry2, :name => "エントリ2"}
62
-
62
+
63
63
  obj.send("#{attr}=", 3)
64
64
  obj.send(attr).should == 3
65
65
  obj.enum1_key.should == :entry3
66
66
  obj.enum1_name.should == "エントリ3"
67
67
  obj.enum1_entry.to_hash.should == {:id => 3, :key => :entry3, :name => "エントリ3"}
68
68
  end
69
-
69
+
70
70
  class EnumBase
71
71
  include ::SelectableAttr::Base
72
72
  end
@@ -103,7 +103,7 @@ describe SelectableAttr do
103
103
  EnumMock1WithEnum.selectable_attr_type_for(:enum1).should == :single
104
104
  end
105
105
  end
106
-
106
+
107
107
 
108
108
  describe "attr_enumeable_base" do
109
109
  class EnumMock2 < EnumBase
@@ -138,7 +138,7 @@ describe SelectableAttr do
138
138
  end
139
139
  end
140
140
 
141
-
141
+
142
142
  def assert_multi_enum_instance_methods(obj, patterns)
143
143
  obj.enum_array1_hash_array.should == [
144
144
  {:id => 1, :key => :entry1, :name => "エントリ1", :select => false},
@@ -150,7 +150,7 @@ describe SelectableAttr do
150
150
  obj.enum_array1_entries.should == []
151
151
  obj.enum_array1_keys.should == []
152
152
  obj.enum_array1_names.should == []
153
-
153
+
154
154
  obj.enum_array1 = patterns[0]
155
155
  obj.enum_array1.should == patterns[0]
156
156
  obj.enum_array1_hash_array.should == [
@@ -174,7 +174,7 @@ describe SelectableAttr do
174
174
  obj.enum_array1_entries.map(&:id).should == [3]
175
175
  obj.enum_array1_keys.should == [:entry3]
176
176
  obj.enum_array1_names.should == ['エントリ3']
177
-
177
+
178
178
  obj.enum_array1 = patterns[3]
179
179
  obj.enum_array1.should == patterns[3]
180
180
  obj.enum_array1_hash_array.should == [
@@ -199,7 +199,7 @@ describe SelectableAttr do
199
199
  obj.enum_array1_entries.map(&:id).should == [1, 2, 3]
200
200
  obj.enum_array1_keys.should == [:entry1, :entry2, :entry3]
201
201
  obj.enum_array1_names.should == ['エントリ1', 'エントリ2', 'エントリ3']
202
-
202
+
203
203
  obj.enum_array1_ids = [1,3]; obj.enum_array1.should == patterns[5]
204
204
  obj.enum_array1_ids = [1,2]; obj.enum_array1.should == patterns[6]
205
205
  obj.enum_array1_ids = [2]; obj.enum_array1.should == patterns[2]
@@ -216,7 +216,7 @@ describe SelectableAttr do
216
216
  obj.enum_array1_ids = "1,2"; obj.enum_array1.should == patterns[6]
217
217
  obj.enum_array1_ids = "2"; obj.enum_array1.should == patterns[2]
218
218
  end
219
-
219
+
220
220
  describe ":convert_with => :binary_string" do
221
221
  class EnumMock3 < EnumBase
222
222
  multi_selectable_attr :enum_array1, :convert_with => :binary_string do
@@ -235,7 +235,7 @@ describe SelectableAttr do
235
235
  end
236
236
 
237
237
  it "test_multi_selectable_attr_with_binary_string" do
238
- expected = (0..7).map{|i| '%-03b' % i} # ["000", "001", "010", "011", "100", "101", "110", "111"]
238
+ expected = (0..7).map{|i| '%03b' % i} # ["000", "001", "010", "011", "100", "101", "110", "111"]
239
239
  assert_enum_class_methods(EnumMock3, :enum_array1)
240
240
  assert_multi_enum_instance_methods(EnumMock3.new, expected)
241
241
  assert_enum_class_methods(EnumMock3WithEnumArray, :enum_array1)
@@ -263,7 +263,7 @@ describe SelectableAttr do
263
263
 
264
264
  it "test_multi_selectable_attr2" do
265
265
  # [[], [3], [2], [2, 3], [1], [1, 3], [1, 2], [1, 2, 3]]
266
- expected =
266
+ expected =
267
267
  (0..7).map do |i|
268
268
  s = '%03b' % i
269
269
  a = s.split('').map{|v| v.to_i}
@@ -297,7 +297,7 @@ describe SelectableAttr do
297
297
 
298
298
  it "test_multi_selectable_attr_with_comma_string" do
299
299
  # ["", "3", "2", "2,3", "1", "1,3", "1,2", "1,2,3"]
300
- expected =
300
+ expected =
301
301
  (0..7).map do |i|
302
302
  s = '%03b' % i
303
303
  a = s.split('').map{|v| v.to_i}
@@ -311,11 +311,11 @@ describe SelectableAttr do
311
311
  assert_multi_enum_instance_methods(EnumMock5WithEnumArray.new, expected)
312
312
  end
313
313
  end
314
-
314
+
315
315
  describe "selectable_attr_name_pattern" do
316
316
  class EnumMock6 < EnumBase
317
317
  # self.selectable_attr_name_pattern = /(_cd$|_code$|_cds$|_codes$)/
318
- selectable_attr :category_id do
318
+ selectable_attr :category_id do
319
319
  entry "01", :category1, "カテゴリ1"
320
320
  entry "02", :category2, "カテゴリ2"
321
321
  end
@@ -323,7 +323,7 @@ describe SelectableAttr do
323
323
 
324
324
  class EnumMock7 < EnumBase
325
325
  self.selectable_attr_name_pattern = /(_cd$|_id$|_cds$|_ids$)/
326
- selectable_attr :category_id do
326
+ selectable_attr :category_id do
327
327
  entry "01", :category1, "カテゴリ1"
328
328
  entry "02", :category2, "カテゴリ2"
329
329
  end
@@ -353,14 +353,14 @@ describe SelectableAttr do
353
353
  def table_exists?; end
354
354
  end
355
355
  end
356
-
356
+
357
357
  it "should return false if column does exist" do
358
358
  ConnectableMock1.should_receive(:connected?).and_return(true)
359
359
  ConnectableMock1.should_receive(:table_exists?).and_return(true)
360
360
  ConnectableMock1.should_receive(:columns).and_return([mock(:column1, :name => :column1)])
361
361
  ConnectableMock1.has_attr(:column1).should == true
362
362
  end
363
-
363
+
364
364
  it "should return false if column doesn't exist" do
365
365
  ConnectableMock1.should_receive(:connected?).and_return(true)
366
366
  ConnectableMock1.should_receive(:table_exists?).and_return(true)
@@ -389,12 +389,12 @@ describe SelectableAttr do
389
389
  entry 3, :entry3, "エントリ3"
390
390
  end
391
391
  end
392
-
392
+
393
393
  it "return constant by Symbol access" do
394
394
  enum1 = EnumMock10.enum_for(:enum1)
395
395
  enum1.class.should == SelectableAttr::Enum
396
396
  end
397
-
397
+
398
398
  it "return constant by String access" do
399
399
  enum1 = EnumMock10.enum_for('enum1')
400
400
  enum1.class.should == SelectableAttr::Enum
@@ -413,7 +413,7 @@ describe SelectableAttr do
413
413
  def attr_accessor_with_default(*args); end
414
414
  end
415
415
  end
416
-
416
+
417
417
  it "should call attr_accessor_with_default when both of attr_accessor and default are given" do
418
418
  DefiningMock1.should_receive(:attr_accessor_with_default).with(:enum1, 1)
419
419
  DefiningMock1.define_accessor(:attr => :enum1, :attr_accessor => true, :default => 1)
@@ -23,7 +23,7 @@ describe SelectableAttr::Enum do
23
23
  Enum1[2].name.should == 'DVD'
24
24
  Enum1[3].name.should == 'CD'
25
25
  Enum1[4].name.should == 'VHS'
26
-
26
+
27
27
  Enum1[:book].id.should == 1
28
28
  Enum1[:dvd ].id.should == 2
29
29
  Enum1[:cd ].id.should == 3
@@ -36,7 +36,7 @@ describe SelectableAttr::Enum do
36
36
  Enum1[:dvd].name.should == 'DVD'
37
37
  Enum1[:cd].name.should == 'CD'
38
38
  Enum1[:vhs].name.should == 'VHS'
39
-
39
+
40
40
  Enum1.values.should == [['書籍', 1], ['DVD', 2], ['CD', 3], ['VHS', 4]]
41
41
  Enum1.values(:name, :id).should == [['書籍', 1], ['DVD', 2], ['CD', 3], ['VHS', 4]]
42
42
  Enum1.values(:name, :key).should == [['書籍', :book], ['DVD', :dvd], ['CD', :cd], ['VHS', :vhs]]
@@ -55,8 +55,8 @@ describe SelectableAttr::Enum do
55
55
  InetAccess[1].key.should == :email
56
56
  InetAccess[2].key.should == :website
57
57
  InetAccess[3].key.should == :ftp
58
-
59
-
58
+
59
+
60
60
  InetAccess[1].name.should == 'Eメール'
61
61
  InetAccess[2].name.should == 'ウェブサイト'
62
62
  InetAccess[3].name.should == 'FTP'
@@ -76,7 +76,7 @@ describe SelectableAttr::Enum do
76
76
  InetAccess[:protocol => 'http://'].should == InetAccess[2]
77
77
  InetAccess[:protocol => 'ftp://'].should == InetAccess[3]
78
78
  end
79
-
79
+
80
80
  it "test_null?" do
81
81
  InetAccess[1].null?.should == false
82
82
  InetAccess[2].null?.should == false
@@ -87,7 +87,7 @@ describe SelectableAttr::Enum do
87
87
  InetAccess[:protocol => 'ftp://'].null?.should == false
88
88
  InetAccess[:protocol => 'svn://'].null?.should == true
89
89
  end
90
-
90
+
91
91
  it "test_null_object?" do
92
92
  InetAccess[1].null_object?.should == false
93
93
  InetAccess[2].null_object?.should == false
@@ -98,7 +98,7 @@ describe SelectableAttr::Enum do
98
98
  InetAccess[:protocol => 'ftp://'].null_object?.should == false
99
99
  InetAccess[:protocol => 'svn://'].null_object?.should == true
100
100
  end
101
-
101
+
102
102
  it "test_to_hash_array" do
103
103
  Enum1.to_hash_array.should == [
104
104
  {:id => 1, :key => :book, :name => '書籍'},
@@ -106,7 +106,7 @@ describe SelectableAttr::Enum do
106
106
  {:id => 3, :key => :cd, :name => 'CD'},
107
107
  {:id => 4, :key => :vhs, :name => 'VHS'}
108
108
  ]
109
-
109
+
110
110
  InetAccess.to_hash_array.should == [
111
111
  {:id => 1, :key => :email, :name => 'Eメール', :protocol => 'mailto:'},
112
112
  {:id => 2, :key => :website, :name => 'ウェブサイト', :protocol => 'http://'},
data/spec/spec_helper.rb CHANGED
@@ -1,11 +1,28 @@
1
- $KCODE='u'
1
+ $KCODE='u' if RUBY_VERSION =~ /^1\.8/
2
+
3
+ require 'rspec/core'
4
+ require 'autotest/rspec2'
5
+
6
+ Dir['./spec/support/**/*.rb'].map {|f| require f}
2
7
 
3
8
  $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
4
9
  require File.join(File.dirname(__FILE__), '..', 'init')
5
10
 
6
- def assert_hash(expected, actual)
7
- keys = (expected.keys + actual.keys).uniq
8
- keys.each do |key|
9
- assert_equal expected[key], actual[key], "unmatch value for #{key.inspect}"
11
+ # see http://d.hatena.ne.jp/nedate/20101004/1286183882
12
+ #
13
+ # quick monkey patch for rcov
14
+ #
15
+ # http://codefluency.com/post/1023734493/a-bandaid-for-rcov-on-ruby-1-9
16
+ #
17
+ if defined?(Rcov)
18
+ class Rcov::CodeCoverageAnalyzer
19
+ def update_script_lines__
20
+ if '1.9'.respond_to?(:force_encoding)
21
+ SCRIPT_LINES__.each do |k,v|
22
+ v.each { |src| src.force_encoding('utf-8') }
23
+ end
24
+ end
25
+ @script_lines__ = @script_lines__.merge(SCRIPT_LINES__)
26
+ end
10
27
  end
11
28
  end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: selectable_attr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.11
4
+ hash: 11
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 3
9
+ - 12
10
+ version: 0.3.12
5
11
  platform: ruby
6
12
  authors:
7
13
  - Takeshi Akima
@@ -9,7 +15,7 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2010-01-14 00:00:00 +09:00
18
+ date: 2010-11-06 00:00:00 +09:00
13
19
  default_executable:
14
20
  dependencies: []
15
21
 
@@ -49,21 +55,27 @@ rdoc_options:
49
55
  require_paths:
50
56
  - lib
51
57
  required_ruby_version: !ruby/object:Gem::Requirement
58
+ none: false
52
59
  requirements:
53
60
  - - ">="
54
61
  - !ruby/object:Gem::Version
62
+ hash: 3
63
+ segments:
64
+ - 0
55
65
  version: "0"
56
- version:
57
66
  required_rubygems_version: !ruby/object:Gem::Requirement
67
+ none: false
58
68
  requirements:
59
69
  - - ">="
60
70
  - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
61
74
  version: "0"
62
- version:
63
75
  requirements: []
64
76
 
65
77
  rubyforge_project:
66
- rubygems_version: 1.3.5
78
+ rubygems_version: 1.3.7
67
79
  signing_key:
68
80
  specification_version: 3
69
81
  summary: selectable_attr generates extra methods dynamically