paradocs 1.1.3 → 1.1.4

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: add6d55cad7f9a56bb95f6efe094afa0d9009109
4
- data.tar.gz: 8c52dfc657dfb97a301f31567327e66c0dae9577
3
+ metadata.gz: c9ed12715c0df054876f622c3dada9cc4a2d8fd5
4
+ data.tar.gz: bfe8c1cb2eb4aa9f15eb08349425611deccb3517
5
5
  SHA512:
6
- metadata.gz: c042f2d0738aee92991e86fc8a98df7649c6a0bf6c383e50c0f8e69e1237293950aad9fd7aef6b61bfef76ed2348ae6631161c20ce2f44995c23b4bd65cbd444
7
- data.tar.gz: 3b9ae5c9de08aa07caa7b77a0064151c221d6bfe76b1c3b62e063963ec39028dd76426744b10286ce713c68818395c466686b1111551b1c0caf7ddd497a421ee
6
+ metadata.gz: b9d827bf00b03d7766600e438d8ee16a9938ab099cd807d0d236cfb37758d104d76f26fdf713c7f39c550ce65df56c30b4dcfbeedb5fa7c5ebc93fa67c66199d
7
+ data.tar.gz: c4ac5998e89948246c01b6ec04d39ce5332c66da32902ac2b63a06672746dc002a91dc013372bc4cb33410a72e15c1de85bfb08aab8a17659dc9da84f4c793b5
@@ -21,7 +21,8 @@ module Paradocs
21
21
  next if key.start_with?(Paradocs.config.meta_prefix) # skip all the meta fields
22
22
  ex_value = restore_one(key, value, &block)
23
23
  next if ex_value == @skip_word
24
- [key, ex_value]
24
+ key = value[:alias] || key
25
+ [key.to_s, ex_value]
25
26
  end.compact.to_h
26
27
  end
27
28
 
@@ -23,8 +23,10 @@ module Paradocs
23
23
  else
24
24
  result[errors] += field.possible_errors
25
25
  end
26
- result[field.key] = meta unless ignore_transparent && field.transparent?
27
- yield(field.key, meta) if block_given?
26
+
27
+ field_key = field.meta_data[:alias] || field.key
28
+ result[field_key] = meta unless ignore_transparent && field.transparent?
29
+ yield(field_key, meta) if block_given?
28
30
 
29
31
  next unless field.mutates_schema?
30
32
  schema.subschemes.each do |name, subschema|
@@ -103,7 +105,8 @@ module Paradocs
103
105
  private
104
106
 
105
107
  def collect_meta(field, root)
106
- json_path = root.empty? ? "$.#{field.key}" : "#{root}.#{field.key}"
108
+ field_key = field.meta_data[:alias] || field.key
109
+ json_path = root.empty? ? "$.#{field_key}" : "#{root}.#{field_key}"
107
110
  meta = field.meta_data.merge(json_path: json_path)
108
111
  sc = meta.delete(:schema)
109
112
  meta[:mutates_schema] = true if meta.delete(:mutates_schema)
@@ -37,6 +37,10 @@ module Paradocs
37
37
  meta description: text
38
38
  end
39
39
 
40
+ def as(identifier)
41
+ meta alias: identifier
42
+ end
43
+
40
44
  def example(value)
41
45
  meta example: value
42
46
  end
@@ -181,7 +181,8 @@ module Paradocs
181
181
  invoke_subschemes!(val, context, flds: flds)
182
182
  flds.each_with_object({}) do |(_, field), m|
183
183
  r = field.resolve(val, context.sub(field.key))
184
- m[field.key] = r.value if r.eligible?
184
+ key = field.meta_data[:alias] || field.key
185
+ m[key] = r.value if r.eligible?
185
186
  end
186
187
  end
187
188
 
@@ -57,6 +57,7 @@ module Paradocs
57
57
  # this hook is called after schema definition in DSL module
58
58
  def paradocs_after_define_schema(schema)
