apiql 0.2.0 → 0.2.1

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
  SHA256:
3
- metadata.gz: def514d5f185be467c6fe1d3cb0a45f1713ff47950d366f40c4830268064cf6b
4
- data.tar.gz: 6e23322d7c596b40ebd2740bdd3e98ec961b88f1d2825bec8ecc829bb01e63b8
3
+ metadata.gz: d352e5c0593440e6f860500f9aff2e02238ff4ccd4cee8d4845eb80aa2301e95
4
+ data.tar.gz: 8600a0d3df1e54eac36e10d0898c151adbb53d771d2a09f50a6002899506ae28
5
5
  SHA512:
6
- metadata.gz: 5c4253fe05c60846ddb813e7c09ef431d6d21d6574ecb9f3660a1d6a9cdc4ef128debe34fa1d601bd42eec8eb64a218a06e55f14eb29ef72b682bd97c7d7e6c4
7
- data.tar.gz: c93a2ffeafe521a9eccf3e27bd6b452fd1878ad2aff2d18652f71e0597e09981e3ef8059d3f8173d94312c535d3afb986eac184929d2835c939789b8e65e6d66
6
+ metadata.gz: '0979ad9a4921e756a9e4251fe753002db11b2a3f769bb8274e45e1c44da9df64eda69d928ec72ae0666faa5c3347d779935f55134a6279b7dcd34e8f424b4e64'
7
+ data.tar.gz: 7d11f62c6ca0fee4236307a001c9038ef1e2191b72970644e90b8f6847f75f1e4b87430ded40faadddcf1bdcb6c7ec4c5d8157f9ed1265de261edf778b9fbc41
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'apiql'
7
- spec.version = '0.2.0'
7
+ spec.version = '0.2.1'
8
8
  spec.authors = ['Dmitry Silchenko']
9
9
  spec.email = ['dmitry@desofto.com']
10
10
 
@@ -42,6 +42,8 @@ const APIQL = {
42
42
  return
43
43
  }
44
44
 
45
+ if(response.status < 400) return
46
+
45
47
  if(form) {
46
48
  form.append('apiql_request', schema)
47
49
  } else {
@@ -87,7 +87,7 @@ class APIQL
87
87
  keys.delete(last_key)
88
88
  keys << { last_key => last_keys }
89
89
  end
90
- elsif function.present? && (reg = schema.match(/\A\s*(?<name>\w+)(\((?<params>.*)\))?(?<rest>.*)\z/m))
90
+ elsif function.present? && (reg = schema.match(/\A\s*(?<name>[\w\.]+)(\((?<params>.*)\))?(?<rest>.*)\z/m))
91
91
  schema = reg[:rest]
92
92
 
93
93
  if reg[:params].present?
@@ -97,7 +97,7 @@ class APIQL
97
97
  end
98
98
 
99
99
  last_key = reg[:name]
100
- elsif reg = schema.match(/\A\s*(?<name>\w+)(\((?<params>((\w+)(\s*\,\s*\w+)*))?\))?\s*\{(?<rest>.*)\z/m)
100
+ elsif reg = schema.match(/\A\s*(?<name>[\w\.]+)(\((?<params>((\w+)(\s*\,\s*\w+)*))?\))?\s*\{(?<rest>.*)\z/m)
101
101
  schema = reg[:rest]
102
102
 
103
103
  function = reg[:name]
@@ -112,7 +112,7 @@ class APIQL
112
112
 
113
113
  pool.push [keys, last_key]
114
114
  keys = []
115
- elsif reg = schema.match(/\A\s*(?<name>\w+)(\((?<params>((\w+)(\s*\,\s*\w+)*))?\))?\s*\n(?<rest>.*)\z/m)
115
+ elsif reg = schema.match(/\A\s*(?<name>[\w\.]+)(\((?<params>((\w+)(\s*\,\s*\w+)*))?\))?\s*\n?(?<rest>.*)\z/m)
116
116
  schema = reg[:rest]
117
117
 
118
118
  function = reg[:name]
@@ -195,12 +195,41 @@ class APIQL
195
195
  field, params = field
196
196
  params = @context.parse_params(params)
197
197
  end
198
- return unless field.to_sym.in? self.class.apiql_attributes
199
198
 
200
- if respond_to? field
201
- public_send(field, *params)
199
+ names = field.split('.')
200
+ if names.count > 1
201
+ o = nil
202
+
203
+ names.each do |field|
204
+ if o.present?
205
+ if o.respond_to? field
206
+ o = o.public_send(field, *params)
207
+ else
208
+ o = nil
209
+ break
210
+ end
211
+ else
212
+ return unless field.to_sym.in? self.class.apiql_attributes
213
+
214
+ if respond_to? field
215
+ o = public_send(field, *params)
216
+ else
217
+ o = object.public_send(field, *params)
218
+ end
219
+
220
+ break unless o.present?
221
+ end
222
+ end
223
+
224
+ o
202
225
  else
203
- object.public_send(field, *params)
226
+ return unless field.to_sym.in? self.class.apiql_attributes
227
+
228
+ if respond_to? field
229
+ public_send(field, *params)
230
+ else
231
+ object.public_send(field, *params)
232
+ end
204
233
  end
205
234
  end
206
235
 
@@ -262,7 +291,7 @@ class APIQL
262
291
 
263
292
  def parse_params(list)
264
293
  list&.split(',')&.map(&:strip)&.map do |name|
265
- if reg = name.match(/\A[a-zA-Z]\w*\z/)
294
+ if reg = name.match(/\A[a-zA-Z_]\w*\z/)
266
295
  params[name]
267
296
  else
268
297
  begin
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apiql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Silchenko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-13 00:00:00.000000000 Z
11
+ date: 2018-07-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler