filemaker 0.0.15 → 0.0.16

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 87a4555ad4c5f09c28a044bb5b688fbdc527c374
4
- data.tar.gz: f2cff3d87e7644b6a6bfd4390fc5f55216aa410b
3
+ metadata.gz: 74815c22be9b4664b3517a86e75cc15ee1dc6ac5
4
+ data.tar.gz: 1671c6d8d7ff017642b03f3acac0883ef34f6082
5
5
  SHA512:
6
- metadata.gz: b0872f4b1248bcad5ada6c5ce699387d144f3d495b354c8afbf0b145f66534b27c84d6e1a5b136c0e47a10d30cd18fd3eed5bd4f7ea102b71b6dba423d2834cb
7
- data.tar.gz: 805aea2ce462c4aa61648136adbcd6a7ba50151cddc9d408bfcba3d4ae3523350c2f14e1d24e3f6e38d03e3cd9b9e6a5ce3cd801e6a5aa11a06907025ab38661
6
+ metadata.gz: 7b7308d7c3d585c5344d33686f85924e94562ff7331cd8b6a7fc16a0c2878f18980483b75e74818a2b2e99e65754d6ccc06197096c2fa38f9e0384b306edf545
7
+ data.tar.gz: cfcb4506718f4889b58f2fe5da37d5554ed178ed13a51456b4dbfe1b8eeb36340647733ec54e0810b0ff68325c8b8828531646e27e04b5683b7ccdd048b93ea0
@@ -13,20 +13,34 @@ module Filemaker
13
13
  options.fetch(:reference_key) { "#{@name}_id" }
14
14
  end
15
15
 
16
+ def source_key
17
+ options.fetch(:source_key) { nil }
18
+ end
19
+
20
+ def reference_value
21
+ owner.public_send(reference_key.to_sym)
22
+ end
23
+
24
+ # Order: source_key first, reference_key next, then identity
25
+ # all must be findable using `to find_field_by_name`
26
+ def final_reference_key
27
+ target_class.find_field_by_name(source_key).try(:name) ||
28
+ target_class.find_field_by_name(reference_key).try(:name) ||
29
+ target_class.identity.try(:name)
30
+ end
31
+
16
32
  protected
17
33
 
34
+ # Single `=` match whole word or (match empty)
35
+ # Double `==` match entire field
36
+ # If the field value contains underscore or space like 'FM_notified'
37
+ # or 'FM notified', a single `=` may not match correctly.
18
38
  def build_target
19
- key_value = owner.public_send(reference_key.to_sym)
20
-
21
- if key_value.blank?
22
- @target = nil
23
- else
24
- # Single `=` match whole word or (match empty)
25
- # Double `==` match entire field
26
- # If the field value contains underscore or space like 'FM_notified'
27
- # or 'FM notified', a single `=` may not match correctly.
28
- @target = target_class.where(reference_key => "=#{key_value}").first
29
- end
39
+ @target = nil if reference_value.blank? || final_reference_key.blank?
40
+
41
+ @target = target_class.where(
42
+ final_reference_key => "=#{reference_value}"
43
+ ).first
30
44
  end
31
45
  end
32
46
  end
@@ -15,6 +15,20 @@ module Filemaker
15
15
  options.fetch(:reference_key) { owner.identity.name }
16
16
  end
17
17
 
18
+ def reference_value
19
+ owner.public_send(reference_key.to_sym)
20
+ end
21
+
22
+ def source_key
23
+ options.fetch(:source_key) { nil }
24
+ end
25
+
26
+ def final_reference_key
27
+ target_class.find_field_by_name(source_key).try(:name) ||
28
+ target_class.find_field_by_name(reference_key).try(:name) ||
29
+ target_class.identity.try(:name)
30
+ end
31
+
18
32
  # Append a model or array of models to the relation. Will set the owner
19
33
  # ID to the children.
20
34
  #
@@ -67,17 +81,11 @@ module Filemaker
67
81
  protected
