ar_serialized_array 0.2.4 → 0.3.0

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.
Files changed (175) hide show
  1. data/Rakefile +5 -68
  2. data/Readme.md +50 -0
  3. data/VERSION +1 -1
  4. data/ar_serialized_array.gemspec +47 -0
  5. data/init.rb +1 -0
  6. data/lib/ar_serialized_array.rb +37 -0
  7. data/spec/ar_serialized_array_spec.rb +84 -0
  8. data/spec/setup_test_model.rb +28 -0
  9. data/spec/spec_helper.rb +4 -2
  10. metadata +39 -183
  11. data/.gitignore +0 -3
  12. data/CHANGELOG +0 -2
  13. data/README.markdown +0 -57
  14. data/cache/file_data_provider/countries-AF.txt +0 -246
  15. data/cache/file_data_provider/countries-AM.txt +0 -246
  16. data/cache/file_data_provider/countries-AR.txt +0 -246
  17. data/cache/file_data_provider/countries-AZ.txt +0 -246
  18. data/cache/file_data_provider/countries-BE.txt +0 -246
  19. data/cache/file_data_provider/countries-BG.txt +0 -246
  20. data/cache/file_data_provider/countries-BN.txt +0 -246
  21. data/cache/file_data_provider/countries-BR.txt +0 -246
  22. data/cache/file_data_provider/countries-BS.txt +0 -246
  23. data/cache/file_data_provider/countries-CA.txt +0 -246
  24. data/cache/file_data_provider/countries-CS.txt +0 -246
  25. data/cache/file_data_provider/countries-CY.txt +0 -246
  26. data/cache/file_data_provider/countries-DA.txt +0 -246
  27. data/cache/file_data_provider/countries-DE.txt +0 -246
  28. data/cache/file_data_provider/countries-DZ.txt +0 -246
  29. data/cache/file_data_provider/countries-EL.txt +0 -246
  30. data/cache/file_data_provider/countries-EN.txt +0 -246
  31. data/cache/file_data_provider/countries-EO.txt +0 -246
  32. data/cache/file_data_provider/countries-ES.txt +0 -246
  33. data/cache/file_data_provider/countries-ET.txt +0 -246
  34. data/cache/file_data_provider/countries-EU.txt +0 -246
  35. data/cache/file_data_provider/countries-FA.txt +0 -246
  36. data/cache/file_data_provider/countries-FI.txt +0 -246
  37. data/cache/file_data_provider/countries-FO.txt +0 -246
  38. data/cache/file_data_provider/countries-FR.txt +0 -246
  39. data/cache/file_data_provider/countries-GA.txt +0 -246
  40. data/cache/file_data_provider/countries-GL.txt +0 -246
  41. data/cache/file_data_provider/countries-GU.txt +0 -246
  42. data/cache/file_data_provider/countries-HE.txt +0 -246
  43. data/cache/file_data_provider/countries-HI.txt +0 -246
  44. data/cache/file_data_provider/countries-HR.txt +0 -246
  45. data/cache/file_data_provider/countries-HU.txt +0 -246
  46. data/cache/file_data_provider/countries-HY.txt +0 -246
  47. data/cache/file_data_provider/countries-ID.txt +0 -246
  48. data/cache/file_data_provider/countries-IS.txt +0 -246
  49. data/cache/file_data_provider/countries-IT.txt +0 -246
  50. data/cache/file_data_provider/countries-JA.txt +0 -246
  51. data/cache/file_data_provider/countries-KA.txt +0 -246
  52. data/cache/file_data_provider/countries-KK.txt +0 -246
  53. data/cache/file_data_provider/countries-KM.txt +0 -246
  54. data/cache/file_data_provider/countries-KN.txt +0 -246
  55. data/cache/file_data_provider/countries-KO.txt +0 -246
  56. data/cache/file_data_provider/countries-KU.txt +0 -246
  57. data/cache/file_data_provider/countries-LT.txt +0 -246
  58. data/cache/file_data_provider/countries-LV.txt +0 -246
  59. data/cache/file_data_provider/countries-MI.txt +0 -246
  60. data/cache/file_data_provider/countries-MK.txt +0 -246
  61. data/cache/file_data_provider/countries-ML.txt +0 -246
  62. data/cache/file_data_provider/countries-MN.txt +0 -246
  63. data/cache/file_data_provider/countries-MR.txt +0 -246
  64. data/cache/file_data_provider/countries-MS.txt +0 -246
  65. data/cache/file_data_provider/countries-MT.txt +0 -246
  66. data/cache/file_data_provider/countries-NB.txt +0 -246
  67. data/cache/file_data_provider/countries-NE.txt +0 -246
  68. data/cache/file_data_provider/countries-NL.txt +0 -246
  69. data/cache/file_data_provider/countries-NN.txt +0 -246
  70. data/cache/file_data_provider/countries-OC.txt +0 -246
  71. data/cache/file_data_provider/countries-PA.txt +0 -246
  72. data/cache/file_data_provider/countries-PL.txt +0 -246
  73. data/cache/file_data_provider/countries-PS.txt +0 -246
  74. data/cache/file_data_provider/countries-PT.txt +0 -246
  75. data/cache/file_data_provider/countries-RO.txt +0 -246
  76. data/cache/file_data_provider/countries-RU.txt +0 -246
  77. data/cache/file_data_provider/countries-RW.txt +0 -246
  78. data/cache/file_data_provider/countries-SK.txt +0 -246
  79. data/cache/file_data_provider/countries-SL.txt +0 -246
  80. data/cache/file_data_provider/countries-SO.txt +0 -246
  81. data/cache/file_data_provider/countries-SQ.txt +0 -246
  82. data/cache/file_data_provider/countries-SR.txt +0 -246
  83. data/cache/file_data_provider/countries-SV.txt +0 -246
  84. data/cache/file_data_provider/countries-SW.txt +0 -246
  85. data/cache/file_data_provider/countries-TA.txt +0 -246
  86. data/cache/file_data_provider/countries-TH.txt +0 -246
  87. data/cache/file_data_provider/countries-TI.txt +0 -246
  88. data/cache/file_data_provider/countries-TK.txt +0 -246
  89. data/cache/file_data_provider/countries-TL.txt +0 -246
  90. data/cache/file_data_provider/countries-TR.txt +0 -246
  91. data/cache/file_data_provider/countries-TT.txt +0 -246
  92. data/cache/file_data_provider/countries-UK.txt +0 -246
  93. data/cache/file_data_provider/countries-VE.txt +0 -246
  94. data/cache/file_data_provider/countries-VI.txt +0 -246
  95. data/cache/file_data_provider/countries-WA.txt +0 -246
  96. data/cache/file_data_provider/countries-WO.txt +0 -246
  97. data/cache/file_data_provider/countries-XH.txt +0 -246
  98. data/cache/file_data_provider/countries-ZU.txt +0 -246
  99. data/cache/file_data_provider/languages-AF.txt +0 -185
  100. data/cache/file_data_provider/languages-AM.txt +0 -185
  101. data/cache/file_data_provider/languages-AR.txt +0 -185
  102. data/cache/file_data_provider/languages-AZ.txt +0 -185
  103. data/cache/file_data_provider/languages-BE.txt +0 -185
  104. data/cache/file_data_provider/languages-BG.txt +0 -185
  105. data/cache/file_data_provider/languages-BR.txt +0 -185
  106. data/cache/file_data_provider/languages-BS.txt +0 -185
  107. data/cache/file_data_provider/languages-CA.txt +0 -185
  108. data/cache/file_data_provider/languages-CS.txt +0 -185
  109. data/cache/file_data_provider/languages-CY.txt +0 -185
  110. data/cache/file_data_provider/languages-DA.txt +0 -185
  111. data/cache/file_data_provider/languages-DE.txt +0 -185
  112. data/cache/file_data_provider/languages-EL.txt +0 -185
  113. data/cache/file_data_provider/languages-EN.txt +0 -185
  114. data/cache/file_data_provider/languages-EO.txt +0 -185
  115. data/cache/file_data_provider/languages-ES.txt +0 -185
  116. data/cache/file_data_provider/languages-ET.txt +0 -185
  117. data/cache/file_data_provider/languages-EU.txt +0 -185
  118. data/cache/file_data_provider/languages-FA.txt +0 -185
  119. data/cache/file_data_provider/languages-FI.txt +0 -185
  120. data/cache/file_data_provider/languages-FR.txt +0 -185
  121. data/cache/file_data_provider/languages-GA.txt +0 -185
  122. data/cache/file_data_provider/languages-GL.txt +0 -185
  123. data/cache/file_data_provider/languages-HE.txt +0 -185
  124. data/cache/file_data_provider/languages-HI.txt +0 -185
  125. data/cache/file_data_provider/languages-HR.txt +0 -185
  126. data/cache/file_data_provider/languages-HU.txt +0 -185
  127. data/cache/file_data_provider/languages-ID.txt +0 -185
  128. data/cache/file_data_provider/languages-IS.txt +0 -185
  129. data/cache/file_data_provider/languages-IT.txt +0 -185
  130. data/cache/file_data_provider/languages-JA.txt +0 -185
  131. data/cache/file_data_provider/languages-KO.txt +0 -185
  132. data/cache/file_data_provider/languages-LT.txt +0 -185
  133. data/cache/file_data_provider/languages-LV.txt +0 -185
  134. data/cache/file_data_provider/languages-MI.txt +0 -185
  135. data/cache/file_data_provider/languages-MK.txt +0 -185
  136. data/cache/file_data_provider/languages-MN.txt +0 -185
  137. data/cache/file_data_provider/languages-MR.txt +0 -185
  138. data/cache/file_data_provider/languages-MS.txt +0 -185
  139. data/cache/file_data_provider/languages-MT.txt +0 -185
  140. data/cache/file_data_provider/languages-NB.txt +0 -185
  141. data/cache/file_data_provider/languages-NL.txt +0 -185
  142. data/cache/file_data_provider/languages-NN.txt +0 -185
  143. data/cache/file_data_provider/languages-OC.txt +0 -185
  144. data/cache/file_data_provider/languages-PL.txt +0 -185
  145. data/cache/file_data_provider/languages-PS.txt +0 -185
  146. data/cache/file_data_provider/languages-PT.txt +0 -185
  147. data/cache/file_data_provider/languages-RO.txt +0 -185
  148. data/cache/file_data_provider/languages-RU.txt +0 -185
  149. data/cache/file_data_provider/languages-RW.txt +0 -185
  150. data/cache/file_data_provider/languages-SK.txt +0 -185
  151. data/cache/file_data_provider/languages-SL.txt +0 -185
  152. data/cache/file_data_provider/languages-SR.txt +0 -185
  153. data/cache/file_data_provider/languages-SV.txt +0 -185
  154. data/cache/file_data_provider/languages-TA.txt +0 -185
  155. data/cache/file_data_provider/languages-TH.txt +0 -185
  156. data/cache/file_data_provider/languages-TI.txt +0 -185
  157. data/cache/file_data_provider/languages-TR.txt +0 -185
  158. data/cache/file_data_provider/languages-TT.txt +0 -185
  159. data/cache/file_data_provider/languages-UK.txt +0 -185
  160. data/cache/file_data_provider/languages-VE.txt +0 -185
  161. data/cache/file_data_provider/languages-VI.txt +0 -185
  162. data/cache/file_data_provider/languages-WA.txt +0 -185
  163. data/cache/file_data_provider/languages-XH.txt +0 -185
  164. data/cache/file_data_provider/languages-ZU.txt +0 -185
  165. data/example_output/all_names_for_DE.txt +0 -85
  166. data/example_output/all_names_for_FR.txt +0 -85
  167. data/example_output/all_names_for_GB.txt +0 -85
  168. data/example_output/all_names_for_US.txt +0 -85
  169. data/i18n_data.gemspec +0 -31
  170. data/lib/i18n_data.rb +0 -34
  171. data/lib/i18n_data/file_data_provider.rb +0 -56
  172. data/lib/i18n_data/live_data_provider.rb +0 -97
  173. data/spec/i18n_data/file_data_provider_spec.rb +0 -23
  174. data/spec/i18n_data/live_data_provider_spec.rb +0 -44
  175. data/spec/i18n_data_spec.rb +0 -101