59
59
  schema.fields.keys.each do |key|
60
+ key = schema.fields[key].meta_data[:alias] || key
60
61
  define_method key do
61
62
  _graph[key]
62
63
  end
@@ -1,3 +1,3 @@
1
1
  module Paradocs
2
- VERSION = "1.1.3"
2
+ VERSION = "1.1.4"
3
3
  end
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Paradocs::VERSION
9
9
  spec.authors = ["Maxim Tkachenko", "Ismael Celis"]
10
10
  spec.email = ["tkachenko.maxim.w@gmail.com", "ismaelct@gmail.com"]
11
- spec.description = %q{Flexible DSL for declaring allowed parameters focused on DRY validation that gives you opportunity to generate API documentation on-the-fly.}
11
+ spec.description = %q{Flexible DRY validations with API docs generation done right TLDR; parametrics on steroids.}
12
12
  spec.summary = %q{A huge add-on for original gem mostly focused on retrieving the more metadata from declared schemas as possible.}
13
13
  spec.homepage = "https://paradocs.readthedocs.io/en/latest"
14
14
  spec.license = "MIT"
@@ -22,7 +22,7 @@ describe Paradocs::Extensions::PayloadBuilder do
22
22
  end
23
23
  subschema(:fooschema) { }
24
24
  subschema(:barschema) do
25
- field(:barfield).present.type(:boolean)
25
+ field(:barfield).present.type(:boolean).as(:bar_field)
26
26
  end
27
27
  end
28
28
  end
@@ -32,7 +32,7 @@ describe Paradocs::Extensions::PayloadBuilder do
32
32
  allow_any_instance_of(Array).to receive(:sample) { "bar" }
33
33
  payloads = described_class.new(schema).build!
34
34
  expect(payloads.keys.sort).to eq([:barschema, :fooschema, :subschema1, :subschema2_deep_schema, :subschema2_empty])
35
- expect(payloads[:barschema]).to eq({"test" => nil, "foo" => {"bar" => "bar", "barfield" => nil}})
35
+ expect(payloads[:barschema]).to eq({"test" => nil, "foo" => {"bar" => "bar", "bar_field" => nil}})
36
36
  expect(payloads[:fooschema]).to eq({"test" => nil, "foo" => {"bar" => "bar"}})
37
37
  expect(payloads[:subschema1]).to eq({"test" => nil, "foo" => {"bar" => "bar"}, "subtest1" => nil})
