storext 0.0.1 → 0.0.2

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