Skip to content

Instantly share code, notes, and snippets.

@vapidbabble
Forked from stephencelis/minifacture.rb
Created January 12, 2010 19:54

Revisions

  1. @stephencelis stephencelis revised this gist Jan 12, 2010. 1 changed file with 4 additions and 2 deletions.
    6 changes: 4 additions & 2 deletions miniskirt.rb
    Original file line number Diff line number Diff line change
    @@ -9,8 +9,10 @@
    # Factory.define :post do |f|
    # f.user { Factory :user } # Blocks, if you must.
    # end
    class Miniskirt < Struct.new(:klass)
    class Miniskirt < Struct.new(:__klass__)
    undef_method *instance_methods.grep(/^(?!__|object_id)/) # BlankerSlate.
    @@factories = {} and private_class_method :new

    class << self
    def define(name)
    @@factories[name = name.to_s] = {} and yield new(name)
    @@ -33,7 +35,7 @@ def create(name, attrs = {})
    end

    def method_missing(name, value = nil, &block)
    @@factories[klass][name] = block || value
    @@factories[__klass__][name] = block || value
    end
    end

  2. @stephencelis stephencelis revised this gist Jan 11, 2010. 1 changed file with 4 additions and 7 deletions.
    11 changes: 4 additions & 7 deletions miniskirt.rb
    Original file line number Diff line number Diff line change
    @@ -17,17 +17,14 @@ def define(name)
    end

    def build(name, attrs = {})
    name = name.to_s and (mod = name.classify.constantize).new do |record|
    (name, n = name.to_s) and (m = name.classify.constantize).new do |rec|
    attrs.stringify_keys!.reverse_update(@@factories[name]).each do |k, v|
    record.send "#{k}=", case v when String # Sequence and interpolate.
    v.sub(/%\d*d/) { |n| n % @n ||= mod.maximum(:id).to_i + 1 } %
    attrs % @n
    when Proc then v.call(record) else v
    rec.send "#{k}=", case v when String # Sequence and interpolate.
    v.sub(/%\d*d/) {|d| d % n ||= m.maximum(:id).to_i + 1} % attrs % n
    when Proc then v.call(rec) else v
    end
    end
    end
    ensure
    @n = nil
    end

    def create(name, attrs = {})
  3. @stephencelis stephencelis revised this gist Jan 10, 2010. 1 changed file with 8 additions and 9 deletions.
    17 changes: 8 additions & 9 deletions miniskirt.rb
    Original file line number Diff line number Diff line change
    @@ -9,21 +9,16 @@
    # Factory.define :post do |f|
    # f.user { Factory :user } # Blocks, if you must.
    # end
    module Miniskirt
    @@factories = {} and mattr_reader :factories
    class Miniskirt < Struct.new(:klass)
    @@factories = {} and private_class_method :new
    class << self
    def define(name)
    factories[name.to_s] = {} and yield BasicObject.new.instance_eval(%{
    def method_missing(name, value = nil, &block)
    ::Miniskirt.factories["#{name}"][name] = block || value
    end
    self
    })
    @@factories[name = name.to_s] = {} and yield new(name)
    end

    def build(name, attrs = {})
    name = name.to_s and (mod = name.classify.constantize).new do |record|
    attrs.stringify_keys!.reverse_update(factories[name]).each do |k, v|
    attrs.stringify_keys!.reverse_update(@@factories[name]).each do |k, v|
    record.send "#{k}=", case v when String # Sequence and interpolate.
    v.sub(/%\d*d/) { |n| n % @n ||= mod.maximum(:id).to_i + 1 } %
    attrs % @n
    @@ -39,6 +34,10 @@ def create(name, attrs = {})
    build(name, attrs).tap { |record| record.save }
    end
    end

    def method_missing(name, value = nil, &block)
    @@factories[klass][name] = block || value
    end
    end

    def Miniskirt(name, attrs = {})
  4. @stephencelis stephencelis revised this gist Jan 10, 2010. 1 changed file with 4 additions and 2 deletions.
    6 changes: 4 additions & 2 deletions miniskirt.rb
    Original file line number Diff line number Diff line change
    @@ -25,12 +25,14 @@ def build(name, attrs = {})
    name = name.to_s and (mod = name.classify.constantize).new do |record|
    attrs.stringify_keys!.reverse_update(factories[name]).each do |k, v|
    record.send "#{k}=", case v when String # Sequence and interpolate.
    v.sub!(/%\d*d/) { |n| n % @n ||= mod.maximum(:id).to_i + 1 }
    v % attrs
    v.sub(/%\d*d/) { |n| n % @n ||= mod.maximum(:id).to_i + 1 } %
    attrs % @n
    when Proc then v.call(record) else v
    end
    end
    end
    ensure
    @n = nil
    end

    def create(name, attrs = {})
  5. @stephencelis stephencelis revised this gist Jan 10, 2010. 1 changed file with 23 additions and 6 deletions.
    29 changes: 23 additions & 6 deletions miniskirt.rb
    Original file line number Diff line number Diff line change
    @@ -1,19 +1,36 @@
    # Factory girl, relaxed.
    #
    # Factory.define :user do |f|
    # f.login 'johndoe%d' # Sequence.
    # f.email '%{login}@example.com' # Interpolate.
    # f.password f.password_confirmation('foobar') # Chain.
    # end
    #
    # Factory.define :post do |f|
    # f.user { Factory :user } # Blocks, if you must.
    # end
    module Miniskirt
    mattr_reader :factories
    @@factories = {}
    @@factories = {} and mattr_reader :factories
    class << self
    def define(name)
    factories[name.to_s] = {} and yield BasicObject.new.instance_eval(%{
    def method_missing(name, value)
    ::Miniskirt.factories["#{name}"][name] = value
    def method_missing(name, value = nil, &block)
    ::Miniskirt.factories["#{name}"][name] = block || value
    end
    self
    })
    end

    def build(name, attrs = {})
    name.to_s.classify.constantize.new factories[name.to_s].merge(attrs)
    name = name.to_s and (mod = name.classify.constantize).new do |record|
    attrs.stringify_keys!.reverse_update(factories[name]).each do |k, v|
    record.send "#{k}=", case v when String # Sequence and interpolate.
    v.sub!(/%\d*d/) { |n| n % @n ||= mod.maximum(:id).to_i + 1 }
    v % attrs
    when Proc then v.call(record) else v
    end
    end
    end
    end

    def create(name, attrs = {})
    @@ -27,4 +44,4 @@ def Miniskirt(name, attrs = {})
    end

    Factory = Miniskirt
    alias Factory Miniskirt
    alias Factory Miniskirt
  6. @stephencelis stephencelis revised this gist Jan 10, 2010. 1 changed file with 1 addition and 2 deletions.
    3 changes: 1 addition & 2 deletions miniskirt.rb
    Original file line number Diff line number Diff line change
    @@ -2,9 +2,8 @@
    module Miniskirt
    mattr_reader :factories
    @@factories = {}

    class << self
    def define(name, &block)
    def define(name)
    factories[name.to_s] = {} and yield BasicObject.new.instance_eval(%{
    def method_missing(name, value)
    ::Miniskirt.factories["#{name}"][name] = value
  7. @stephencelis stephencelis revised this gist Jan 10, 2010. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion miniskirt.rb
    Original file line number Diff line number Diff line change
    @@ -4,7 +4,7 @@ module Miniskirt
    @@factories = {}

    class << self
    def define(name, options = {}, &block)
    def define(name, &block)
    factories[name.to_s] = {} and yield BasicObject.new.instance_eval(%{
    def method_missing(name, value)
    ::Miniskirt.factories["#{name}"][name] = value
  8. @stephencelis stephencelis created this gist Jan 10, 2010.
    31 changes: 31 additions & 0 deletions miniskirt.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,31 @@
    # Factory girl, relaxed.
    module Miniskirt
    mattr_reader :factories
    @@factories = {}

    class << self
    def define(name, options = {}, &block)
    factories[name.to_s] = {} and yield BasicObject.new.instance_eval(%{
    def method_missing(name, value)
    ::Miniskirt.factories["#{name}"][name] = value
    end
    self
    })
    end

    def build(name, attrs = {})
    name.to_s.classify.constantize.new factories[name.to_s].merge(attrs)
    end

    def create(name, attrs = {})
    build(name, attrs).tap { |record| record.save }
    end
    end
    end

    def Miniskirt(name, attrs = {})
    Miniskirt.create(name, attrs)
    end

    Factory = Miniskirt
    alias Factory Miniskirt