filemaker 0.0.10 → 0.0.11

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: e51cec7f5db8072eb5c0b218ed4d521641f56b14
4
- data.tar.gz: 7d2603cea09ae2a110ae121e6d593508d5363ea3
3
+ metadata.gz: b2df8ff23dfbe366d62b061a11f6df38bb57d77c
4
+ data.tar.gz: 92524e645975cd4e6bd65186eb596789033bda7e
5
5
  SHA512:
6
- metadata.gz: 27613622cc49cbdc5c799d8ded00bbdd171f5a424d12213a16e957c24ee8dd36a8c5cc941a2ccbc61614751498b2540c6da466655295c1798b949db89c7c68f6
7
- data.tar.gz: 4bba2a963de990cd2a72b718238b29b18584068d9e185ac972638bd4a9733449eb8a46b581679acbda2850950c2bf72a9d2665153ce4eadd35889c163b6b51a4
6
+ metadata.gz: 5d3d539088833432a862aa56e010c568f0ee20085fbde57266eeccd5d59159bc6bad112bea84cf118801be03fee28bd5eff0566a88257e03c9954fd0ca7168be
7
+ data.tar.gz: 87fb6a1df1e0c6c9779a45d2b7ef8d5f950f1c32d98c228a80bc69375e163cf13824e4458ad141538c08d9f554ecce3a08235a82414784707e62d6798ee3cf87
@@ -9,32 +9,13 @@ module Filemaker
9
9
  models = []
10
10
 
11
11
  resultset.each do |record|
12
- object = klass.new
13
-
14
- object.instance_variable_set('@new_record', false)
15
- object.instance_variable_set('@record_id', record.record_id)
16
- object.instance_variable_set('@mod_id', record.mod_id)
17
- object.instance_variable_set('@portals', record.portals)
18
-
19
- record.keys.each do |fm_field_name|
20
- # record.keys are all lowercase
21
- field = klass.find_field_by_name(fm_field_name)
22
- next unless field
23
-
24
- # Because we are using ActiveModel::Dirty, so we hydrate directly.
25
- object.attributes[field.name] = field.coerce(record[fm_field_name])
26
- end
27
-
28
- models << object
12
+ models << build(record, klass.new)
29
13
  end
30
14
 
31
15
  models
32
16
  end
33
17
 
34
- def single(resultset, klass)
35
- record = resultset.first
36
- object = klass.new
37
-
18
+ def build(record, object)
38
19
  object.instance_variable_set('@new_record', false)
39
20
  object.instance_variable_set('@record_id', record.record_id)
40
21
  object.instance_variable_set('@mod_id', record.mod_id)
@@ -42,10 +23,10 @@ module Filemaker
42
23
 
43
24
  record.keys.each do |fm_field_name|
44
25
  # record.keys are all lowercase
45
- field = klass.find_field_by_name(fm_field_name)
26
+ field = object.class.find_field_by_name(fm_field_name)
46
27
  next unless field
47
28
 
48
- object.public_send("#{field.name}=", record[fm_field_name])
29
+ object.attributes[field.name] = field.coerce(record[fm_field_name])
49
30
  end
50
31
 
51
32
  object
@@ -91,20 +91,7 @@ module Filemaker
91
91
 
92
92
  # If you have calculated field from FileMaker, it will be replaced.
93
93
  def replace_new_data(resultset)
94
- record = resultset.first
95
-
96
- @new_record = false
97
- @record_id = record.record_id
98
- @mod_id = record.mod_id
99
-
100
- record.keys.each do |fm_field_name|
101
- # record.keys are all lowercase
102
- field = self.class.find_field_by_name(fm_field_name)
103
- next unless field
104
-
105
- # Because we are using ActiveModel::Dirty, so we hydrate directly.
106
- attributes[field.name] = field.coerce(record[fm_field_name])
107
- end
94
+ FileMaker::Model::Builder.build(resultset.first, self)
108
95
  end
109
96
  end
110
97
  end
@@ -21,6 +21,10 @@ module Filemaker
21
21
  if key_value.blank?
