activerecord-bixformer 0.4.14 → 0.4.15
Sign up to get free protection for your applications and to get access to all the features.
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
|