activerecord_flag_support 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9d36f61c0d332ee7ba030aa75c3355d1eb7fe3fb
4
- data.tar.gz: 055159e12534c6562cab143d0f8903d445fc6356
3
+ metadata.gz: 8f48cc4e8849853902aa26c7b407d709693a64ac
4
+ data.tar.gz: c2a9fa74576f9641f40fbd79dd4e5bf22c5999c5
5
5
  SHA512:
6
- metadata.gz: 3ddfc6594ff942ed2e52cabe8280f554af317b3b2d8abc43b45cecda8890c4d152a0101c256797bd0ec73295bc53af247520a6a5dc9de1001b86b3796aef3737
7
- data.tar.gz: 9109d1c25d6ca98e621d4c94ae357e4909c27a6a8e15ebc5173ffbba5f762b22fc6f8f69c3137b34fe8465e4ba697c188ade04f1e8835da2e25be0b0889a644e
6
+ metadata.gz: 4a753f57ebf99d57dee8d62a6fc9fa90c7f572555a220f6ca40a0f7fe4efcf137c6e3ed02a84531e6709ea30c436036db86b4762e02d042e03f09c13d00692d2
7
+ data.tar.gz: 2f7fae1b63c19a7ba0ef859b1786b791614b173c5764eeb2e7ad41ef322ac6ff2a75b98057acaad2e7a81f62e25126172b2e8463bfdb8b1d95dfcfd262119963
@@ -1,67 +1,105 @@
1
+ #
1
2
  module ActiveRecordFlagSupport
2
3
  # ----------------------------------------------------------------- included
3
4
  def self.included(base)
4
5
  base.extend(ClassMethods)
5
6
  end
7
+
8
+ #
6
9
  module ClassMethods
7
10
  # ------------------------------------------------------ define_flag_methods
8
- def define_flag_methods( field, method_hash = nil )
11
+ def define_flag_methods(field, method_hash = nil)
9
12
  if method_hash.nil?
10
13
  method_hash = field
11
14
  field = :flags
12
15
  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
16
+ unless method_hash.is_a?(Hash)
17
+ method_hash = method_hash_from_array(method_hash)
20
18
  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
19
+ method_hash.each_pair do |key, value|
20
+ define_methods_for_flag(key, value)
21
+ add_flag_const(key, value)
32
22
  end
23
+ setup_flag_class(field, method_hash)
24
+ end
25
+
26
+ ############################################################################
27
+
28
+ private
29
+
30
+ ############################################################################
31
+
32
+ # ------------------------------------------------------ define_flag_methods
33
+ def define_methods_for_flag(key, value)
34
+ class_eval("def #{key}\n return (#{field} & #{value}) == #{value}; end",
35
+ __FILE__, __LINE__)
36
+ class_eval("def #{key}=(v)\n old_value = #{key}; set_flag(:#{field}, "\
37
+ "v, #{value}); if old_value != #{key}\n@#{key}_was_changed="\
38
+ "true;\nend\n end", __FILE__, __LINE__)
39
+ class_eval('attr_reader :{key}_was_changed', __FILE__, __LINE__)
40
+ class_eval("def #{key}_changed?\n new_record? || #{key}_was_changed\n "\
41
+ 'end', __FILE__, __LINE__)
42
+ class_eval("def #{key}?\n return (#{field} & #{value}) == #{value}; "\
43
+ 'end', __FILE__, __LINE__)
44
+ class_eval("def update_#{key}(v)\n set_flag(:#{field}, v, #{value}); "\
45
+ "update_attribute(:#{field}, self.#{field}); end", __FILE__,
46
+ __LINE__)
47
+ end
48
+
49
+ # --------------------------------------------------------- setup_flag_class
50
+ def setup_flag_class
33
51
  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")
52
+ class_variable_set("@@#{field}_flag_hash", method_hash)
53
+ return if method_defined?(:set_flag)
54
+ class_eval('include ActiveRecordFlagSupport::FlagInstanceMethods')
55
+ end
56
+
57
+ # ----------------------------------------------------------- add_flag_const
58
+ def add_flag_const(key, value)
59
+ konst = format('%s_MASK', key.upcase)
60
+ const_set(konst, value) unless const_defined?(konst)
61
+ end
62
+
63
+ # --------------------------------------------------- method_hash_from_array
64
+ def method_hash_from_array
65
+ col = 1
66
+ method_hash.each_with_object({}) do |x, m|
67
+ m[x] = col
68
+ col *= 2
37
69
  end
38
70
  end
39
71
  end
72
+
73
+ #
40
74
  module FlagInstanceMethods
41
- if ActiveRecord::ConnectionAdapters::Column.respond_to?( :value_to_boolean )
42
- # ------------------------------------------------------------------- set_flag
43
- def set_flag( field, value, bit_field )
44
- value = if value && ActiveRecord::ConnectionAdapters::Column.value_to_boolean( value )
45
- ( send(field).to_i | bit_field )
46
- else
47
- ( send(field).to_i & (~bit_field) )
48
- end
49
- self.send( "#{field}=", value )
75
+ if ActiveRecord::ConnectionAdapters::Column.respond_to?(:value_to_boolean)
76
+ # --------------------------------------------------------------- set_flag
77
+ def set_flag(field, value, bit_field)
78
+ is_true = value &&
79
+ ActiveRecord::ConnectionAdapters::Column.value_to_boolean(value)
80
+ value = if is_true
81
+ (send(field).to_i | bit_field)
82
+ else
83
+ (send(field).to_i & ~bit_field)
84
+ end
85
+ send("#{field}=", value)
50
86
  attributes_before_type_cast[field] = value
51
87
  end
52
88
  else
53
- # ------------------------------------------------------------------- set_flag
54
- def set_flag( field, value, bit_field )
55
- value = if value && ActiveRecord::Type::Boolean.new.send( :cast_value, value )
56
- ( send(field).to_i | bit_field )
57
- else
58
- ( send(field).to_i & (~bit_field) )
59
- end
60
- self.send( "#{field}=", value )
89
+ # --------------------------------------------------------------- set_flag
90
+ def set_flag(field, value, bit_field)
91
+ is_true = value && ActiveRecord::Type::Boolean.new.send(:cast_value,
92
+ value)
93
+ value = if is_true
94
+ (send(field).to_i | bit_field)
95
+ else
96
+ (send(field).to_i & ~bit_field)
97
+ end
98
+ send("#{field}=", value)
61
99
  attributes_before_type_cast[field] = value
62
100
  end
63
101
  end
64
102
  end
65
103
  end
66
104
  require 'active_record'
67
- ActiveRecord::Base.send( :include, ActiveRecordFlagSupport )
105
+ ActiveRecord::Base.send(:include, ActiveRecordFlagSupport)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord_flag_support
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Palmblad
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-22 00:00:00.000000000 Z
11
+ date: 2017-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -53,7 +53,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
53
53
  version: '0'
54
54
  requirements: []
55
55
  rubyforge_project:
56
- rubygems_version: 2.4.3
56
+ rubygems_version: 2.6.14
57
57
  signing_key:
58
58
  specification_version: 4
59
59
  summary: Boolean flag support for active record