filemaker 0.0.2 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2d84b6982396ee09d4e78ae0d12be8fbb4ca3b69
4
- data.tar.gz: 8a758a58c2b0462e8b34ec246b6aae68b70ca750
3
+ metadata.gz: 313d37cb07a852df689318962b7161ef284e513d
4
+ data.tar.gz: a756e6010205d399622e87ec6c701645b817da90
5
5
  SHA512:
6
- metadata.gz: cd8c34c33807e773c6f3bff976e1b095e35dd18e89e877da8f905af484d3d78b3765f6ac32c8770048f24ed993a3f24428b86a6de342cd79e439d377e586516f
7
- data.tar.gz: cf8aa8ec4943ff7497387d5aa5f61c0a29b598dfa15a1d85f3cdbbdfd935ef732a75b9ac9b2110467c5f2afff09c671dd80464efee01856d637335e3f8ffbe53
6
+ metadata.gz: fc6aba202bd692e1a6502b16a7c867cee392e15bccd595e1d171f30063daf88b9c5e987e8d7286ac6b8b48a1bd6fb14abfb2f975fc11247c07901c97ba4b5cd7
7
+ data.tar.gz: 572d07b1406c44351d15cffd124d8b044a81b1c2aba5c05d7e6e6e8c8ced8574d75c2968e1d3282b2d32d601be89fcb8daeadfbf9ed0083aff9353c35a58a72c
data/README.md CHANGED
@@ -24,7 +24,7 @@ Configuration for initializing a server:
24
24
  * `account` - Please use `ENV` variable like `ENV['FILEMAKER_ACCOUNT']`
25
25
  * `password` - Please use `ENV` variable like `ENV['FILEMAKER_PASSWORD']`
26
26
  * `ssl` - Use `{ verify: false }` if you are using FileMaker's unsigned certificate. You can also pass a hash which will be forwarded to Faraday directly like `ssl: { client_cert: '', client_key: '', ca_file: '', ca_path: '/path/to/certs', cert_store: '' }`. See [Setting up SSL certificates on the Faraday wiki](https://github.com/lostisland/faraday/wiki/Setting-up-SSL-certificates)
27
- * `log` - A choice of `:simple`, `:curl` and `:curl_auth`.
27
+ * `log` - A choice of `:simple`, `:curl` and `:curl_auth`.
28
28
 
29
29
  ```ruby
30
30
  server = Filemaker::Server.new do |config|
@@ -65,20 +65,30 @@ Most API will be smart enough to reject invalid query parameters if passed in in
65
65
 
66
66
  If you want ActiveModel-like access with a decent query DSL like `where`, `find`, `in`, you can include `Filemaker::Model` to your model. Your Rails form will work as well as JSON serialization.
67
67
 
68
+ The following data types can be used to register the fields: `string`, `integer`, `money`, `date` and `datetime`. If the field name has spaces, you can use `fm_name` to identify the real FileMaker field name.
69
+
70
+ ```ruby
71
+ string :job_id, fm_name: 'JobOrderID', identity: true
72
+ ```
73
+
74
+ You can also use 3 relations: `has_many`, `belongs_to` and `has_portal`.
75
+
76
+ `has_many` will refer to the model's own identity as the reference key while `belongs_to` will append `_id` for the reference key.
77
+
68
78
  ```ruby
69
79
  class Job
70
80
  include Filemaker::Model
71
81
 
72
82
  database :jobs
73
83
  layout :job
74
-
84
+
75
85
  paginates_per 50
76
86
 
77
87
  # Taken from filemaker.yml config file, default to :default
78
88
  # Only use registry if you have multiple FileMaker servers you want to connect
79
89
  registry :read_slave
80
90
 
81
- string :job_id, fm_name: 'JobOrderID', id: true
91
+ string :job_id, fm_name: 'JobOrderID', identity: true
82
92
  string :title, :requirements
83
93
  datetime :created_at
84
94
  datetime :published_at, fm_name: 'ModifiedDate'
@@ -96,9 +106,9 @@ end
96
106
 
97
107
  development:
98
108
  default:
99
- host: localhost
100
- account_name: ENV['FILEMAKER_ACCOUNT_NAME']
101
- password: ENV['FILEMAKER_PASSWORD']
109
+ host: <%= ENV['FILEMAKER_HOSTNAME'] %>
110
+ account_name: <%= ENV['FILEMAKER_ACCOUNT_NAME'] %>
111
+ password: <%= ENV['FILEMAKER_PASSWORD'] %>
102
112
  ssl: true
103
113
  log: :curl
104
114
 
@@ -178,9 +188,13 @@ Model.not_in([{ name: 'Lee' }, { age: '< 40' }])
178
188
  Model.in(nationality: %w(Singapore Malaysia)).not_in(name: 'Lee', age: '< 40')
