factory_json 0.0.1 → 0.1.0
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 +4 -4
 - data/Gemfile +8 -0
 - data/README.md +52 -13
 - data/factory_json.gemspec +6 -1
 - data/lib/factory_girl/attribute_assigner_with_hash_support.rb +20 -0
 - data/lib/factory_girl/strategy/as_json.rb +9 -10
 - data/lib/factory_girl/strategy/json.rb +9 -10
 - data/lib/factory_json.rb +6 -0
 - data/lib/factory_json/version.rb +1 -1
 - data/spec/factory_girl/strategy/as_json_spec.rb +6 -13
 - data/spec/factory_girl/strategy/json_spec.rb +5 -12
 - data/spec/spec_helper.rb +11 -2
 - data/spec/support/shared_examples/strategy.rb +65 -0
 - metadata +37 -6
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 1fdcd55cfe7a41a601a71bde443711f27310bc4d
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: b456e844dc4cbe95b3d976757672d57cd6e85785
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: ec268ccc71b6ed66ad2c6f199f32d3f624a50153e1529bc05e7c121ae1a989efd3ab7ee53f75346b0134c01728f9af6a5fd67c7677e3ad3818121b4514b10851
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 72123089a8efd9c9720509dc4b8c4030a7d116851bb707de998c883984a9ec12a1ea89f55c3fa788acfbfad1fe28edcb68c9d08326b6da30fac805ae0ac90a36
         
     | 
    
        data/Gemfile
    CHANGED
    
    | 
         @@ -2,3 +2,11 @@ source 'https://rubygems.org' 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            # Specify your gem's dependencies in factory_json.gemspec
         
     | 
| 
       4 
4 
     | 
    
         
             
            gemspec
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            gem 'activerecord-jdbcsqlite3-adapter', platforms: :jruby
         
     | 
| 
      
 7 
     | 
    
         
            +
            gem 'jdbc-sqlite3', platforms: :jruby
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            gem 'sqlite3', '~> 1.3.10', platforms: :ruby
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            gem "pry"
         
     | 
| 
      
 12 
     | 
    
         
            +
            gem "pry-byebug"
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -28,7 +28,16 @@ Tired of creating json fixtures somewhere in your app and keeping them up to dat 
     | 
|
| 
       28 
28 
     | 
    
         
             
            ```ruby
         
     | 
| 
       29 
29 
     | 
    
         
             
            # spec/factories/data_structures.rb
         
     | 
| 
       30 
30 
     | 
    
         
             
            FactoryGirl.define do
         
     | 
| 
       31 
     | 
    
         
            -
              factory : 
     | 
| 
      
 31 
     | 
    
         
            +
              factory :entry, class: Hash do
         
     | 
| 
      
 32 
     | 
    
         
            +
                name "This one is special"
         
     | 
| 
      
 33 
     | 
    
         
            +
                location "The place where you can always see a Sunrise"
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                after(:build) do |entry|
         
     | 
| 
      
 36 
     | 
    
         
            +
                  entry[:relations] = FactoryGirl.build_list(entry_relation, 3, :with_address)
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              factory :entry_relation, class: Hash do
         
     | 
| 
       32 
41 
     | 
    
         
             
                type "RELATED"
         
     | 
| 
       33 
42 
     | 
    
         
             
                label "Apartment:"
         
     | 
| 
       34 
43 
     | 
    
         
             
                name_summary "Mr Darth Vader"
         
     | 
| 
         @@ -54,9 +63,45 @@ entry_relation = FactoryGirl.json(:entry_relation, :with_address) # to return st 
     | 
|
| 
       54 
63 
     | 
    
         
             
            You have a factory that you'd also like to use as a JSON fixture? Use common usage patterns (to_json) with our fixtures now! Not only can you get JSON from your factories, but of course also Hashes. All you need to do is to define to_json or to_hash (since to_json is based on to_hash) on your model.
         
     | 
| 
       55 
64 
     | 
    
         | 
| 
       56 
65 
     | 
    
         
             
            ```ruby
         
     | 
| 
       57 
     | 
    
         
            -
            #  
     | 
| 
      
 66 
     | 
    
         
            +
            # app/models.rb
         
     | 
| 
      
 67 
     | 
    
         
            +
            class User
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
              has_one :profile
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
              def to_hash
         
     | 
| 
      
 72 
     | 
    
         
            +
                {
         
     | 
| 
      
 73 
     | 
    
         
            +
                  name: self.name,
         
     | 
| 
      
 74 
     | 
    
         
            +
                  email: self.email,
         
     | 
| 
      
 75 
     | 
    
         
            +
                  profile: profile.to_hash
         
     | 
| 
      
 76 
     | 
    
         
            +
                }.to_json
         
     | 
| 
      
 77 
     | 
    
         
            +
              end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
              def to_json(*args)
         
     | 
| 
      
 80 
     | 
    
         
            +
                to_hash.to_json(*args)
         
     | 
| 
      
 81 
     | 
    
         
            +
              end
         
     | 
| 
      
 82 
     | 
    
         
            +
            end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
            class Profile
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
              belongs_to :user
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
              def to_hash
         
     | 
| 
      
 89 
     | 
    
         
            +
                {
         
     | 
| 
      
 90 
     | 
    
         
            +
                  age: self.age,
         
     | 
| 
      
 91 
     | 
    
         
            +
                  hair_color: self.hair_color,
         
     | 
| 
      
 92 
     | 
    
         
            +
                  child_dream: self.child_dream,
         
     | 
| 
      
 93 
     | 
    
         
            +
                  i_will_start_running: "tomorrow"
         
     | 
| 
      
 94 
     | 
    
         
            +
                }
         
     | 
| 
      
 95 
     | 
    
         
            +
              end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
              def to_json(*args)
         
     | 
| 
      
 98 
     | 
    
         
            +
                to_hash.to_json(*args)
         
     | 
| 
      
 99 
     | 
    
         
            +
              end
         
     | 
| 
      
 100 
     | 
    
         
            +
            end
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
            # spec/factories.rb
         
     | 
| 
       58 
103 
     | 
    
         
             
            FactoryGirl.define do
         
     | 
| 
       59 
     | 
    
         
            -
              factory :user 
     | 
| 
      
 104 
     | 
    
         
            +
              factory :user do
         
     | 
| 
       60 
105 
     | 
    
         
             
                name "User 1"
         
     | 
| 
       61 
106 
     | 
    
         
             
                email "test@example.com"
         
     | 
| 
       62 
107 
     | 
    
         | 
| 
         @@ -64,17 +109,11 @@ FactoryGirl.define do 
     | 
|
| 
       64 
109 
     | 
    
         
             
                  association :profile
         
     | 
| 
       65 
110 
     | 
    
         
             
                end
         
     | 
| 
       66 
111 
     | 
    
         
             
              end
         
     | 
| 
       67 
     | 
    
         
            -
            end
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
            # app/models/user.rb
         
     | 
| 
       70 
     | 
    
         
            -
            class User
         
     | 
| 
       71 
112 
     | 
    
         | 
| 
       72 
     | 
    
         
            -
               
     | 
| 
       73 
     | 
    
         
            -
                 
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
                  profile: profile.to_hash
         
     | 
| 
       77 
     | 
    
         
            -
                }.to_json
         
     | 
| 
      
 113 
     | 
    
         
            +
              factory :profile do
         
     | 
| 
      
 114 
     | 
    
         
            +
                age "18 years"
         
     | 
| 
      
 115 
     | 
    
         
            +
                hair_color "blue"
         
     | 
| 
      
 116 
     | 
    
         
            +
                child_dream "To become a Jedi Knight"
         
     | 
| 
       78 
117 
     | 
    
         
             
              end
         
     | 
| 
       79 
118 
     | 
    
         
             
            end
         
     | 
| 
       80 
