Project

motion-env

0.01
No commit activity in last 3 years
No release in over 3 years
Add things to ENV in RubyMotion
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

>= 0
 Project Readme

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