38
38
  expect(payloads[:subschema2_deep_schema]).to eq({
@@ -57,7 +57,7 @@ describe Paradocs::Extensions::PayloadBuilder do
57
57
  end
58
58
 
59
59
  expect(payloads.keys.sort).to eq([:barschema, :fooschema, :subschema1, :subschema2_deep_schema, :subschema2_empty])
60
- expect(payloads[:barschema]).to eq({"test" => nil, "foo" => {"bar" => nil, "barfield" => true}}) # barfield is change to true and bar is nil
60
+ expect(payloads[:barschema]).to eq({"test" => nil, "foo" => {"bar" => nil, "bar_field" => true}}) # barfield is change to true and bar is nil
61
61
  expect(payloads[:fooschema]).to eq({"test" => nil, "foo" => {"bar" => nil}}) # bar is nil
62
62
  expect(payloads[:subschema1]).to eq({"test" => nil, "foo" => {"bar" => nil}}) # subtest is missing, bar is nil
63
63
  expect(payloads[:subschema2_deep_schema]).to eq({
@@ -18,7 +18,7 @@ describe Paradocs::Extensions::Structure do
18
18
  subschema(:highest_level) { field(:test).present } # no mutations on this level -> subschema ignored
19
19
 
20
20
  field(:data).type(:object).present.schema do
21
- field(:id).type(:integer).present.policy(:policy_with_error)
21
+ field(:id).type(:integer).present.policy(:policy_with_error).as(:user_id)
22
22
  field(:name).type(:string).meta(label: "very important staff").description("Example description").example("John")
23
23
  field(:role).type(:string).declared.options(["admin", "user"]).default("user").mutates_schema! do |*|
24
24
  :test_subschema
@@ -64,13 +64,14 @@ describe Paradocs::Extensions::Structure do
64
64
  test_field: {required: true, present: true, json_path: "$.data.test_field", nested_name: "data.test_field"}
65
65
  }
66
66
  })
67
- expect(data_structure[:id]).to eq({
67
+ expect(data_structure[:user_id]).to eq({
68
68
  type: :integer,
69
69
  required: true,
70
70
  present: true,
71
71
  policy_with_error: {errors: [ArgumentError]},
72
- json_path: "$.data.id",
73
- nested_name: "data.id"
72
+ alias: :user_id,
73
+ json_path: "$.data.user_id",
74
+ nested_name: "data.user_id"
74
75
  })
75
76
  expect(data_structure[:name]).to eq({
76
77
  type: :string,
@@ -131,11 +132,12 @@ describe Paradocs::Extensions::Structure do
131
132
  json_path: "$.data.extra[].extra",
132
133
  policy_with_silent_error: {errors: []}
133
134
  },
134
- "data.id" => {
135
+ "data.user_id" => {
135
136
  type: :integer,
136
137
  required: true,
137
138
  present: true,
138
- json_path: "$.data.id",
139
+ alias: :user_id,
140
+ json_path: "$.data.user_id",
139
141
  policy_with_error: {errors: [ArgumentError]}
140
142
  },
141
143
  "data.name" => {
@@ -180,7 +182,7 @@ describe Paradocs::Extensions::Structure do
180
182
  subschema: {
181
183
  _errors: [ArgumentError],
182
184
  "data" => {type: :object, required: true, present: true, json_path: "$.data"},
183
- "data.id" => {type: :integer, required: true, present: true, policy_with_error: {errors: [ArgumentError]}, json_path: "$.data.id"},
185
+ "data.user_id" => {type: :integer, required: true, present: true, policy_with_error: {errors: [ArgumentError]}, alias: :user_id, json_path: "$.data.user_id"},
184
186
  "data.name" => {type: :string, label: "very important staff", json_path: "$.data.name", mutates_schema: true, description: "Example description", example: "John"},
185
187
  "data.role" => {type: :string, options: ["admin", "user"], default: "user", json_path: "$.data.role", mutates_schema: true},
186
188
  "data.extra" => {type: :array, required: true, json_path: "$.data.extra[]"},
@@ -190,7 +192,7 @@ describe Paradocs::Extensions::Structure do
190
192
  test_subschema: {
191
193
  _errors: [ArgumentError],
192
194
  "data" => {type: :object, required: true, present: true, json_path: "$.data"},
193
- "data.id" => {type: :integer, required: true, present: true, policy_with_error: {errors: [ArgumentError]}, json_path: "$.data.id"},
195
+ "data.user_id" => {type: :integer, required: true, present: true, policy_with_error: {errors: [ArgumentError]}, alias: :user_id, json_path: "$.data.user_id"},
194
196
  "data.name" => {type: :string, label: "very important staff", json_path: "$.data.name", mutates_schema: true, description: "Example description", example: "John"},
195
197
  "data.role" => {type: :string, options: ["admin", "user"], default: "user", json_path: "$.data.role", mutates_schema: true},
196
198
  "data.extra" => {type: :array, required: true, json_path: "$.data.extra[]"},
@@ -215,7 +217,7 @@ describe Paradocs::Extensions::Structure do
215
217
  structure: {
216
218
  "role" => {type: :string, options: ["admin", "user"], default: "user", json_path: "$.data.role", nested_name: "data.role", mutates_schema: true},
217
219
  "test_field" => {required: true, present: true, json_path: "$.data.test_field", nested_name: "data.test_field"},
218
- "id" => {type: :integer, required: true, present: true, policy_with_error: {errors: [ArgumentError]}, json_path: "$.data.id", nested_name: "data.id"},
220
+ "user_id" => {type: :integer, required: true, present: true, policy_with_error: {errors: [ArgumentError]}, alias: :user_id, json_path: "$.data.user_id", nested_name: "data.user_id"},
219
221
  "name" => {type: :string, label: "very important staff", json_path: "$.data.name", mutates_schema: true, nested_name: "data.name", description: "Example description", example: "John"},
220
222
  "extra" => {
221
223
  type: :array, required: true, json_path: "$.data.extra[]", nested_name: "data.extra",
@@ -233,11 +235,11 @@ describe Paradocs::Extensions::Structure do
233
235
  json_path: "$.data",
234
236
  nested_name: "data",
235
237
  structure: {
236
- "role" => {type: :string, options: ["admin", "user"], default: "user", json_path: "$.data.role", nested_name: "data.role", mutates_schema: true},
237
- "test1" => {required: true, present: true, json_path: "$.data.test1", nested_name: "data.test1"},
238
- "id" => {type: :integer, required: true, present: true, policy_with_error: {errors: [ArgumentError]}, json_path: "$.data.id", nested_name: "data.id"},
239
- "name" => {type: :string, label: "very important staff", json_path: "$.data.name", mutates_schema: true, nested_name: "data.name", description: "Example description", example: "John"},
240
- "extra" => {
238
+ "role" => {type: :string, options: ["admin", "user"], default: "user", json_path: "$.data.role", nested_name: "data.role", mutates_schema: true},
239
+ "test1" => {required: true, present: true, json_path: "$.data.test1", nested_name: "data.test1"},
240
+ "user_id" => {type: :integer, required: true, present: true, policy_with_error: {errors: [ArgumentError]}, alias: :user_id, json_path: "$.data.user_id", nested_name: "data.user_id"},
241
+ "name" => {type: :string, label: "very important staff", json_path: "$.data.name", mutates_schema: true, nested_name: "data.name", description: "Example description", example: "John"},
242
+ "extra" => {
241
243
  type: :array, required: true, json_path: "$.data.extra[]", nested_name: "data.extra",
242
244
  structure: {"extra" => {default: false, policy_with_silent_error: {errors: []}, json_path: "$.data.extra[].extra", nested_name: "data.extra.extra"}}}
243
245
  }
@@ -16,7 +16,7 @@ describe Paradocs::Schema do
16
16
 
17
17
  subject do
18
18
  described_class.new do
19
- field(:title).policy(:string).present
19
+ field(:title).policy(:string).present.as(:article_title)
20
20
  field(:price).policy(:integer).meta(label: "A price")
21
21
  field(:status).policy(:string).options(['visible', 'hidden'])
22
22
  field(:tags).policy(:split).policy(:array)
@@ -33,8 +33,8 @@ describe Paradocs::Schema do
33
33
  describe "#structure" do
34
34
  it "represents data structure and meta data" do
35
35
  sc = subject.structure.nested
36
- expect(sc[:title][:present]).to be true
37
- expect(sc[:title][:type]).to eq :string
36
+ expect(sc[:article_title][:present]).to be true
37
+ expect(sc[:article_title][:type]).to eq :string
38
38
  expect(sc[:price][:type]).to eq :integer
39
39
  expect(sc[:price][:label]).to eq "A price"
40
40
  expect(sc[:variants][:type]).to eq :array
@@ -76,7 +76,7 @@ describe Paradocs::Schema do
76
76
 
77
77
  output = subject.resolve(payload).output
78
78
  expect(output).to eq({
79
- title: "title",
79
+ article_title: "title",
80
80
  price: 100,
81
81
  status: "visible",
82
82
  tags: ["tag"],
@@ -101,7 +101,7 @@ describe Paradocs::Schema do
101
101
  variants: [{name: 'v1', sku: 'ABC', stock: '10', available_if_no_stock: true}]
102
102
  },
103
103
  {
104
- title: 'iPhone 6 Plus',
104
+ article_title: 'iPhone 6 Plus',
105
105
  price: 100,
106
106
  status: 'visible',
107
107
  tags: ['tag1', 'tag2'],
@@ -114,7 +114,7 @@ describe Paradocs::Schema do
114
114
  variants: [{name: 'v1', available_if_no_stock: '1'}]
115
115
  },
116
116
  {
117
- title: 'iPhone 6 Plus',
117
+ article_title: 'iPhone 6 Plus',
118
118
  variants: [{name: 'v1', stock: 1, available_if_no_stock: true}]
119
119
  })
120
120
 
@@ -16,13 +16,13 @@ describe Paradocs::Struct do
16
16
  include Paradocs::Struct
17
17
 
18
18
  schema do
19
- field(:title).type(:string).present
19
+ field(:title).type(:string).present.as(:example_title)
20
20
  field(:friends).type(:array).default([]).schema friend_class
21
21
  end
22
22
  end
23
23
 
24
24
  new_instance = klass.new
25
- expect(new_instance.title).to eq ''
25
+ expect(new_instance.example_title).to eq ''
26
26
  expect(new_instance.friends).to eq []
27
27
  expect(new_instance.valid?).to be false
28
28
  expect(new_instance.errors['$.title']).not_to be_nil
@@ -35,7 +35,7 @@ describe Paradocs::Struct do
35
35
  ]
36
36
  })
37
37
 
38
- expect(instance.title).to eq 'foo'
38
+ expect(instance.example_title).to eq 'foo'
39
39
  expect(instance.friends.size).to eq 2
40
40
  expect(instance.friends.first.name).to eq 'Ismael'
41
41
  expect(instance.friends.first).to be_a friend_class
@@ -154,7 +154,7 @@ describe Paradocs::Struct do
154
154
  schema do
155
155
  field(:title).type(:string).present
156
156
  field(:friends).type(:array).schema do
157
- field(:name).type(:string)
157
+ field(:name).type(:string).as(:person_name)
158
158
  field(:age).type(:integer).default(20)
159
159
  end
160
160
  end
@@ -171,8 +171,8 @@ describe Paradocs::Struct do
171
171
  expect(instance.to_h).to eq({
172
172
  title: 'foo',
173
173
  friends: [
174
- {name: 'Jane', age: 20},
175
- {name: 'Joe', age: 39},
174
+ {person_name: 'Jane', age: 20},
175
+ {person_name: 'Joe', age: 39},
176
176
  ]
177
177
  })
178
178
 
@@ -190,7 +190,7 @@ describe Paradocs::Struct do
190
190
  include Paradocs::Struct
191
191
 
192
192
  schema do
193
- field(:title).type(:string).present
193
+ field(:title).type(:string).present.as(:example_title)
194
194
  field(:friends).type(:array).schema do
195
195
  field(:name).type(:string)
196
196
  field(:age).type(:integer).default(20)
@@ -213,7 +213,7 @@ describe Paradocs::Struct do
213
213
  ]
214
214
  )
215
215
 
216
- expect(instance.title).to eq 'foo'
216
+ expect(instance.example_title).to eq 'foo'
217
217
  expect(instance.email).to eq 'email@me.com'
218
218
  expect(instance.friends.size).to eq 2
219
219
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paradocs
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maxim Tkachenko
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-10-06 00:00:00.000000000 Z
12
+ date: 2020-11-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -67,8 +67,8 @@ dependencies:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
- description: Flexible DSL for declaring allowed parameters focused on DRY validation
71
- that gives you opportunity to generate API documentation on-the-fly.
70
+ description: Flexible DRY validations with API docs generation done right TLDR; parametrics
71
+ on steroids.
72
72
  email:
73
73
  - tkachenko.maxim.w@gmail.com
74
74
  - ismaelct@gmail.com