119 
     | 
    
         
             
            ```
         
     | 
    
        data/factory_json.gemspec
    CHANGED
    
    | 
         @@ -18,10 +18,15 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       18 
18 
     | 
    
         
             
              spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
         
     | 
| 
       19 
19 
     | 
    
         
             
              spec.require_paths = ["lib"]
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
      
 21 
     | 
    
         
            +
              spec.required_ruby_version = '~> 2.0'
         
     | 
| 
      
 22 
     | 
    
         
            +
              
         
     | 
| 
       21 
23 
     | 
    
         
             
              spec.add_dependency "factory_girl"
         
     | 
| 
       22 
24 
     | 
    
         | 
| 
       23 
25 
     | 
    
         
             
              spec.add_development_dependency "bundler", "~> 1.6"
         
     | 
| 
       24 
26 
     | 
    
         
             
              spec.add_development_dependency "rake"
         
     | 
| 
       25 
27 
     | 
    
         
             
              spec.add_development_dependency "rspec"
         
     | 
| 
       26 
     | 
    
         
            -
              spec.add_development_dependency "mocha", " 
     | 
| 
      
 28 
     | 
    
         
            +
              spec.add_development_dependency "mocha", "~> 0.14.0"
         
     | 
| 
      
 29 
     | 
    
         
            +
              spec.add_development_dependency "bourne"
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
              spec.add_development_dependency "activerecord", ">= 3.0.0"
         
     | 
| 
       27 
32 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module FactoryGirl
         
     | 
| 
      
 2 
     | 
    
         
            +
              module AttributeAssignerWithHashSupport
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
                def object
         
     | 
| 
      
 5 
     | 
    
         
            +
                  @evaluator.instance = build_class_instance
         
     | 
| 
      
 6 
     | 
    
         
            +
                  build_class_instance.tap do |instance|
         
     | 
| 
      
 7 
     | 
    
         
            +
                    attributes_to_set_on_instance.each do |attribute|
         
     | 
| 
      
 8 
     | 
    
         
            +
                      if instance.respond_to?("#{attribute}=")
         
     | 
| 
      
 9 
     | 
    
         
            +
                        instance.public_send("#{attribute}=", get(attribute))
         
     | 
| 
      
 10 
     | 
    
         
            +
                      elsif instance.respond_to?("[]=")
         
     | 
| 
      
 11 
     | 
    
         
            +
                        instance[attribute] = get(attribute)
         
     | 
| 
      
 12 
     | 
    
         
            +
                      else
         
     | 
| 
      
 13 
     | 
    
         
            +
                        raise NoMethodError.new("undefined method `#{attribute}=' for #{instance}")
         
     | 
| 
      
 14 
     | 
    
         
            +
                      end
         
     | 
| 
      
 15 
     | 
    
         
            +
                      @attribute_names_assigned << attribute
         
     | 
| 
      
 16 
     | 
    
         
            +
                    end
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,21 +1,20 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module FactoryGirl
         
     | 
| 
       2 
2 
     | 
    
         
             
              module Strategy
         
     | 
| 
       3 
3 
     | 
    
         
             
                class AsJSON
         
     | 
| 
       4 
     | 
    
         
            -
                  def  
     | 
| 
       5 
     | 
    
         
            -
                     
     | 
| 
      
 4 
     | 
    
         
            +
                  def initialize
         
     | 
| 
      
 5 
     | 
    
         
            +
                    @strategy = FactoryGirl.strategy_by_name(:build).new
         
     | 
| 
       6 
6 
     | 
    
         
             
                  end
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
                  def  
     | 
| 
       9 
     | 
    
         
            -
                     
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                    ::JSON.parse source.to_json
         
     | 
| 
      
 8 
     | 
    
         
            +
                  def association(runner)
         
     | 
| 
      
 9 
     | 
    
         
            +
                    runner.instance_variable_set :@strategy, :build
         
     | 
| 
      
 10 
     | 
    
         
            +
                    runner.run
         
     | 
| 
       13 
11 
     | 
    
         
             
                  end
         
     | 
| 
       14 
12 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
                   
     | 
| 
      
 13 
     | 
    
         
            +
                  def result(evaluation)
         
     | 
| 
      
 14 
     | 
    
         
            +
                    result = @strategy.result(evaluation)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    evaluation.notify(:before_json, result)
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
                    evaluation.instance_variable_get(:@attribute_assigner).instance_variable_get(:@build_class) == Hash
         
     | 
| 
      
 17 
     | 
    
         
            +
                    ::JSON.parse result.to_json
         
     | 
| 
       19 
18 
     | 
    
         
             
                  end
         
     | 
