diva 1.0.2 → 2.0.0

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: cf1edb1ef04a665cf476f237cd2d37a72ab67c9c6ad060021a4872fd007826dd
4
- data.tar.gz: 58d4ee3739a3790e7bafb8ac1e4ba9fe87e0f3cb6922f21adf39c2a5afc4642b
3
+ metadata.gz: 52c5dec5bafdde2ee52163337ccb79c65cf1ffa0090da2401585dbf567e92abc
4
+ data.tar.gz: b022d6956eb21bcca85203eb989b7d1c8b4dd4b3854f17348b2c150af3b2a3c6
5
5
  SHA512:
6
- metadata.gz: 020bdd443e187d5b3d9d1ca6268368f7771b251397cd8921ba64c82d7521e9606571f8839d2dad5889be86aab483089080864ad6a4cdff1ab869dde027a482a2
7
- data.tar.gz: f4ced1540783a59fc5f687eff027d6e60f9ad12ffb2b92f9deabd7f3512371e0a97bce1a226461cbc757ba0d5d47cc7a54cb225abe59df64ef58e92a160d9c0e
6
+ metadata.gz: 6d7b1858e1b3722d22fe28f45c612dbdaa2a9c30f19658c6d876acf41d6b6e93cd252f6ca69563ef5826148e83881ff8bad34057d71eb4dee1f6b6123543dd2d
7
+ data.tar.gz: f11d4bd094c84857fb5f5dc78644cc9940489e47d506b09930dec55d222b7cc2f58f608265d7acaedfb98bcf78e90a959b1d6ea3356eb255d78c297d5a6a70f4
@@ -0,0 +1,67 @@
1
+ version: '2.1'
2
+
3
+ executors:
4
+ ruby:
5
+ parameters:
6
+ tag:
7
+ type: string
8
+ docker:
9
+ - image: ruby:<< parameters.tag >>
10
+
11
+ jobs:
12
+ build:
13
+ parameters:
14
+ ruby-version:
15
+ type: string
16
+ executor:
17
+ name: ruby
18
+ tag: << parameters.ruby-version >>
19
+ steps:
20
+ - checkout
21
+ - run:
22
+ name: Which bundler?
23
+ command: bundle -v
24
+ - run:
25
+ command: bundle install --path vendor/bundle
26
+ - run:
27
+ name: test
28
+ command: bundle exec rake test
29
+ lint:
30
+ parameters:
31
+ ruby-version:
32
+ type: string
33
+ executor:
34
+ name: ruby
35
+ tag: << parameters.ruby-version >>
36
+ steps:
37
+ - checkout
38
+ - run:
39
+ name: Which bundler?
40
+ command: bundle -v
41
+ - run:
42
+ command: bundle install --path vendor/bundle
43
+ - run:
44
+ name: rubocop
45
+ command: bundle exec rubocop lib/
46
+
47
+ workflows:
48
+ build:
49
+ jobs:
50
+ - lint:
51
+ name: 'lint'
52
+ ruby-version: '3.0.3'
53
+ - build:
54
+ name: 'ruby-2.7'
55
+ ruby-version: '2.7.5'
56
+ requires:
57
+ - 'lint'
58
+ - build:
59
+ name: 'ruby-3.0'
60
+ ruby-version: '3.0.3'
61
+ requires:
62
+ - 'lint'
63
+ - build:
64
+ name: 'ruby-3.1'
65
+ ruby-version: '3.1.0-preview1'
66
+ requires:
67
+ - 'lint'
data/.rubocop.yml ADDED
@@ -0,0 +1,394 @@
1
+ AllCops:
2
+ TargetRubyVersion: '2.7'
3
+
4
+ Metrics/BlockLength:
5
+ Exclude:
6
+ - test/**/*.rb
7
+ - lib/tasks/**/*.rake
8
+ - Gemfile
9
+ Max: 156
10
+
11
+ Layout/LineLength:
12
+ AllowHeredoc: true
13
+ AllowURI: true
14
+ Max: 293
15
+ Exclude:
16
+ - test/**/*.rb
17
+
18
+ Metrics/ModuleLength:
19
+ Max: 109
20
+ CountAsOne: ['array', 'hash', 'heredoc']
21
+ Exclude:
22
+ - test/**/*.rb
23
+
24
+ Naming/AccessorMethodName:
25
+ Enabled: false
26
+
27
+ Style/Alias:
28
+ Enabled: false
29
+
30
+ Style/AsciiComments:
31
+ Enabled: false
32
+
33
+ Naming/AsciiIdentifiers:
34
+ Enabled: false
35
+
36
+ Metrics/BlockNesting:
37
+ Enabled: false
38
+
39
+ Style/CaseEquality:
40
+ Enabled: false
41
+
42
+ Style/ClassAndModuleChildren:
43
+ Enabled: false
44
+
45
+ Metrics/ClassLength:
46
+ Enabled: false
47
+
48
+ Style/ClassVars:
49
+ Enabled: false
50
+
51
+ Style/CollectionMethods:
52
+ PreferredMethods:
53
+ collect: map
54
+ detect: find
55
+ find_all: select
56
+ member?: include?
57
+ reduce: inject
58
+
59
+ Style/ColonMethodCall:
60
+ Enabled: true
61
+
62
+ Style/CommentAnnotation:
63
+ Enabled: false
64
+
65
+ Metrics/CyclomaticComplexity:
66
+ Enabled: false
67
+
68
+ Style/Documentation:
69
+ Enabled: false
70
+
71
+ Layout/DotPosition:
72
+ EnforcedStyle: leading
73
+
74
+ Style/DoubleNegation:
75
+ Enabled: false
76
+
77
+ Style/EachWithObject:
78
+ Enabled: false
79
+
80
+ Style/EmptyLiteral:
81
+ Enabled: true
82
+
83
+ Style/Encoding:
84
+ Enabled: false
85
+
86
+ Style/FormatString:
87
+ EnforcedStyle: percent
88
+
89
+ Style/FrozenStringLiteralComment:
90
+ Enabled: false
91
+
92
+ Style/GlobalVars:
93
+ Enabled: true
94
+
95
+ Style/GuardClause:
96
+ Enabled: false
97
+
98
+ Style/IfUnlessModifier:
99
+ Enabled: false
100
+
101
+ Style/IfWithSemicolon:
102
+ Enabled: false
103
+
104
+ Layout/IndentationConsistency:
105
+ EnforcedStyle: normal
106
+
107
+ Style/InlineComment:
108
+ Enabled: false
109
+
110
+ Style/Lambda:
111
+ EnforcedStyle: literal
112
+
113
+ Style/LambdaCall:
114
+ Enabled: false
115
+
116
+ Metrics/MethodLength:
117
+ Enabled: false
118
+
119
+ Style/ModuleFunction:
120
+ Enabled: false
121
+
122
+ Style/NegatedIf:
123
+ Enabled: true
124
+ EnforcedStyle: both
125
+
126
+ Style/Next:
127
+ Enabled: false
128
+
129
+ # false と nil の違いで分岐するようなコードは書くべきではない。
130
+ # `if a.nil?` のようなコードは、 `if a` に置き換える。
131
+ # nil と false を区別せざるを得ないところでのみ、 Style/NilComparison を無効化して nil? 利用すること
132
+ Style/NilComparison:
133
+ EnforcedStyle: comparison
134
+
135
+ Style/NumericLiterals:
136
+ Enabled: false
137
+
138
+ Style/OneLineConditional:
139
+ Enabled: false
140
+
141
+ Style/ParallelAssignment:
142
+ Enabled: false
143
+
144
+ Metrics/ParameterLists:
145
+ Enabled: false
146
+
147
+ Naming/PredicateName:
148
+ ForbiddenPrefixes:
149
+ - is_
150
+ MethodDefinitionMacros:
151
+ - define_method
152
+ - define_singleton_method
153
+ - defdsl
154
+ Exclude:
155
+ - 'test/*/'
156
+
157
+ Style/RaiseArgs:
158
+ Enabled: false
159
+
160
+ Style/RegexpLiteral:
161
+ Enabled: false
162
+
163
+ Style/SingleLineBlockParams:
164
+ Enabled: false
165
+
166
+ Style/SignalException:
167
+ Enabled: false
168
+
169
+ Style/StringLiterals:
170
+ EnforcedStyle: single_quotes
171
+
172
+ Style/TrailingCommaInArrayLiteral:
173
+ Enabled: true
174
+ EnforcedStyleForMultiline: no_comma
175
+
176
+ Style/TrailingCommaInHashLiteral:
177
+ Enabled: true
178
+ EnforcedStyleForMultiline: no_comma
179
+
180
+ Style/TrailingCommaInArguments:
181
+ Enabled: true
182
+ EnforcedStyleForMultiline: no_comma
183
+
184
+ Style/FormatStringToken:
185
+ EnforcedStyle: template
186
+
187
+ Style/TrivialAccessors:
188
+ Enabled: false
189
+
190
+ Lint/UnusedMethodArgument:
191
+ Enabled: false
192
+
193
+ Naming/VariableNumber:
194
+ Enabled: false
195
+
196
+ Style/WhileUntilModifier:
197
+ Enabled: false
198
+
199
+ Style/WordArray:
200
+ Enabled: false
201
+
202
+ Lint/AssignmentInCondition:
203
+ AllowSafeAssignment: false
204
+
205
+ Lint/SuppressedException:
206
+ Enabled: false
207
+
208
+ Lint/UnderscorePrefixedVariableName:
209
+ AllowKeywordBlockArguments: true
210
+
211
+ Lint/Void:
212
+ Enabled: true
213
+
214
+ Lint/UselessAssignment:
215
+ Exclude:
216
+ - test/**/*.rb
217
+
218
+ Layout/EmptyLines:
219
+ Exclude:
220
+ - test/**/*.rb
221
+
222
+ Style/NumericPredicate:
223
+ EnforcedStyle: comparison
224
+
225
+ # 結果が配列になるもの   → []
226
+ #    配列にならないもの → <>
227
+ Style/PercentLiteralDelimiters:
228
+ PreferredDelimiters:
229
+ "%": '<>'
230
+ "%i": '[]'
231
+ "%q": '<>'
232
+ "%Q": '<>'
233
+ "%r": '<>'
234
+ "%s": '<>'
235
+ "%w": '[]'
236
+ "%W": '[]'
237
+ "%x": '<>'
238
+
239
+ Layout/SpaceAroundMethodCallOperator:
240
+ Enabled: true
241
+
242
+ Lint/RaiseException:
243
+ Enabled: true
244
+
245
+ Lint/StructNewOverride:
246
+ Enabled: true
247
+
248
+ Style/ExponentialNotation:
249
+ Enabled: true
250
+
251
+ Style/HashEachMethods:
252
+ Enabled: true
253
+
254
+ Style/HashTransformKeys:
255
+ Enabled: true
256
+
257
+ Style/HashTransformValues:
258
+ Enabled: true
259
+
260
+ Style/PreferredHashMethods:
261
+ EnforcedStyle: verbose
262
+
263
+ Layout/EmptyLineAfterGuardClause:
264
+ Enabled: false
265
+
266
+ Style/BlockDelimiters:
267
+ EnforcedStyle: braces_for_chaining
268
+
269
+ Metrics/AbcSize:
270
+ Max: 24.27
271
+
272
+ Style/MultilineBlockChain:
273
+ Enabled: false
274
+
275
+ Layout/MultilineMethodCallIndentation:
276
+ EnforcedStyle: indented_relative_to_receiver
277
+
278
+ Naming/MemoizedInstanceVariableName:
279
+ EnforcedStyleForLeadingUnderscores: optional
280
+
281
+ Layout/SpaceAroundOperators:
282
+ EnforcedStyleForExponentOperator: space
283
+
284
+ Layout/SpaceAroundEqualsInParameterDefault:
285
+ EnforcedStyle: no_space
286
+
287
+ Style/BlockComments:
288
+ Enabled: false
289
+
290
+ Naming/MethodName:
291
+ EnforcedStyle: snake_case
292
+ IgnoredPatterns:
293
+ - URI
294
+ - Type
295
+
296
+ Naming/RescuedExceptionsVariableName:
297
+ PreferredName: "exception"
298
+
299
+ Layout/SpaceBeforeBrackets: # (new in 1.7)
300
+ Enabled: true
301
+ Lint/AmbiguousAssignment: # (new in 1.7)
302
+ Enabled: true
303
+ Lint/DeprecatedConstants: # (new in 1.8)
304
+ Enabled: true
305
+ Lint/DuplicateBranch: # (new in 1.3)
306
+ Enabled: true
307
+ Lint/DuplicateRegexpCharacterClassElement: # (new in 1.1)
308
+ Enabled: true
309
+ Lint/EmptyBlock: # (new in 1.1)
310
+ Enabled: true
311
+ Lint/EmptyClass: # (new in 1.3)
312
+ Enabled: true
313
+ Lint/LambdaWithoutLiteralBlock: # (new in 1.8)
314
+ Enabled: true
315
+ Lint/NoReturnInBeginEndBlocks: # (new in 1.2)
316
+ Enabled: true
317
+ Lint/RedundantDirGlobSort: # (new in 1.8)
318
+ Enabled: true
319
+ Lint/ToEnumArguments: # (new in 1.1)
320
+ Enabled: true
321
+ Lint/UnexpectedBlockArity: # (new in 1.5)
322
+ Enabled: true
323
+ Lint/UnmodifiedReduceAccumulator: # (new in 1.1)
324
+ Enabled: true
325
+ Style/ArgumentsForwarding: # (new in 1.1)
326
+ Enabled: true
327
+ Style/CollectionCompact: # (new in 1.2)
328
+ Enabled: true
329
+ Style/DocumentDynamicEvalDefinition: # (new in 1.1)
330
+ Enabled: true
331
+ Style/EndlessMethod: # (new in 1.8)
332
+ Enabled: true
333
+ Style/HashExcept: # (new in 1.7)
334
+ Enabled: true
335
+ Style/NegatedIfElseCondition: # (new in 1.2)
336
+ Enabled: true
337
+ Style/NilLambda: # (new in 1.3)
338
+ Enabled: true
339
+ Style/RedundantArgument: # (new in 1.4)
340
+ Enabled: true
341
+ Style/SwapValues: # (new in 1.1)
342
+ Enabled: true
343
+ Gemspec/DateAssignment: # new in 1.10
344
+ Enabled: true
345
+ Gemspec/RequireMFA: # new in 1.23
346
+ Enabled: true
347
+ Layout/LineEndStringConcatenationIndentation: # new in 1.18
348
+ Enabled: true
349
+ Lint/AmbiguousOperatorPrecedence: # new in 1.21
350
+ Enabled: false
351
+ Lint/AmbiguousRange: # new in 1.19
352
+ Enabled: true
353
+ RequireParenthesesForMethodChains: true
354
+ Lint/EmptyInPattern: # new in 1.16
355
+ Enabled: true
356
+ Lint/IncompatibleIoSelectWithFiberScheduler: # new in 1.21
357
+ Enabled: true
358
+ Lint/NumberedParameterAssignment: # new in 1.9
359
+ Enabled: true
360
+ Lint/OrAssignmentToConstant: # new in 1.9
361
+ Enabled: true
362
+ Lint/RequireRelativeSelfPath: # new in 1.22
363
+ Enabled: true
364
+ Lint/SymbolConversion: # new in 1.9
365
+ Enabled: true
366
+ Lint/TripleQuotes: # new in 1.9
367
+ Enabled: true
368
+ Lint/UselessRuby2Keywords: # new in 1.23
369
+ Enabled: true
370
+ Security/IoMethods: # new in 1.22
371
+ Enabled: true
372
+ Style/HashConversion: # new in 1.10
373
+ Enabled: true
374
+ Style/IfWithBooleanLiteralBranches: # new in 1.9
375
+ Enabled: true
376
+ Style/InPatternThen: # new in 1.16
377
+ Enabled: true
378
+ Style/MultilineInPatternThen: # new in 1.16
379
+ Enabled: true
380
+ Style/NumberedParameters: # new in 1.22
381
+ Enabled: true
382
+ Style/NumberedParametersLimit: # new in 1.22
383
+ Enabled: true
384
+ Max: 1
385
+ Style/OpenStructUse: # new in 1.23
386
+ Enabled: true
387
+ Style/QuotedSymbols: # new in 1.16
388
+ Enabled: true
389
+ Style/RedundantSelfAssignmentBranch: # new in 1.19
390
+ Enabled: true
391
+ Style/SelectByRegexp: # new in 1.22
392
+ Enabled: true
393
+ Style/StringChars: # new in 1.12
394
+ Enabled: true
data/README.md CHANGED
@@ -8,6 +8,8 @@ By handling data as a subclass of Diva::Model as necessary,
8
8
  you can obtain a common interface and it is useful for cooperation
