Giter VIP home page Giter VIP logo

motion-env's Introduction

motion-env

gem install motion-env

In your Rakefile:

require 'motion-env'

Motion::Project::App.setup do |app|
  app.env['string'] = "Sup dog"
  app.env["int"] = 3
  app.env["bool"] = false
  app.env['hash'] = {herp: "derp"}
  app.env["array"] = [1,2,3]
  app.env["complex"] = [{hello: "world", array: [1,2,3]}, {something: :else}]
end

(app.ENV will also work, if you prefer symmetry)

In your app:

> ENV['string']
=> "Sup dog"
> ENV['int']
=> 3
> ENV['bool']
=> false
> ENV['hash']
=> {:herp=>"derp"}
> ENV['array']
=> [1, 2, 3]
> ENV['complex']
=> [{:hello=>"world", :array=>[1, 2, 3]}, {:something=>:else}]

How?

wtf

motion-env takes whatever you put in app.env and Marshal's the contents into ENV via code generation. At the same time, it swizzles [](key) to un-marshal the value (if appropriate). See builder.rb for implementation.

That means you can also Marshal POROs, assuming the class exists on both sides of the compilation:

class Person
  attr_accessor :name, :age

  def initialize(name, age)
    @name = name
    @age = age
  end
end

Motion::Project::App.setup do |app|
  app.env["object"] = Person.new("clay", 3)
end
> ENV["object"] # assumes you have Person defined somewhere
=> #<Person:0x8e62da0 @name="clay" @age=3>

Support

Big thanks to motion-my_env and @ainame for the inspiration.

Clay Allsopp

motion-env's People

Contributors

clayallsopp avatar

Watchers

Vipul A M avatar

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.