storext-override 0.0.1 → 0.1.0

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: c83c83640824e13b8e307bb8afb861182e26a128
4
- data.tar.gz: 85b084bd733ca57e118fe4922549f6aa71a228dd
3
+ metadata.gz: b6c050186d5d8471b780a86cd84015ef73c91e59
4
+ data.tar.gz: f40b396043d031e38b788936f01459bae9df03f9
5
5
  SHA512:
6
- metadata.gz: 2e5dbff6348d395536cafb1d0c752bfc5f3d1715a29c446c2f168e300821207e2e450a31c12251594e9d993e83ec2032a0eb77822dbe15da370a704937464101
7
- data.tar.gz: 0abd9931c9ca371f5ef76376a67092183aef6c59c2e5f222262dfa31739f982ad34e549a752a600e8f27a37135d0ba384acf44245ed2bf3a66c8d7f6ecda2ee8
6
+ metadata.gz: 249516b1136e3e6e878923b9b94b97b2fd9665c4043769aa05b95a88f20745427aaee526e929fb1d136b418e738303cf140659a5df1fc375eeb2e0b8e09168ff
7
+ data.tar.gz: 4595bb92ac01adc8e3e83089b638398a448a70c591a930e173d46cabe8d0308dbacd834f7fc69a9bccd45252de05ce1e2e109d8dd693f0cbe86ebec9cafacbdf
@@ -18,7 +18,7 @@ module Storext
18
18
  storext_definitions = association_class.storext_definitions
19
19
  storext_definitions.each do |attr, attr_definition|
20
20
  if attr_definition[:column] == column_name
21
- storext_overrider_define_reader(
21
+ storext_overrider_accessor(
22
22
  association_name,
23
23
  column_name,
24
24
  attr,
@@ -36,7 +36,7 @@ module Storext
36
36
  end
37
37
  end
38
38
 
39
- def storext_overrider_define_reader(association_name, column_name, attr, attr_definition)
39
+ def storext_overrider_accessor(association_name, column_name, attr, attr_definition)
40
40
  self.store_attribute(
41
41
  column_name,
42
42
  attr,
@@ -44,9 +44,55 @@ module Storext
44
44
  attr_definition[:opts].reject { |k,v| k == :default },
45
45
  )
46
46
 
47
- define_method attr do |*args|
48
- super(*args) || send(association_name).send(attr)
47
+ storext_overrider_define_override_control(column_name, attr)
48
+ storext_overrider_define_reader(association_name, column_name, attr)
49
+ storext_overrider_define_writer(column_name, attr)
50
+ end
51
+
52
+ def storext_overrider_define_reader(association_name, column_name, attr)
53
+ define_method :"#{attr}_with_parent_default" do |*args|
54
+ if storext_has_key?(column_name, attr)
55
+ send(:"#{attr}_without_parent_default", *args)
56
+ else
57
+ send(association_name).send(attr)
58
+ end
59
+ end
60
+ alias_method_chain :"#{attr}", :parent_default
61
+ end
62
+
63
+ def storext_overrider_define_writer(column_name, attr)
64
+ define_method :"#{attr}_with_override_control=" do |*args|
65
+ if instance_variable_get("@override_#{attr}") == false
66
+ destroy_key(column_name, attr)
67
+ else
68
+ send(:"#{attr}_without_override_control=", *args)
69
+ end
70
+ end
71
+ alias_method_chain :"#{attr}=", :override_control
72
+ end
73
+
74
+ def storext_overrider_define_override_control(column_name, attr)
75
+ ivar = "@override_#{attr}"
76
+
77
+ define_method :"override_#{attr}=" do |bool|
78
+ if [0, '0', false].include?(bool)
79
+ destroy_key(column_name, attr)
80
+ instance_variable_set(ivar, false)
81
+ else
82
+ instance_variable_set(ivar, true)
83
+ end
49
84
  end
85
+
86
+ define_method :"override_#{attr}" do
87
+ value = instance_variable_get(ivar)
88
+ if value.nil?
89
+ storext_has_key?(column_name, attr)
90
+ else
91
+ value
92
+ end
93
+ end
94
+
95
+ alias_method "override_#{attr}?", :"override_#{attr}"
50
96
  end
51
97
  end
52
98
 
@@ -1,5 +1,5 @@
1
1
  module Storext
2
2
  module Override
3
- VERSION = "0.0.1"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: storext-override
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - G5
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-03-24 00:00:00.000000000 Z
13
+ date: 2015-06-26 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
@@ -32,14 +32,14 @@ dependencies:
32
32
  requirements:
33
33
  - - ">="
34
34
  - !ruby/object:Gem::Version
35
- version: '1.0'
35
+ version: '1.1'
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - ">="
41
41
  - !ruby/object:Gem::Version
42
- version: '1.0'
42
+ version: '1.1'
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: sqlite3
45
45
  requirement: !ruby/object:Gem::Requirement
@@ -103,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
103
  version: '0'
104
104
  requirements: []
105
105
  rubyforge_project:
106
- rubygems_version: 2.4.3
106
+ rubygems_version: 2.4.5
107
107
  signing_key:
108
108
  specification_version: 4
109
109
  summary: Mimic and be able to override another Storext model