9
9
  among mikutter plugins.
10
10
 
11
+ [![toshia](https://circleci.com/gh/toshia/diva.svg?style=svg)](https://circleci.com/gh/toshia/diva)
12
+
11
13
  ## Installation
12
14
 
13
15
  Add this line to your application's Gemfile:
data/Rakefile CHANGED
@@ -1,10 +1,10 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
3
 
4
4
  Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
5
+ t.libs << 'test'
6
+ t.libs << 'lib'
7
7
  t.test_files = FileList['test/**/*_test.rb']
8
8
  end
9
9
 
10
- task :default => :test
10
+ task default: :test
data/bin/console CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "diva"
3
+ require 'bundler/setup'
4
+ require 'diva'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +10,5 @@ require "diva"
10
10
  # require "pry"
11
11
  # Pry.start
12
12
 
13
- require "irb"
13
+ require 'irb'
14
14
  IRB.start
data/diva.gemspec CHANGED
@@ -1,28 +1,33 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'diva/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = "diva"
8
+ spec.name = 'diva'
8
9
  spec.version = Diva::VERSION
9
- spec.authors = ["Toshiaki Asai"]
10
- spec.email = ["toshi.alternative@gmail.com"]
11
-
12
- spec.summary = %q{Implementation of expression for handling things.}
13
- spec.homepage = "https://github.com/toshia/diva"
14
- spec.license = "MIT"
10
+ spec.authors = ['Toshiaki Asai']
11
+ spec.email = ['toshi.alternative@gmail.com']
15
12
 
16
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
- spec.bindir = "exe"
18
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
- spec.require_paths = ["lib"]
13
+ spec.summary = 'Implementation of expression for handling things.'
14
+ spec.homepage = 'https://github.com/toshia/diva'
15
+ spec.license = 'MIT'
16
+ spec.required_ruby_version = '>= 2.7.0'
20
17
 
21
- spec.add_development_dependency "bundler", '>= 2.1.4', '< 2.2'
22
- spec.add_development_dependency "rake", '>= 13.0.1', '< 14.0'
23
- spec.add_development_dependency "minitest", '>= 5.13.0', '< 5.14'
24
- spec.add_development_dependency "pry", '>= 0.12.2', '< 1.0'
25
- spec.add_development_dependency "simplecov", '>= 0.17.1', '< 1.0'
18
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r<^(test|spec|features)/>) }
19
+ spec.bindir = 'exe'
20
+ spec.executables = spec.files.grep(%r<^exe/>) { |f| File.basename(f) }
21
+ spec.require_paths = ['lib']
26
22
 
