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 +4 -4
- data/VERSION +1 -1
- data/config/initializers/01_core_extensions/kernel.rb +11 -0
- data/config/initializers/core_extensions.rb +2 -1
- data/config/initializers/patches.rb +1 -1
- data/lib/card/act_manager.rb +3 -1
- data/lib/card/act_manager/stage_director.rb +2 -3
- data/lib/card/auth/proxy.rb +1 -1
- data/mod/basic_formats/set/all/all_csv.rb +7 -22
- data/mod/carrierwave/set/abstract/attachment/paths.rb +5 -3
- data/mod/core/set/all/collection.rb +59 -1
- data/mod/core/set/all/name.rb +1 -1
- data/mod/machines/set/abstract/machine.rb +5 -0
- data/mod/settings/lib/card/setting.rb +1 -1
- data/mod/standard/set/abstract/search.rb +6 -4
- data/mod/standard/set/all/rich_html/content.rb +8 -2
- data/mod/standard/set/all/rich_html/editing.rb +1 -1
- data/mod/standard/spec/set/type/search_type_spec.rb +42 -1
- metadata +3 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: bc831339e2819ac6a6ea6e2d4b4a2213c5c683ad
         | 
| 4 | 
            +
              data.tar.gz: 433407d4dd89299309079c2be3483b5185a8d93b
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: f6ed5a62f46acd1188f4cb77f408d59ebaed043634616ec68d3060ea812f063daa948c4c4e224bf9039900afc1029a9e8a2ffbb93d98fe3f2c27dd7f3b774fdb
         | 
| 7 | 
            +
              data.tar.gz: 0d51251838f7fd2fde52471b2c91b025f08f71b690af62665fbe5f85e2d8df4697390d1e53aa9276bbb3a2985630bc727e75444e4b252fa7b958539c9a4225e1
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            1.20. | 
| 1 | 
            +
            1.20.4
         | 
| @@ -2,13 +2,14 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            # extend core Ruby object classes
         | 
| 4 4 |  | 
| 5 | 
            -
            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
         | 
    
        data/lib/card/act_manager.rb
    CHANGED
    
    | @@ -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 | 
            -
                     | 
| 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( | 
| 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
         | 
    
        data/lib/card/auth/proxy.rb
    CHANGED
    
    
| @@ -9,7 +9,7 @@ format :csv  do | |
| 9 9 | 
             
                @depth.zero? ? :csv_row : :name
         | 
| 10 10 | 
             
              end
         | 
| 11 11 |  | 
| 12 | 
            -
              view :csv_row do | 
| 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 : | 
| 26 | 
            -
                 | 
| 27 | 
            -
             | 
| 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 | 
            -
             | 
| 31 | 
            -
             | 
| 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 | 
            -
               | 
| 25 | 
            -
              Card::Mod::Loader.mod_dirs.path( | 
| 26 | 
            -
             | 
| 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
         | 
    
        data/mod/core/set/all/name.rb
    CHANGED
    
    
| @@ -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
         | 
| @@ -20,7 +20,7 @@ def item_cards args={} | |
| 20 20 | 
             
            end
         | 
| 21 21 |  | 
| 22 22 | 
             
            def item_names args={}
         | 
| 23 | 
            -
              args[:limit]  | 
| 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 : | 
| 96 | 
            -
             | 
| 95 | 
            +
              view :core, mod: All::Collection::CsvFormat
         | 
| 96 | 
            +
             | 
| 97 | 
            +
              view :card_list do
         | 
| 98 | 
            +
                items = super()
         | 
| 97 99 | 
             
                if @depth.zero?
         | 
| 98 | 
            -
                   | 
| 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 | 
| 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
         | 
| @@ -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 | 
            -
               | 
| 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. | 
| 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- | 
| 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
         |