simple_enum-persistence 0.1.0 → 0.1.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.
- checksums.yaml +4 -4
- data/.travis.yml +10 -2
- data/Gemfile +8 -0
- data/README.md +17 -3
- data/Rakefile +15 -0
- data/lib/simple_enum/persistence/extension.rb +22 -19
- data/lib/simple_enum/persistence/version.rb +1 -1
- data/simple_enum-persistence.gemspec +1 -2
- metadata +4 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fedb1927ee03241f5acbc723d0dbd541af1c7555
|
4
|
+
data.tar.gz: 8c84cb29399975a59784cb7bff7c2f8cc021be14
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4396a4da6a92b84cc02120d180b3bb5928a53c8d2e4ca44f80504e8035f52c57684c16af6e8ea13d9d01b8759836ca2488557c17aff9e5cae293d109f6e43c2e
|
7
|
+
data.tar.gz: ec2c412bf25531baea059f5ef6e810890137ef864946765878a343808364c43940e5924fbb6d6bbd3de187abc475170b254e3f8c868812d8a2b0eb4c75c88c6e
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -2,3 +2,11 @@ source 'https://rubygems.org'
|
|
2
2
|
|
3
3
|
# Specify your gem's dependencies in simple_enum-persistence.gemspec
|
4
4
|
gemspec
|
5
|
+
|
6
|
+
# some development deps
|
7
|
+
gem 'activerecord-jdbcsqlite3-adapter', platform: :jruby
|
8
|
+
gem 'sqlite3', platform: :ruby
|
9
|
+
gem 'bson_ext', platform: :ruby
|
10
|
+
|
11
|
+
# Code coverage on CI only
|
12
|
+
gem 'codeclimate-test-reporter', group: :test, require: nil
|
data/README.md
CHANGED
@@ -1,17 +1,31 @@
|
|
1
1
|
# SimpleEnum::Persistence
|
2
2
|
|
3
|
-
|
3
|
+
[](https://travis-ci.org/bbtfr/simple_enum-persistence)
|
4
|
+
[](https://rubygems.org/gems/simple_enum-persistence)
|
5
|
+
|
6
|
+
SimpleEnum::Persistence is extension of SimpleEnum, which brings data persistence support to SimpleEnum.
|
7
|
+
Sometimes, we need to use one of our table as enum, in order to add/remove enum type dynamically
|
8
|
+
|
9
|
+
## Why not ActiveRecord association?
|
10
|
+
|
11
|
+
1. SimpleEnum is a great library, which brings a lot of benefits to create enum-like fields;
|
12
|
+
|
13
|
+
2. SimpleEnum::Persistence cache all enums in memory for better performance, and it will reload when database changes (with `after_save` callback).
|
4
14
|
|
5
15
|
## ActiveRecord Quick start
|
6
16
|
|
7
17
|
Let's say we have a model Tag, we want to use it as enum data, just add this to a model:
|
8
18
|
```ruby
|
9
|
-
|
19
|
+
class Post
|
20
|
+
as_enum :tag, Tag, persistence: true
|
21
|
+
end
|
10
22
|
```
|
11
23
|
|
12
24
|
Then SimpleEnum will use `Tag.all` as enum data, `tag.name` as enum key and `tag.id` as enum value, if we want to use a field rather than `:name` as enum key:
|
13
25
|
```ruby
|
14
|
-
|
26
|
+
class Post
|
27
|
+
as_enum :tag, Tag, persistence: { key: :name, value: :id }
|
28
|
+
end
|
15
29
|
```
|
16
30
|
|
17
31
|
## License
|
data/Rakefile
CHANGED
@@ -1 +1,16 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
+
|
3
|
+
desc 'Default: run all unit tests for both ActiveRecord & Mongoid.'
|
4
|
+
task :default => :spec
|
5
|
+
|
6
|
+
desc 'Run rspec test suite'
|
7
|
+
task :spec do
|
8
|
+
sh 'bundle exec rspec spec/'
|
9
|
+
end
|
10
|
+
|
11
|
+
# Mongodb
|
12
|
+
directory "tmp/mongodb.data"
|
13
|
+
desc 'Run mongodb in tmp/'
|
14
|
+
task :mongodb => [:'tmp/mongodb.data'] do |t|
|
15
|
+
system "mongod", "--dbpath", "tmp/mongodb.data"
|
16
|
+
end
|
@@ -1,30 +1,33 @@
|
|
1
1
|
module SimpleEnum
|
2
2
|
module Persistence
|
3
3
|
module Extension
|
4
|
-
def
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
if persistence
|
10
|
-
options[:with] ||= SimpleEnum.with.reject do |feature|
|
11
|
-
%i(attribute scope).include? feature
|
12
|
-
end
|
13
|
-
options[:map] = :persistence
|
14
|
-
|
15
|
-
values = [ values ]
|
16
|
-
values.push persistence if persistence.kind_of? Hash
|
17
|
-
end
|
18
|
-
|
19
|
-
as_enum_without_persistence name, values, options
|
4
|
+
def as_enum name, values, options = {}
|
5
|
+
persistence = options.delete :persistence
|
6
|
+
if persistence
|
7
|
+
options[:with] ||= SimpleEnum.with.reject do |feature|
|
8
|
+
[:attribute, :scope].include? feature
|
20
9
|
end
|
10
|
+
options[:map] = :persistence
|
11
|
+
|
12
|
+
values = [ values ]
|
13
|
+
values.push persistence if persistence.kind_of? Hash
|
21
14
|
end
|
22
|
-
end
|
23
15
|
|
24
|
-
|
16
|
+
super
|
25
17
|
end
|
26
18
|
end
|
27
19
|
end
|
28
20
|
end
|
29
21
|
|
30
|
-
SimpleEnum.
|
22
|
+
if SimpleEnum::Attribute.method_defined? :prepend
|
23
|
+
SimpleEnum::Attribute.send :prepend, SimpleEnum::Persistence::Extension
|
24
|
+
else
|
25
|
+
# Monkey Path Module::prepend for Ruby 1.9
|
26
|
+
Attribute = SimpleEnum.send :remove_const, :Attribute
|
27
|
+
module SimpleEnum::Attribute
|
28
|
+
include Attribute
|
29
|
+
include SimpleEnum::Persistence::Extension
|
30
|
+
end
|
31
|
+
Object.send :remove_const, :Attribute
|
32
|
+
end
|
33
|
+
|
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["bbtfrr@gmail.com"]
|
11
11
|
|
12
12
|
spec.summary = %q{Persistence support for SimpleEnum.}
|
13
|
-
spec.description = %q{SimpleEnum::
|
13
|
+
spec.description = %q{SimpleEnum::Persistence is extension of SimpleEnum, which brings data persistence support to SimpleEnum.}
|
14
14
|
spec.homepage = "https://github.com/bbtfr/simple_enum-persistence"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
@@ -29,7 +29,6 @@ Gem::Specification.new do |spec|
|
|
29
29
|
|
30
30
|
spec.add_runtime_dependency 'simple_enum', '~> 2.2'
|
31
31
|
|
32
|
-
spec.add_development_dependency 'bundler', '~> 1.10'
|
33
32
|
spec.add_development_dependency 'rake', '~> 10.0'
|
34
33
|
spec.add_development_dependency 'activerecord', '>= 4.0.0'
|
35
34
|
spec.add_development_dependency 'mongoid', '>= 4.0.0'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_enum-persistence
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Theo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: simple_enum
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.2'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: bundler
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '1.10'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '1.10'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: rake
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,8 +80,8 @@ dependencies:
|
|
94
80
|
- - "~>"
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: '2.14'
|
97
|
-
description: SimpleEnum::
|
98
|
-
support to SimpleEnum.
|
83
|
+
description: SimpleEnum::Persistence is extension of SimpleEnum, which brings data
|
84
|
+
persistence support to SimpleEnum.
|
99
85
|
email:
|
100
86
|
- bbtfrr@gmail.com
|
101
87
|
executables: []
|