activerecord-bixformer 0.4.14 → 0.4.15
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a97223c0df1544574cc93f7cdd489c06fe73fb41
|
4
|
+
data.tar.gz: 2c4870fb05bbef0c998415c6aa929073511a982e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d0aad4cbddfd3fd860b17bd2c0479281c65ef7fca3f000e366fed9a1764d442c926f58e3582cdf399c0785e7c2a5dd4069aad347b0a0222056c9aec8bcfb17b
|
7
|
+
data.tar.gz: d9671482f4a175a2bfaadcfb29a39945e73ff63327949af83ba52746469977af966c538ccc9418026fcc6316391ed37486da7d877f749dbdd2de2645f54a9743
|
data/README-ja.md
CHANGED
@@ -198,13 +198,16 @@ class SamplePlan
|
|
198
198
|
{
|
199
199
|
# 対象モデル(上の例なら user )は、現在処理対象になっている group に属している
|
200
200
|
group_id: current_group.id
|
201
|
-
|
201
|
+
|
202
|
+
# 関連モデルに対する指定
|
203
|
+
# 関連モデルの場合は、親レコードの foreign_key(上記の場合、 user_id )も自動で加わります
|
204
|
+
posts: {
|
205
|
+
private: true
|
206
|
+
}
|
207
|
+
|
202
208
|
# インポートデータに primary_key や bixformer_unique_attributes がある場合、
|
203
209
|
# 更新レコードをデータベース検索しますが、その際にも条件に追加されます
|
204
210
|
|
205
|
-
# 関連モデルの場合は、この設定の有無に関わらず、親レコードの foreign_key が使用されるため、
|
206
|
-
# 関連モデルへの指定はできません
|
207
|
-
|
208
211
|
# primary_key が指定されているのに、データベース検索に失敗した場合には、
|
209
212
|
# ActiveRecord::RecordNotFound 例外が raise されます
|
210
213
|
}
|
@@ -230,6 +233,26 @@ class SamplePlan
|
|
230
233
|
end
|
231
234
|
|
232
235
|
|
236
|
+
# [bixformer_sort_indexes] エクスポート時に、出力データ内の属性の出力順の定義
|
237
|
+
#
|
238
|
+
# - ハッシュを返すProcオブジェクトかメソッド名/シンボルで指定
|
239
|
+
# - 出力順を整数で指定。それの昇順で出力される
|
240
|
+
# - 未定義の場合、 bixformer_entry で定義された全属性数( attributes に指定されたハッシュのキーの合計 )になる
|
241
|
+
# - 出力順が同じ場合、 bixformer_entry の定義順になる
|
242
|
+
#
|
243
|
+
bixformer_sort_indexes -> do
|
244
|
+
{
|
245
|
+
# 投稿のタイトルを1番先に出力
|
246
|
+
posts: {
|
247
|
+
title: 1
|
248
|
+
},
|
249
|
+
|
250
|
+
# 次はユーザ名
|
251
|
+
name: 2
|
252
|
+
}
|
253
|
+
end
|
254
|
+
|
255
|
+
|
233
256
|
# [bixformer_translation_config] インポート/エクスポートで行われる translation の設定の定義
|
234
257
|
#
|
235
258
|
# - CSVでは
|
@@ -307,9 +330,13 @@ CSV.parse(csv_data).each do |csv_row|
|
|
307
330
|
|
308
331
|
attributes = bixformer.assignable_attributes(csv_row)
|
309
332
|
user = User.new
|
310
|
-
|
311
|
-
|
312
|
-
|
333
|
+
|
334
|
+
begin
|
335
|
+
user.assign_attributes(attributes)
|
336
|
+
user.save!
|
337
|
+
rescue ActiveRecord::Bixformer::ImportError => e
|
338
|
+
logger.error e.model.errors.full_messages.join(',')
|
339
|
+
end
|
313
340
|
|
314
341
|
end
|
315
342
|
end
|
@@ -327,9 +354,19 @@ Model は各データ形式毎に異なる処理が必要になるため、デ
|
|
327
354
|
* has_one な関連モデル用。 has_many な関連モデルには使えない
|
328
355
|
* indexed
|
329
356
|
* has_many な関連モデル用。 has_one な関連モデルには使えない
|
357
|
+
* 関連レコード群に 1 から順に index を割当てて、それによってレコードを特定する
|
330
358
|
* `size` オプションでインポート/エクスポートするサイズを指定
|
331
359
|
* 属性の translation は `投稿%{index}のタイトル` のように指定
|
332
|
-
* モデルの translation は `ユーザ%{index}の` のように指定(関連モデルがさらに
|
360
|
+
* モデルの translation は `ユーザ%{index}の` のように指定(関連モデルがさらに has_many だった場合に使われます)
|
361
|
+
* mapped
|
362
|
+
* has_many な関連モデル用。 has_one な関連モデルには使えない
|
363
|
+
* 関連レコード群が、特定の属性の値によって特定できる(自身の foreign_key と、その属性で unique な)場合に使える
|
364
|
+
* `key` オプションに、その属性名を指定
|
365
|
+
* `in` オプションに、関連レコード群の `key` オプションの属性値を配列で指定
|
366
|
+
* 属性の translation は `投稿の種別%{key}` のように指定
|
367
|
+
* モデルの translation は `投稿の種別%{key}の` のように指定(関連モデルがさらに has_many だった場合に使われます)
|
368
|
+
* `translate` オプションで、 translation の `key` 引数の値を変更可能
|
369
|
+
* `key` オプションの属性値が引数になる。 translation の `key` 引数に渡す値を返すこと
|
333
370
|
|
334
371
|
### 本フレームワークに定義されたAttribute一覧
|
335
372
|
|
@@ -339,19 +376,36 @@ Attribute は、基本的にデータ形式に依らず、使用可能な想定
|
|
339
376
|
* エクスポートでは `to_s` し、インポートでは `strip` して `presence` する
|
340
377
|
* boolean
|
341
378
|
* `true` / `false` オプションに、それぞれに対応する文字列を指定。デフォルトは、 `"true"` / `"false"`
|
342
|
-
*
|
379
|
+
* インポート時、合致しない値だった場合、 `raise` オプションが `true` ならエラーに、 `false` なら nil になる。デフォルトは、 `true`
|
343
380
|
* date
|
344
381
|
* `format` オプションで、 `Date::DATE_FORMATS` のキーを指定。デフォルトは、 `default`
|
345
|
-
*
|
382
|
+
* インポート時、合致しない値だった場合、 `raise` オプションが `true` ならエラーに、 `false` なら nil になる。デフォルトは、 `true`
|
383
|
+
* integer
|
384
|
+
* エクスポートでは `to_s` し、インポートでは `to_i` する
|
385
|
+
* `greater_than` / `greater_than_or_equal_to` / `less_than` / `less_than_or_equal_to` オプションで、インポートする範囲指定が可能。
|
386
|
+
* インポート時、合致しない値だった場合、 `raise` オプションが `true` ならエラーに、 `false` なら nil になる。デフォルトは、 `true`
|
346
387
|
* time
|
347
388
|
* `format` オプションで、 `Time::DATE_FORMATS` のキーを指定。デフォルトは、 `default`
|
348
|
-
*
|
389
|
+
* インポート時、合致しない値だった場合、 `raise` オプションが `true` ならエラーに、 `false` なら nil になる。デフォルトは、 `true`
|
349
390
|
* booletania
|
350
391
|
* 詳細は、 https://github.com/ryoff/booletania
|
351
|
-
*
|
392
|
+
* インポート時、合致しない値だった場合、 `raise` オプションが `true` ならエラーに、 `false` なら nil になる。デフォルトは、 `true`
|
352
393
|
* enumerize
|
353
394
|
* 詳細は、 https://github.com/brainspec/enumerize
|
354
|
-
*
|
395
|
+
* インポート時、合致しない値だった場合、 `raise` オプションが `e` ならエラーに、 `false` なら nil になる。デフォルトは、 `true`
|
396
|
+
* formatted_foreign_key
|
397
|
+
* belongs_to な関連レコードを id でない値で扱うことができる
|
398
|
+
* 以下のオプションがある
|
399
|
+
* `formatter` (必須) : エクスポート時の出力値を 属性名/メソッド名/Proc で指定
|
400
|
+
* Procの場合、出力対象のActiveRecordインスタンスが引数となる
|
401
|
+
* `parser` : インポート時の関連レコードの検索条件を返すProcを指定。デフォルトは、 `{ #{formatter} => #{インポート値} }`
|
402
|
+
* `scope` : インポート時の関連レコードを検索するスコープを scope名/Proc で指定。デフォルトは、 `対象モデル.all`
|
403
|
+
* `find_by` : インポート時の関連レコードを検索するメソッドを メソッド名/Proc で指定。デフォルトは、 `find_by`
|
404
|
+
* Procの場合、 `scope` オプションの戻り値、 `parser` の戻り値が引数となり、
|
405
|
+
* 関連レコードが検索で見つかった場合は、対象のActiveRecordインスタンスを返すこと
|
406
|
+
* `create` : インポート時、関連レコードが見つからない場合、対応する関連レコードを作成するかどうかを指定。デフォルトは、 `false`
|
407
|
+
* `creator` : インポート時、関連レコードを作成するメソッドを メソッド名/Proc で指定。デフォルトは、 `save`
|
408
|
+
* Procの場合、 buildされたActiveRecordインスタンスが引数となる。それを保存すること。
|
355
409
|
* override
|
356
410
|
* モデルに処理を委譲する
|
357
411
|
* モデルに `override_import_属性名` / `override_export_属性名` を定義すること
|
@@ -37,10 +37,7 @@ module ActiveRecord
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def set_required_condition
|
40
|
-
|
41
|
-
return if @model.parent
|
42
|
-
|
43
|
-
@model_attributes.merge!(@plan.value_of(:required_condition))
|
40
|
+
@model_attributes.merge!(@plan.pickup_value_for(@model, :required_condition, {}))
|
44
41
|
end
|
45
42
|
|
46
43
|
def set_parent_foreign_key
|
@@ -83,13 +80,14 @@ module ActiveRecord
|
|
83
80
|
return nil unless uniqueness_condition
|
84
81
|
|
85
82
|
# 更新対象のレコードを正しく特定できているか確認するための検証条件を取得
|
86
|
-
required_condition =
|
87
|
-
|
83
|
+
required_condition = @plan.pickup_value_for(@model, :required_condition, {})
|
84
|
+
|
85
|
+
# 親がいる場合は、親のID属性を検証条件に追加
|
86
|
+
if @model.parent
|
87
|
+
key = @model.parent_foreign_key
|
88
88
|
|
89
|
-
|
90
|
-
|
91
|
-
@plan.value_of(:required_condition)
|
92
|
-
end
|
89
|
+
required_condition[key] = @model_attributes[key]
|
90
|
+
end
|
93
91
|
|
94
92
|
# 検証条件は、必ず値がなければならない
|
95
93
|
return nil if required_condition.any? { |_k, v| ! presence_value?(v) }
|
@@ -47,7 +47,10 @@ module ActiveRecord
|
|
47
47
|
config_value.extract_options!
|
48
48
|
|
49
49
|
# Arrayなら、要素は文字列化しておく
|
50
|
-
config_value = config_value.map
|
50
|
+
config_value = config_value.map(&:to_s)
|
51
|
+
elsif config_name != :entry && config_value.is_a?(::Hash)
|
52
|
+
# 子要素の設定を排除
|
53
|
+
config_value = config_value.except(*model.associations.map(&:name))
|
51
54
|
end
|
52
55
|
|
53
56
|
config_value || default_value
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-bixformer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hiroaki Otsu
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|