ar_doc_store 0.2.1 → 1.0.0
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/Gemfile +0 -1
- data/README.md +15 -15
- data/ar_doc_store.gemspec +1 -1
- data/lib/ar_doc_store.rb +9 -2
- data/lib/ar_doc_store/attribute_types/embeds_many_attribute.rb +1 -1
- data/lib/ar_doc_store/attribute_types/enumeration_attribute.rb +4 -4
- data/lib/ar_doc_store/embeddable_model.rb +5 -1
- data/lib/ar_doc_store/embedding.rb +7 -7
- data/lib/ar_doc_store/storage.rb +6 -6
- data/lib/ar_doc_store/version.rb +1 -1
- data/test/test_helper.rb +28 -28
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 119e03286bb8ecf36dfa1d089075188a1979b1cb
|
4
|
+
data.tar.gz: fc1841751d938d5152c6b902c8925c5c25eac98e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb2485d03e362542372b0a41e2fb4cde66c385731fefd3d437553e82f8c3637bca84ff63b46893a3ccef9be08de23bd299e1abfdac5356120fda85ffab411003
|
7
|
+
data.tar.gz: 4a0023a148212b537f2b07500641f138ecc870540bbe61c6c79e06ded4e3161fe8528d747ed5989809439399406997cb82550b603c89ad579ead55dd17911c8f
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -65,12 +65,12 @@ Now there are several ways to play but all boil down to one method on the model:
|
|
65
65
|
class Building < ActiveRecord::Base
|
66
66
|
include ArDocStore::Model
|
67
67
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
68
|
+
json_attribute :name, :string
|
69
|
+
json_attribute :width, :float
|
70
|
+
json_attribute :height, as: :float # the :as is optional but if you like the consistency with SimpleForm
|
71
|
+
json_attribute :storeys, :integer
|
72
|
+
json_attribute :finished, :boolean
|
73
|
+
json_attribute :construction_type, :enumeration,
|
74
74
|
values: %w{wood plaster mud brick},
|
75
75
|
multiple: true,
|
76
76
|
strict: true
|
@@ -90,7 +90,7 @@ You noticed the enumeration type on the construction_type takes an array. That's
|
|
90
90
|
|
91
91
|
```ruby
|
92
92
|
class Building ...
|
93
|
-
|
93
|
+
json_attribute :construction_type,
|
94
94
|
:enumeration,
|
95
95
|
values: %w{wood plaster mud brick},
|
96
96
|
multiple: true,
|
@@ -114,17 +114,17 @@ class Door
|
|
114
114
|
enumerates :door_type,
|
115
115
|
multiple: true,
|
116
116
|
values: %w{single double french sliding push pull}
|
117
|
-
|
117
|
+
json_attribute :open_handle,
|
118
118
|
as: :enumeration,
|
119
119
|
multiple: true,
|
120
120
|
values: %w{push pull plate knob handle}
|
121
|
-
|
121
|
+
json_attribute :close_handle,
|
122
122
|
as: :enumeration,
|
123
123
|
multiple: true,
|
124
124
|
values: %w{push pull plate knob handle}
|
125
|
-
|
126
|
-
|
127
|
-
|
125
|
+
json_attribute :clear_distance, as: :integer
|
126
|
+
json_attribute :opening_force, as: :integer
|
127
|
+
json_attribute :clear_space, as: :integer
|
128
128
|
end
|
129
129
|
```
|
130
130
|
|
@@ -177,9 +177,9 @@ You can also embeds_many. It works the same way:
|
|
177
177
|
```ruby
|
178
178
|
class Room
|
179
179
|
include ArDocStore::EmbeddableModel
|
180
|
-
|
181
|
-
|
182
|
-
|
180
|
+
json_attribute :length, as: :float
|
181
|
+
json_attribute :width, as: :float
|
182
|
+
json_attribute :height, as: :float
|
183
183
|
enumerates :light_switch_type, %w{flip knob switchplate clapper}
|
184
184
|
end
|
185
185
|
|
data/ar_doc_store.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency "activerecord"
|
21
|
+
spec.add_dependency "activerecord" #, "~> 4.0"
|
22
22
|
spec.add_dependency "pg", "~> 0.17"
|
23
23
|
# spec.add_dependency "hashie", ">=3.4.0"
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.7"
|
data/lib/ar_doc_store.rb
CHANGED
@@ -31,7 +31,7 @@ module ArDocStore
|
|
31
31
|
def self.mappings
|
32
32
|
@mappings
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
def self.convert_boolean(bool)
|
36
36
|
if bool.is_a?(String)
|
37
37
|
return true if bool == true || bool =~ (/^(true|t|yes|y|1)$/i)
|
@@ -46,5 +46,12 @@ module ArDocStore
|
|
46
46
|
return nil
|
47
47
|
end
|
48
48
|
end
|
49
|
-
end
|
50
49
|
|
50
|
+
def self.clobber_attribute_method!
|
51
|
+
ArDocStore::Storage::ClassMethods.module_eval do
|
52
|
+
def attribute(*args)
|
53
|
+
json_attribute *args
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -101,7 +101,7 @@ module ArDocStore
|
|
101
101
|
def create_embeds_many_validation(assn_name)
|
102
102
|
model.class_eval do
|
103
103
|
validate_method = "validate_embedded_record_for_#{assn_name}"
|
104
|
-
define_method validate_method, -> { validate_embeds_many assn_name }
|
104
|
+
define_method validate_method.to_s, -> { validate_embeds_many assn_name }
|
105
105
|
validate validate_method
|
106
106
|
end
|
107
107
|
end
|
@@ -2,7 +2,7 @@ module ArDocStore
|
|
2
2
|
module AttributeTypes
|
3
3
|
|
4
4
|
class EnumerationAttribute < BaseAttribute
|
5
|
-
|
5
|
+
|
6
6
|
def build
|
7
7
|
key = attribute.to_sym
|
8
8
|
dictionary = options[:values]
|
@@ -10,9 +10,9 @@ module ArDocStore
|
|
10
10
|
strict = options[:strict]
|
11
11
|
default_value = default
|
12
12
|
model.class_eval do
|
13
|
-
|
13
|
+
|
14
14
|
if multiple
|
15
|
-
|
15
|
+
json_attribute key, as: :array, default: default_value
|
16
16
|
if strict
|
17
17
|
define_method "validate_#{key}" do
|
18
18
|
value = public_send(key)
|
@@ -21,7 +21,7 @@ module ArDocStore
|
|
21
21
|
validate "validate_#{key}".to_sym
|
22
22
|
end
|
23
23
|
else
|
24
|
-
|
24
|
+
json_attribute key, as: :string, default: default_value
|
25
25
|
if strict
|
26
26
|
validates_inclusion_of key, in: dictionary, allow_blank: true
|
27
27
|
end
|
@@ -1,25 +1,25 @@
|
|
1
1
|
module ArDocStore
|
2
2
|
module Embedding
|
3
3
|
def self.included(mod)
|
4
|
-
mod.send :extend, ClassMethods
|
4
|
+
mod.send :extend, ClassMethods
|
5
5
|
mod.send :include, InstanceMethods
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
module ClassMethods
|
9
9
|
|
10
10
|
def embeds_many(assn_name, *args)
|
11
|
-
|
11
|
+
json_attribute assn_name, :embeds_many, *args
|
12
12
|
end
|
13
13
|
|
14
14
|
def embeds_one(assn_name, *args)
|
15
|
-
|
15
|
+
json_attribute assn_name, :embeds_one, *args
|
16
16
|
end
|
17
17
|
|
18
18
|
end
|
19
|
-
|
20
|
-
|
19
|
+
|
20
|
+
|
21
21
|
module InstanceMethods
|
22
|
-
|
22
|
+
|
23
23
|
# Returns whether or not the association is valid and applies any errors to
|
24
24
|
# the parent, <tt>self</tt>, if it wasn't. Skips any <tt>:autosave</tt>
|
25
25
|
# enabled records if they're marked_for_destruction? or destroyed.
|
data/lib/ar_doc_store/storage.rb
CHANGED
@@ -67,7 +67,7 @@ module ArDocStore
|
|
67
67
|
|
68
68
|
module ClassMethods
|
69
69
|
|
70
|
-
def
|
70
|
+
def json_attribute(name, *args)
|
71
71
|
type = args.shift if args.first.is_a?(Symbol)
|
72
72
|
options = args.extract_options!
|
73
73
|
type ||= options.delete(:as) || :string
|
@@ -120,28 +120,28 @@ module ArDocStore
|
|
120
120
|
# Allows you to define several string attributes at once. Deprecated.
|
121
121
|
def string_attributes(*args)
|
122
122
|
args.each do |arg|
|
123
|
-
|
123
|
+
json_attribute arg, as: :string
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
127
127
|
# Allows you to define several float attributes at once. Deprecated.
|
128
128
|
def float_attributes(*args)
|
129
129
|
args.each do |arg|
|
130
|
-
|
130
|
+
json_attribute arg, as: :float
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
134
|
# Allows you to define several integer attributes at once. Deprecated.
|
135
135
|
def integer_attributes(*args)
|
136
136
|
args.each do |arg|
|
137
|
-
|
137
|
+
json_attribute arg, as: :integer
|
138
138
|
end
|
139
139
|
end
|
140
140
|
|
141
141
|
# Allows you to define several boolean attributes at once. Deprecated.
|
142
142
|
def boolean_attributes(*args)
|
143
143
|
args.each do |arg|
|
144
|
-
|
144
|
+
json_attribute arg, as: :boolean
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
@@ -150,7 +150,7 @@ module ArDocStore
|
|
150
150
|
def enumerates(field, *args)
|
151
151
|
options = args.extract_options!
|
152
152
|
options[:as] = :enumeration
|
153
|
-
|
153
|
+
json_attribute field, options
|
154
154
|
end
|
155
155
|
|
156
156
|
|
data/lib/ar_doc_store/version.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -27,7 +27,7 @@ class ARDuck
|
|
27
27
|
@attributes = HashWithIndifferentAccess.new
|
28
28
|
unless attrs.nil?
|
29
29
|
attrs.each { |key, value|
|
30
|
-
@
|
30
|
+
@jattributes[key] = public_send("#{key}=", value)
|
31
31
|
}
|
32
32
|
end
|
33
33
|
@_initialized = true
|
@@ -54,7 +54,7 @@ class ARDuck
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def write_store_attribute(store, key, value)
|
57
|
-
#
|
57
|
+
#changed_json_attributes[key] = read_store_json_attribute(:data, key) if @_initialized
|
58
58
|
@attributes[key] = value
|
59
59
|
end
|
60
60
|
|
@@ -71,36 +71,36 @@ end
|
|
71
71
|
|
72
72
|
class EmbeddableA < ARDuck
|
73
73
|
include ArDocStore::EmbeddableModel
|
74
|
-
|
74
|
+
json_attribute :name
|
75
75
|
end
|
76
76
|
|
77
77
|
class EmbeddableB < EmbeddableA
|
78
|
-
|
78
|
+
json_attribute :gender
|
79
79
|
end
|
80
80
|
|
81
81
|
class Dimensions
|
82
82
|
include ArDocStore::EmbeddableModel
|
83
|
-
|
84
|
-
|
83
|
+
json_attribute :length, :float
|
84
|
+
json_attribute :width, :float
|
85
85
|
end
|
86
86
|
|
87
87
|
class Route
|
88
88
|
include ArDocStore::EmbeddableModel
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
89
|
+
json_attribute :is_route_unobstructed, as: :boolean
|
90
|
+
json_attribute :is_route_lighted, as: :boolean
|
91
|
+
json_attribute :route_surface, as: :string
|
92
|
+
json_attribute :route_slope_percent, as: :integer
|
93
|
+
json_attribute :route_min_width, as: :integer
|
94
94
|
end
|
95
95
|
|
96
96
|
class Door
|
97
97
|
include ArDocStore::EmbeddableModel
|
98
98
|
enumerates :door_type, multiple: true, values: %w{single double french sliding push pull}
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
99
|
+
json_attribute :open_handle, as: :enumeration, multiple: true, values: %w{push pull plate knob handle}
|
100
|
+
json_attribute :close_handle, as: :enumeration, multiple: true, values: %w{push pull plate knob handle}
|
101
|
+
json_attribute :clear_distance, as: :integer
|
102
|
+
json_attribute :opening_force, as: :integer
|
103
|
+
json_attribute :clear_space, as: :integer
|
104
104
|
end
|
105
105
|
|
106
106
|
class Entrance
|
@@ -116,8 +116,8 @@ class Restroom
|
|
116
116
|
|
117
117
|
enumerates :restroom_type, values: %w{single double dirty nasty clean}
|
118
118
|
|
119
|
-
|
120
|
-
|
119
|
+
json_attribute :is_restroom_provided, as: :boolean
|
120
|
+
json_attribute :is_signage_clear, as: :boolean
|
121
121
|
|
122
122
|
embeds_one :stall_area_dimensions, class_name: 'Dimensions'
|
123
123
|
embeds_one :sink_area_dimensions, class_name: 'Dimensions'
|
@@ -128,16 +128,16 @@ end
|
|
128
128
|
|
129
129
|
class Building < ActiveRecord::Base
|
130
130
|
include ArDocStore::Model
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
131
|
+
json_attribute :name, :string
|
132
|
+
json_attribute :comments, as: :string
|
133
|
+
json_attribute :finished, :boolean
|
134
|
+
json_attribute :stories, as: :integer
|
135
|
+
json_attribute :height, as: :float
|
136
|
+
json_attribute :architects, as: :array
|
137
|
+
json_attribute :construction, as: :enumeration, values: %w{concrete wood brick plaster steel}
|
138
|
+
json_attribute :multiconstruction, as: :enumeration, values: %w{concrete wood brick plaster steel}, multiple: true
|
139
|
+
json_attribute :strict_enumeration, as: :enumeration, values: %w{happy sad glad bad}, strict: true
|
140
|
+
json_attribute :strict_multi_enumeration, as: :enumeration, values: %w{happy sad glad bad}, multiple: true, strict: true
|
141
141
|
embeds_many :entrances
|
142
142
|
embeds_many :restrooms
|
143
143
|
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ar_doc_store
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Furber
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: pg
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
128
128
|
version: '0'
|
129
129
|
requirements: []
|
130
130
|
rubyforge_project:
|
131
|
-
rubygems_version: 2.
|
131
|
+
rubygems_version: 2.5.1
|
132
132
|
signing_key:
|
133
133
|
specification_version: 4
|
134
134
|
summary: A document storage gem meant for ActiveRecord PostgresQL JSON storage.
|