Giter Club home page Giter Club logo

magus's Introduction

Magus

Import CSV and JSON data into Laravel models, with the use of mutators to manipulate data before data is stored in the database.

Installation

Add s1dd/magus to the repositories section of your composer.json.

{
  "repositories": [
    {
      "type": "git",
      "url": "https://github.com/s1dd/magus"
    }
  ]
}

...and as a dependency

{
  ...
  "require": {
    "laravel/framework": "4.2.*",
    "s1dd/magus": "dev-master"
  },
  ...
}

Add the Service Provider to your app/config/app.php:

'providers' => [
  ...
  'S1dd\Magus\MagusServiceProvider',
  ...
];

...and as an alias so that it can be used as a Facade:

'aliases' => [
  ...
  'Magus' => 'S1dd\Magus\MagusFacade',
  ...
];

Configuration

If you would like to add mutators to Magus, publish the configuration, and supply an array whose values are Closures.

$ php artisan config:publish s1dd/magus

The configuration files are at:

app/config/packages/s1dd/magus/config.php
app/config/packages/s1dd/magus/fieldmaps.php

Usage

The only prerequisite is that the configuration must be published, and the model to populate must already exist.

If we wanted to populate a Client model, which contains a name, fname, and lname, and we had a CSV string that houses this data in a different format, i.e.:

First Name,Last Name\rSidd,Sridharan

We would first need to parse the string into an associative array, and then import this array into the database:

$dataString = "First Name,Last Name\rSidd,Sridharan";
$data = Magus::parseString($dataString);

Magus::import('client', $data);

First, Magus checks the user-supplied fieldmaps.php in order to map CSV columns to their respective database columns. Then, Magus resolves the first parameter from the IoC container so it can be used as if it was a model. It then invokes the create method to insert it into the database after the input has been "mutated."

Fieldmaps

As described earlier, fieldmaps.php is simply a mapping from CSV column names to database column names. An example:

return [
  'map' => [
    'Client' => [
      'Name' => 'name',
      'First Name' => 'fname',
      'Last Name' => 'lname'
    ]
  ]
];

Mutators

Mutators are a powerful part of Magus that allow for data manipulation prior to saving. In order to declare a Mutator, open up config.php, and add a key for the model which will be updated. Then, for each field that needs to be manipulated, declare a sub-key that points to a closure. To provide a clearer picture:

return [

  'Client' => [

    'First Name' => function($value) {
      return strtoupper($value);
    },

    'Last Name' => function($value) {
      return strtolower($value);
    },
  ]

]

License

This project is licensed under the MIT license.

magus's People

Contributors

sidd avatar

Watchers

 avatar  avatar  avatar

magus's Issues

Choose namespacing or array of function closures

Right now, the configuration can't be overridden unless it's an array. Ideally, classes under a certain namespace would be used as mutators, but (I think) this is nontrivial to implement.

Maybe the right solution is to just allow for closures to be passed in a config file array (which seems unwieldy). Figure this out!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.