22
22
  @target = nil
23
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.
24
28
  @target = target_class.where(reference_key => "=#{key_value}").first
25
29
  end
26
30
  end
@@ -70,6 +70,10 @@ module Filemaker
70
70
  if key_value.blank?
71
71
  @target = nil # Or should we return empty array?
72
72
  else
73
+ # Single `=` match whole word or (match empty)
74
+ # Double `==` match entire field
75
+ # If the field value contains underscore or space like 'FM_notified'
76
+ # or 'FM notified', a single `=` may not match correctly.
73
77
  @target = target_class.where(reference_key => "=#{key_value}")
74
78
  end
75
79
  end
@@ -1,3 +1,3 @@
1
1
  module Filemaker
2
- VERSION = '0.0.10'
2
+ VERSION = '0.0.11'
3
3
  end
@@ -0,0 +1,43 @@
1
+ describe Filemaker::Model::Builder do
2
+
3
+ let(:model) { Job }
4
+ let(:server) { Object.new }
5
+ let(:xml) { import_xml_as_string('jobs.xml') }
6
+ let(:resultset) { Filemaker::Resultset.new(server, xml) }
7
+
8
+ context '.build' do
9
+
10
+ let(:subject) {
11
+ Filemaker::Model::Builder.build(resultset.first, model.new)
12
+ }
13
+
14
+ it 'has portals' do
15
+ expect(subject.portals.keys).to eq([])
16
+ end
17
+
18
+ it 'has a status' do
19
+ expect(subject.status).to eq("open")
20
+ end
21
+
22
+ it 'has an jdid' do
23
+ expect(subject.jdid).to eq("JID1122")
24
+ end
25
+
26
+ it 'has a modify_date' do
27
+ expect(subject.modify_date).to eq(Date.parse('2014-08-12'))
28
+ end
29
+ end
30
+
31
+ context '.collection' do
32
+
33
+ let(:subject) {
34
+ Filemaker::Model::Builder.collection(resultset, model)
35
+ }
36
+
37
+ it 'is an array of Jobs' do
38
+ subject.each do |job|
39
+ expect(job.class).to be(model)
40
+ end
41
+ end
42
+ end
43
+ end
@@ -18,6 +18,18 @@ class Post
18
18
  string :candidate_id, :email
19
19
  end
20
20
 
21
+ class Job
22
+ include Filemaker::Model
23
+
24
+ database :jobs
25
+ layout :jobs
26
+
27
+ string :status
28
+ string :jdid, fm_name: 'JDID'
29
+ date :modify_date, fm_name: 'modify date'
30
+
31
+ end
32
+
21
33
  class MyModel
22
34
  include Filemaker::Model
23
35
 
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.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - mech
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-03 00:00:00.000000000 Z
11
+ date: 2015-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -203,6 +203,7 @@ files:
203
203
  - spec/filemaker/error_spec.rb
204
204
  - spec/filemaker/layout_spec.rb
205
205
  - spec/filemaker/metadata/field_spec.rb
206
+ - spec/filemaker/model/builder_spec.rb
206
207
  - spec/filemaker/model/criteria_spec.rb
207
208
  - spec/filemaker/model/relations_spec.rb
208
209
  - spec/filemaker/model_spec.rb
@@ -242,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
242
243
  version: '0'
243
244
  requirements: []
244
245
  rubyforge_project:
245
- rubygems_version: 2.4.2
246
+ rubygems_version: 2.4.6
246
247
  signing_key:
247
248
  specification_version: 4
248
249
  summary: A Ruby wrapper to FileMaker XML API.
@@ -252,6 +253,7 @@ test_files:
252
253
  - spec/filemaker/error_spec.rb
253
254
  - spec/filemaker/layout_spec.rb
254
255
  - spec/filemaker/metadata/field_spec.rb
256
+ - spec/filemaker/model/builder_spec.rb
255
257
  - spec/filemaker/model/criteria_spec.rb
256
258
  - spec/filemaker/model/relations_spec.rb
257
259
  - spec/filemaker/model_spec.rb