storext 0.0.1 → 0.0.2

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: ddfbae9c3b4d88ee6edad8d1f4b0ee5c9e1d92fe
4
- data.tar.gz: 11d1690c785b77c0f1cf31e41cca96574cc027c3
3
+ metadata.gz: 22c7d4f570b492d0b65ab410d07666166d5f7000
4
+ data.tar.gz: bb7d5731d7bac0767f0d9f2d507d3797c362cf5e
5
5
  SHA512:
6
- metadata.gz: cfacc2880ea27fff8dbf5c5e73fb8e7d45b82e4aea34bacb07567220864a1f92b42ab644ffd35da3d76d4ac0046da096f79c933f7424bff2914ea071de9293a0
7
- data.tar.gz: 46822864bee4560205cf23822212784c30f251aa8b4622bd0e77640cf33e9916c06dccb2cfd46eb37bf5953bed5127e459d349d7488d2f0aa12120787f490aed
6
+ metadata.gz: cf6a0cc7a094a5618171ca25e2fd6615cbafcb949eab5e6f5e0692b8dbc91edd77c47b7fe2ec0423f145149f6d680122495995122e2c9abf884bdfe71801adec
7
+ data.tar.gz: 4c6186c3626901832e5f212cbb048ca9193fc22b6dbab4c995559d4ff8e64c37050945a3f55fc93ab543d7e1ffa53ab93d721de0d210dc89e047ee895570abd2
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2014 YOURNAME
1
+ Copyright 2014 G5
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/lib/storext.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require "active_support/concern"
2
2
  require "virtus"
3
+ require "storext/attribute_proxy"
4
+ require "storext/class_methods"
3
5
 
4
6
  module Storext
5
7
 
@@ -12,53 +14,9 @@ module Storext
12
14
 
13
15
  private
14
16
 
15
- def storext_proxy
16
- return @storext_proxy if @storext_proxy
17
- @storext_proxy ||= self.class.storext_proxy_class.new
18
- end
19
-
20
- module ClassMethods
21
- def store_attribute(column, attr, type=nil, opts={})
22
- store_attribute_defs[column] ||= []
23
- store_attribute_defs[column] << attr
24
-
25
- storext_proxy_class.attribute "_casted_#{attr}", type, opts
26
-
27
- define_method "#{attr}=" do |value|
28
- storext_proxy.send("_casted_#{attr}=", value)
29
- write_store_attribute column, attr, storext_proxy.send("_casted_#{attr}")
30
- end
31
-
32
- define_method attr do
33
- if store_val = read_store_attribute(column, attr)
34
- storext_proxy.send("_casted_#{attr}=", store_val)
35
- end
36
- storext_proxy.send("_casted_#{attr}")
37
- end
38
-
39
- store_accessor column, *store_attribute_defs[column]
40
- end
41
-
42
- def store_attributes(column, &block)
43
- storext_proxy_class.define_store_attributes self, column, &block
44
- end
45
-
46
- def storext_proxy_class
47
- @storext_proxy_class ||= Class.new do
48
- include Virtus.model
49
-
50
- def self.define_store_attributes(source_class, column, &block)
51
- @source_class = source_class
52
- @column = column
53
- instance_eval &block
54
- end
55
-
56
- def self.method_missing(method_name, *args, &block)
57
- @source_class.store_attribute @column, method_name, *args
58
- end
59
- end
60
- end
61
-
17
+ def storext_cast_proxy
18
+ return @storext_cast_proxy if @storext_cast_proxy
19
+ @storext_cast_proxy ||= self.class.storext_cast_proxy_class.new
62
20
  end
63
21
 
64
22
  end
@@ -0,0 +1,19 @@
1
+ module Storext
2
+ class AttributeProxy
3
+
4
+ def initialize(source_class, column, &block)
5
+ @source_class = source_class
6
+ @column = column
7
+ @block = block
8
+ end
9
+
10
+ def define_store_attribute
11
+ instance_eval &@block
12
+ end
13
+
14
+ def method_missing(method_name, *args, &block)
15
+ @source_class.store_attribute @column, method_name, *args
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,49 @@
1
+ module Storext
2
+ module ClassMethods
3
+
4
+ def storext_define_writer(column, attr)
5
+ define_method "#{attr}=" do |value|
6
+ storext_cast_proxy.send("_casted_#{attr}=", value)
7
+ write_store_attribute(column,
8
+ attr,
9
+ storext_cast_proxy.send("_casted_#{attr}"))
10
+ end
11
+ end
12
+
13
+ def storext_define_reader(column, attr)
14
+ define_method attr do
15
+ if store_val = read_store_attribute(column, attr)
16
+ storext_cast_proxy.send("_casted_#{attr}=", store_val)
17
+ end
18
+ storext_cast_proxy.send("_casted_#{attr}")
19
+ end
20
+ end
21
+
22
+ def store_attribute(column, attr, type=nil, opts={})
23
+ track_store_attribute(column, attr)
24
+
25
+ storext_cast_proxy_class.attribute "_casted_#{attr}", type, opts
26
+
27
+ storext_define_writer(column, attr)
28
+ storext_define_reader(column, attr)
29
+
30
+ store_accessor column, *store_attribute_defs[column]
31
+ end
32
+
33
+ def store_attributes(column, &block)
34
+ AttributeProxy.new(self, column, &block).define_store_attribute
35
+ end
36
+
37
+ def track_store_attribute(column, attr)
38
+ store_attribute_defs[column] ||= []
39
+ store_attribute_defs[column] << attr
40
+ end
41
+
42
+ def storext_cast_proxy_class
43
+ @storext_cast_proxy_class ||= Class.new do
44
+ include Virtus.model
45
+ end
46
+ end
47
+
48
+ end
49
+ end
@@ -1,3 +1,3 @@
1
1
  module Storext
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: storext
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
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: 2014-11-26 00:00:00.000000000 Z
13
+ date: 2014-11-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
@@ -80,6 +80,8 @@ files:
80
80
  - MIT-LICENSE
81
81
  - Rakefile
82
82
  - lib/storext.rb
83
+ - lib/storext/attribute_proxy.rb
84
+ - lib/storext/class_methods.rb
83
85
  - lib/storext/version.rb
84
86
  - lib/tasks/storext_tasks.rake
85
87
  homepage: http://github.com/g5/storext