27
- spec.add_dependency "addressable", ">= 2.5.2", "< 2.8"
23
+ spec.add_development_dependency 'bundler', '>= 1.16.1', '< 3.0'
24
+ spec.add_development_dependency 'irb', '>= 1.3.7', '< 2.0'
25
+ spec.add_development_dependency 'minitest', '>= 5.14.4', '< 5.15'
26
+ spec.add_development_dependency 'rake', '>= 13.0.1', '< 14.0'
27
+ spec.add_development_dependency 'rubocop', '>= 1.23.0', '< 1.24.0'
28
+ spec.add_development_dependency 'simplecov', '>= 0.17.1', '< 1.0'
29
+ spec.add_dependency 'addressable', '>= 2.5.2', '< 3.0'
30
+ spec.metadata = {
31
+ 'rubygems_mfa_required' => 'true'
32
+ }
28
33
  end
@@ -18,7 +18,8 @@ module Diva::DataSource
18
18
 
19
19
  # 取得できたらそのDivaのインスタンスをキーにして実行されるDeferredを返す
20
20
  def idof(id)
21
- Thread.new{ findbyid(id) } end
21
+ Thread.new { findbyid(id) }
22
+ end
22
23
  alias [] idof
23
24
 
24
25
  # データの保存
data/lib/diva/error.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
+
2
3
  module Diva
