activerecord_flag_support 0.0.4
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 +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: []
|