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.
- checksums.yaml +4 -4
- data/README.md +198 -1
- data/lib/model-api/base_controller.rb +434 -419
- data/lib/model-api/model.rb +20 -7
- data/lib/model-api/open_api_extensions.rb +4 -2
- data/lib/model-api/simple_metadata.rb +3 -1
- data/model-api.gemspec +4 -5
- metadata +13 -21
data/lib/model-api/model.rb
CHANGED
@@ -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
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
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
|
-
|
46
|
-
base
|
56
|
+
class << self
|
57
|
+
def included(base)
|
58
|
+
base.extend(ClassMethods)
|
59
|
+
end
|
47
60
|
end
|
48
61
|
end
|
49
62
|
end
|
@@ -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
|
data/model-api.gemspec
CHANGED
@@ -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.
|
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", "
|
20
|
-
s.add_dependency "open-api", "
|
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
|
+
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-
|
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: '
|
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:
|
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:
|
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
|