hashmodel 0.3.0 → 0.3.1
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.
data/README.markdown
CHANGED
@@ -4,11 +4,6 @@ A simple MVC type model class for storing deeply nested hashes as records.
|
|
4
4
|
It's meant to be used for small, in-memory recordset that you want an easy, flexible way to query.
|
5
5
|
It is not meant as a data storage device for managing huge datasets.
|
6
6
|
|
7
|
-
Note:
|
8
|
-
This started out as a programming exercise to learn more about Ruby but is now fairly well featured so can be quite useful.
|
9
|
-
It is not however a thoroughly tested or industrial strength model and it's not meant to be used to parse your entire user database.
|
10
|
-
If you're looking for an excellent model class take a look at ActiveModel, it's probably more of what you're looking for.
|
11
|
-
|
12
7
|
## Synopsis
|
13
8
|
|
14
9
|
The major usefulness of this class is it allows you to filter and search flattened records based on any field.
|
@@ -34,11 +29,7 @@ Or more powerfully you can search using boolean like logic e.g.
|
|
34
29
|
|
35
30
|
## Status
|
36
31
|
|
37
|
-
|
38
|
-
|
39
|
-
I'm doing real-world testing now and am fixing design holes and adding functionality so I wouldn't use this version until I'm done. None of the previous versions were all that useful but after I release this version I'll only develop in branches.
|
40
|
-
|
41
|
-
I expect the design to stay pretty stable from this point forward so no more surprising changes in the design or its use.
|
32
|
+
2011.03.18 - Production: 0.3.1
|
42
33
|
|
43
34
|
## Developer Notes
|
44
35
|
|
@@ -227,7 +218,11 @@ I've covered most of the major stuff here but to see all of the functionality ta
|
|
227
218
|
|
228
219
|
## Version History
|
229
220
|
|
230
|
-
0.3.
|
221
|
+
0.3.1 - 2011.03.18
|
222
|
+
|
223
|
+
* Fixed design flaw that caused HashModel not to respond to Array methods if a deserialized copy (e.g. Marshal.load) was used before a new instance of the class had been created.
|
224
|
+
|
225
|
+
0.3.0 - 2011.01.13
|
231
226
|
|
232
227
|
* HashModel\#where searches can now use symbols instead of @variables (you can still use @ if you want).
|
233
228
|
e.g. hash_model.where{:x == "x" && :y == "y"} instead of the less natural hash_model.where{@x == "x" && @y == "y"}
|
File without changes
|
@@ -390,6 +390,14 @@ class HashModel
|
|
390
390
|
|
391
391
|
private
|
392
392
|
|
393
|
+
# If the object is serialized it loses the dynamically mapped methods
|
394
|
+
# This will catch that and try to remap them.
|
395
|
+
def method_missing(symbol , *args)
|
396
|
+
mimic_methods
|
397
|
+
return send(symbol, *args) if respond_to?(symbol)
|
398
|
+
super(symbol, args)
|
399
|
+
end
|
400
|
+
|
393
401
|
# Convert a hash of multiple key/value pairs to an array of single hashes.
|
394
402
|
# {:field1 => "value1", :field2 => "value2"}
|
395
403
|
# becomes
|
data/lib/hash_model/version.rb
CHANGED
@@ -0,0 +1,28 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
# WARNING!
|
4
|
+
# The following test is valid ONLY if it is run by itself!
|
5
|
+
# If a HashModel object has been instantiated before this test
|
6
|
+
# the test will not properly verify that the dynamic methods are
|
7
|
+
# recreated.
|
8
|
+
|
9
|
+
describe HashModel do
|
10
|
+
|
11
|
+
let(:hm_file) {File.expand_path((File.dirname(__FILE__) + '/hashmodel.dat'))}
|
12
|
+
let(:hm) {Marshal.load(File.open(hm_file, "r"))}
|
13
|
+
|
14
|
+
context "after deserializing an instance" do
|
15
|
+
|
16
|
+
it "remaps dynamic methods if one of them is called" do
|
17
|
+
lambda{hm.length}.should_not raise_error
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
context "when a legitimatly non-exisitant method is called" do
|
23
|
+
it "should raise an error" do
|
24
|
+
lambda{hm.ice_cream}.should raise_error(NoMethodError)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -84,6 +84,14 @@ describe "HashModel" do
|
|
84
84
|
|
85
85
|
end # "raw data"
|
86
86
|
|
87
|
+
describe "flattened data" do
|
88
|
+
|
89
|
+
it "reports the length of the flattened data" do
|
90
|
+
@hm.length.should == 5
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
87
95
|
end # "general properties"
|
88
96
|
|
89
97
|
describe "adding records" do
|
Binary file
|
metadata
CHANGED
@@ -1,84 +1,70 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: hashmodel
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 3
|
8
|
-
- 0
|
9
|
-
version: 0.3.0
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.1
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Mike Bethany
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
date: 2011-01-13 00:00:00 -05:00
|
12
|
+
date: 2011-03-18 00:00:00.000000000 -04:00
|
18
13
|
default_executable:
|
19
|
-
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
21
16
|
name: sourcify
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
17
|
+
requirement: &2152188960 !ruby/object:Gem::Requirement
|
24
18
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
- 0
|
30
|
-
version: "0"
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
31
23
|
type: :runtime
|
32
|
-
version_requirements: *id001
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: file-tail
|
35
24
|
prerelease: false
|
36
|
-
|
25
|
+
version_requirements: *2152188960
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: file-tail
|
28
|
+
requirement: &2152188520 !ruby/object:Gem::Requirement
|
37
29
|
none: false
|
38
|
-
requirements:
|
39
|
-
- -
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
|
42
|
-
- 0
|
43
|
-
version: "0"
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
44
34
|
type: :runtime
|
45
|
-
version_requirements: *id002
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: rspec
|
48
35
|
prerelease: false
|
49
|
-
|
36
|
+
version_requirements: *2152188520
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: rspec
|
39
|
+
requirement: &2152188060 !ruby/object:Gem::Requirement
|
50
40
|
none: false
|
51
|
-
requirements:
|
52
|
-
- -
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
|
55
|
-
- 0
|
56
|
-
version: "0"
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
57
45
|
type: :development
|
58
|
-
version_requirements: *id003
|
59
|
-
- !ruby/object:Gem::Dependency
|
60
|
-
name: cucumber
|
61
46
|
prerelease: false
|
62
|
-
|
47
|
+
version_requirements: *2152188060
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: cucumber
|
50
|
+
requirement: &2152187620 !ruby/object:Gem::Requirement
|
63
51
|
none: false
|
64
|
-
requirements:
|
65
|
-
- -
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
|
68
|
-
- 0
|
69
|
-
version: "0"
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
70
56
|
type: :development
|
71
|
-
|
72
|
-
|
73
|
-
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *2152187620
|
59
|
+
description: A simple MVC type model class for storing records based on nested hashes
|
60
|
+
as an array of hashes. You can store deeply nested hashes and still easily flatten
|
61
|
+
and query the records using flattened field names.
|
62
|
+
email:
|
74
63
|
- mikbe.tk@gmail.com
|
75
64
|
executables: []
|
76
|
-
|
77
65
|
extensions: []
|
78
|
-
|
79
66
|
extra_rdoc_files: []
|
80
|
-
|
81
|
-
files:
|
67
|
+
files:
|
82
68
|
- .document
|
83
69
|
- .gitignore
|
84
70
|
- .rspec
|
@@ -87,6 +73,7 @@ files:
|
|
87
73
|
- LICENSE.txt
|
88
74
|
- README.markdown
|
89
75
|
- Rakefile
|
76
|
+
- _brainstorm/StrangeMarshal.txt
|
90
77
|
- _brainstorm/_readme
|
91
78
|
- _brainstorm/block_wheres.rb
|
92
79
|
- _brainstorm/clone.rb
|
@@ -113,41 +100,36 @@ files:
|
|
113
100
|
- lib/hash_model/hash_model.rb
|
114
101
|
- lib/hash_model/version.rb
|
115
102
|
- lib/hashmodel.rb
|
103
|
+
- spec/hash_model/_marshelling_spec.rb
|
116
104
|
- spec/hash_model/hash_model_spec.rb
|
105
|
+
- spec/hash_model/hashmodel.dat
|
117
106
|
- spec/spec_helper.rb
|
118
107
|
has_rdoc: true
|
119
108
|
homepage: http://github.com/mikbe/hashmodel
|
120
109
|
licenses: []
|
121
|
-
|
122
110
|
post_install_message:
|
123
111
|
rdoc_options: []
|
124
|
-
|
125
|
-
require_paths:
|
112
|
+
require_paths:
|
126
113
|
- lib
|
127
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
114
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
128
115
|
none: false
|
129
|
-
requirements:
|
130
|
-
- -
|
131
|
-
- !ruby/object:Gem::Version
|
132
|
-
|
133
|
-
|
134
|
-
version: "0"
|
135
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ! '>='
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
120
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
121
|
none: false
|
137
|
-
requirements:
|
138
|
-
- -
|
139
|
-
- !ruby/object:Gem::Version
|
140
|
-
|
141
|
-
- 0
|
142
|
-
version: "0"
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
143
126
|
requirements: []
|
144
|
-
|
145
127
|
rubyforge_project:
|
146
|
-
rubygems_version: 1.
|
128
|
+
rubygems_version: 1.6.2
|
147
129
|
signing_key:
|
148
130
|
specification_version: 3
|
149
131
|
summary: Store nested hashes as records and easily search them (even nested ones)
|
150
|
-
test_files:
|
132
|
+
test_files:
|
151
133
|
- features/README
|
152
134
|
- features/hash_model_flatten.feature
|
153
135
|
- features/hash_model_grouping.feature
|
@@ -155,5 +137,7 @@ test_files:
|
|
155
137
|
- features/step_definitions/hash_model_steps.rb
|
156
138
|
- features/support/env.rb
|
157
139
|
- features/support/helper.rb
|
140
|
+
- spec/hash_model/_marshelling_spec.rb
|
158
141
|
- spec/hash_model/hash_model_spec.rb
|
142
|
+
- spec/hash_model/hashmodel.dat
|
159
143
|
- spec/spec_helper.rb
|