card 1.20.3 → 1.20.4

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: d473e0a3e8d38c3f5b10001ca763558362242ed4
4
- data.tar.gz: b5a28aad03fb7a61bbbcab0fb2b96517ad82eee4
3
+ metadata.gz: bc831339e2819ac6a6ea6e2d4b4a2213c5c683ad
4
+ data.tar.gz: 433407d4dd89299309079c2be3483b5185a8d93b
5
5
  SHA512:
6
- metadata.gz: '003328d8f53ba75f789b16ab4b89b4f350e34212416b6c90b7f7fa8517b494e2c717c94e61fbd2e062291d93db723e2c3d01a6bbb83481548061843471b1c4e3'
7
- data.tar.gz: d4ef331eb073a750e13433ae3292f74cc79870b27d0f887e34d5dbf3d24de02aec574e926ce103a085aff12f5ca24c25fe9fc71deb237eafd3cb6d727873a22d
6
+ metadata.gz: f6ed5a62f46acd1188f4cb77f408d59ebaed043634616ec68d3060ea812f063daa948c4c4e224bf9039900afc1029a9e8a2ffbb93d98fe3f2c27dd7f3b774fdb
7
+ data.tar.gz: 0d51251838f7fd2fde52471b2c91b025f08f71b690af62665fbe5f85e2d8df4697390d1e53aa9276bbb3a2985630bc727e75444e4b252fa7b958539c9a4225e1
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.20.3
1
+ 1.20.4
@@ -0,0 +1,11 @@
1
+ module CoreExtensions
2
+ module Kernel
3
+ def suppress_warnings
4
+ original_verbosity = $VERBOSE
5
+ $VERBOSE = nil
6
+ yield
7
+ ensure
8
+ $VERBOSE = original_verbosity
9
+ end
10
+ end
11
+ end
@@ -2,13 +2,14 @@
2
2
 
3
3
  # extend core Ruby object classes
4
4
 
5
- class Class
5
+ class Module
6
6
  def include_extension extension
7
7
  include extension
8
8
  end
9
9
  end
10
10
 
11
11
  module CoreExtensions
12
+ ::Kernel.include_extension Kernel
12
13
  ::Object.include_extension Object
13
14
  ::Module.include_extension Module
14
15
  ::Array.include_extension Array
@@ -9,7 +9,7 @@ end
9
9
  if defined? BetterErrors
10
10
  module BetterErrors
11
11
  class StackFrame
12
- include Patches::BetterErrors::StackFrame::TmpPath
12
+ suppress_warnings { include Patches::BetterErrors::StackFrame::TmpPath }
13
13
  end
14
14
  end
15
15
  end
@@ -114,6 +114,7 @@ class Card
114
114
  end
115
115
 
116
116
  def add director
117
+ # Rails.logger.debug "added: #{director.card.name}".green
117
118
  directors[director.card] = director
118
119
  end
119
120
 
@@ -140,7 +141,8 @@ class Card
140
141
  end
141
142
 
142
143
  def to_s
143
- directors.values.map(&:to_s).join "\n"
144
+ act_director.to_s
145
+ #directors.values.map(&:to_s).join "\n"
144
146
  end
145
147
  end
146
148
  end
@@ -163,11 +163,10 @@ class Card
163
163
  end
164
164
  end
165
165
 
166
- def to_s
166
+ def to_s level=1
167
167
  str = @card.name.to_s.clone
168
168
  if @subdirectors
169
- subs = subdirectors.map(&:card)
170
- .map { |card| " #{card.name}" }.join "\n"
169
+ subs = subdirectors.map { |d| " " * level + d.to_s(level + 1) }.join "\n"
171
170
  str << "\n#{subs}"
172
171
  end
173
172
  str
@@ -49,7 +49,7 @@ class Card
49
49
  case user
50
50
  when NilClass then nil
51
51
  when Card then user.id
52
- when Fixnum then user
52
+ when Integer then user
53
53
  else Card.fetch_id(user)
54
54
  end
55
55
  end
@@ -9,7 +9,7 @@ format :csv do
9
9
  @depth.zero? ? :csv_row : :name
10
10
  end
11
11
 
12
- view :csv_row do |_args|
12
+ view :csv_row do
13
13
  array = _render_raw.scan(/\{\{[^\}]*\}\}/).map do |inc|
14
14
  process_content(inc).strip
15
15
  end
@@ -22,28 +22,13 @@ format :csv do
22
22
  ""
23
23
  end
24
24
 
25
- view :csv_title_row do |_args|
26
- # NOTE: assumes all cards have the same structure!
27
- begin
28
- card1 = search_with_params.first
25
+ view :name_with_fields do
26
+ CSV.generate_line name_with_fields_row
27
+ end
29
28
 
