activerecord_flag_support 0.0.11 → 0.0.12

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 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