3
4
  class DivaError < StandardError; end
4
5
 
@@ -15,5 +16,4 @@ module Diva
15
16
 
16
17
  # URIとして受け付けられない値を渡された
17
18
  class InvalidURIError < InvalidTypeError; end
18
-
19
19
  end
@@ -29,11 +29,3 @@ class Diva::FieldGenerator
29
29
  @model_klass.add_field(field_name, type: type, required: required)
30
30
  end
31
31
  end
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
data/lib/diva/model.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
+
2
3
  =begin rdoc
3
4
  いろんなリソースの基底クラス
4
5
  =end
@@ -23,7 +24,7 @@ class Diva::Model
23
24
  # selfにあってotherにもあるカラムはotherの内容で上書きされる。
24
25
  # 上書き後、データはDataSourceに保存される
25
26
  def merge(other)
26
- @value.update(other.to_hash)
27
+ @value.update(other.to_h)
27
28
  validate
28
29
  self.class.store_datum(self)
29
30
  end
@@ -56,13 +57,13 @@ class Diva::Model
56
57
  end
57
58
 
58
59
  def hash
59
- @_hash ||= self.uri.to_s.hash ^ self.class.hash
60
+ @_hash ||= uri.to_s.hash ^ self.class.hash
60
61
  end
61
62
 
