act_with_bag 0.4.2 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 902f6cb03acd3d73eb6acd10e125399aa782e240
4
- data.tar.gz: bce079de55d373cd2d0335f6ec6c342d5426c580
3
+ metadata.gz: 377b880a5e83253a06619f5037a66f42b5225cf0
4
+ data.tar.gz: 4de0ea43eb837f92050ded8a36f8ffca378cdace
5
5
  SHA512:
6
- metadata.gz: fb1593345aaf6d24cad5eb2061fd3de527847dc013edde45f328572af5cee6ebe0c91faf440124856ed368e3928b107c7f19f9176ffaccd93915592f3aad0213
7
- data.tar.gz: 696c7b8438374e75b9d56bf1fa5a352901f041b4347a9bc5a048703bd9f793041ac20e40ed7a31d3bf6f4f3e12a7e0f6f4b0b4b382785758be066bff3a3764c9
6
+ metadata.gz: 572094a068fbaee745b42bf6da2c19613deeac107424642fbba60d5e3788ec72113655193ba1e1549c5b728b8c037d453c4f6609e7722945bd772aee6cf41447
7
+ data.tar.gz: 702ece6fbd63eb424237b2704dc18c211ff2a389dfaf7c4952d32196b50df71e582136c79764968854ec1e0216d7f30800ae80ecfe0a61fd1e5d73af8c889825
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ bag_test
data/lib/act_with_bag.rb CHANGED
@@ -69,62 +69,61 @@ class << ActiveRecord::Base
69
69
 
70
70
 
71
71
  protected
72
- def free_accessor(str)
73
- accessor = str.to_sym
74
- return accessor unless self.method_defined?(accessor)
75
- logger.info "** Already defined #{self.to_s}.#{accessor}"
76
- #p "** Bag: untouched accessor '#{self.to_s}.#{accessor}'"
77
- nil
72
+ def accessor_present?(accessor)
73
+ accessor_sym = accessor.to_sym
74
+ res = false
75
+
76
+ res = true if self.method_defined?(accessor_sym)
77
+ res = true if self.respond_to?(:attribute_names) &&
78
+ self.attribute_names.include?(accessor)
79
+ if res
80
+ # logger.info "** Already defined #{self.to_s}.#{accessor}"
81
+ #p "** act_to_bag: untouched accessor '#{self.to_s}.#{accessor}'"
82
+ end
83
+ return res
78
84
  end
79
85
 
80
86
  def add_accessor(baggie, type)
81
- baggie_s = baggie.to_s
87
+ accessor = baggie.to_s
82
88
  type_sym = type.to_sym
83
89
  #p "add_accessor #{self.to_s} #{baggie.inspect} #{type_sym.inspect}"
84
90
 
85
- accessor = free_accessor("#{baggie_s}")
86
- if accessor
87
- self.class_eval %{
88
- def #{accessor}
89
- res = bag && bag[:#{baggie}]
90
- if :#{type} == :boolean
91
- return res if res.class == FalseClass
92
- return res if res.class == TrueClass
93
- return res.to_i != 0
94
- end
95
- res
91
+ return if accessor_present?(accessor)
92
+
93
+ self.class_eval %{
94
+ def #{accessor}
95
+ res = bag && bag[:#{baggie}]
96
+ if :#{type} == :boolean
97
+ return res if res.class == FalseClass
98
+ return res if res.class == TrueClass
99
+ return res.to_i != 0
96
100
  end
97
- }
98
- end
101
+ res
102
+ end
103
+ }
99
104
 
100
- accessor = free_accessor("#{baggie_s}=")
101
- if accessor
102
- @baggies_date[baggie] = type if type == :date
103
- self.class_eval %{
104
- def #{accessor}(value)
105
- @attributes['bag'] = {} unless bag.is_a?(Hash)
106
- unless value.nil?
107
- self.bag[:#{baggie}] = value
108
- else
109
- self.bag.delete(:#{baggie})
110
- nil
111
- end
105
+ @baggies_date[baggie] = type if type == :date
106
+ self.class_eval %{
107
+ def #{accessor}=(value)
108
+ @attributes['bag'] = {} unless bag.is_a?(Hash)
109
+ unless value.nil?
110
+ self.bag[:#{baggie}] = value
111
+ else
112
+ self.bag.delete(:#{baggie})
113
+ nil
112
114
  end
113
- }
114
- end
115
+ end
116
+ }
115
117
 
116
118
  return unless type_sym == :boolean
117
- accessor = free_accessor("#{baggie_s}?")
118
- if accessor
119
- self.class_eval %{
120
- def #{accessor}
121
- res = bag && bag[:#{baggie}]
122
- return res if res.class == FalseClass
123
- return res if res.class == TrueClass
124
- res.to_i != 0
125
- end
126
- }
127
- end
119
+ self.class_eval %{
120
+ def #{accessor}?
121
+ res = bag && bag[:#{baggie}]
122
+ return res if res.class == FalseClass
123
+ return res if res.class == TrueClass
124
+ res.to_i != 0
125
+ end
126
+ }
128
127
  end
129
128
 
130
129
  end
@@ -1,3 +1,3 @@
1
1
  module ActWithBag
2
- VERSION = "0.4.2"
2
+ VERSION = "0.4.4"
3
3
  end
@@ -0,0 +1,22 @@
1
+ require 'test_helper'
2
+
3
+
4
+ class Order < ActiveRecord::Base
5
+ add_to_bag :category
6
+ end
7
+
8
+
9
+ class AccessorTest < ActiveSupport::TestCase
10
+
11
+ def setup
12
+ @order = Order.new
13
+ end
14
+
15
+ test "should reject overwriting of column category" do
16
+ value = 'abc'
17
+ assert @order.respond_to?(:category)
18
+ @order.category = value
19
+ assert_equal false, @order.bag.has_key?(:category)
20
+ end
21
+
22
+ end
data/test/test_helper.rb CHANGED
@@ -4,11 +4,12 @@ require 'active_record'
4
4
 
5
5
  ActiveRecord::Base.establish_connection({
6
6
  :adapter => 'sqlite3',
7
- :database => 'docu_test'
7
+ :database => 'bag_test'
8
8
  })
9
9
 
10
10
  ActiveRecord::Schema.define do
11
11
  create_table 'orders', :force => true do |t|
12
+ t.string :category
12
13
  t.column 'bag', :text
13
14
  end
14
15
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: act_with_bag
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - matique
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-11 00:00:00.000000000 Z
11
+ date: 2014-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sqlite3
@@ -38,6 +38,7 @@ files:
38
38
  - act_with_bag.gemspec
39
39
  - lib/act_with_bag.rb
40
40
  - lib/act_with_bag/version.rb
41
+ - test/accessor_test.rb
41
42
  - test/bag_test.rb
42
43
  - test/boolean_test.rb
43
44
  - test/clean_test.rb
@@ -63,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
64
  version: '0'
64
65
  requirements: []
65
66
  rubyforge_project: act_with_bag
66
- rubygems_version: 2.0.0.rc.2
67
+ rubygems_version: 2.1.9
67
68
  signing_key:
68
69
  specification_version: 4
69
70
  summary: act_with_bag (baggies) gem