administrate-field-nested_has_many 0.0.1
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 +7 -0
- data/README.md +37 -0
- data/administrate-field-nested_has_many.gemspec +22 -0
- data/app/assets/javascripts/administrate-field-nested_has_many/application.js +1 -0
- data/app/views/fields/nested_has_many/_fields.html.erb +11 -0
- data/app/views/fields/nested_has_many/_form.html.erb +23 -0
- data/app/views/fields/nested_has_many/_index.html.erb +19 -0
- data/app/views/fields/nested_has_many/_show.html.erb +40 -0
- data/lib/administrate/field/nested_has_many.rb +60 -0
- data/spec/lib/administrate/field/nested_has_many_spec.rb +14 -0
- metadata +96 -0
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: b2336e14b58c19c34cd27e3d18f6a64da56f97e0
         | 
| 4 | 
            +
              data.tar.gz: 6638b8ec69dd50bb7bb4c0d0fb1987f314d4d790
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: d100590240ed07f092bf2a7d0345fb14a4cf22be1474007e48dd23e680567dc9cd32c72e1d06cfd0cfe4cc23f6f27b5b5813af55c44898133e2412c6fbbff4fe
         | 
| 7 | 
            +
              data.tar.gz: 39f13eef2ef5f7017981e7d4bf9dbd0c0b4bd3296cb6d3146e23cc0cdc1bf04538c317c66708b63c8575c61b4a30aa0927f478e77afe921acf2344c17bfe174a
         | 
    
        data/README.md
    ADDED
    
    | @@ -0,0 +1,37 @@ | |
| 1 | 
            +
            # Administrate::Field::NestedHasMany
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            A plugin for nested has_many forms in [Administrate].
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            ## Usage
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            Add to your `Gemfile`:
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            ```ruby
         | 
| 10 | 
            +
            gem "administrate-field-nested_has_many"
         | 
| 11 | 
            +
            ```
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            Run:
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            ```bash
         | 
| 16 | 
            +
            $bundle install
         | 
| 17 | 
            +
            ```
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            Add to your `FooDashboard`:
         | 
| 20 | 
            +
            ```ruby
         | 
| 21 | 
            +
            ATTRIBUTE_TYPES = [
         | 
| 22 | 
            +
              bars: Field::NestedHasMany.with_options(skip: :foo),
         | 
| 23 | 
            +
            ]
         | 
| 24 | 
            +
            ```
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            The `skip` option takes a single symbol or list of symbols.
         | 
| 27 | 
            +
            It will prevent the nested form from displaying the fields for those attributes.
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            If a `Customer` `has_many :orders`,
         | 
| 30 | 
            +
            and you want to render `orders` as a nested form on the customer edit page,
         | 
| 31 | 
            +
            then it is generally necessary to add `skip: :customer` to the options
         | 
| 32 | 
            +
            for the `NestedHasMany` field.
         | 
| 33 | 
            +
            Otherwise, Administrate will try to render a field
         | 
| 34 | 
            +
            for the order's `:customer` attribute,
         | 
| 35 | 
            +
            which breaks the nested form logic.
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            [Administrate]: https://github.com/thoughtbot/administrate
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            $:.push File.expand_path("../lib", __FILE__)
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "administrate/field/nested_has_many"
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Gem::Specification.new do |gem|
         | 
| 6 | 
            +
              gem.name = "administrate-field-nested_has_many"
         | 
| 7 | 
            +
              gem.version = Administrate::Field::NestedHasMany::VERSION
         | 
| 8 | 
            +
              gem.authors = ["Grayson Wright"]
         | 
| 9 | 
            +
              gem.email = ["wright.grayson@gmail.com"]
         | 
| 10 | 
            +
              gem.homepage = "https://github.com/graysonwright/administrate-field-nested_has_many"
         | 
| 11 | 
            +
              gem.summary = "Plugin for nested has_many forms in Administrate"
         | 
| 12 | 
            +
              gem.description = gem.summary
         | 
| 13 | 
            +
              gem.license = "MIT"
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              gem.require_paths = ["lib"]
         | 
| 16 | 
            +
              gem.files = `git ls-files`.split("\n")
         | 
| 17 | 
            +
              gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              gem.add_dependency "administrate", "~> 0.2.0"
         | 
| 20 | 
            +
              gem.add_dependency "cocoon", "~> 1.2"
         | 
| 21 | 
            +
              gem.add_dependency "rails", "~> 4.2"
         | 
| 22 | 
            +
            end
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            //= require cocoon
         | 
| @@ -0,0 +1,11 @@ | |
| 1 | 
            +
            <div class="nested-fields" style="width:100%">
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              <% field.nested_fields.each do |attribute| -%>
         | 
| 4 | 
            +
                <div class="field-unit field-unit--<%= attribute.html_class %>">
         | 
| 5 | 
            +
                  <%= render_field attribute, f: f %>
         | 
| 6 | 
            +
                </div>
         | 
| 7 | 
            +
              <% end -%>
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              <%# TODO I18n %>
         | 
