active_hash 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ODAxNDcxMTI0NjIwNDQ3ZjJjZmVkYmY1Yjc2NGQ5MDZjMTBjNDAzZg==
5
- data.tar.gz: !binary |-
6
- YzA5OWQ3YjMzNGQ5MzM0NzhkZjk3ZDJmODFiMDdkMzA0YTRiODc5OA==
2
+ SHA1:
3
+ metadata.gz: 07f278485648e475f69c32f40ae5f647a7e275c5
4
+ data.tar.gz: 04811d2113fdf923916200ebfe3966f6f6d3e4be
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- YjNkMzdjMmY5MjYwYTg4ZGJmMzJkM2I1Y2QxYjRlYTQzODc2ZWFlNjY5ODA3
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 seemlessly upgrade from ActiveHash objects to full ActiveRecord objects without having to change any code in your app, or any foreign keys in your database.
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
- gem install active_hash
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.
@@ -1,5 +1,5 @@
1
1
  module ActiveHash
2
2
  module Gem
3
- VERSION = "1.3.0"
3
+ VERSION = "1.4.0"
4
4
  end
5
5
  end
@@ -1,3 +1,5 @@
1
+ require 'yaml'
2
+
1
3
  module ActiveYaml
2
4
 
3
5
  class Base < ActiveFile::Base
@@ -44,25 +44,40 @@ module ActiveHash
44
44
  end
45
45
  end
46
46
 
47
- method = ActiveRecord::Base.method(:create_reflection)
48
- if method.respond_to?(:parameters) && method.parameters.length == 5
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
- else
57
- create_reflection(
58
- :belongs_to,
55
+
56
+ ActiveRecord::Reflection.add_reflection(
57
+ self,
59
58
  association_id.to_sym,
60
- options,
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(options[:foreign_key] => primary_key_value)
102
+ klass.where(foreign_key => primary_key_value)
87
103
  elsif klass.respond_to?(:scoped)
88
- klass.scoped(:conditions => {options[:foreign_key] => primary_key_value})
104
+ klass.scoped(:conditions => {foreign_key => primary_key_value})
89
105
  else
90
- klass.send("find_all_by_#{options[:foreign_key]}", primary_key_value)
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.3.0
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-02-19 00:00:00.000000000 Z
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.1
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