act_with_bag 0.4.2 → 0.4.4

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