| 10 | 
            +
              <%= link_to_remove_association "Remove #{field.associated_class_name.titleize}", f %>
         | 
| 11 | 
            +
            </div>
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            <div class="nested-fields" style="width: 40%; margin-left: 20%;">
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              <%= f.fields_for field.association_name do |nested_form| %>
         | 
| 4 | 
            +
                <%= render(
         | 
| 5 | 
            +
                  partial: "fields/nested_has_many/fields",
         | 
| 6 | 
            +
                  locals: {
         | 
| 7 | 
            +
                    f: nested_form,
         | 
| 8 | 
            +
                    field: field,
         | 
| 9 | 
            +
                  },
         | 
| 10 | 
            +
                ) %>
         | 
| 11 | 
            +
              <% end %>
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              <div>
         | 
| 14 | 
            +
                <%= link_to_add_association(
         | 
| 15 | 
            +
                  # TODO I18n
         | 
| 16 | 
            +
                  "Add #{field.associated_class_name.titleize}",
         | 
| 17 | 
            +
                  f,
         | 
| 18 | 
            +
                  field.association_name,
         | 
| 19 | 
            +
                  partial: "fields/nested_has_many/fields",
         | 
| 20 | 
            +
                  render_options: { locals: { field: field } },
         | 
| 21 | 
            +
                ) %>
         | 
| 22 | 
            +
              </div>
         | 
| 23 | 
            +
            </div>
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            <%#
         | 
| 2 | 
            +
            # HasMany Index Partial
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            This partial renders a has_many relationship,
         | 
| 5 | 
            +
            to be displayed on a resource's index page.
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            By default, the relationship is rendered
         | 
| 8 | 
            +
            as a count of how many objects are associated through the relationship.
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            ## Local variables:
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            - `field`:
         | 
| 13 | 
            +
              An instance of [Administrate::Field::HasMany][1].
         | 
| 14 | 
            +
              A wrapper around the has_many relationship pulled from the database.
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            [1]: http://www.rubydoc.info/gems/administrate/Administrate/Field/HasMany
         | 
| 17 | 
            +
            %>
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            <%= pluralize(field.data.size, field.attribute.to_s.humanize.downcase) %>
         | 
| @@ -0,0 +1,40 @@ | |
| 1 | 
            +
            <%#
         | 
| 2 | 
            +
            # HasMany Show Partial
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            This partial renders a has_many relationship,
         | 
| 5 | 
            +
            to be displayed on a resource's show page.
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            By default, the relationship is rendered
         | 
| 8 | 
            +
            as a table of the first few associated resources.
         | 
| 9 | 
            +
            The columns of the table are taken
         | 
| 10 | 
            +
            from the associated resource class's dashboard.
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            ## Local variables:
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            - `field`:
         | 
| 15 | 
            +
              An instance of [Administrate::Field::HasMany][1].
         | 
| 16 | 
            +
              Contains methods to help display a table of associated resources.
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            [1]: http://www.rubydoc.info/gems/administrate/Administrate/Field/HasMany
         | 
| 19 | 
            +
            %>
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            <% if field.resources.any? %>
         | 
| 22 | 
            +
              <%= render(
         | 
| 23 | 
            +
                "collection",
         | 
| 24 | 
            +
                collection_presenter: field.associated_collection,
         | 
| 25 | 
            +
                resources: field.resources
         | 
| 26 | 
            +
              ) %>
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              <% if field.more_than_limit? %>
         | 
| 29 | 
            +
                <span>
         | 
| 30 | 
            +
                  <%= t(
         | 
| 31 | 
            +
                    'administrate.fields.has_many.more',
         | 
| 32 | 
            +
                    count: field.limit,
         | 
| 33 | 
            +
                    total_count: field.data.count,
         | 
| 34 | 
            +
                  ) %>
         | 
| 35 | 
            +
                </span>
         | 
| 36 | 
            +
              <% end %>
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            <% else %>
         | 
| 39 | 
            +
              <%= t("administrate.fields.has_many.none") %>
         | 
| 40 | 
            +
            <% end %>
         | 
| @@ -0,0 +1,60 @@ | |
| 1 | 
            +
            require "administrate/field/has_many"
         | 
| 2 | 
            +
            require "administrate/page/form"
         | 
| 3 | 
            +
            require "rails"
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Administrate
         | 
| 6 | 
            +
              module Field
         | 
| 7 | 
            +
                class NestedHasMany < Administrate::Field::HasMany
         | 
| 8 | 
            +
                  VERSION = "0.0.1"
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  class Engine < ::Rails::Engine
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  DEFAULT_ATTRIBUTES = [:id, :_destroy].freeze
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def nested_fields
         | 
| 16 | 
            +
                    associated_form.attributes.reject do |nested_field|
         | 
| 17 | 
            +
                      skipped_fields.include?(nested_field.attribute)
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  def to_s
         | 
| 22 | 
            +
                    data
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  def self.dashboard_for_resource(resource)
         | 
| 26 | 
            +
                    "#{resource.to_s.classify}Dashboard".constantize
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  def self.associated_attributes(associated_resource)
         | 