179
189
  ```
180
190
 
191
+ Note: It is vitally important that you get the order right for mixing in the use of `in` with `not_in`. Likely you will want to do an `in` first to be inclusive and later omit using `not_in`.
192
+
181
193
  - [x] Please test the above query with real data to ensure correctness!
182
194
  - [x] Please test the comparison operators with keyword as well as applied to value.
183
195
  - [x] Test serialization of BigDecimal and other types.
196
+ - [ ] Caching of relation models
197
+ - [ ] Test the order for `in` and `not_in` found set accuracy.
184
198
 
185
199
  ## Pagination
186
200
 
@@ -197,9 +211,8 @@ class Job
197
211
 
198
212
  database :jobs
199
213
  layout :job
200
-
201
- paginates_per 50
202
214
 
215
+ paginates_per 50
203
216
  end
204
217
 
205
218
  Job.per_page # => 50
data/filemaker.gemspec CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  spec.add_development_dependency 'bundler', '~> 1.6'
27
27
  spec.add_development_dependency 'rake', '~> 10.0'
28
- spec.add_development_dependency 'rspec', '~> 3.0'
28
+ spec.add_development_dependency 'rspec', '~> 3.1'
29
29
  spec.add_development_dependency 'rubocop'
30
30
  spec.add_development_dependency 'pry-byebug'
31
31
  end
@@ -89,7 +89,7 @@ module Filemaker
89
89
  models = Filemaker::Model::Builder.collection(resultset, klass)
90
90
 
91
91
  if defined?(Kaminari) && paginated
92
- Kaminari.paginate_array(models, resultset.count)
92
+ Kaminari.paginate_array(models, total_count: resultset.count)
93
93
  .page(@_page)
94
94
  .per(options[:max])
95
95
  else
@@ -46,9 +46,9 @@ module Filemaker
46
46
  def recid(id)
47
47
  return nil if id.blank?
48
48
 
49
- @selector ||= {}
49
+ @selector = {} # We want to clear the selector when it comes to recid
50
50
  selector['-recid'] = id
51
- chains.push(:where)
51
+ chains.push(:where) unless chains.include?(:where) # No double :where
52
52
  first
53
53
  end
54
54
 
@@ -7,9 +7,9 @@ module Rails
7
7
  config_file = Rails.root.join('config', 'filemaker.yml')
8
8
 
9
9
  if config_file.file?
10
- Filemaker.load!(config_file, Rails.env)
10
+ ::Filemaker.load!(config_file, Rails.env)
11
11
  else
12
- fail Error::ConfigurationError, 'No config file provided'
12
+ fail ::Filemaker::Error::ConfigurationError, 'No config file provided'
13
13
  end
14
14
  end
15
15
  end
@@ -16,6 +16,7 @@ module Filemaker
16
16
  @record_id = record['record-id']
17
17
  @portals = HashWithIndifferentAndCaseInsensitiveAccess.new
18
18
  @dirty = {} # Keep track of field modification
19
+ @ready = false
19
20
 
20
21
  record.xpath('field').each do |field|
21
22
  # `field` is Nokogiri::XML::Element
@@ -182,7 +182,7 @@ module Filemaker
182
182
  auth = " -H 'Authorization: #{@connection.headers['Authorization']}'" if \
183
183
  has_auth
184
184
 
185
- warn 'Pretty print like so: `curl XXX | xmllint --format -`'
185
+ # warn 'Pretty print like so: `curl XXX | xmllint --format -`'
186
186
  warn "curl -XGET '#{full_url}'#{curl_ssl_option} -i#{auth}"
187
187
  end
188
188
 
@@ -1,3 +1,3 @@
1
1
  module Filemaker
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.5'
3
3
  end
@@ -41,6 +41,21 @@ describe Filemaker::Model::Criteria do
41
41
  end
42
42
  end
43
43
 
44
+ describe 'find' do
45
+ it 'resets the selector and will not double :where' do
46
+ allow(criteria).to receive(:first).and_return(nil)
47
+ criteria.find(12)
48
+ expect(criteria.selector).to eq({ '-recid' => 12 })
49
+ expect(criteria.chains).to eq [:where]
50
+ end
51
+
52
+ it 'will use the identity to find' do
53
+ allow(criteria).to receive(:first).and_return([])
54
+ criteria.find(22)
55
+ expect(criteria.selector).to eq({ 'ca id' => '=22' })
56
+ end
57
+ end
58
+
44
59
  describe 'or' do
45
60
  it 'chains `or` as logical OR option' do
46
61
  criteria.where(name: 'Bob').or(email: 'bob@cern.org')
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.2
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - mech
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-11 00:00:00.000000000 Z
11
+ date: 2014-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '3.0'
103
+ version: '3.1'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '3.0'
110
+ version: '3.1'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rubocop
113
113
  requirement: !ruby/object:Gem::Requirement