30
- parsed_content = Card::Content.new card1.raw_content, self
31
- if parsed_content.__getobj__.is_a? String
32
- ""
33
- else
34
- titles = parsed_content.map do |chunk|
35
- next if chunk.class != Card::Content::Chunk::Nest
36
- opts = chunk.options
37
- if %w(name link).member? opts[:view]
38
- opts[:view]
39
- else
40
- opts[:nest_name].to_name.tag
41
- end
42
- end.compact
43
- CSV.generate_line titles.map { |title| title.to_s.upcase }
44
- end
45
- rescue
46
- ""
29
+ def name_with_fields_row
30
+ nested_fields.each_with_object([card.name]) do |(field_name, options), row|
31
+ row << nest(field_name)
47
32
  end
48
33
  end
49
34
  end
@@ -21,9 +21,11 @@ def coded_dir new_mod=nil
21
21
  end
22
22
 
23
23
  def mod_dir new_mod=nil
24
- find_mod = new_mod || mod
25
- Card::Mod::Loader.mod_dirs.path(find_mod) ||
26
- raise(Error, "can't find mod \"#{find_mod}\"")
24
+ mod_name = new_mod || mod
25
+ dir = Card::Mod::Loader.mod_dirs.path(mod_name) || (mod_name == :test && "test")
26
+
27
+ raise Error, "can't find mod \"#{mod_name}\"" unless dir
28
+ dir
27
29
  end
28
30
 
29
31
  def files_base_dir
@@ -191,7 +191,7 @@ format do
191
191
  end
192
192
 
193
193
  def implicit_item_view
194
- view = voo_items_view || default_item_view
194
+ view = params[:item] || voo_items_view || default_item_view
195
195
  Card::View.canonicalize view
196
196
  end
197
197
 
@@ -344,3 +344,61 @@ format :html do
344
344
  static_tabs tabs, tab_type
345
345
  end
346
346
  end
347
+
348
+ format :csv do
349
+ view :core do
350
+ if (item_view_options[:view] == :name_with_fields) && focal?
351
+ title_row("item name") + name_with_field_rows
352
+ else
353
+ super()
354
+ end
355
+ end
356
+
357
+ def name_with_field_rows
358
+ list = card.item_names
359
+ columns = columns_from_referees list.first
360
+
361
+ list.map do |item_name|
362
+ CSV.generate_line row_from_field_names(item_name, columns)
363
+ end.join
364
+ end
365
+
366
+ def columns_from_referees referer
367
+ columns = []
368
+ Card.fetch(referer).format.each_nested_field do |chunk|
369
+ columns << chunk.referee_name.tag
370
+ end
371
+ columns
372
+ end
373
+
374
+ def row_from_field_names parent_name, field_names, view=:core
375
+ field_names.each_with_object([parent_name]) do |field, row|
376
+ row << nest([parent_name, field], view: view)
377
+ end
378
+ end
379
+
380
+ def title_row extra_titles=nil
381
+ titles = column_titles extra_titles
382
+ return "" unless titles.present?
383
+ CSV.generate_line titles.map { |title| title.to_s.upcase }
384
+ rescue
385
+ ""
386
+ end
387
+
388
+ def column_titles extra_titles=nil
389
+ res = Array extra_titles
390
+ card1 = Card.fetch card.item_names(limit: 1).first
391
+ card1.each_nested_chunk do |chunk|
392
+ res << column_title(chunk.options)
393
+ end
394
+ res.compact
395
+ end
396
+
397
+ def column_title opts
398
+ if %w(name link).member? opts[:view]
399
+ opts[:view]
400
+ else
401
+ opts[:nest_name].to_name.tag
402
+ end
403
+ end
404
+ end
@@ -119,7 +119,7 @@ end
119
119
 
120
120
  def [] *args
121
121
  case args[0]
122
- when Fixnum, Range
122
+ when Integer, Range
123
123
  fetch_name = Array.wrap(cardname.parts[args[0]]).compact.join "+"
124
124
  Card.fetch(fetch_name, args[1] || {}) unless simple?
125
125
  else
@@ -173,6 +173,11 @@ end
173
173
 
174
174
  def cache_output_part input_card, output
175
175
  Auth.as_bot do
176
+ # save virtual cards first
177
+ # otherwise the cache card will save it to get the left_id
178
+ # and trigger the cache update again
179
+ input_card.save! if input_card.new_card?
180
+
176
181
  cache_card = fetch_cache_card(input_card, true)
177
182
  cache_card.update_attributes! content: output
178
183
  end
@@ -36,7 +36,7 @@ class Card
36
36
  end
37
37
 
38
38
  def to_type_id type
