activerecord_enum 0.0.1 → 0.0.2

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/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ spec/database.yml
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ before_script:
2
+ - "mysql -e 'create database activerecord_enum_test;' >/dev/null"
3
+ - "cp spec/{.travis.,}database.yml"
4
+ env:
5
+ - DB=mysql
data/README.markdown CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Provides ActiveRecord support for the nonstandard `ENUM` and `SET` data types.
4
4
 
5
+ [![Build Status](http://travis-ci.org/iangreenleaf/activerecord_enum.png)](http://travis-ci.org/iangreenleaf/activerecord_enum)
6
+
5
7
  ## Hypothetically asked questions
6
8
 
7
9
  ### Y U NO WORK?!
@@ -11,6 +13,6 @@ Sorry, it currently only works with Rails 3.0.x and the mysql2 adapter. I plan t
11
13
  Right now it really only supports schema operations - attribute access is left untouched. I'll be working on that too at some point.
12
14
 
13
15
  ### Nonstandard SQL?! What's your problem, jerkweed?
14
- This isn't a plugin everyone should use. There are a number of plugins to simulate enum behavior backed by standard datatypes. Personally, I like [https://github.com/nofxx/symbolize].
16
+ This isn't a plugin everyone should use. There are a number of plugins to simulate enum behavior backed by standard data types. Personally, I like [nofxx/symbolize](https://github.com/nofxx/symbolize).
15
17
 
16
18
  However, sometimes we can't or won't avoid working with these data types. When that happens, I got you covered.
data/Rakefile CHANGED
@@ -1,10 +1,33 @@
1
1
  require 'bundler'
2
2
  Bundler::GemHelper.install_tasks
3
3
 
4
+ DB_CONFIG = "spec/database.yml"
5
+
4
6
  require 'rake'
5
- desc 'Default: run unit tests.'
6
- task :default => :spec
7
+ desc 'Default: run all unit tests.'
8
+ task :default => :"spec:all"
9
+
10
+ namespace :db do
11
+ desc 'Prepare the databases.'
12
+ task :prepare do
13
+ unless File.exist? DB_CONFIG
14
+ cp "#{config_file}.tmpl", DB_CONFIG
15
+ end
16
+ #TODO would be nice to create the DBs here
17
+ end
18
+ end
7
19
 
8
20
  require "rspec/core/rake_task"
9
21
  desc 'Run the test suite.'
10
22
  RSpec::Core::RakeTask.new(:spec)
23
+
24
+ desc 'Run the test suite for all DBs.'
25
+ namespace :spec do
26
+ task :all do
27
+ db_config = YAML::load(IO.read(DB_CONFIG))
28
+ db_config.each do |db,config|
29
+ ENV["DB"] = db
30
+ Rake::Task["spec"].invoke
31
+ end
32
+ end
33
+ end
@@ -1,3 +1,3 @@
1
1
  module ActiverecordEnum
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -1,8 +1,22 @@
1
1
  require 'active_record'
2
+ require 'active_record/base'
2
3
  require 'active_record/connection_adapters/mysql2_adapter'
3
4
  require 'active_record/connection_adapters/abstract/schema_definitions.rb'
5
+ require 'active_record/attribute_methods/write'
4
6
 
5
- module ActiverecordEnum
7
+ module ActiveRecord
8
+ module AttributeMethods
9
+ module Write
10
+ def write_attribute_with_enum(attr_name, value)
11
+ if (column = column_for_attribute(attr_name)) && column.set? && value.respond_to?(:join)
12
+ value = value.join ","
13
+ end
14
+ write_attribute_without_enum attr_name, value
15
+ end
16
+ alias_method :write_attribute_without_enum, :write_attribute
17
+ alias_method :write_attribute, :write_attribute_with_enum
18
+ end
19
+ end
6
20
  end
7
21
 
8
22
  module ActiveRecord
@@ -67,6 +81,14 @@ module ActiveRecord
67
81
  extract_default default
68
82
  end
69
83
  end
84
+
85
+ def set?
86
+ type == :set
87
+ end
88
+
89
+ def enum?
90
+ type == :enum
91
+ end
70
92
  end
71
93
  end
72
94
  end
@@ -0,0 +1,4 @@
1
+ mysql:
2
+ adapter: mysql2
3
+ database: activerecord_enum_test
4
+ username:
@@ -0,0 +1,6 @@
1
+ mysql:
2
+ adapter: mysql2
3
+ host: localhost
4
+ database: enum_test
5
+ username: enum_test
6
+ password: enum_test
data/spec/enum_spec.rb CHANGED
@@ -40,9 +40,4 @@ describe "ENUM datatype" do
40
40
  subject[ "Type" ].should == "enum('small','medium','large')"
41
41
  end
42
42
  end
43
-
44
- describe "validation" do
45
- it "validates assigned value is member of the list"
46
- it "allows nil when null enabled"
47
- end
48
43
  end
data/spec/set_spec.rb CHANGED
@@ -42,14 +42,40 @@ describe "SET datatype" do
42
42
  end
43
43
 
44
44
  describe "assignment" do
45
- it "accepts single value"
46
- it "accepts array of values"
47
- it "accepts comma-separated values"
45
+ before { load_schema "set_new" }
46
+ it "accepts single value" do
47
+ b = Balloon.create :gasses => "helium"
48
+ b.should be_valid
49
+ b.reload.gasses.should == "helium"
50
+ end
51
+ it "accepts array of values" do
52
+ b = Balloon.create :gasses => [ "helium", "hydrogen" ]
53
+ b.should be_valid
54
+ b.reload.gasses.should == "helium,hydrogen"
55
+ end
56
+ it "accepts comma-separated values" do
57
+ b = Balloon.create :gasses => "helium,hydrogen"
58
+ b.should be_valid
59
+ b.reload.gasses.should == "helium,hydrogen"
60
+ end
61
+ it "accepts empty list" do
62
+ b = Balloon.create :gasses => [ ]
63
+ b.should be_valid
64
+ b.reload.gasses.should == ""
65
+ end
48
66
  end
49
67
 
50
- describe "validation" do
51
- it "validates assigned values are members of the list"
52
- it "allows nil when null enabled"
53
- it "allows empty list"
68
+ describe "getter" do
69
+ before do
70
+ load_schema "set_new"
71
+ ActiveRecord::Base.connection.execute "INSERT INTO balloons (gasses) VALUES ('helium,hydrogen')"
72
+ @b = Balloon.first
73
+ end
74
+ it "returns comma-separated values by default" do
75
+ @b.gasses.should == "helium,hydrogen"
76
+ end
77
+ it "returns array of values when config option is set"
54
78
  end
55
79
  end
80
+
81
+ class Balloon < ActiveRecord::Base; end
data/spec/spec_helper.rb CHANGED
@@ -20,14 +20,6 @@ def dumped_schema
20
20
  stream.string.lines.select {|l| /^\s*#/.match(l).nil? }.join
21
21
  end
22
22
 
23
- ActiveRecord::Base.configurations = {
24
- "enum_test" => {
25
- :adapter => "mysql2",
26
- :host => "localhost",
27
- :username => "enum_test",
28
- :password => "enum_test",
29
- :database => "enum_test",
30
- :socket => "/tmp/mysql.sock"
31
- },
32
- }
33
- ActiveRecord::Base.establish_connection "enum_test"
23
+ ActiveRecord::Base.configurations = YAML::load(IO.read("spec/database.yml"))
24
+ db = ENV["DB"] || "mysql"
25
+ ActiveRecord::Base.establish_connection db
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord_enum
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ian Young
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-08-19 00:00:00 -07:00
18
+ date: 2011-09-02 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -105,12 +105,15 @@ extra_rdoc_files: []
105
105
 
106
106
  files:
107
107
  - .gitignore
108
+ - .travis.yml
108
109
  - Gemfile
109
110
  - README.markdown
110
111
  - Rakefile
111
112
  - activerecord_enum.gemspec
112
113
  - lib/activerecord_enum.rb
113
114
  - lib/activerecord_enum/version.rb
115
+ - spec/.travis.database.yml
116
+ - spec/database.yml.tmpl
114
117
  - spec/enum_spec.rb
115
118
  - spec/schema/enum_new.rb
116
119
  - spec/schema/enum_old.rb
@@ -153,6 +156,7 @@ signing_key:
153
156
  specification_version: 3
154
157
  summary: Enum data types for ActiveRecord
155
158
  test_files:
159
+ - spec/database.yml.tmpl
156
160
  - spec/enum_spec.rb
157
161
  - spec/schema/enum_new.rb
158
162
  - spec/schema/enum_old.rb