data/Rakefile CHANGED
@@ -1,80 +1,17 @@
1
- $LOAD_PATH << File.join(File.dirname(__FILE__),"..","lib")
2
- require 'lib/i18n_data'#TODO should not be necessary but is :/
3
- require 'yaml'
4
-
5
- desc "Run all specs in spec directory"
6
- task :default do |t|
7
- options = "--colour --format progress --loadby --reverse"
8
- files = FileList['spec/**/*_spec.rb']
9
- system("spec #{options} #{files}")
10
- end
11
-
12
- desc "write all languages to output"
13
- task :all_languages do
14
- I18nData.languages.keys.each do |lc|
15
- `rake languages LANGUAGE=#{lc}`
16
- end
17
- end
18
-
19
- desc "write languages to output/languages_{language}"
20
- task :languages do
21
- raise unless language = ENV['LANGUAGE']
22
- `mkdir output -p`
23
- data = I18nData.languages(language.upcase)
24
- File.open("output/languages_#{language.downcase}.yml",'w') {|f|f.puts data.to_yaml}
25
- end
26
-
27
- desc "write all countries to output"
28
- task :all_countries do
29
- I18nData.languages.keys.each do |lc|
30
- `rake countries LANGUAGE=#{lc}`
31
- end
32
- end
33
-
34
- desc "write countries to output/countries_{language}"
35
- task :countries do
36
- raise unless language = ENV['LANGUAGE']
37
- `mkdir output -p`
38
- data = I18nData.countries(language.upcase)
39
- File.open("output/countries_#{language.downcase}.yml",'w') {|f|f.puts data.to_yaml}
40
- end
41
-
42
- desc "write example output, just to show off :D"
43
- task :example_output do
44
- `mkdir example_output -p`
45
-
46
- #all names for germany, france, united kingdom and unites states
47
- ['DE','FR','GB','US'].each do |cc|
48
- names = I18nData.languages.keys.map do |lc|
49
- begin
50
- [I18nData.countries(lc)[cc], I18nData.languages[lc]]
51
- rescue I18nData::NoOnlineTranslationAvaiable
52
- nil
53
- end
54
- end
55
- File.open("example_output/all_names_for_#{cc}.txt",'w') {|f|
56
- f.puts names.reject(&:nil?).map{|x|x*" ---- "} * "\n"
57
- }
58
- end
59
- end
60
-
61
- desc "write cache for I18nData::FileDataProvider"
62
- task :write_cache_for_file_data_provider do
63
- require 'i18n_data/file_data_provider'
64
- require 'i18n_data/live_data_provider'
65
- I18nData::FileDataProvider.write_cache(I18nData::LiveDataProvider)
66
- end
1
+ task :default => :spec
2
+ require 'spec/rake/spectask'
3
+ Spec::Rake::SpecTask.new {|t| t.spec_opts = ['--color']}
67
4
 