| 
       20 
19 
     | 
    
         
             
                end
         
     | 
| 
       21 
20 
     | 
    
         
             
              end
         
     | 
| 
         @@ -1,21 +1,20 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module FactoryGirl
         
     | 
| 
       2 
2 
     | 
    
         
             
              module Strategy
         
     | 
| 
       3 
3 
     | 
    
         
             
                class JSON
         
     | 
| 
      
 4 
     | 
    
         
            +
                  def initialize
         
     | 
| 
      
 5 
     | 
    
         
            +
                    @strategy = FactoryGirl.strategy_by_name(:build).new
         
     | 
| 
      
 6 
     | 
    
         
            +
                  end
         
     | 
| 
      
 7 
     | 
    
         
            +
                  
         
     | 
| 
       4 
8 
     | 
    
         
             
                  def association(runner)
         
     | 
| 
       5 
     | 
    
         
            -
                    runner. 
     | 
| 
      
 9 
     | 
    
         
            +
                    runner.instance_variable_set :@strategy, :build
         
     | 
| 
      
 10 
     | 
    
         
            +
                    runner.run
         
     | 
| 
       6 
11 
     | 
    
         
             
                  end
         
     | 
| 
       7 
12 
     | 
    
         | 
| 
       8 
13 
     | 
    
         
             
                  def result(evaluation)
         
     | 
| 
       9 
     | 
    
         
            -
                     
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                    source.to_json
         
     | 
| 
       13 
     | 
    
         
            -
                  end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                  private
         
     | 
| 
      
 14 
     | 
    
         
            +
                    result = @strategy.result(evaluation)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    evaluation.notify(:before_json, result)
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
                    evaluation.instance_variable_get(:@attribute_assigner).instance_variable_get(:@build_class) == Hash
         
     | 
| 
      
 17 
     | 
    
         
            +
                    result.to_json
         
     | 
| 
       19 
18 
     | 
    
         
             
                  end
         
     | 
| 
       20 
19 
     | 
    
         
             
                end
         
     | 
| 
       21 
20 
     | 
    
         
             
              end
         
     | 
    
        data/lib/factory_json.rb
    CHANGED
    
    | 
         @@ -1,7 +1,13 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'json'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "factory_girl"
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
       1 
4 
     | 
    
         
             
            require "factory_json/version"
         
     | 
| 
       2 
5 
     | 
    
         | 
| 
       3 
6 
     | 
    
         
             
            require "factory_girl/strategy/json"
         
     | 
| 
       4 
7 
     | 
    
         
             
            require "factory_girl/strategy/as_json"
         
     | 
| 
      
 8 
     | 
    
         
            +
            require "factory_girl/attribute_assigner_with_hash_support"
         
     | 
| 
       5 
9 
     | 
    
         | 
| 
       6 
10 
     | 
    
         
             
            FactoryGirl.register_strategy(:json,  FactoryGirl::Strategy::JSON)
         
     | 
| 
       7 
11 
     | 
    
         
             
            FactoryGirl.register_strategy(:as_json,  FactoryGirl::Strategy::AsJSON)
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            FactoryGirl::AttributeAssigner.prepend FactoryGirl::AttributeAssignerWithHashSupport
         
     | 
    
        data/lib/factory_json/version.rb
    CHANGED
    
    
| 
         @@ -1,17 +1,14 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
       2 
1 
     | 
    
         
             
            require 'spec_helper'
         
     | 
| 
       3 
2 
     | 
    
         | 
| 
       4 
3 
     | 
    
         
             
            describe FactoryGirl::Strategy::AsJSON do
         
     | 
| 
       5 
     | 
    
         
            -
              it_should_behave_like "strategy  
     | 
| 
      
 4 
     | 
    
         
            +
              it_should_behave_like "strategy with association support", :build
         
     | 
| 
      
 5 
     | 
    
         
            +
              it_should_behave_like "strategy with callbacks", {}, :after_build, :before_json
         
     | 
| 
      
 6 
     | 
    
         
            +
              it_should_behave_like "strategy with strategy: :build", :build
         
     | 
| 
       6 
7 
     | 
    
         | 
| 
       7 