| 30 | 
            +
                    DEFAULT_ATTRIBUTES +
         | 
| 31 | 
            +
                      dashboard_for_resource(associated_resource).new.permitted_attributes
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  def self.permitted_attribute(associated_resource)
         | 
| 35 | 
            +
                    {
         | 
| 36 | 
            +
                      "#{associated_resource}_attributes".to_sym =>
         | 
| 37 | 
            +
                      associated_attributes(associated_resource),
         | 
| 38 | 
            +
                    }
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                  def associated_class_name
         | 
| 42 | 
            +
                    options.fetch(:class_name, attribute.to_s.singularize.camelcase)
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  def association_name
         | 
| 46 | 
            +
                    associated_class_name.underscore.pluralize
         | 
| 47 | 
            +
                  end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                  def associated_form
         | 
| 50 | 
            +
                    Administrate::Page::Form.new(associated_dashboard, association_name)
         | 
| 51 | 
            +
                  end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                  private
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                  def skipped_fields
         | 
| 56 | 
            +
                    Array(options[:skip])
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
                end
         | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
            end
         | 
| @@ -0,0 +1,14 @@ | |
| 1 | 
            +
            require "administrate/field/nested_has_many"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Administrate::Field::NestedHasMany do
         | 
| 4 | 
            +
              describe "#to_partial_path" do
         | 
| 5 | 
            +
                it "returns a partial based on the page being rendered" do
         | 
| 6 | 
            +
                  page = :show
         | 
| 7 | 
            +
                  field = Administrate::Field::NestedHasMany.new(:relation, "/a.jpg", page)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  path = field.to_partial_path
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  expect(path).to eq("/fields/nested_has_many/#{page}")
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,96 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: administrate-field-nested_has_many
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.0.1
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors:
         | 
| 7 | 
            +
            - Grayson Wright
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 | 
            +
            bindir: bin
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
            date: 2016-04-21 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: administrate
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - "~>"
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: 0.2.0
         | 
| 20 | 
            +
              type: :runtime
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - "~>"
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: 0.2.0
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: cocoon
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - "~>"
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '1.2'
         | 
| 34 | 
            +
              type: :runtime
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - "~>"
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: '1.2'
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: rails
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - "~>"
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '4.2'
         | 
| 48 | 
            +
              type: :runtime
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - "~>"
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '4.2'
         | 
| 55 | 
            +
            description: Plugin for nested has_many forms in Administrate
         | 
| 56 | 
            +
            email:
         | 
| 57 | 
            +
            - wright.grayson@gmail.com
         | 
| 58 | 
            +
            executables: []
         | 
| 59 | 
            +
            extensions: []
         | 
| 60 | 
            +
            extra_rdoc_files: []
         | 
| 61 | 
            +
            files:
         | 
| 62 | 
            +
            - README.md
         | 
| 63 | 
            +
            - administrate-field-nested_has_many.gemspec
         | 
| 64 | 
            +
            - app/assets/javascripts/administrate-field-nested_has_many/application.js
         | 
| 65 | 
            +
            - app/views/fields/nested_has_many/_fields.html.erb
         | 
| 66 | 
            +
            - app/views/fields/nested_has_many/_form.html.erb
         | 
| 67 | 
            +
            - app/views/fields/nested_has_many/_index.html.erb
         | 
| 68 | 
            +
            - app/views/fields/nested_has_many/_show.html.erb
         | 
| 69 | 
            +
            - lib/administrate/field/nested_has_many.rb
         | 
| 70 | 
            +
            - spec/lib/administrate/field/nested_has_many_spec.rb
         | 
| 71 | 
            +
            homepage: https://github.com/graysonwright/administrate-field-nested_has_many
         | 
| 72 | 
            +
            licenses:
         | 
| 73 | 
            +
            - MIT
         | 
| 74 | 
            +
            metadata: {}
         | 
| 75 | 
            +
            post_install_message: 
         | 
| 76 | 
            +
            rdoc_options: []
         | 
| 77 | 
            +
            require_paths:
         | 
| 78 | 
            +
            - lib
         | 
| 79 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 80 | 
            +
              requirements:
         | 
| 81 | 
            +
              - - ">="
         | 
| 82 | 
            +
                - !ruby/object:Gem::Version
         | 
| 83 | 
            +
                  version: '0'
         | 
| 84 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 85 | 
            +
              requirements:
         | 
| 86 | 
            +
              - - ">="
         | 
| 87 | 
            +
                - !ruby/object:Gem::Version
         | 
| 88 | 
            +
                  version: '0'
         | 
| 89 | 
            +
            requirements: []
         | 
| 90 | 
            +
            rubyforge_project: 
         | 
| 91 | 
            +
            rubygems_version: 2.5.1
         | 
| 92 | 
            +
            signing_key: 
         | 
| 93 | 
            +
            specification_version: 4
         | 
| 94 | 
            +
            summary: Plugin for nested has_many forms in Administrate
         | 
| 95 | 
            +
            test_files:
         | 
| 96 | 
            +
            - spec/lib/administrate/field/nested_has_many_spec.rb
         |