68
5
  begin
69
6
  require 'jeweler'
70
7
  project_name = 'ar_serialized_array'
71
8
  Jeweler::Tasks.new do |gem|
72
9
  gem.name = project_name
73
- gem.summary = "country/language names and 2-letter-code pairs, in 85 languages"
10
+ gem.summary = "Serialize an array in a column, [] when no set, xx_as_text accessors and more."
74
11
  gem.email = "grosser.michael@gmail.com"
75
12
  gem.homepage = "http://github.com/grosser/#{project_name}"
76
13
  gem.authors = ["Michael Grosser"]
77
- gem.add_dependency ['activesupport']
14
+ gem.add_dependency ['activerecord']
78
15
  end
79
16
 
80
17
  Jeweler::GemcutterTasks.new
@@ -0,0 +1,50 @@
1
+ Serialize an array in one column.
2
+
3
+ - [] when not set
4
+ - `xxx_as_text` / `xxx_as_text=` accessors to edit in forms
5
+ - `:on_set` callback for cleanup
6
+ - stores NULL when given array was empty (all empty -> `IS NULL`)
7
+
8
+ Install
9
+ =======
10
+ - As Rails plugin: `rails plugin install git://github.com/grosser/ar_serialized_array.git `
11
+ - As gem: ` sudo gem install ar_serialized_array `
12
+
13
+
14
+ Usage
15
+ =====
16
+
17
+ # basic / forms
18
+ class User < ActiveRecord::Base
19
+ serialized_array :product_ids, :accessor => :product_ids_as_text
20
+ end
21
+
22
+ <%= form_for @user do |f| %>
23
+ <%= f.text_field :product_ids_as_text %>
24
+ <% end %>
25
+
26
+ # set / get
27
+ User.new.product_ids # []
28
+
29
+ user.product_ids_as_text = "1, , 12323 , 23, 1"
30
+ user.product_ids # [1, 12323, 23]
31
+ user.product_ids_as_text # "1, 12323, 23"
32
+
33
+ # find ...
34
+ filled = User.all(:conditions => {:product_ids=>[1,3].to_yaml})
35
+ empty = User.all(:conditions => {:product_ids=>nil})
36
+
37
+ # with cleanup (unique integers)
38
+ class User < ActiveRecord::Base
39
+ serialized_array :product_ids, :on_set=>lambda{|x| x.map(&:to_i).uniq }
40
+ end
41
+
42
+ TODO
43
+ ====
44
+ - add support for `user.product_ids << 1`
45
+
46
+ Author
47
+ ======
48
+ [Michael Grosser](http://grosser.it)
49
+ michael@grosser.it
50
+ Hereby placed under public domain, do what you want, just do not hold me accountable...
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.4
1
+ 0.3.0
@@ -0,0 +1,47 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{ar_serialized_array}
8
+ s.version = "0.3.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Michael Grosser"]
12
+ s.date = %q{2011-01-17}
13
+ s.email = %q{grosser.michael@gmail.com}
14
+ s.files = [
15
+ "Rakefile",
16
+ "Readme.md",
17
+ "VERSION",
18
+ "ar_serialized_array.gemspec",
19
+ "init.rb",
20
+ "lib/ar_serialized_array.rb",
21
+ "spec/ar_serialized_array_spec.rb",
22
+ "spec/setup_test_model.rb",
23
+ "spec/spec_helper.rb"
24
+ ]
25
+ s.homepage = %q{http://github.com/grosser/ar_serialized_array}
26
+ s.require_paths = ["lib"]
27
+ s.rubygems_version = %q{1.4.2}
28
+ s.summary = %q{Serialize an array in a column, [] when no set, xx_as_text accessors and more.}
29
+ s.test_files = [
30
+ "spec/ar_serialized_array_spec.rb",
31
+ "spec/setup_test_model.rb",
32
+ "spec/spec_helper.rb"
33
+ ]
34
+
35
+ if s.respond_to? :specification_version then
36
+ s.specification_version = 3
37
+
38
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
39
+ s.add_runtime_dependency(%q<activerecord>, [">= 0"])
40
+ else
41
+ s.add_dependency(%q<activerecord>, [">= 0"])
42
+ end
43
+ else
44
+ s.add_dependency(%q<activerecord>, [">= 0"])
45
+ end
46
+ end
47
+
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'ar_serialized_array'
@@ -0,0 +1,37 @@
1
+ require 'active_record'
2
+
3
+ module ARSerializedArray
4
+ VERSION = File.read( File.join(File.dirname(__FILE__),'..','VERSION') ).strip
5
+
6
+ def serialized_array(attr_name, options={})
7
+ options[:on_set] ||= lambda{|x|x}
8
+
9
+ # getter
10
+ define_method attr_name do
11
+ YAML.load(read_attribute(attr_name).to_s) || []
12
+ end
13
+
14
+ # setter
15
+ define_method "#{attr_name}=" do |value|
16
+ value = options[:on_set].call(value) || []
17
+ raise "Expected an Array, got: #{value.inspect}" unless value.is_a? Array
18
+ value = (value.empty? ? nil : value.to_yaml)
19
+ write_attribute attr_name, value
20
+ end
21
+
22
+ # accessors e.g. xxx_as_text
23
+ if options[:accessor]
24
+ #getter
25
+ define_method options[:accessor] do
26
+ send(attr_name) * ", "
27
+ end
28
+
29
+ #setter
30
+ define_method "#{options[:accessor]}=" do |value|
31
+ send "#{attr_name}=", value.to_s.split(',').reject(&:blank?).map(&:strip)
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ ActiveRecord::Base.send(:extend, ARSerializedArray)
@@ -0,0 +1,84 @@
1
+ require "spec/spec_helper"
2
+
3
+ describe 'ar_serialized_array' do
4
+ describe 'basics' do
5
+ it "is an empty array by default" do
6
+ UserPlain.new.product_ids.should == []
7
+ end
8
+
9
+ it "serializes on set" do
10
+ user = UserPlain.create!(:product_ids => [1, 2])
11
+ UserPlain.find(user.id).product_ids.should == [1, 2]
12
+ end
13
+
14
+ it "can save an empty array" do
15
+ user = UserPlain.create!(:product_ids => [])
16
+ UserPlain.find(user.id).product_ids.should == []
17
+ end
18
+
19
+ it "can save nil" do
20
+ user = UserPlain.create!(:product_ids => nil)
21
+ UserPlain.find(user.id).product_ids.should == []
22
+ end
23
+
24
+ it "stores nil when nil is saved" do
25
+ user = UserPlain.create!(:product_ids => nil)
26
+ UserPlain.first(:conditions => {:id => user.id, :product_ids => nil}).should == user
27
+ end
28
+
29
+ it "stores empty arrays as NULL" do
30
+ user = UserPlain.create!(:product_ids => [])
31
+ UserPlain.first(:conditions => {:id => user.id, :product_ids => nil}).should == user
32
+ end
33
+
34
+ it "can search by array" do
35
+ user = UserPlain.create!(:product_ids => [1])
36
+ UserPlain.first(:conditions => {:id => user.id, :product_ids => [1].to_yaml}).should == user
37
+ end
38
+
39
+ it "raises when non-array is given" do
40
+ lambda{ UserPlain.create!(:product_ids => '') }.should raise_error
41
+ end
42
+ end
43
+
44
+ describe 'with accessor' do
45
+ it "can access the array as text" do
46
+ UserWithAccessor.new(:product_ids => [1,2,3]).product_ids_as_text.should == '1, 2, 3'
47
+ end
48
+
49
+ it "can set arrays via text" do
50
+ UserWithAccessor.new(:product_ids_as_text => '1, 2, 3').product_ids.should == ['1','2','3']
51
+ end
52
+
53
+ it "is symetric" do
54
+ text = '1, 2, 3'
55
+ UserWithAccessor.new(:product_ids_as_text => text).product_ids_as_text.should == text
56
+ end
57
+
58
+ it "accepts nil as empty" do
59
+ UserWithAccessor.new(:product_ids_as_text => nil).product_ids.should == []
60
+ end
61
+
62
+ it "is blank when unset" do
63
+ UserWithAccessor.new.product_ids_as_text.should == ''
64
+ end
65
+
66
+ it "is blank when empty" do
67
+ UserWithAccessor.new(:product_ids => []).product_ids_as_text.should == ''
68
+ end
69
+ end
70
+
71
+ describe 'with on_set' do
72
+ it "is used when storing normally" do
73
+ User.new(:product_ids => ['1','2','2']).product_ids.should == [1,2]
74
+ end
75
+
76
+ it "is used when storing through accessor" do
77
+ User.new(:product_ids_as_text => '1,2,2').product_ids.should == [1,2]
78
+ end
79
+ end
80
+
81
+ it "has a VERSION" do
82
+ ARSerializedArray::VERSION.should =~ /^\d+\.\d+\.\d+$/
83
+ end
84
+ end
@@ -0,0 +1,28 @@
1
+ # connect
2
+ ActiveRecord::Base.establish_connection(
3
+ :adapter => "sqlite3",
4
+ :database => ":memory:"
5
+ )
6
+
7
+ # create tables
8
+ ActiveRecord::Schema.define(:version => 1) do
9
+ create_table :users do |t|
10
+ t.string :product_ids
11
+ end
12
+ end
13
+
14
+ # create models
15
+ class User < ActiveRecord::Base
16
+ serialized_array :product_ids, :accessor => :product_ids_as_text, :on_set=>lambda{|x| x.map(&:to_i).uniq}
17
+ end
18
+
19
+ class UserWithAccessor < ActiveRecord::Base
20
+ self.table_name = 'users'
21
+ serialized_array :product_ids, :accessor => :product_ids_as_text
22
+ end
23
+
24
+
25
+ class UserPlain < ActiveRecord::Base
26
+ self.table_name = 'users'
27
+ serialized_array :product_ids
28
+ end
@@ -1,2 +1,4 @@
1
- $LOAD_PATH << 'lib'
2
- require 'i18n_data'
1
+ require 'rubygems'
2
+ $LOAD_PATH << "lib"
3
+ require "init"
4
+ require "spec/setup_test_model"
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ar_serialized_array
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ hash: 19
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
5
11
  platform: ruby
6
12
  authors:
7
13
  - Michael Grosser
@@ -9,226 +15,76 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2009-11-16 00:00:00 +01:00
18
+ date: 2011-01-17 00:00:00 +01:00
13
19
  default_executable:
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
- name: activesupport
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ name: activerecord
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
20
26
  requirements:
21
27
  - - ">="
22
28
  - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
23
32
  version: "0"
24
- version:
33
+ type: :runtime
34
+ version_requirements: *id001
25
35
  description:
26
36
  email: grosser.michael@gmail.com
27
37
  executables: []
28
38
 
29
39
  extensions: []
30
40
 
31
- extra_rdoc_files:
32
- - README.markdown
41
+ extra_rdoc_files: []
42
+
33
43
  files:
34
- - .gitignore
35
- - CHANGELOG
36
- - README.markdown
37
44
  - Rakefile
45
+ - Readme.md
38
46
  - VERSION
39
- - cache/file_data_provider/countries-AF.txt
40
- - cache/file_data_provider/countries-AM.txt
41
- - cache/file_data_provider/countries-AR.txt
42
- - cache/file_data_provider/countries-AZ.txt
43
- - cache/file_data_provider/countries-BE.txt
44
- - cache/file_data_provider/countries-BG.txt
45
- - cache/file_data_provider/countries-BN.txt
46
- - cache/file_data_provider/countries-BR.txt
47
- - cache/file_data_provider/countries-BS.txt
48
- - cache/file_data_provider/countries-CA.txt
49
- - cache/file_data_provider/countries-CS.txt
50
- - cache/file_data_provider/countries-CY.txt
51
- - cache/file_data_provider/countries-DA.txt
52
- - cache/file_data_provider/countries-DE.txt
53
- - cache/file_data_provider/countries-DZ.txt
54
- - cache/file_data_provider/countries-EL.txt
55
- - cache/file_data_provider/countries-EN.txt
56
- - cache/file_data_provider/countries-EO.txt
57
- - cache/file_data_provider/countries-ES.txt
58
- - cache/file_data_provider/countries-ET.txt
59
- - cache/file_data_provider/countries-EU.txt
60
- - cache/file_data_provider/countries-FA.txt
61
- - cache/file_data_provider/countries-FI.txt
62
- - cache/file_data_provider/countries-FO.txt
63
- - cache/file_data_provider/countries-FR.txt
64
- - cache/file_data_provider/countries-GA.txt
65
- - cache/file_data_provider/countries-GL.txt
66
- - cache/file_data_provider/countries-GU.txt
67
- - cache/file_data_provider/countries-HE.txt
68
- - cache/file_data_provider/countries-HI.txt
69
- - cache/file_data_provider/countries-HR.txt
70
- - cache/file_data_provider/countries-HU.txt
71
- - cache/file_data_provider/countries-HY.txt
72
- - cache/file_data_provider/countries-ID.txt
73
- - cache/file_data_provider/countries-IS.txt
74
- - cache/file_data_provider/countries-IT.txt
75
- - cache/file_data_provider/countries-JA.txt
76
- - cache/file_data_provider/countries-KA.txt
77
- - cache/file_data_provider/countries-KK.txt
78
- - cache/file_data_provider/countries-KM.txt
79
- - cache/file_data_provider/countries-KN.txt
80
- - cache/file_data_provider/countries-KO.txt
81
- - cache/file_data_provider/countries-KU.txt
82
- - cache/file_data_provider/countries-LT.txt
83
- - cache/file_data_provider/countries-LV.txt
84
- - cache/file_data_provider/countries-MI.txt
85
- - cache/file_data_provider/countries-MK.txt
86
- - cache/file_data_provider/countries-ML.txt
87
- - cache/file_data_provider/countries-MN.txt
88
- - cache/file_data_provider/countries-MR.txt
89
- - cache/file_data_provider/countries-MS.txt
90
- - cache/file_data_provider/countries-MT.txt
91
- - cache/file_data_provider/countries-NB.txt
92
- - cache/file_data_provider/countries-NE.txt
93
- - cache/file_data_provider/countries-NL.txt
94
- - cache/file_data_provider/countries-NN.txt
95
- - cache/file_data_provider/countries-OC.txt
96
- - cache/file_data_provider/countries-PA.txt
97
- - cache/file_data_provider/countries-PL.txt
98
- - cache/file_data_provider/countries-PS.txt
99
- - cache/file_data_provider/countries-PT.txt
100
- - cache/file_data_provider/countries-RO.txt
101
- - cache/file_data_provider/countries-RU.txt
102
- - cache/file_data_provider/countries-RW.txt
103
- - cache/file_data_provider/countries-SK.txt
104
- - cache/file_data_provider/countries-SL.txt
105
- - cache/file_data_provider/countries-SO.txt
106
- - cache/file_data_provider/countries-SQ.txt
107
- - cache/file_data_provider/countries-SR.txt
108
- - cache/file_data_provider/countries-SV.txt
109
- - cache/file_data_provider/countries-SW.txt
110
- - cache/file_data_provider/countries-TA.txt
111
- - cache/file_data_provider/countries-TH.txt
112
- - cache/file_data_provider/countries-TI.txt
113
- - cache/file_data_provider/countries-TK.txt
114
- - cache/file_data_provider/countries-TL.txt
115
- - cache/file_data_provider/countries-TR.txt
116
- - cache/file_data_provider/countries-TT.txt
117
- - cache/file_data_provider/countries-UK.txt
118
- - cache/file_data_provider/countries-VE.txt
119
- - cache/file_data_provider/countries-VI.txt
120
- - cache/file_data_provider/countries-WA.txt
121
- - cache/file_data_provider/countries-WO.txt
122
- - cache/file_data_provider/countries-XH.txt
123
- - cache/file_data_provider/countries-ZU.txt
124
- - cache/file_data_provider/languages-AF.txt
125
- - cache/file_data_provider/languages-AM.txt
126
- - cache/file_data_provider/languages-AR.txt
127
- - cache/file_data_provider/languages-AZ.txt
128
- - cache/file_data_provider/languages-BE.txt
129
- - cache/file_data_provider/languages-BG.txt
130
- - cache/file_data_provider/languages-BR.txt
131
- - cache/file_data_provider/languages-BS.txt
132
- - cache/file_data_provider/languages-CA.txt
133
- - cache/file_data_provider/languages-CS.txt
134
- - cache/file_data_provider/languages-CY.txt
135
- - cache/file_data_provider/languages-DA.txt
136
- - cache/file_data_provider/languages-DE.txt
137
- - cache/file_data_provider/languages-EL.txt
138
- - cache/file_data_provider/languages-EN.txt
139
- - cache/file_data_provider/languages-EO.txt
140
- - cache/file_data_provider/languages-ES.txt
141
- - cache/file_data_provider/languages-ET.txt
142
- - cache/file_data_provider/languages-EU.txt
143
- - cache/file_data_provider/languages-FA.txt
144
- - cache/file_data_provider/languages-FI.txt
145
- - cache/file_data_provider/languages-FR.txt
146
- - cache/file_data_provider/languages-GA.txt
147
- - cache/file_data_provider/languages-GL.txt
148
- - cache/file_data_provider/languages-HE.txt
149
- - cache/file_data_provider/languages-HI.txt
150
- - cache/file_data_provider/languages-HR.txt
151
- - cache/file_data_provider/languages-HU.txt
152
- - cache/file_data_provider/languages-ID.txt
153
- - cache/file_data_provider/languages-IS.txt
154
- - cache/file_data_provider/languages-IT.txt
155
- - cache/file_data_provider/languages-JA.txt
156
- - cache/file_data_provider/languages-KO.txt
157
- - cache/file_data_provider/languages-LT.txt
158
- - cache/file_data_provider/languages-LV.txt
159
- - cache/file_data_provider/languages-MI.txt
160
- - cache/file_data_provider/languages-MK.txt
161
- - cache/file_data_provider/languages-MN.txt
162
- - cache/file_data_provider/languages-MR.txt
163
- - cache/file_data_provider/languages-MS.txt
164
- - cache/file_data_provider/languages-MT.txt
165
- - cache/file_data_provider/languages-NB.txt
166
- - cache/file_data_provider/languages-NL.txt
167
- - cache/file_data_provider/languages-NN.txt
168
- - cache/file_data_provider/languages-OC.txt
169
- - cache/file_data_provider/languages-PL.txt
170
- - cache/file_data_provider/languages-PS.txt
171
- - cache/file_data_provider/languages-PT.txt
172
- - cache/file_data_provider/languages-RO.txt
173
- - cache/file_data_provider/languages-RU.txt
174
- - cache/file_data_provider/languages-RW.txt
175
- - cache/file_data_provider/languages-SK.txt
176
- - cache/file_data_provider/languages-SL.txt
177
- - cache/file_data_provider/languages-SR.txt
178
- - cache/file_data_provider/languages-SV.txt
179
- - cache/file_data_provider/languages-TA.txt
180
- - cache/file_data_provider/languages-TH.txt
181
- - cache/file_data_provider/languages-TI.txt
182
- - cache/file_data_provider/languages-TR.txt
183
- - cache/file_data_provider/languages-TT.txt
184
- - cache/file_data_provider/languages-UK.txt
185
- - cache/file_data_provider/languages-VE.txt
186
- - cache/file_data_provider/languages-VI.txt
187
- - cache/file_data_provider/languages-WA.txt
188
- - cache/file_data_provider/languages-XH.txt
189
- - cache/file_data_provider/languages-ZU.txt
190
- - example_output/all_names_for_DE.txt
191
- - example_output/all_names_for_FR.txt
192
- - example_output/all_names_for_GB.txt
193
- - example_output/all_names_for_US.txt
194
- - i18n_data.gemspec
195
- - lib/i18n_data.rb
196
- - lib/i18n_data/file_data_provider.rb
197
- - lib/i18n_data/live_data_provider.rb
198
- - spec/i18n_data/file_data_provider_spec.rb
199
- - spec/i18n_data/live_data_provider_spec.rb
200
- - spec/i18n_data_spec.rb
47
+ - ar_serialized_array.gemspec
48
+ - init.rb
49
+ - lib/ar_serialized_array.rb
50
+ - spec/ar_serialized_array_spec.rb
51
+ - spec/setup_test_model.rb
201
52
  - spec/spec_helper.rb
202
53
  has_rdoc: true
203
54
  homepage: http://github.com/grosser/ar_serialized_array
204
55
  licenses: []
205
56
 
206
57
  post_install_message:
207
- rdoc_options:
208
- - --charset=UTF-8
58
+ rdoc_options: []
59
+
209
60
  require_paths:
210
61
  - lib
211
62
  required_ruby_version: !ruby/object:Gem::Requirement
63
+ none: false
212
64
  requirements:
213
65
  - - ">="
214
66
  - !ruby/object:Gem::Version
67
+ hash: 3
68
+ segments:
69
+ - 0
215
70
  version: "0"
216
- version:
217
71
  required_rubygems_version: !ruby/object:Gem::Requirement
72
+ none: false
218
73
  requirements:
219
74
  - - ">="
220
75
  - !ruby/object:Gem::Version
76
+ hash: 3
77
+ segments:
78
+ - 0
221
79
  version: "0"
222
- version:
223
80
  requirements: []
224
81
 
225
82
  rubyforge_project:
226
- rubygems_version: 1.3.5
83
+ rubygems_version: 1.4.2
227
84
  signing_key:
228
85
  specification_version: 3
229
- summary: country/language names and 2-letter-code pairs, in 85 languages
86
+ summary: Serialize an array in a column, [] when no set, xx_as_text accessors and more.
230
87
  test_files:
88
+ - spec/ar_serialized_array_spec.rb
89
+ - spec/setup_test_model.rb
231
90
  - spec/spec_helper.rb
232
- - spec/i18n_data/file_data_provider_spec.rb
233
- - spec/i18n_data/live_data_provider_spec.rb
234
- - spec/i18n_data_spec.rb