her 0.7.4 → 0.7.5
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 +2 -0
- data/README.md +2 -2
- data/lib/her/api.rb +3 -4
- data/lib/her/model/associations/association_proxy.rb +1 -1
- data/lib/her/model/attributes.rb +3 -5
- data/lib/her/version.rb +1 -1
- data/spec/model/associations/association_proxy_spec.rb +31 -0
- data/spec/model/attributes_spec.rb +35 -0
- data/spec/model/dirty_spec.rb +5 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 18b4493b9a94d75fb08c9df34781081f9c23af85
|
4
|
+
data.tar.gz: d5fd8f8dc913f127c274be1902103f592574049d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d824a80974f8ab9b67d35e41473ad5f034fbd6756e007a03b407906865de41dd9dfe76273910affcb6bec4926ad38ad846915e489225a11cdc569919659ccd31
|
7
|
+
data.tar.gz: 86425b035982382401b6ecec423402760d40cbbbb238eb04673b796d9c73676b12f4b65bf64215e391f2c551ccc03da7005b0ad30ee9d33a871b74eebe7f0bf1
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -757,7 +757,7 @@ Just like with ActiveRecord, you can define named scopes for your models. Scopes
|
|
757
757
|
class User
|
758
758
|
include Her::Model
|
759
759
|
|
760
|
-
scope :by_role, -> {
|
760
|
+
scope :by_role, ->(role) { where(role: role) }
|
761
761
|
scope :admins, -> { by_role('admin') }
|
762
762
|
scope :active, -> { where(active: 1) }
|
763
763
|
end
|
@@ -779,7 +779,7 @@ class User
|
|
779
779
|
include Her::Model
|
780
780
|
|
781
781
|
collection_path "organizations/:organization_id/users"
|
782
|
-
scope :for_organization, -> {
|
782
|
+
scope :for_organization, ->(id) { where(organization_id: id) }
|
783
783
|
end
|
784
784
|
|
785
785
|
@user = User.for_organization(3).find(2)
|
data/lib/her/api.rb
CHANGED
@@ -10,8 +10,7 @@ module Her
|
|
10
10
|
|
11
11
|
# Setup a default API connection. Accepted arguments and options are the same as {API#setup}.
|
12
12
|
def self.setup(opts={}, &block)
|
13
|
-
@default_api = new
|
14
|
-
@default_api.setup(opts, &block)
|
13
|
+
@default_api = new(opts, &block)
|
15
14
|
end
|
16
15
|
|
17
16
|
# Create a new API object. This is useful to create multiple APIs and use them with the `uses_api` method.
|
@@ -27,14 +26,14 @@ module Her
|
|
27
26
|
# uses_api api
|
28
27
|
# end
|
29
28
|
def initialize(*args, &blk)
|
30
|
-
|
29
|
+
setup(*args, &blk)
|
31
30
|
end
|
32
31
|
|
33
32
|
# Setup the API connection.
|
34
33
|
#
|
35
34
|
# @param [Hash] opts the Faraday options
|
36
35
|
# @option opts [String] :url The main HTTP API root (eg. `https://api.example.com`)
|
37
|
-
# @option opts [String] :ssl A hash containing [SSL options](https://github.com/
|
36
|
+
# @option opts [String] :ssl A hash containing [SSL options](https://github.com/lostisland/faraday/wiki/Setting-up-SSL-certificates)
|
38
37
|
#
|
39
38
|
# @return Faraday::Connection
|
40
39
|
#
|
data/lib/her/model/attributes.rb
CHANGED
@@ -187,17 +187,15 @@ module Her
|
|
187
187
|
define_attribute_methods attributes
|
188
188
|
|
189
189
|
attributes.each do |attribute|
|
190
|
-
attribute
|
191
|
-
|
192
|
-
unless instance_methods.include?(:"#{attribute}=")
|
190
|
+
unless method_defined?(:"#{attribute}=")
|
193
191
|
define_method("#{attribute}=") do |value|
|
194
192
|
@attributes[:"#{attribute}"] = nil unless @attributes.include?(:"#{attribute}")
|
195
|
-
self.send(:"#{attribute}_will_change!") if @attributes[:
|
193
|
+
self.send(:"#{attribute}_will_change!") if @attributes[:"#{attribute}"] != value
|
196
194
|
@attributes[:"#{attribute}"] = value
|
197
195
|
end
|
198
196
|
end
|
199
197
|
|
200
|
-
unless
|
198
|
+
unless method_defined?(:"#{attribute}?")
|
201
199
|
define_method("#{attribute}?") do
|
202
200
|
@attributes.include?(:"#{attribute}") && @attributes[:"#{attribute}"].present?
|
203
201
|
end
|
data/lib/her/version.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
describe Her::Model::Associations::AssociationProxy do
|
5
|
+
describe "proxy assignment methods" do
|
6
|
+
before do
|
7
|
+
Her::API.setup url: "https://api.example.com" do |builder|
|
8
|
+
builder.use Her::Middleware::FirstLevelParseJSON
|
9
|
+
builder.use Faraday::Request::UrlEncoded
|
10
|
+
builder.adapter :test do |stub|
|
11
|
+
stub.get("/users/1") { |env| [200, {}, { :id => 1, :name => "Tobias Fünke" }.to_json ] }
|
12
|
+
stub.get("/users/1/fish") { |env| [200, {}, { :id => 1, :name => "Tobias's Fish" }.to_json ] }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
spawn_model "User" do
|
16
|
+
has_one :fish
|
17
|
+
end
|
18
|
+
spawn_model "Fish"
|
19
|
+
end
|
20
|
+
|
21
|
+
subject { User.find(1) }
|
22
|
+
|
23
|
+
it "should assign value" do
|
24
|
+
subject.fish.name = "Fishy"
|
25
|
+
expect(subject.fish.name).to eq "Fishy"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
|
@@ -265,4 +265,39 @@ describe Her::Model::Attributes do
|
|
265
265
|
end
|
266
266
|
end
|
267
267
|
end
|
268
|
+
|
269
|
+
context "attributes class method" do
|
270
|
+
before do
|
271
|
+
spawn_model 'Foo::User' do
|
272
|
+
attributes :fullname, :document
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
context "instance" do
|
277
|
+
subject { Foo::User.new }
|
278
|
+
|
279
|
+
it { should respond_to(:fullname) }
|
280
|
+
it { should respond_to(:fullname=) }
|
281
|
+
it { should respond_to(:fullname?) }
|
282
|
+
end
|
283
|
+
|
284
|
+
it "defines setter that affects @attributes" do
|
285
|
+
user = Foo::User.new
|
286
|
+
user.fullname = 'Tobias Fünke'
|
287
|
+
user.attributes[:fullname].should eq('Tobias Fünke')
|
288
|
+
end
|
289
|
+
|
290
|
+
it "defines getter that reads @attributes" do
|
291
|
+
user = Foo::User.new
|
292
|
+
user.assign_attributes(fullname: 'Tobias Fünke')
|
293
|
+
user.fullname.should eq('Tobias Fünke')
|
294
|
+
end
|
295
|
+
|
296
|
+
it "defines predicate that reads @attributes" do
|
297
|
+
user = Foo::User.new
|
298
|
+
user.fullname?.should be_falsey
|
299
|
+
user.assign_attributes(fullname: 'Tobias Fünke')
|
300
|
+
user.fullname?.should be_truthy
|
301
|
+
end
|
302
|
+
end
|
268
303
|
end
|
data/spec/model/dirty_spec.rb
CHANGED
@@ -41,6 +41,11 @@ describe "Her::Model and ActiveModel::Dirty" do
|
|
41
41
|
user.should_not be_changed
|
42
42
|
end
|
43
43
|
|
44
|
+
it "tracks only changed dirty attributes" do
|
45
|
+
user.fullname = user.fullname
|
46
|
+
user.fullname_changed?.should be_falsey
|
47
|
+
end
|
48
|
+
|
44
49
|
it "tracks previous changes" do
|
45
50
|
user.fullname = "Tobias Fünke"
|
46
51
|
user.save
|
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.5
|
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: 2015-
|
11
|
+
date: 2015-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -208,6 +208,7 @@ files:
|
|
208
208
|
- spec/middleware/accept_json_spec.rb
|
209
209
|
- spec/middleware/first_level_parse_json_spec.rb
|
210
210
|
- spec/middleware/second_level_parse_json_spec.rb
|
211
|
+
- spec/model/associations/association_proxy_spec.rb
|
211
212
|
- spec/model/associations_spec.rb
|
212
213
|
- spec/model/attributes_spec.rb
|
213
214
|
- spec/model/callbacks_spec.rb
|
@@ -247,7 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
247
248
|
version: '0'
|
248
249
|
requirements: []
|
249
250
|
rubyforge_project:
|
250
|
-
rubygems_version: 2.2.
|
251
|
+
rubygems_version: 2.2.3
|
251
252
|
signing_key:
|
252
253
|
specification_version: 4
|
253
254
|
summary: A simple Representational State Transfer-based Hypertext Transfer Protocol-powered
|
@@ -258,6 +259,7 @@ test_files:
|
|
258
259
|
- spec/middleware/accept_json_spec.rb
|
259
260
|
- spec/middleware/first_level_parse_json_spec.rb
|
260
261
|
- spec/middleware/second_level_parse_json_spec.rb
|
262
|
+
- spec/model/associations/association_proxy_spec.rb
|
261
263
|
- spec/model/associations_spec.rb
|
262
264
|
- spec/model/attributes_spec.rb
|
263
265
|
- spec/model/callbacks_spec.rb
|