activerecord_flag_support 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README +5 -0
- data/lib/activerecord_flag_support.rb +54 -0
- metadata +60 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d562acb00d0fa680763204e2000fdd87b059128f
|
4
|
+
data.tar.gz: c416028f896ed8fee7e0227e459ffb7b93eb2969
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f2359e686b7036ee95a3f5363a675db060732b2084ab59d49c882adf1bc5a5fe65cfe04a74ed14c7859f3b43945283c6f85b74de18dd0fd7bc1b434c18bfc3ca
|
7
|
+
data.tar.gz: aa94fa873a676bd31757d0218ecb0633d686106801d0b6c4861d676e9ce0be65f40714f55642bf1bfed44a350371cd770269b4bc2db7114c272c2fe20a257309
|
data/README
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
module ActiveRecordFlagSupport
|
2
|
+
# ----------------------------------------------------------------- included
|
3
|
+
def self.included(base)
|
4
|
+
base.extend(ClassMethods)
|
5
|
+
end
|
6
|
+
module ClassMethods
|
7
|
+
# ------------------------------------------------------ define_flag_methods
|
8
|
+
def define_flag_methods( field, method_hash = nil )
|
9
|
+
if method_hash.nil?
|
10
|
+
method_hash = field
|
11
|
+
field = :flags
|
12
|
+
end
|
13
|
+
unless method_hash.is_a?( Hash )
|
14
|
+
col = 1
|
15
|
+
method_hash = method_hash.inject( {} ) do |m,x|
|
16
|
+
m[x] = col
|
17
|
+
col *= 2
|
18
|
+
m
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
method_hash.each_pair do |key,value|
|
23
|
+
class_eval( "def #{key}\n return ( #{field} & #{value} ) == #{value}; end" )
|
24
|
+
class_eval( "def #{key}=(v)\n old_value = #{key}; set_flag( :#{field}, v, #{value} ); if old_value != #{key}\n@#{key}_was_changed = true;\nend\n end" )
|
25
|
+
class_eval( "def #{key}_changed?\n new_record? || @#{key}_was_changed\n end" )
|
26
|
+
class_eval( "def #{key}?\n return ( #{field} & #{value} ) == #{value}; end" )
|
27
|
+
class_eval( "def update_#{key}(v)\n set_flag( :#{field}, v, #{value} ); update_attribute( :#{field}, self.#{field} ); end" )
|
28
|
+
konst = "%s_MASK" % key.upcase
|
29
|
+
unless const_defined?( konst )
|
30
|
+
const_set( konst, value )
|
31
|
+
end
|
32
|
+
end
|
33
|
+
cattr_accessor "#{field}_flag_hash"
|
34
|
+
class_variable_set( "@@#{field}_flag_hash", method_hash )
|
35
|
+
unless method_defined?( :set_flag )
|
36
|
+
class_eval("include ActiveRecordFlagSupport::FlagInstanceMethods")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
module FlagInstanceMethods
|
41
|
+
# ------------------------------------------------------------------- set_flag
|
42
|
+
def set_flag( field, value, bit_field )
|
43
|
+
if value && ActiveRecord::ConnectionAdapters::Column.value_to_boolean( value )
|
44
|
+
( send(field).to_i | bit_field )
|
45
|
+
else
|
46
|
+
( send(field).to_i & (~bit_field) )
|
47
|
+
end
|
48
|
+
self.send( "#{field}=", value )
|
49
|
+
attributes_before_type_cast[field] = value
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
require 'active_record'
|
54
|
+
ActiveRecord::Base.send( :include, ActiveRecordFlagSupport )
|
metadata
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: activerecord_flag_support
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Adam Palmblad
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-04-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activerecord
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.0.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.0.0
|
27
|
+
description: Provide an easy way to define boolean getters and settings on an integer
|
28
|
+
column in active record objects.
|
29
|
+
email: apalmblad@gmail.com
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- README
|
35
|
+
- lib/activerecord_flag_support.rb
|
36
|
+
homepage: http://github.com/apalmblae/activercord_flag_support
|
37
|
+
licenses:
|
38
|
+
- MIT
|
39
|
+
metadata: {}
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options: []
|
42
|
+
require_paths:
|
43
|
+
- lib
|
44
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
requirements: []
|
55
|
+
rubyforge_project:
|
56
|
+
rubygems_version: 2.4.3
|
57
|
+
signing_key:
|
58
|
+
specification_version: 4
|
59
|
+
summary: Boolean flag support for active record
|
60
|
+
test_files: []
|