62
63
  def <=>(other)
63
64
  if other.is_a?(Diva::Model)
64
65
  created - other.created
65
- elsif other.respond_to?(:[]) and other[:created]
66
+ elsif other.respond_to?(:[]) && other[:created]
66
67
  created - other[:created]
67
68
  else
68
69
  id - other
@@ -79,14 +80,12 @@ class Diva::Model
79
80
  self == other
80
81
  end
81
82
 
82
- def to_hash
83
- Hash[self.class.fields.map{|f| [f.name, fetch(f.name)] }]
83
+ def to_h
84
+ self.class.fields.to_h { |f| [f.name, fetch(f.name)] }
84
85
  end
85
86
 
86
87
  def to_json(*rest)
87
- Hash[
88
- self.class.fields.map{|f| [f.name, f.dump_for_json(fetch(f.name))] }
89
- ].to_json(*rest)
88
+ self.class.fields.to_h { |f| [f.name, f.dump_for_json(fetch(f.name))] }.to_json(*rest)
90
89
  end
91
90
 
92
91
  # カラムの生の内容を返す
@@ -100,32 +99,27 @@ class Diva::Model
100
99
  def []=(key, value)
101
100
  @value[key.to_sym] = value
102
101
  self.class.store_datum(self)
103
- value
104
102
  end
105
103
 
106
104
  # カラムと型が違うものがある場合、例外を発生させる。
107
105
  def validate
108
- raise RuntimeError, "argument is #{@value}, not Hash" if not @value.is_a?(Hash)
106
+ raise "argument is #{@value}, not Hash" unless @value.is_a?(Hash)
109
107
  self.class.fields.each do |field|
110
- begin
111
- @value[field.name] = field.type.cast(@value[field.name])
112
- rescue Diva::InvalidTypeError => err
113
- raise Diva::InvalidTypeError, "#{err} in field `#{field}'"
114
- end
108
+ @value[field.name] = field.type.cast(@value[field.name])
109
+ rescue Diva::InvalidTypeError => exception
110
+ raise Diva::InvalidTypeError, "#{exception} in field `#{field}'"
115
111
  end
116
112
  end
117
113
 
118
114
  # キーとして定義されていない値を全て除外した配列を生成して返す。
119
115
  # また、Modelを子に含んでいる場合、それを外部キーに変換する。
120
116
  def filtering
121
- datum = self.to_hash
122
- result = Hash.new
117
+ datum = to_h
118
+ result = {}
123
119
  self.class.fields.each do |field|