68
82
 
69
83
  def build_target
70
- key_value = owner.public_send(reference_key.to_sym)
84
+ @target = [] if reference_value.blank? || final_reference_key.blank?
71
85
 
72
- if key_value.blank?
73
- @target = nil # Or should we return empty array?
74
- else
75
- # Single `=` match whole word or (match empty)
76
- # Double `==` match entire field
77
- # If the field value contains underscore or space like 'FM_notified'
78
- # or 'FM notified', a single `=` may not match correctly.
79
- @target = target_class.where(reference_key => "=#{key_value}")
80
- end
86
+ @target = target_class.where(
87
+ final_reference_key => "=#{reference_value}"
88
+ )
81
89
  end
82
90
  end
83
91
  end
@@ -1,3 +1,3 @@
1
1
  module Filemaker
2
- VERSION = '0.0.15'.freeze
2
+ VERSION = '0.0.16'.freeze
3
3
  end
@@ -1,5 +1,5 @@
1
1
  describe Filemaker::Model::Relations do
2
- it 'every model has a relations hash' do
2
+ it 'every model has a relations hash to store associations' do
3
3
  expect(MyModel.new.relations).to eq({})
4
4
  end
5
5
 
@@ -8,16 +8,22 @@ describe Filemaker::Model::Relations do
8
8
  before do
9
9
  @model = MyModel.new(candidate_id: '123')
10
10
  allow(Candidate).to receive(:where).and_return([Candidate.new])
11
+ allow(Member).to receive(:where).and_return([Member.new])
11
12
  end
12
13
 
13
14
  it 'appends _id to missing reference_key' do
14
15
  expect(@model.candidate.reference_key).to eq 'candidate_id'
16
+ expect(@model.candidate.final_reference_key).to eq 'candidate_id'
15
17
  end
16
18
 
17
19
  it 'target class should be Candidate' do
18
20
  expect(@model.candidate.target_class).to eq Candidate
19
21
  end
20
22
 
23
+ it 'reference_value is 123' do
24
+ expect(@model.candidate.reference_value).to eq '123'
25
+ end
26
+
21
27
  it 'owner belongs to MyModel' do
22
28
  expect(@model.candidate.owner).to eq @model
23
29
  end
@@ -27,6 +33,11 @@ describe Filemaker::Model::Relations do
27
33
  expect(@model.relations.fetch('candidate')).to eq \
28
34
  @model.candidate.target
29
35
  end
36
+
37
+ it 'uses identity for missing reference_key' do
38
+ expect(@model.member.reference_key).to eq 'member_id'
39
+ expect(@model.member.final_reference_key).to eq 'id'
40
+ end
30
41
  end
31
42
 
32
43
  context 'when using supplied reference_key' do
@@ -41,6 +52,30 @@ describe Filemaker::Model::Relations do
41
52
 
42
53
  it 'will use the supplied reference_key' do
43
54
  expect(@model.applicant.reference_key).to eq :name
55
+ expect(@model.applicant.final_reference_key).to eq 'name'
56
+ end
57
+
58
+ it 'reference_value is ABC' do
59
+ expect(@model.applicant.reference_value).to eq 'ABC'
60
+ end
61
+ end
62
+
63
+ context 'when using source key' do
64
+ before do
65
+ @model = MyModel.new(manager_id: 'MG1')
66
+ allow(Manager).to receive(:where).and_return([Manager.new])
67
+ end
68
+
69
+ it 'will use manager_id as final_reference_key' do
70
+ expect(@model.manager.final_reference_key).to eq 'mg_id'
71
+ end
72
+
73
+ it 'reference_key is still manager_id' do
74
+ expect(@model.manager.reference_key).to eq 'manager_id'
75
+ end
76
+
77
+ it 'another_manager has different reference_key' do
78
+ expect(@model.another_manager.reference_key).to eq :candidate_id
44
79
  end
45
80
  end
46
81
  end
