hstorable 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 +4 -4
- data/hstorable.gemspec +3 -1
- data/lib/hstorable/base.rb +23 -0
- data/lib/hstorable/model_fields.rb +7 -0
- data/lib/hstorable/simple_fields.rb +23 -0
- data/lib/hstorable/version.rb +1 -1
- data/lib/hstorable.rb +5 -48
- metadata +23 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2147ada7cb59fbcdecb31bd32ec1d2b1cf6913ef
|
4
|
+
data.tar.gz: 5a3dcc28952e3dd900e03f5051ea64e0c026273c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a9228e6b9a0a4a7ec83550124dfe36327b719736c4d6351facafbf0a08fe4042044c66590f342dff9e242f40f25d7659bc5a4b3f70c7e1a5e37d8caa48c81b68
|
7
|
+
data.tar.gz: 54f35e078b97ad89ae38cedc98aa5568f866dd0d97828a2a6812a7f5c1c6ac9a0228c7bfadf9031977de0ce93be30602e92410d93faaed927e6143513d823480
|
data/hstorable.gemspec
CHANGED
@@ -19,5 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.5"
|
22
|
-
spec.add_development_dependency "rake"
|
22
|
+
spec.add_development_dependency "rake", "~> 10.3.2"
|
23
|
+
|
24
|
+
spec.add_runtime_dependency "pg", "0.17.1"
|
23
25
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Hstorable
|
2
|
+
module Base
|
3
|
+
def hstore_register_field(name, options)
|
4
|
+
@hstore_fields ||= []
|
5
|
+
@hstore_fields << { name: name }.merge(options)
|
6
|
+
end
|
7
|
+
|
8
|
+
def hstore_field_names
|
9
|
+
@hstore_fields ||= []
|
10
|
+
@hstore_fields.map { |field| field[:name] }
|
11
|
+
end
|
12
|
+
|
13
|
+
def hstore_readonly_field?(name)
|
14
|
+
options = hstore_options_for_field(name)
|
15
|
+
options && options[:readonly]
|
16
|
+
end
|
17
|
+
|
18
|
+
def hstore_options_for_field(name)
|
19
|
+
@hstore_fields ||= []
|
20
|
+
@hstore_fields.find { |field| field[:name] == name }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Hstorable
|
2
|
+
module SimpleFields
|
3
|
+
def hstore_simple(field, options)
|
4
|
+
name = options[:name]
|
5
|
+
default = options[:default]
|
6
|
+
|
7
|
+
define_method "#{name}" do
|
8
|
+
hstore = self.send(field)
|
9
|
+
value = hstore[name]
|
10
|
+
value ? value : default
|
11
|
+
end
|
12
|
+
|
13
|
+
define_method "#{name}=" do |value|
|
14
|
+
hstore = self.send(field)
|
15
|
+
self.send("#{field}_will_change!") if hstore[name] != value
|
16
|
+
hstore[name] = value
|
17
|
+
hstore[name]
|
18
|
+
end
|
19
|
+
|
20
|
+
hstore_register_field(name, options)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/hstorable/version.rb
CHANGED
data/lib/hstorable.rb
CHANGED
@@ -1,52 +1,9 @@
|
|
1
|
-
require
|
1
|
+
require 'hstorable/model'
|
2
2
|
|
3
3
|
module Hstorable
|
4
|
-
def
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
def hstore_field_names
|
10
|
-
@hstore_fields.map { |field| field[:name] }
|
11
|
-
end
|
12
|
-
|
13
|
-
def hstore_readonly_field?(name)
|
14
|
-
options = hstore_options_for_field(name)
|
15
|
-
options && options[:readonly]
|
16
|
-
end
|
17
|
-
|
18
|
-
def hstore_options_for_field(name)
|
19
|
-
@hstore_fields.find { |field| field[:name] == name }
|
20
|
-
end
|
21
|
-
|
22
|
-
def hstore_simple(field, options)
|
23
|
-
name = options[:name]
|
24
|
-
default = options[:default]
|
25
|
-
|
26
|
-
define_method "#{name}" do
|
27
|
-
hstore = self.send(field)
|
28
|
-
value = hstore[name]
|
29
|
-
value ? value : default
|
30
|
-
end
|
31
|
-
|
32
|
-
define_method "#{name}=" do |value|
|
33
|
-
hstore = self.send(field)
|
34
|
-
self.send("#{field}_will_change!") if hstore[name] != value
|
35
|
-
hstore[name] = value
|
36
|
-
hstore[name]
|
37
|
-
end
|
38
|
-
|
39
|
-
hstore_register_field(name, options)
|
40
|
-
end
|
41
|
-
|
42
|
-
def hstore_model(options)
|
43
|
-
# TODO Implement handling of model dependencies here
|
44
|
-
end
|
45
|
-
|
46
|
-
def hstore(type, field, options)
|
47
|
-
case type
|
48
|
-
when :simple then hstore_simple(field, options)
|
49
|
-
when :model then hstore_model(field, options)
|
50
|
-
end
|
4
|
+
def self.included(base)
|
5
|
+
base.extend Hstorable::Base
|
6
|
+
base.extend Hstorable::SimpleFields
|
7
|
+
base.extend Hstorable::ModelFields
|
51
8
|
end
|
52
9
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hstorable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergey Tsvetkov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,16 +28,30 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 10.3.2
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 10.3.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pg
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.17.1
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '='
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
54
|
+
version: 0.17.1
|
41
55
|
description: This gem simplifies working wih fields stored using Hstore
|
42
56
|
email:
|
43
57
|
- sergey.a.tsvetkov@gmail.com
|
@@ -52,6 +66,9 @@ files:
|
|
52
66
|
- Rakefile
|
53
67
|
- hstorable.gemspec
|
54
68
|
- lib/hstorable.rb
|
69
|
+
- lib/hstorable/base.rb
|
70
|
+
- lib/hstorable/model_fields.rb
|
71
|
+
- lib/hstorable/simple_fields.rb
|
55
72
|
- lib/hstorable/version.rb
|
56
73
|
homepage: http://hstorable.kimrgrey.org/
|
57
74
|
licenses:
|