8 
     | 
    
         
             
              context "Object source" do
         
     | 
| 
       8 
9 
     | 
    
         
             
                let(:result)     { { "name" => "John Doe", "gender" => "Male", "admin" => false } }
         
     | 
| 
       9 
10 
     | 
    
         
             
                let(:object)     { stub("user", to_json: result.to_json, ) }
         
     | 
| 
       10 
     | 
    
         
            -
                let(:evaluation) { stub("evaluation", object: object) }
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                before(:each) do
         
     | 
| 
       13 
     | 
    
         
            -
                  subject.stubs(:build_class_is_hash?).returns(false)
         
     | 
| 
       14 
     | 
    
         
            -
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
                let(:evaluation) { stub("evaluation", object: object, notify: true) }
         
     | 
| 
       15 
12 
     | 
    
         | 
| 
       16 
13 
     | 
    
         
             
                it "pipes hash through JSON lib" do
         
     | 
| 
       17 
14 
     | 
    
         
             
                  JSON.expects(:parse).with(kind_of(String))
         
     | 
| 
         @@ -32,12 +29,8 @@ describe FactoryGirl::Strategy::AsJSON do 
     | 
|
| 
       32 
29 
     | 
    
         | 
| 
       33 
30 
     | 
    
         
             
              context "Hash source" do
         
     | 
| 
       34 
31 
     | 
    
         
             
                let(:result)     { { "name" => "John Doe", "gender" => "Male", "admin" => false } }
         
     | 
| 
       35 
     | 
    
         
            -
                let(:hash) 
     | 