@@ -53,6 +88,7 @@ describe Filemaker::Model::Relations do
53
88
  context 'when using default reference_key' do
54
89
  it 'will use owner identity name' do
55
90
  expect(@model.posts.reference_key).to eq 'candidate_id'
91
+ expect(@model.posts.final_reference_key).to eq 'candidate_id'
56
92
  end
57
93
 
58
94
  it 'target class should be Post' do
@@ -75,6 +111,22 @@ describe Filemaker::Model::Relations do
75
111
 
76
112
  it 'will use the supplied reference_key' do
77
113
  expect(@model.posters.reference_key).to eq :email
114
+ expect(@model.posters.final_reference_key).to eq 'email'
115
+ end
116
+ end
117
+
118
+ context 'when using source key' do
119
+ before do
120
+ @model = Project.new
121
+ end
122
+
123
+ it 'will use id as reference_key' do
124
+ expect(@model.project_members.reference_key).to eq :id
125
+ end
126
+
127
+ it 'will use project_id as source_key' do
128
+ expect(@model.project_members.source_key).to eq :project_id
129
+ expect(@model.project_members.final_reference_key).to eq 'project_id'
78
130
  end
79
131
  end
80
132
  end
@@ -37,6 +37,8 @@ describe Filemaker::Model do
37
37
  'name',
38
38
  'email',
39
39
  'ca id',
40
+ 'member_id',
41
+ 'manager_id',
40
42
  'created_at',
41
43
  'modifieddate',
42
44
  'salary',
@@ -6,10 +6,15 @@ end
6
6
 
7
7
  class Candidate
8
8
  include Filemaker::Model
9
+
10
+ string :candidate_id
9
11
  end
10
12
 
11
13
  class User
12
14
  include Filemaker::Model
15
+
16
+ string :name
17
+ string :email
13
18
  end
14
19
 
15
20
  class Post
@@ -29,6 +34,19 @@ class Job
29
34
  date :modify_date, fm_name: 'modify date'
30
35
  end
31
36
 
37
+ class Member
38
+ include Filemaker::Model
39
+
40
+ string :id, identity: true
41
+ end
42
+
43
+ class Manager
44
+ include Filemaker::Model
45
+
46
+ string :id, identity: true
47
+ string :mg_id
48
+ end
49
+
32
50
  class MyModel
33
51
  include Filemaker::Model
34
52
 
@@ -37,13 +55,33 @@ class MyModel
37
55
 
38
56
  belongs_to :candidate
39
57
  belongs_to :applicant, class_name: User, reference_key: :name
58
+ belongs_to :member
59
+ belongs_to :manager, source_key: :mg_id
60
+ belongs_to :another_manager, class_name: Manager, source_key: :mg_id, reference_key: :candidate_id
40
61
  has_many :posts
41
62
  has_many :posters, class_name: User, reference_key: :email
42
63
 
43
64
  string :name, :email, default: 'UNTITLED'
44
65
  string :candidate_id, fm_name: 'CA ID', identity: true
66
+ string :member_id
67
+ string :manager_id
45
68
  date :created_at
46
69
  datetime :updated_at, fm_name: 'ModifiedDate'
47
70
  money :salary
48
71
  integer :age, fm_name: 'passage of time'
49
72
  end
73
+
74
+ class Project
75
+ include Filemaker::Model
76
+
77
+ string :id, identity: true
78
+
79
+ has_many :project_members, source_key: :project_id, reference_key: :id
80
+ end
81
+
82
+ class ProjectMember
83
+ include Filemaker::Model
84
+
85
+ string :member_id
86
+ string :project_id
87
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: filemaker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.15
4
+ version: 0.0.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - mech
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-23 00:00:00.000000000 Z
11
+ date: 2016-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -273,3 +273,4 @@ test_files:
273
273
  - spec/support/responses/portal.xml
274
274
  - spec/support/responses/scriptnames.xml
275
275
  - spec/support/xml_loader.rb
276
+ has_rdoc: