model-api 0.8.4 → 0.8.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.
@@ -2,11 +2,21 @@ module ModelApi
2
2
  module Model
3
3
  module ClassMethods
4
4
  def api_model(*args)
5
- metadata = ModelApi::SimpleMetadata.process_metadata(:model, self, args)
5
+ metadata = ModelApi::SimpleMetadata.process_metadata(:model, self, args,
6
+ post_process: (lambda do |metadata|
7
+ if args.present? && metadata.include?(:id_attributes)
8
+ metadata[:id_attributes] = metadata[:id_attributes]
9
+ .map { |v| (v.is_a?(Array) ? v.flatten : [v]).map(&:to_sym) }
10
+ end
11
+ end))
6
12
  ModelApi::SimpleMetadata.merge_superclass_metadata(:model, superclass, metadata,
7
13
  exclude_keys: [:alias])
8
14
  end
9
15
 
16
+ def api_model_post_process_metadata(klass, metadata)
17
+
18
+ end
19
+
10
20
  def api_attributes(*args)
11
21
  metadata = ModelApi::HashMetadata.process_metadata(:attributes, self, args)
12
22
  metadata = ModelApi::HashMetadata.merge_superclass_metadata(:attributes, superclass, metadata)
@@ -14,10 +24,11 @@ module ModelApi
14
24
  id_attrs = []
15
25
  metadata.each { |attr, attr_metadata| id_attrs << attr if attr_metadata[:id] }
16
26
  if id_attrs.present?
17
- id_attrs = id_attrs.map(&:to_sym)
18
- existing_id_attrs = (api_model[:id_attributes] || []).map(&:to_sym)
19
- if (id_attrs - existing_id_attrs).present?
20
- api_model id_attributes: (id_attrs - existing_id_attrs).uniq
27
+ id_attr_sets = id_attrs.map { |v| (v.is_a?(Array) ? v.flatten : [v]).map(&:to_sym) }
28
+ existing_id_attr_sets = (api_model[:id_attributes] || [])
29
+ .map { |v| (v.is_a?(Array) ? v.flatten : [v]).map(&:to_sym) }
30
+ if (id_attr_sets - existing_id_attr_sets).present?
31
+ api_model id_attributes: (id_attr_sets - existing_id_attr_sets).uniq
21
32
  end
22
33
  end
23
34
  end
@@ -42,8 +53,10 @@ module ModelApi
42
53
  end
43
54
  end
44
55
 
45
- def self.included(base)
46
- base.extend(ClassMethods)
56
+ class << self
57
+ def included(base)
58
+ base.extend(ClassMethods)
59
+ end
47
60
  end
48
61
  end
49
62
  end
@@ -32,8 +32,10 @@ module ModelApi
32
32
  end
33
33
  end
34
34
 
35
- def self.included(base)
36
- base.extend(ClassMethods)
35
+ class << self
36
+ def included(base)
37
+ base.extend(ClassMethods)
38
+ end
37
39
  end
38
40
 
39
41
  class Utils
@@ -1,7 +1,7 @@
1
1
  module ModelApi
2
2
  class SimpleMetadata
3
3
  class << self
4
- def process_metadata(type, obj, args)
4
+ def process_metadata(type, obj, args, opts = {})
5
5
  instance_var = :"@api_#{type}_metadata"
6
6
  metadata = obj.instance_variable_get(instance_var) || {}
7
7
  if args.present?
@@ -12,6 +12,8 @@ module ModelApi
12
12
  else
13
13
  metadata.merge!(Hash[args.map { |key| [key.to_sym, {}] }])
14
14
  end
15
+ ModelApi::Utils.invoke_callback(opts[:post_process], metadata,
16
+ opts.merge(type: type, object: obj))
15
17
  obj.instance_variable_set(instance_var, metadata)
16
18
  end
17
19
  metadata.dup
@@ -3,7 +3,7 @@ $:.unshift lib unless $:.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'model-api'
6
- s.version = '0.8.4'
6
+ s.version = '0.8.5'
7
7
  s.summary = 'Create easy REST API\'s using metadata inside your ActiveRecord models'
8
8
  s.description = 'Ruby gem allowing Ruby on Rails developers to create REST API’s using ' \
9
9
  'metadata defined inside their ActiveRecord models.'
@@ -16,9 +16,8 @@ Gem::Specification.new do |s|
16
16
 
17
17
  s.require_path = "lib"
18
18
 
19
- s.add_dependency "rails", ">= 4.0"
20
- s.add_dependency "open-api", ">= 0.8.2"
19
+ s.add_dependency "rails", "~> 4.0"
20
+ s.add_dependency "open-api", "~> 0.8.2"
21
21
 
22
- s.add_development_dependency "rspec-rails"
23
- s.add_development_dependency "factory_girl"
22
+ s.add_development_dependency "rspec-rails", "~> 3.5", ">= 3.5.2"
24
23
  end
metadata CHANGED
@@ -1,71 +1,63 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: model-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.4
4
+ version: 0.8.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Mead
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-30 00:00:00.000000000 Z
11
+ date: 2016-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '4.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: open-api
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.8.2
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.8.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec-rails
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
47
+ version: '3.5'
52
48
  - - '>='
53
49
  - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: factory_girl
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
50
+ version: 3.5.2
62
51
  type: :development
63
52
  prerelease: false
64
53
  version_requirements: !ruby/object:Gem::Requirement
65
54
  requirements:
55
+ - - ~>
56
+ - !ruby/object:Gem::Version
57
+ version: '3.5'
66
58
  - - '>='
67
59
  - !ruby/object:Gem::Version
68
- version: '0'
60
+ version: 3.5.2
69
61
  description: Ruby gem allowing Ruby on Rails developers to create REST API’s using
70
62
  metadata defined inside their ActiveRecord models.
71
63
  email: m.mead@precisionhawk.com