| 
       36 
     | 
    
         
            -
                let(:evaluation) { stub("evaluation", hash:  
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                before(:each) do
         
     | 
| 
       39 
     | 
    
         
            -
                  subject.stubs(:build_class_is_hash?).returns(true)
         
     | 
| 
       40 
     | 
    
         
            -
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
                let(:hash)       { { name: "John Doe", gender: "Male", admin: false } }
         
     | 
| 
      
 33 
     | 
    
         
            +
                let(:evaluation) { stub("evaluation", object: hash, notify: true) }
         
     | 
| 
       41 
34 
     | 
    
         | 
| 
       42 
35 
     | 
    
         
             
                it "pipes hash through JSON lib" do
         
     | 
| 
       43 
36 
     | 
    
         
             
                  JSON.expects(:parse).with(kind_of(String))
         
     | 
| 
         @@ -1,17 +1,14 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
       2 
1 
     | 
    
         
             
            require 'spec_helper'
         
     | 
| 
       3 
2 
     | 
    
         | 
| 
       4 
3 
     | 
    
         
             
            describe FactoryGirl::Strategy::JSON do
         
     | 
| 
       5 
     | 
    
         
            -
              it_should_behave_like "strategy  
     | 
| 
      
 4 
     | 
    
         
            +
              it_should_behave_like "strategy with association support", :build
         
     | 
| 
      
 5 
     | 
    
         
            +
              it_should_behave_like "strategy with callbacks", "{}", :after_build, :before_json
         
     | 
| 
      
 6 
     | 
    
         
            +
              it_should_behave_like "strategy with strategy: :build", :build
         
     | 
| 
       6 
7 
     | 
    
         | 
| 
       7 
8 
     | 
    
         
             
              context "Object source" do
         
     | 
| 
       8 
9 
     | 
    
         
             
                let(:result)     { { "name" => "John Doe", "gender" => "Male", "admin" => false }.to_json }
         
     | 
| 
       9 
10 
     | 
    
         
             
                let(:object)     { stub("user", to_json: result) }
         
     | 
| 
       10 
     | 
    
         
            -
                let(:evaluation) { stub("evaluation", object: object) }
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                before(:each) do
         
     | 
| 
       13 
     | 
    
         
            -
                  subject.stubs(:build_class_is_hash?).returns(false)
         
     | 
| 
       14 
     | 
    
         
            -
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
                let(:evaluation) { stub("evaluation", object: object, notify: true) }
         
     | 
| 
       15 
12 
     | 
    
         | 
| 
       16 
13 
     | 
    
         
             
                it "returns to_hash from the evaluation for an object" do
         
     | 
| 
       17 
14 
     | 
    
         
             
                  expect(subject.result(evaluation)).to eq(result)
         
     | 
| 
         @@ -27,11 +24,7 @@ describe FactoryGirl::Strategy::JSON do 
     | 
|
| 
       27 
24 
     | 
    
         
             
              context "Hash source" do
         
     | 
| 
       28 
25 
     | 
    
         
             
                let(:result)     { { "name" => "John Doe", "gender" => "Male", "admin" => false }.to_json }
         
     | 
| 
       29 
26 
     | 
    
         
             
                let(:hash)       { { name: "John Doe", gender: "Male", admin: false } }
         
     | 
| 
       30 
     | 
    
         
            -
                let(:evaluation) { stub("evaluation", hash:  
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                before(:each) do
         
     | 
| 
       33 
     | 
    
         
            -
                  subject.stubs(:build_class_is_hash?).returns(true)
         
     | 
| 
       34 
     | 
    
         
            -
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
                let(:evaluation) { stub("evaluation", object: hash, notify: true) }
         
     | 
| 
       35 
28 
     | 
    
         | 
| 
       36 
29 
     | 
    
         
             
                it "returns the hash from the evaluation" do
         
     | 
| 
       37 
30 
     | 
    
         
             
                  expect(subject.result(evaluation)).to eq result
         
     | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | 
         @@ -3,14 +3,22 @@ $LOAD_PATH << File.join(File.dirname(__FILE__)) 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            require 'rubygems'
         
     | 
| 
       5 
5 
     | 
    
         
             
            require 'rspec'
         
     | 
| 
       6 
     | 
    
         
            -
            require ' 
     | 
| 
      
 6 
     | 
    
         
            +
            require 'rspec/autorun'
         
     | 
| 
       7 
7 
     | 
    
         
             
            require 'mocha/api'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require 'bourne'
         
     | 
| 
       8 
9 
     | 
    
         | 
| 
       9 
10 
     | 
    
         
             
            require 'factory_girl'
         
     | 
| 
       10 
11 
     | 
    
         
             
            require 'factory_json'
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
13 
     | 
    
         
             
            spec = Gem::Specification.find_by_name('factory_girl')
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            files = File.join(spec.gem_dir, 'spec', 'support', 'macros', '**', '*.rb')
         
     | 
| 
      
 16 
     | 
    
         
            +
            Dir[files].each { |f| require File.expand_path(f) }
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            files = File.join(spec.gem_dir, 'spec', 'support', 'matchers', '**', '*.rb')
         
     | 
| 
      
 19 
     | 
    
         
            +
            Dir[files].each { |f| require File.expand_path(f) }
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            require "support/shared_examples/strategy"
         
     | 
| 
       14 
22 
     | 
    
         | 
| 
       15 
23 
     | 
    
         
             
            RSpec.configure do |config|
         
     | 
| 
       16 
24 
     | 
    
         
             
              config.expect_with :rspec do |expectations|
         
     | 
| 
         @@ -18,6 +26,7 @@ RSpec.configure do |config| 
     | 
|
| 
       18 
26 
     | 
    
         
             
              end
         
     | 
| 
       19 
27 
     | 
    
         | 
| 
       20 
28 
     | 
    
         
             
              config.mock_framework = :mocha
         
     | 
| 
      
 29 
     | 
    
         
            +
              config.include DeclarationMatchers
         
     | 
| 
       21 
30 
     | 
    
         | 
| 
       22 
31 
     | 
    
         
             
              config.after do
         
     | 
| 
       23 
32 
     | 
    
         
             
                FactoryGirl.reload
         
     | 
| 
         @@ -0,0 +1,65 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            shared_examples_for "strategy with association support" do |factory_girl_strategy_name|
         
     | 
| 
      
 2 
     | 
    
         
            +
              let(:factory) { stub("associate_factory") }
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
              def association_named(name, strategy, overrides)
         
     | 
| 
      
 5 
     | 
    
         
            +
                runner = FactoryGirl::FactoryRunner.new(name, strategy, [overrides])
         
     | 
| 
      
 6 
     | 
    
         
            +
                subject.association(runner)
         
     | 
| 
      
 7 
     | 
    
         
            +
              end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              before do
         
     | 
| 
      
 10 
     | 
    
         
            +
                FactoryGirl.stubs(factory_by_name: factory)
         
     | 
| 
      
 11 
     | 
    
         
            +
                factory.stubs(:compile)
         
     | 
| 
      
 12 
     | 
    
         
            +
                factory.stubs(:run)
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              it "runs the factory with the correct overrides" do
         
     | 
| 
      
 16 
     | 
    
         
            +
                association_named(:author, factory_girl_strategy_name, great: "value")
         
     | 
| 
      
 17 
     | 
    
         
            +
                expect(factory).to have_received(:run).with(factory_girl_strategy_name, great: "value")
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              it "finds the factory with the correct factory name" do
         
     | 
| 
      
 21 
     | 
    
         
            +
                association_named(:author, factory_girl_strategy_name, great: "value")
         
     | 
| 
      
 22 
     | 
    
         
            +
                expect(FactoryGirl).to have_received(:factory_by_name).with(:author)
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            shared_examples_for "strategy with strategy: :build" do |factory_girl_strategy_name|
         
     | 
| 
      
 27 
     | 
    
         
            +
              let(:factory) { stub("associate_factory") }
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              def association_named(name, overrides)
         
     | 
| 
      
 30 
     | 
    
         
            +
                runner = FactoryGirl::FactoryRunner.new(name, overrides[:strategy], [overrides.except(:strategy)])
         
     | 
| 
      
 31 
     | 
    
         
            +
                subject.association(runner)
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              before do
         
     | 
| 
      
 35 
     | 
    
         
            +
                FactoryGirl.stubs(factory_by_name: factory)
         
     | 
| 
      
 36 
     | 
    
         
            +
                factory.stubs(:compile)
         
     | 
| 
      
 37 
     | 
    
         
            +
                factory.stubs(:run)
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              it "runs the factory with the correct overrides" do
         
     | 
| 
      
 41 
     | 
    
         
            +
                association_named(:author, strategy: :build, great: "value")
         
     | 
| 
      
 42 
     | 
    
         
            +
                expect(factory).to have_received(:run).with(factory_girl_strategy_name, { great: "value" })
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
              it "finds the factory with the correct factory name" do
         
     | 
| 
      
 46 
     | 
    
         
            +
                association_named(:author, strategy: :build, great: "value")
         
     | 
| 
      
 47 
     | 
    
         
            +
                expect(FactoryGirl).to have_received(:factory_by_name).with(:author)
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
            end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            shared_examples_for "strategy with callbacks" do |result_instance, *callback_names|
         
     | 
| 
      
 52 
     | 
    
         
            +
              let(:object) {{}}
         
     | 
| 
      
 53 
     | 
    
         
            +
              let(:evaluation) { stub("evaluation", object: object, notify: true, create: nil) }
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
              it "runs the callbacks #{callback_names} with the evaluation's object" do
         
     | 
| 
      
 56 
     | 
    
         
            +
                subject.result(evaluation)
         
     | 
| 
      
 57 
     | 
    
         
            +
                callback_names.each do |name|
         
     | 
| 
      
 58 
     | 
    
         
            +
                  expect(evaluation).to have_received(:notify).with(name, evaluation.object)
         
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
              end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
              it "returns the object from the evaluation" do
         
     | 
| 
      
 63 
     | 
    
         
            +
                expect(subject.result(evaluation)).to eq result_instance
         
     | 
| 
      
 64 
     | 
    
         
            +
              end
         
     | 
| 
      
 65 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: factory_json
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - E-Max
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2015-05- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2015-05-15 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: factory_girl
         
     | 
| 
         @@ -69,17 +69,45 @@ dependencies: 
     | 
|
| 
       69 
69 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       70 
70 
     | 
    
         
             
              name: mocha
         
     | 
| 
       71 
71 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 72 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 73 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 74 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 75 
     | 
    
         
            +
                    version: 0.14.0
         
     | 
| 
      
 76 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 77 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 78 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 79 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 80 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 81 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 82 
     | 
    
         
            +
                    version: 0.14.0
         
     | 
| 
      
 83 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 84 
     | 
    
         
            +
              name: bourne
         
     | 
| 
      
 85 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 86 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 87 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 88 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 89 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 90 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 91 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 92 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       72 
93 
     | 
    
         
             
                requirements:
         
     | 
| 
       73 
94 
     | 
    
         
             
                - - ">="
         
     | 
| 
       74 
95 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       75 
     | 
    
         
            -
                    version: 0 
     | 
| 
      
 96 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 97 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 98 
     | 
    
         
            +
              name: activerecord
         
     | 
| 
      
 99 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 100 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 101 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 102 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 103 
     | 
    
         
            +
                    version: 3.0.0
         
     | 
| 
       76 
104 
     | 
    
         
             
              type: :development
         
     | 
| 
       77 
105 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       78 
106 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       79 
107 
     | 
    
         
             
                requirements:
         
     | 
| 
       80 
108 
     | 
    
         
             
                - - ">="
         
     | 
| 
       81 
109 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       82 
     | 
    
         
            -
                    version: 0. 
     | 
| 
      
 110 
     | 
    
         
            +
                    version: 3.0.0
         
     | 
| 
       83 
111 
     | 
    
         
             
            description: FactoryGirl can now handle JSON representation for an object.
         
     | 
| 
       84 
112 
     | 
    
         
             
            email:
         
     | 
| 
       85 
113 
     | 
    
         
             
            - max.zab87@gmail.com
         
     | 
| 
         @@ -94,6 +122,7 @@ files: 
     | 
|
| 
       94 
122 
     | 
    
         
             
            - README.md
         
     | 
| 
       95 
123 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       96 
124 
     | 
    
         
             
            - factory_json.gemspec
         
     | 
| 
      
 125 
     | 
    
         
            +
            - lib/factory_girl/attribute_assigner_with_hash_support.rb
         
     | 
| 
       97 
126 
     | 
    
         
             
            - lib/factory_girl/strategy/as_json.rb
         
     | 
| 
       98 
127 
     | 
    
         
             
            - lib/factory_girl/strategy/json.rb
         
     | 
| 
       99 
128 
     | 
    
         
             
            - lib/factory_json.rb
         
     | 
| 
         @@ -101,6 +130,7 @@ files: 
     | 
|
| 
       101 
130 
     | 
    
         
             
            - spec/factory_girl/strategy/as_json_spec.rb
         
     | 
| 
       102 
131 
     | 
    
         
             
            - spec/factory_girl/strategy/json_spec.rb
         
     | 
| 
       103 
132 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
      
 133 
     | 
    
         
            +
            - spec/support/shared_examples/strategy.rb
         
     | 
| 
       104 
134 
     | 
    
         
             
            homepage: https://github.com/local-ch/factory_json
         
     | 
| 
       105 
135 
     | 
    
         
             
            licenses:
         
     | 
| 
       106 
136 
     | 
    
         
             
            - MIT
         
     | 
| 
         @@ -111,9 +141,9 @@ require_paths: 
     | 
|
| 
       111 
141 
     | 
    
         
             
            - lib
         
     | 
| 
       112 
142 
     | 
    
         
             
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
       113 
143 
     | 
    
         
             
              requirements:
         
     | 
| 
       114 
     | 
    
         
            -
              - - " 
     | 
| 
      
 144 
     | 
    
         
            +
              - - "~>"
         
     | 
| 
       115 
145 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       116 
     | 
    
         
            -
                  version: '0'
         
     | 
| 
      
 146 
     | 
    
         
            +
                  version: '2.0'
         
     | 
| 
       117 
147 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       118 
148 
     | 
    
         
             
              requirements:
         
     | 
| 
       119 
149 
     | 
    
         
             
              - - ">="
         
     | 
| 
         @@ -129,3 +159,4 @@ test_files: 
     | 
|
| 
       129 
159 
     | 
    
         
             
            - spec/factory_girl/strategy/as_json_spec.rb
         
     | 
| 
       130 
160 
     | 
    
         
             
            - spec/factory_girl/strategy/json_spec.rb
         
     | 
| 
       131 
161 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
      
 162 
     | 
    
         
            +
            - spec/support/shared_examples/strategy.rb
         
     |