active_hash 1.3.0 → 1.4.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 +5 -13
- data/CHANGELOG +3 -0
- data/README.md +29 -6
- data/lib/active_hash/version.rb +1 -1
- data/lib/active_yaml/base.rb +2 -0
- data/lib/associations/associations.rb +28 -12
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
YzA5OWQ3YjMzNGQ5MzM0NzhkZjk3ZDJmODFiMDdkMzA0YTRiODc5OA==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 07f278485648e475f69c32f40ae5f647a7e275c5
|
4
|
+
data.tar.gz: 04811d2113fdf923916200ebfe3966f6f6d3e4be
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
MTk3NWE4MGIyYTc1ZDhjYzYxYTc0MDkyYWU5MTE4NTg2ODhiZGE5NjhlYWM1
|
11
|
-
YWQ4OTJmYWJlOWUyZGE4NzMwZTkwNTdhMGJlYmFjOTljYzI2Njk=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
YzAzMzJlMTYzNmVlYzA2NDBjYmMxZTViOWNjNmMzNDNlNGFjMTUwZGUzYTk4
|
14
|
-
NDViYjk2MTUzYzZmZTNjOGNlNTUwZDM4NDA5ZjE5MzM0NTkxN2ZhNTljMjc1
|
15
|
-
ZGFjYWRkODJiMjNiMGJiN2Q1Njc2MGExNmE0MWJhMDUxOTdhOWI=
|
6
|
+
metadata.gz: 76e9b4d4d67e4863473388961024dd66af1b2b81771798f1fb24417060ffd93b93887dadea24dce45cde7d13ccf0759c93775710987281ed18a05009bb083bb1
|
7
|
+
data.tar.gz: c29c149a4db09945d9c616d616223b629771d74316d43465d6b412b7b02b0146fe09f37270734579bc11b77b71315cde671387ea1cace714f39eb9c1bff92b8c
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
2014-09-03 (v1.4.0)
|
2
|
+
- support Rails 4.2 (agraves, al2o3cr)
|
3
|
+
|
1
4
|
2014-02-18 (v1.3.0)
|
2
5
|
- fix bug where including ActiveHash associations would make `belongs_to :imageable, polymorphic: true` blow up
|
3
6
|
- fixed several bugs that prevented active hash from being used without active record / active model
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
ActiveHash is a simple base class that allows you to use a ruby hash as a readonly datasource for an ActiveRecord-like model.
|
6
6
|
|
7
|
-
ActiveHash assumes that every hash has an :id key, which is what you would probably store in a database. This allows you to
|
7
|
+
ActiveHash assumes that every hash has an :id key, which is what you would probably store in a database. This allows you to seamlessly upgrade from ActiveHash objects to full ActiveRecord objects without having to change any code in your app, or any foreign keys in your database.
|
8
8
|
|
9
9
|
It also allows you to use #has_many and #belongs_to (via belongs_to_active_hash) in your AR objects.
|
10
10
|
|
@@ -23,7 +23,34 @@ Bundler:
|
|
23
23
|
|
24
24
|
Other:
|
25
25
|
|
26
|
-
|
26
|
+
gem install active_hash
|
27
|
+
|
28
|
+
## Reason for being
|
29
|
+
|
30
|
+
We wrote ActiveHash so that we could use simple, in-memory, ActiveRecord-like data structures that play well with Rails forms, like:
|
31
|
+
|
32
|
+
# in app/models/country.rb
|
33
|
+
class Country < ActiveHash::Base
|
34
|
+
self.data = [
|
35
|
+
{:id => 1, :name => "US"},
|
36
|
+
{:id => 2, :name => "Canada"}
|
37
|
+
]
|
38
|
+
end
|
39
|
+
|
40
|
+
# in some view
|
41
|
+
<%= collection_select :person, :country_id, Country.all, :id, :name %>
|
42
|
+
|
43
|
+
Before ActiveHash, we did things like:
|
44
|
+
|
45
|
+
# in app/models/person.rb
|
46
|
+
class Person < ActiveRecord::Base
|
47
|
+
COUNTRIES = ["US", "Canada"]
|
48
|
+
end
|
49
|
+
|
50
|
+
# in some view
|
51
|
+
<%= collection_select :person, :country_id, Person::COUNTRIES, :to_s, :to_s %>
|
52
|
+
|
53
|
+
The majority of ActiveHash uses involve setting up some data at boot time, and never modifying that data at runtime.
|
27
54
|
|
28
55
|
## Usage
|
29
56
|
|
@@ -229,10 +256,6 @@ With ActiveRecord versions < 3.1, ActiveHash will also work as a polymorphic par
|
|
229
256
|
|
230
257
|
However, as of ActiveRecord 3.1 this will not work. If you need support for that, please open an issue.
|
231
258
|
|
232
|
-
You can also use standard rails view helpers, like #collection_select:
|
233
|
-
|
234
|
-
<%= collection_select :person, :country_id, Country.all, :id, :name %>
|
235
|
-
|
236
259
|
### Using shortcuts
|
237
260
|
|
238
261
|
Since ActiveHashes usually are static, we can use shortcuts to assign via an easy to remember string instead of an obscure ID number.
|
data/lib/active_hash/version.rb
CHANGED
data/lib/active_yaml/base.rb
CHANGED
@@ -44,25 +44,40 @@ module ActiveHash
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
create_reflection(
|
47
|
+
if ActiveRecord::Reflection.respond_to?(:create)
|
48
|
+
reflection = ActiveRecord::Reflection.create(
|
50
49
|
:belongs_to,
|
51
50
|
association_id.to_sym,
|
52
51
|
nil,
|
53
52
|
options,
|
54
53
|
self
|
55
54
|
)
|
56
|
-
|
57
|
-
|
58
|
-
|
55
|
+
|
56
|
+
ActiveRecord::Reflection.add_reflection(
|
57
|
+
self,
|
59
58
|
association_id.to_sym,
|
60
|
-
|
61
|
-
options[:class_name].constantize
|
59
|
+
reflection
|
62
60
|
)
|
61
|
+
else
|
62
|
+
method = ActiveRecord::Base.method(:create_reflection)
|
63
|
+
if method.respond_to?(:parameters) && method.parameters.length == 5
|
64
|
+
create_reflection(
|
65
|
+
:belongs_to,
|
66
|
+
association_id.to_sym,
|
67
|
+
nil,
|
68
|
+
options,
|
69
|
+
self
|
70
|
+
)
|
71
|
+
else
|
72
|
+
create_reflection(
|
73
|
+
:belongs_to,
|
74
|
+
association_id.to_sym,
|
75
|
+
options,
|
76
|
+
options[:class_name].constantize
|
77
|
+
)
|
78
|
+
end
|
63
79
|
end
|
64
80
|
end
|
65
|
-
|
66
81
|
end
|
67
82
|
|
68
83
|
def self.included(base)
|
@@ -81,13 +96,14 @@ module ActiveHash
|
|
81
96
|
|
82
97
|
klass = options[:class_name].constantize
|
83
98
|
primary_key_value = send(options[:primary_key])
|
99
|
+
foreign_key = options[:foreign_key].to_sym
|
84
100
|
|
85
101
|
if Object.const_defined?(:ActiveRecord) && ActiveRecord.const_defined?(:Relation) && klass < ActiveRecord::Relation
|
86
|
-
klass.where(
|
102
|
+
klass.where(foreign_key => primary_key_value)
|
87
103
|
elsif klass.respond_to?(:scoped)
|
88
|
-
klass.scoped(:conditions => {
|
104
|
+
klass.scoped(:conditions => {foreign_key => primary_key_value})
|
89
105
|
else
|
90
|
-
klass.
|
106
|
+
klass.where(foreign_key => primary_key_value)
|
91
107
|
end
|
92
108
|
end
|
93
109
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_hash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Dean
|
@@ -28,20 +28,20 @@ authors:
|
|
28
28
|
autorequire:
|
29
29
|
bindir: bin
|
30
30
|
cert_chain: []
|
31
|
-
date: 2014-
|
31
|
+
date: 2014-09-04 00:00:00.000000000 Z
|
32
32
|
dependencies:
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: activesupport
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- -
|
37
|
+
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: 2.2.2
|
40
40
|
type: :runtime
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
|
-
- -
|
44
|
+
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 2.2.2
|
47
47
|
description: Includes the ability to specify data using hashes, yml files or JSON
|
@@ -76,17 +76,17 @@ require_paths:
|
|
76
76
|
- lib
|
77
77
|
required_ruby_version: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
|
-
- -
|
79
|
+
- - ">="
|
80
80
|
- !ruby/object:Gem::Version
|
81
81
|
version: '0'
|
82
82
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
83
|
requirements:
|
84
|
-
- -
|
84
|
+
- - ">="
|
85
85
|
- !ruby/object:Gem::Version
|
86
86
|
version: '0'
|
87
87
|
requirements: []
|
88
88
|
rubyforge_project:
|
89
|
-
rubygems_version: 2.2.
|
89
|
+
rubygems_version: 2.2.2
|
90
90
|
signing_key:
|
91
91
|
specification_version: 4
|
92
92
|
summary: An ActiveRecord-like model that uses a hash or file as a datasource
|