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: ece796f327a3cf4bcf833c066b98121ef08a02a3
4
- data.tar.gz: a48f51c405fed75321430c14b0a75f16f3c7ee52
3
+ metadata.gz: a97223c0df1544574cc93f7cdd489c06fe73fb41
4
+ data.tar.gz: 2c4870fb05bbef0c998415c6aa929073511a982e
5
5
  SHA512:
6
- metadata.gz: 34db4f8782098149e84d145ed0ae9d496cfe0753d2771aa1e5cc7337d268e0848aba6558bd56c1deb0c442c559e6497f72deafa4436a2e6208c0f7cddad7af4b
7
- data.tar.gz: 7aa3470ff539d7c68fd5e5a6cd25c75f323809b69c51e13a4ab92dd4b0ce0a96331394cab3b9e7d4c78b7634685dfb6a04b1d396d8113db4bc809656ee6b80a9
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
- user.assign_attributes(attributes)
312
- user.save!
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}の` のように指定(関連モデルがさらに indexed だった場合に使われます)
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
- * インポート時、合致しない値は `nil` になる
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
- * インポート時、合致しない値は `nil` になる
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 = if @model.parent
87
- key = @model.parent_foreign_key
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
- { key => @model_attributes[key] }
90
- else
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 { |v| v.to_s }
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
@@ -1,5 +1,5 @@
1
1
  module ActiveRecord
2
2
  module Bixformer
3
- VERSION = "0.4.14"
3
+ VERSION = "0.4.15"
4
4
  end
5
5
  end
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.14
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-10-18 00:00:00.000000000 Z
11
+ date: 2016-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord