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: 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