124
- begin
125
- result[field.name] = field.type.cast(datum[field.name])
126
- rescue Diva::InvalidTypeError => err
127
- raise Diva::InvalidTypeError, "#{err} in field `#{field}'"
128
- end
120
+ result[field.name] = field.type.cast(datum[field.name])
121
+ rescue Diva::InvalidTypeError => exception
122
+ raise Diva::InvalidTypeError, "#{exception} in field `#{field}'"
129
123
  end
130
124
  result
131
125
  end
@@ -133,10 +127,9 @@ class Diva::Model
133
127
  # このインスタンスのタイトル。
134
128
  def title
135
129
  fields = self.class.fields.lazy.map(&:name)
136
- case
137
- when fields.include?(:name)
130
+ if fields.include?(:name)
138
131
  name.gsub("\n", '')
139
- when fields.include?(:description)
132
+ elsif fields.include?(:description)
140
133
  description.gsub("\n", '')
141
134
  else
142
135
  to_s.gsub("\n", '')
@@ -146,18 +139,25 @@ class Diva::Model
146
139
  def dig(key, *args)
147
140
  return nil unless key.respond_to?(:to_sym)
148
141
  value = fetch(key)
149
- if value.nil? || args.empty?
142
+ if value == nil || args.empty?
150
143
  value
151
144
  else
152
145
  value.dig(*args)
153
146
  end
154
147
  end
155
148
 
149
+ def deconstruct_keys(keys)
150
+ if keys
151
+ @value.slice(*keys) # 高速化のため、fetchを呼び出していない
152
+ else
153
+ @value
154
+ end
155
+ end
156
+
156
157
  private
158
+
157
159
  # URIがデフォルトで使うpath要素
158
160
  def path
159
161
  @path ||= "/#{SecureRandom.uuid}"
160
162
  end
161
-
162
163
  end
163
-
@@ -15,14 +15,14 @@ module Diva::ModelExtend
15
15
  # ==== Return
16
16
  # [String] URIスキーム
17
17
  def scheme
18
- @_scheme ||= self.to_s.split('::',2).first.gsub(/\W/,'').downcase.freeze
18
+ @_scheme ||= to_s.split('::', 2).first.gsub(/\W/, '').downcase.freeze
19
19
  end
20
20
 
21
21
  # Modelのインスタンスのホスト名。オーバライドして適切な値にする
22
22
  # ==== Return
23
23
  # [String] ホスト名
24
24
  def host
25
- @_host ||= self.to_s.split('::',2).last.split('::').reverse.join('.').gsub(/[^\w\.]/,'').downcase.freeze
25
+ @_host ||= to_s.split('::', 2).last.split('::').reverse.join('.').gsub(/[^\w.]/, '').downcase.freeze
26
26
  end
27
27
 
28
28
  # Modelにフィールドを追加する。
@@ -55,7 +55,7 @@ module Diva::ModelExtend
55
55
  @fields ||= []
56
56
  end
57
57
  alias :keys :fields
58
- deprecate :keys, "fields", 2018, 02
58
+ deprecate :keys, 'fields', 2018, 2
59
59
 
60
60
  def schema
61
61
  {
data/lib/diva/spec.rb CHANGED
@@ -5,5 +5,5 @@ Diva::ModelSpec = Struct.new(
5
5
  :name,
6
6
  :reply,
7
7
  :myself,
8
- :timeline,
8
+ :timeline
9
9
  )
data/lib/diva/type.rb CHANGED
@@ -27,7 +27,7 @@ Diva::Modelのサブクラスであれば、それを制約とすることがで
27
27
  配列の全ての要素が設定された制約を満たしていれば、配列制約が満たされたことになる。
28
28
 
29
29
  =end
30
- require "time"
30
+ require 'time'
31
31
  require 'diva/uri'
32
32
 
33
33
  module Diva::Type
@@ -73,7 +73,7 @@ module Diva::Type
73
73
  end
74
74
 
75
75
  def inspect
76
- "Diva::Type(#{to_s})"
76
+ "Diva::Type(#{self})"
77
77
  end
78
78
  end
79
79
 
@@ -84,12 +84,12 @@ module Diva::Type
84
84
  end
85
85
 
86
86
  def recommendation_point(value)
87
- _, point = @recommended_classes.map.with_index{|k, i| [k, i] }.find{|k, _| value.is_a?(k) }
87
+ _, point = @recommended_classes.map.with_index { |k, i| [k, i] }.find { |k, _| value.is_a?(k) }
88
88
  point
89
89
  end
90
90
 
91
91
  def schema
92
- @schema ||= {type: uri}.freeze
92
+ @schema ||= { type: uri }.freeze
93
93
  end
94
94
 
95
95
  def uri
@@ -169,7 +169,7 @@ module Diva::Type
169
169
  end
170
170
  end
171
171
  NULL = AtomicType.new(:null, NilClass) do |v|
172
- if v.nil?
172
+ if v == nil
173
173
  v
174
174
  else
175
175
  raise Diva::InvalidTypeError, "The value is not a `#{name}'."
@@ -178,13 +178,14 @@ module Diva::Type
178
178
 
179
179
  class ModelType < MetaType
180
180
  attr_reader :model
181
+
181
182
  def initialize(model, *rest, &cast)
182
183
  super(:model, *rest)
183
184
  @model = model
184
185
  end
185
186
 
186
- def recommendation_point(v)
187
- v.is_a?(model) && 0
187
+ def recommendation_point(value)
188
+ value.is_a?(model) && 0
188
189
  end
189
190
 
190
191
  def cast(value)
@@ -199,7 +200,7 @@ module Diva::Type
199
200
  end
200
201
 
201
202
  def schema
202
- @schema ||= {type: uri}.freeze
203
+ @schema ||= { type: uri }.freeze
203
204
  end
204
205
 
205
206
  def to_s
@@ -219,7 +220,7 @@ module Diva::Type
219
220
  end
220
221
 
221
222
  def recommendation_point(values)
222
- values.is_a?(Enumerable) && values.all?{|v| @type.recommendation_point(v) } && 0
223
+ values.is_a?(Enumerable) && values.all? { |v| @type.recommendation_point(v) } && 0
223
224
  end
224
225
 
225
226
  def cast(value)
@@ -232,7 +233,7 @@ module Diva::Type
232
233
  end
233
234
 
234
235
  def to_s
235
- "Array of #{@type.to_s}"
236
+ "Array of #{@type}"
236
237
  end
237
238
 
238
239
  def schema
@@ -246,8 +247,8 @@ module Diva::Type
246
247
  super("union_#{@types.map(&:name).join('_')}")
247
248
  end
248
249
 
249
- def recommendation_point(v)
250
- @types.map{|t| t.recommendation_point(v) }.compact.min
250
+ def recommendation_point(value)
251
+ @types.map { |t| t.recommendation_point(value) }.compact.min
251
252
  end
252
253
 
253
254
  def cast(value)
@@ -267,18 +268,18 @@ module Diva::Type
267
268
  end
268
269
 
269
270
  def recommended_type_of(value)
270
- @types.map{|t|
271
+ available_types = @types.map { |t|
271
272
  [t, t.recommendation_point(value)]
272
- }.select{|_,p| p }.sort_by{|_,p| p }.each{|t,_|
273
- return t
274
- }
273
+ }.select { |_, p| p }
274
+ unless available_types.empty?
275
+ best, = available_types.min_by { |_, p| p }
276
+ return best
277
+ end
275
278
  @types.each do |type|
276
- begin
277
- type.cast(value)
278
- return type
279
- rescue Diva::InvalidTypeError
280
- # try next
281
- end
279
+ type.cast(value)
280
+ return type
281
+ rescue Diva::InvalidTypeError
282
+ # try next
282
283
  end
283
284
  raise Diva::InvalidTypeError, "The value is not #{self}"
284
285
  end
@@ -304,7 +305,7 @@ module Diva
304
305
  Diva::Type::URI
305
306
  when :null
306
307
  Diva::Type::NULL
307
- when ->x{x.class == Class && x.ancestors.include?(Diva::Model) }
308
+ when ->(x) { x.instance_of?(Class) && x.ancestors.include?(Diva::Model) }
308
309
  Diva::Type.model_of(type)
309
310
  when Array
310
311
  if type.size >= 2
data/lib/diva/uri.rb CHANGED
@@ -46,9 +46,9 @@ class Diva::URI
46
46
  def ==(other)
47
47
  case other
48
48
  when URI, Addressable::URI, String
49
- other.to_s == self.to_s
49
+ other.to_s == to_s
50
50
  when Diva::URI
51
- if has_string? or other.has_string?
51
+ if has_string? || other.has_string?
52
52
  to_s == other.to_s
53
53
  else
54
54
  other.to_uri == to_uri
@@ -60,6 +60,10 @@ class Diva::URI
60
60
  to_s.hash ^ self.class.hash
61
61
  end
62
62
 
63
+ def eql?(other)
64
+ self == other
65
+ end
66
+
63
67
  def has_string?
64
68
  !!@uri_string
65
69
  end
@@ -69,15 +73,15 @@ class Diva::URI
69
73
  end
70
74
 
71
75
  def to_s
72
- @uri_string ||= to_uri.to_s.freeze
76
+ @uri_string ||= to_uri.to_s.freeze # rubocop:disable Naming/MemoizedInstanceVariableName
73
77
  end
74
78
 
75
79
  def to_uri
76
- @uri ||= generate_uri.freeze
80
+ @uri ||= generate_uri.freeze # rubocop:disable Naming/MemoizedInstanceVariableName
77
81
  end
78
82
 
79
83
  def scheme
80
- if has_string? and !has_uri?
84
+ if has_string? && !has_uri?
81
85
  match = @uri_string.match(%r<\A(\w+):>)
82
86
  if match
83
87
  match[1]
data/lib/diva/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Diva
2
- VERSION = "1.0.2"
2
+ VERSION = '2.0.0'.freeze
3
3
  end
data/lib/diva.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # coding: utf-8
2
+
2
3
  require 'diva/version'
3
4
  require 'diva/datasource'
4
5
  require 'diva/error'
@@ -8,8 +9,6 @@ require 'diva/model'
8
9
  require 'diva/spec'
9
10
  require 'diva/type'
10
11
  require 'diva/uri'
11
- require 'diva/version'
12
-
13
12
 
14
13
  module Diva
15
14
  def self.URI(uri)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diva
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toshiaki Asai
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-11 00:00:00.000000000 Z
11
+ date: 2021-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,80 +16,100 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 2.1.4
19
+ version: 1.16.1
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '2.2'
22
+ version: '3.0'
23
23
  type: :development
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 2.1.4
29
+ version: 1.16.1
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '2.2'
32
+ version: '3.0'
33
33
  - !ruby/object:Gem::Dependency
34
- name: rake
34
+ name: irb
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: 13.0.1
39
+ version: 1.3.7
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
- version: '14.0'
42
+ version: '2.0'
43
43
  type: :development
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 13.0.1
49
+ version: 1.3.7
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
- version: '14.0'
52
+ version: '2.0'
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: minitest
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 5.13.0
59
+ version: 5.14.4
60
60
  - - "<"
61
61
  - !ruby/object:Gem::Version
62
- version: '5.14'
62
+ version: '5.15'
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: 5.13.0
69
+ version: 5.14.4
70
70
  - - "<"
71
71
  - !ruby/object:Gem::Version
72
- version: '5.14'
72
+ version: '5.15'
73
73
  - !ruby/object:Gem::Dependency
74
- name: pry
74
+ name: rake
75
75
  requirement: !ruby/object:Gem::Requirement
76
76
  requirements:
77
77
  - - ">="
78
78
  - !ruby/object:Gem::Version
79
- version: 0.12.2
79
+ version: 13.0.1
80
80
  - - "<"
81
81
  - !ruby/object:Gem::Version
82
- version: '1.0'
82
+ version: '14.0'
83
83
  type: :development
84
84
  prerelease: false
85
85
  version_requirements: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: 0.12.2
89
+ version: 13.0.1
90
90
  - - "<"
91
91
  - !ruby/object:Gem::Version
92
- version: '1.0'
92
+ version: '14.0'
93
+ - !ruby/object:Gem::Dependency
94
+ name: rubocop
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: 1.23.0
100
+ - - "<"
101
+ - !ruby/object:Gem::Version
102
+ version: 1.24.0
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: 1.23.0
110
+ - - "<"
111
+ - !ruby/object:Gem::Version
112
+ version: 1.24.0
93
113
  - !ruby/object:Gem::Dependency
94
114
  name: simplecov
95
115
  requirement: !ruby/object:Gem::Requirement
@@ -119,7 +139,7 @@ dependencies:
119
139
  version: 2.5.2
120
140
  - - "<"
121
141
  - !ruby/object:Gem::Version
122
- version: '2.8'
142
+ version: '3.0'
123
143
  type: :runtime
124
144
  prerelease: false
125
145
  version_requirements: !ruby/object:Gem::Requirement
@@ -129,15 +149,17 @@ dependencies:
129
149
  version: 2.5.2
130
150
  - - "<"
131
151
  - !ruby/object:Gem::Version
132
- version: '2.8'
133
- description:
152
+ version: '3.0'
153
+ description:
134
154
  email:
135
155
  - toshi.alternative@gmail.com
136
156
  executables: []
137
157
  extensions: []
138
158
  extra_rdoc_files: []
139
159
  files:
160
+ - ".circleci/config.yml"
140
161
  - ".gitignore"
162
+ - ".rubocop.yml"
141
163
  - ".travis.yml"
142
164
  - Gemfile
143
165
  - LICENSE.txt
@@ -160,8 +182,9 @@ files:
160
182
  homepage: https://github.com/toshia/diva
161
183
  licenses:
162
184
  - MIT
163
- metadata: {}
164
- post_install_message:
185
+ metadata:
186
+ rubygems_mfa_required: 'true'
187
+ post_install_message:
165
188
  rdoc_options: []
166
189
  require_paths:
167
190
  - lib
@@ -169,15 +192,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
169
192
  requirements:
170
193
  - - ">="
171
194
  - !ruby/object:Gem::Version
172
- version: '0'
195
+ version: 2.7.0
173
196
  required_rubygems_version: !ruby/object:Gem::Requirement
174
197
  requirements:
175
198
  - - ">="
176
199
  - !ruby/object:Gem::Version
177
200
  version: '0'
178
201
  requirements: []
179
- rubygems_version: 3.1.2
180
- signing_key:
202
+ rubygems_version: 3.2.29
203
+ signing_key:
181
204
  specification_version: 4
182
205
  summary: Implementation of expression for handling things.
183
206
  test_files: []