39
- type.is_a?(Fixnum) ? type : Card::Codename[type]
39
+ type.is_a?(Integer) ? type : Card::Codename[type]
40
40
  end
41
41
 
42
42
  # usage:
@@ -20,7 +20,7 @@ def item_cards args={}
20
20
  end
21
21
 
22
22
  def item_names args={}
23
- args[:limit] = 0
23
+ args[:limit] ||= 0
24
24
  returning(:name, args) { search args }
25
25
  end
26
26
 
@@ -92,10 +92,12 @@ format :data do
92
92
  end
93
93
 
94
94
  format :csv do
95
- view :card_list do |args|
96
- items = super args
95
+ view :core, mod: All::Collection::CsvFormat
96
+
97
+ view :card_list do
98
+ items = super()
97
99
  if @depth.zero?
98
- render_csv_title_row + items
100
+ title_row + items
99
101
  else
100
102
  items
101
103
  end
@@ -161,8 +161,7 @@ format :html do
161
161
  end
162
162
 
163
163
  def related_card_and_options args
164
- options = (args[:related] || params[:related]).symbolize_keys
165
- return unless options
164
+ return unless (options = related_options(args))
166
165
  related_card = related_card_from_options options
167
166
  options[:view] ||= :open
168
167
  options[:show] ||= []
@@ -170,6 +169,13 @@ format :html do
170
169
  [related_card, options]
171
170
  end
172
171
 
172
+ def related_options args
173
+ options = (args[:related] || params[:related])
174
+ options = { name: options } if options.is_a? String
175
+ return unless options.is_a? Hash
176
+ options.symbolize_keys
177
+ end
178
+
173
179
  def related_card_from_options options
174
180
  related_card = options.delete :card
175
181
  return related_card if related_card
@@ -156,7 +156,7 @@ format :html do
156
156
  voo.show :toolbar
157
157
  frame do
158
158
  with_nest_mode :edit do
159
- process_nested_fields hide: :toolbar
159
+ process_nested_fields
160
160
  end
161
161
  end
162
162
  end
@@ -56,7 +56,7 @@ describe Card::Set::Type::SearchType do
56
56
  expect(subject.content).to eq '{"name":"YYY"}'
57
57
  end
58
58
  end
59
- context "rss format" do
59
+ describe "rss format" do
60
60
  it "render rss without errors" do
61
61
  search_card = Card.create type: "Search", name: "Asearch",
62
62
  content: %({"id":"1"})
@@ -64,4 +64,45 @@ describe Card::Set::Type::SearchType do
64
64
  expect(rss).to have_tag("title", text: "Wagn Bot")
65
65
  end
66
66
  end
67
+
68
+ describe "csv format" do
69
+ describe "view :content" do
70
+ subject do
71
+ render_view :content, { name: "Book+*type+by name" },
72
+ format: :csv
73
+ end
74
+
75
+ it "has title row with nest names" do
76
+ is_expected.to include "AUTHOR,ILLUSTRATOR"
77
+ end
78
+
79
+ it "has nests contents" do
80
+ create "Guide",
81
+ type: "Book",
82
+ subfields: { "author" => "Hitchhiker",
83
+ "illustrator" => "Galaxy" }
84
+ is_expected.to include "Hitchhiker,Galaxy"
85
+ end
86
+ end
87
+
88
+ describe "view :nested_fields" do
89
+ subject do
90
+ Card::Env.params[:item] = :name_with_fields
91
+ render_card_with_args :core, { name: "Book+*type+by name" },
92
+ { format: :csv }, items: { view: :name_with_fields }
93
+ end
94
+
95
+ it "has title row item name and field names" do
96
+ is_expected.to include "ITEM NAME,AUTHOR,ILLUSTRATOR"
97
+ end
98
+
99
+ it "has field contents" do
100
+ create "Guide",
101
+ type: "Book",
102
+ subfields: { "author" => "Hitchhiker",
103
+ "illustrator" => "Galaxy" }
104
+ is_expected.to include "Guide,Hitchhiker,Galaxy"
105
+ end
106
+ end
107
+ end
67
108
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: card
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.20.3
4
+ version: 1.20.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ethan McCutchen
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2017-04-13 00:00:00.000000000 Z
14
+ date: 2017-04-15 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: smartname
@@ -283,6 +283,7 @@ files:
283
283
  - config/i18n-tasks.yml
284
284
  - config/initializers/01_core_extensions/array.rb
285
285
  - config/initializers/01_core_extensions/hash.rb
286
+ - config/initializers/01_core_extensions/kernel.rb
286
287
  - config/initializers/01_core_extensions/module.rb
287
288
  - config/initializers/01_core_extensions/object.rb
288
289
  - config/initializers/01_core_extensions/persistent_identifiers.rb