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 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,5 @@
1
+ class Model <ActiveRecord::Base
2
+ define_flag_methods boolean: 1, some_flag: 2, other_flag: 4
3
+ define_flag_methods :column_not_called_flags, boolean: 1, some_flag: 2, other_flag: 4
4
+ define_flag_methods [:boolean, :flag_five, :flag_two]
5
+ end
@@ -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: []