her 0.7.2 → 0.7.3
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/.travis.yml +3 -8
- data/README.md +3 -0
- data/gemfiles/Gemfile.activemodel-4.2 +7 -0
- data/her.gemspec +2 -2
- data/lib/her/model/associations/association.rb +6 -5
- data/lib/her/model/associations/belongs_to_association.rb +7 -6
- data/lib/her/model.rb +3 -2
- data/lib/her/version.rb +1 -1
- data/spec/model/associations_spec.rb +17 -0
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 87aaa3745246a66aad1a02e08921a10a4ffbd3af
|
4
|
+
data.tar.gz: ecd7f1c297037dabdb587d44c5fb002ab2445f09
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f794411479dbb0a4de3fb3d7fc7c33f916282c6d1b48cb463aa8ff2e12a58e421f06ab81377893958c4a5921a4f98a17952f2efd06a4529f070889903c4f05f
|
7
|
+
data.tar.gz: 410c1ac5f07cc3879a8b57c3674906a28ad57bd52a2beb5fb4b2c1470dada40171dac78c78fb41e0e8224a3a5ed2525029e1ba2659957706174c673316152be0
|
data/.travis.yml
CHANGED
@@ -1,20 +1,15 @@
|
|
1
1
|
language: ruby
|
2
2
|
|
3
|
+
sudo: false
|
4
|
+
|
3
5
|
rvm:
|
4
6
|
- 2.0.0
|
5
7
|
- 1.9.3
|
6
|
-
- 1.9.2
|
7
8
|
|
8
9
|
gemfile:
|
10
|
+
- gemfiles/Gemfile.activemodel-4.2
|
9
11
|
- gemfiles/Gemfile.activemodel-4.1
|
10
12
|
- gemfiles/Gemfile.activemodel-4.0
|
11
13
|
- gemfiles/Gemfile.activemodel-3.2.x
|
12
14
|
|
13
|
-
matrix:
|
14
|
-
exclude:
|
15
|
-
- rvm: 1.9.2
|
16
|
-
gemfile: gemfiles/Gemfile.activemodel-4.0
|
17
|
-
- rvm: 1.9.2
|
18
|
-
gemfile: gemfiles/Gemfile.activemodel-4.1
|
19
|
-
|
20
15
|
script: "echo 'COME ON!' && bundle exec rake spec"
|
data/README.md
CHANGED
@@ -476,6 +476,8 @@ end
|
|
476
476
|
@user.changes # => {}
|
477
477
|
```
|
478
478
|
|
479
|
+
To update only the modified attributes specify `:send_only_modified_attributes => true` in the setup.
|
480
|
+
|
479
481
|
### Callbacks
|
480
482
|
|
481
483
|
You can add *before* and *after* callbacks to your models that are triggered on specific actions. You can use symbols or blocks.
|
@@ -947,6 +949,7 @@ Most projects I know that use Her are internal or private projects but here’s
|
|
947
949
|
* [crowdher](https://github.com/simonprev/crowdher)
|
948
950
|
* [vodka](https://github.com/magnolia-fan/vodka)
|
949
951
|
* [webistrano_cli](https://github.com/chytreg/webistrano_cli)
|
952
|
+
* [ASMALLWORLD](https://www.asmallworld.com)
|
950
953
|
|
951
954
|
## History
|
952
955
|
|
data/her.gemspec
CHANGED
@@ -23,8 +23,8 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_development_dependency "fivemat", "~> 1.2"
|
24
24
|
s.add_development_dependency "json", "~> 1.8"
|
25
25
|
|
26
|
-
s.add_runtime_dependency "activemodel", ">= 3.0.0", "
|
27
|
-
s.add_runtime_dependency "activesupport", ">= 3.0.0", "
|
26
|
+
s.add_runtime_dependency "activemodel", ">= 3.0.0", "<= 4.2"
|
27
|
+
s.add_runtime_dependency "activesupport", ">= 3.0.0", "<= 4.2"
|
28
28
|
s.add_runtime_dependency "faraday", ">= 0.8", "< 1.0"
|
29
29
|
s.add_runtime_dependency "multi_json", "~> 1.7"
|
30
30
|
end
|
@@ -47,11 +47,12 @@ module Her
|
|
47
47
|
attribute_value = @parent.attributes[@name]
|
48
48
|
return @opts[:default].try(:dup) if @parent.attributes.include?(@name) && (attribute_value.nil? || !attribute_value.nil? && attribute_value.empty?) && @params.empty?
|
49
49
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
50
|
+
return @cached_result unless @params.any? || @cached_result.nil?
|
51
|
+
return @parent.attributes[@name] unless @params.any? || @parent.attributes[@name].blank?
|
52
|
+
|
53
|
+
path = build_association_path lambda { "#{@parent.request_path(@params)}#{@opts[:path]}" }
|
54
|
+
@klass.get(path, @params).tap do |result|
|
55
|
+
@cached_result = result unless @params.any?
|
55
56
|
end
|
56
57
|
end
|
57
58
|
|
@@ -76,12 +76,13 @@ module Her
|
|
76
76
|
data_key_value = @parent.attributes[@opts[:data_key].to_sym]
|
77
77
|
return @opts[:default].try(:dup) if (@parent.attributes.include?(@name) && @parent.attributes[@name].nil? && @params.empty?) || (@parent.persisted? && foreign_key_value.blank? && data_key_value.blank?)
|
78
78
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
79
|
+
return @cached_result unless @params.any? || @cached_result.nil?
|
80
|
+
return @parent.attributes[@name] unless @params.any? || @parent.attributes[@name].blank?
|
81
|
+
|
82
|
+
path_params = @parent.attributes.merge(@params.merge(@klass.primary_key => foreign_key_value))
|
83
|
+
path = build_association_path lambda { @klass.build_request_path(path_params) }
|
84
|
+
@klass.get(path, @params).tap do |result|
|
85
|
+
@cached_result = result if @params.blank?
|
85
86
|
end
|
86
87
|
end
|
87
88
|
|
data/lib/her/model.rb
CHANGED
@@ -43,8 +43,6 @@ module Her
|
|
43
43
|
include ActiveModel::Validations::Callbacks
|
44
44
|
include ActiveModel::Conversion
|
45
45
|
include ActiveModel::Dirty
|
46
|
-
include ActiveModel::Naming
|
47
|
-
include ActiveModel::Translation
|
48
46
|
|
49
47
|
# Class methods
|
50
48
|
included do
|
@@ -63,6 +61,9 @@ module Her
|
|
63
61
|
store_response_errors :response_errors
|
64
62
|
store_metadata :metadata
|
65
63
|
|
64
|
+
# Include ActiveModel naming methods
|
65
|
+
extend ActiveModel::Translation
|
66
|
+
|
66
67
|
# Configure ActiveModel callbacks
|
67
68
|
extend ActiveModel::Callbacks
|
68
69
|
define_model_callbacks :create, :update, :save, :find, :destroy, :initialize
|
data/lib/her/version.rb
CHANGED
@@ -137,6 +137,7 @@ describe Her::Model::Associations do
|
|
137
137
|
let(:user_with_included_data_after_create) { Foo::User.create }
|
138
138
|
let(:user_with_included_data_after_save_existing) { Foo::User.save_existing(5, :name => "Clancy Brown") }
|
139
139
|
let(:user_with_included_data_after_destroy) { Foo::User.new(:id => 5).destroy }
|
140
|
+
let(:comment_without_included_parent_data) { Foo::Comment.new(:id => 7, :user_id => 1) }
|
140
141
|
|
141
142
|
it "maps an array of included data through has_many" do
|
142
143
|
@user_with_included_data.comments.first.should be_a(Foo::Comment)
|
@@ -149,6 +150,14 @@ describe Her::Model::Associations do
|
|
149
150
|
@user_with_included_data.comments.first.user.object_id.should == @user_with_included_data.object_id
|
150
151
|
end
|
151
152
|
|
153
|
+
it "does fetch the parent models data only once" do
|
154
|
+
comment_without_included_parent_data.user.object_id.should == comment_without_included_parent_data.user.object_id
|
155
|
+
end
|
156
|
+
|
157
|
+
it "does fetch the parent models data that was cached if called with parameters" do
|
158
|
+
comment_without_included_parent_data.user.object_id.should_not == comment_without_included_parent_data.user.where(:a => 2).object_id
|
159
|
+
end
|
160
|
+
|
152
161
|
it "uses the given inverse_of key to set the parent model" do
|
153
162
|
@user_with_included_data.posts.first.admin.object_id.should == @user_with_included_data.object_id
|
154
163
|
end
|
@@ -164,6 +173,14 @@ describe Her::Model::Associations do
|
|
164
173
|
@user_with_included_data.comments.where(:foo_id => 1).length.should == 1
|
165
174
|
end
|
166
175
|
|
176
|
+
it "fetches data that was not included through has_many only once" do
|
177
|
+
@user_without_included_data.comments.first.object_id.should == @user_without_included_data.comments.first.object_id
|
178
|
+
end
|
179
|
+
|
180
|
+
it "fetches data that was cached through has_many if called with parameters" do
|
181
|
+
@user_without_included_data.comments.first.object_id.should_not == @user_without_included_data.comments.where(:foo_id => 1).first.object_id
|
182
|
+
end
|
183
|
+
|
167
184
|
it "maps an array of included data through has_one" do
|
168
185
|
@user_with_included_data.role.should be_a(Foo::Role)
|
169
186
|
@user_with_included_data.role.object_id.should == @user_with_included_data.role.object_id
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: her
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rémi Prévost
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -87,7 +87,7 @@ dependencies:
|
|
87
87
|
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: 3.0.0
|
90
|
-
- - "
|
90
|
+
- - "<="
|
91
91
|
- !ruby/object:Gem::Version
|
92
92
|
version: '4.2'
|
93
93
|
type: :runtime
|
@@ -97,7 +97,7 @@ dependencies:
|
|
97
97
|
- - ">="
|
98
98
|
- !ruby/object:Gem::Version
|
99
99
|
version: 3.0.0
|
100
|
-
- - "
|
100
|
+
- - "<="
|
101
101
|
- !ruby/object:Gem::Version
|
102
102
|
version: '4.2'
|
103
103
|
- !ruby/object:Gem::Dependency
|
@@ -107,7 +107,7 @@ dependencies:
|
|
107
107
|
- - ">="
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: 3.0.0
|
110
|
-
- - "
|
110
|
+
- - "<="
|
111
111
|
- !ruby/object:Gem::Version
|
112
112
|
version: '4.2'
|
113
113
|
type: :runtime
|
@@ -117,7 +117,7 @@ dependencies:
|
|
117
117
|
- - ">="
|
118
118
|
- !ruby/object:Gem::Version
|
119
119
|
version: 3.0.0
|
120
|
-
- - "
|
120
|
+
- - "<="
|
121
121
|
- !ruby/object:Gem::Version
|
122
122
|
version: '4.2'
|
123
123
|
- !ruby/object:Gem::Dependency
|
@@ -174,6 +174,7 @@ files:
|
|
174
174
|
- gemfiles/Gemfile.activemodel-3.2.x
|
175
175
|
- gemfiles/Gemfile.activemodel-4.0
|
176
176
|
- gemfiles/Gemfile.activemodel-4.1
|
177
|
+
- gemfiles/Gemfile.activemodel-4.2
|
177
178
|
- her.gemspec
|
178
179
|
- lib/her.rb
|
179
180
|
- lib/her/api.rb
|