fakery 0.3.1 → 0.4.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/README.md +40 -6
- data/VERSION +1 -1
- data/fakery.gemspec +5 -5
- data/lib/fakery.rb +2 -2
- data/lib/fakery/api.rb +1 -1
- data/lib/fakery/fake.rb +2 -9
- data/lib/fakery/registry.rb +5 -6
- data/lib/fakery/seeding.rb +21 -5
- data/lib/fakery/state_error.rb +2 -0
- data/lib/fakery/version.rb +1 -1
- data/spec/fake_spec.rb +0 -10
- data/spec/registry_spec.rb +5 -1
- data/spec/seeding_spec.rb +42 -7
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f630e9880038c8ff0252674f3e1e5d267ad6a451
|
4
|
+
data.tar.gz: 3eab8b25954c9f99ea05fadada60ecfb05f90739
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 457ae54f67b5f7f3733806826e85a100a08316c7e5625161be618b9ca0d2fc7d28c10a7e3c677c18d4a592019713577e6af8822cc0de81f5dba2f14f52d18703
|
7
|
+
data.tar.gz: 62f2cc100df0abda68408c5e667059f45ce2aad92a4325781b91bbc266c27ffc109b6b46c52b15e28730efb3bf8ae765e2cf8f0b13b43e78f5c9df090c30659a
|
data/README.md
CHANGED
@@ -1,12 +1,46 @@
|
|
1
|
-
fakery
|
2
|
-
|
1
|
+
# fakery
|
2
|
+
|
3
|
+
## Descripton
|
3
4
|
|
4
|
-
Descripton
|
5
|
-
----------
|
6
5
|
Faking Ruby objects from JSON API responses
|
7
6
|
|
8
|
-
|
9
|
-
|
7
|
+
## Usage
|
8
|
+
|
9
|
+
### Registering fakes
|
10
|
+
|
11
|
+
Automatically register all fakes stored in JSON files under their respective
|
12
|
+
filenames:
|
13
|
+
|
14
|
+
require 'fakery'
|
15
|
+
Fakery.register_files Dir[Rails.root + 'spec/support/fakes/*.json']
|
16
|
+
|
17
|
+
### Building fakes
|
18
|
+
|
19
|
+
`Fakery.build(:foo)` now builds a fake object for the file named `foo.json` in
|
20
|
+
the the `spec/support/fakes` directory. `Fakery.build(:foo, with: { bar:
|
21
|
+
"something" })` builds the fake with its `bar` attribute set to the string
|
22
|
+
`"something"`.
|
23
|
+
|
24
|
+
For integration testing of services you can stub an API response with
|
25
|
+
`Fakery.build(:the_response).to_json` for your specs.
|
26
|
+
|
27
|
+
### Instantiate objects with fake data
|
28
|
+
|
29
|
+
`Fakery.instance(:foo, as: TheModel)` instantiates the model TheModel with the
|
30
|
+
fake's data by passing it as a hash to the model's constructor.
|
31
|
+
`Fakery.instance(:foo, as: TheModel, with: { bar: "something" })` does the same
|
32
|
+
with the instances `bar` attribute set to the string `"something"`.
|
33
|
+
|
34
|
+
### Seeding fake data from API endpoints
|
35
|
+
|
36
|
+
`Fakery.seed('http://api.example.com/foo/bar.json')` returns a fake initialized
|
37
|
+
from the URL's JSON content.
|
38
|
+
`Fakery.seed('http://api.example.com/foo/bar.json', register: :foo_bar)` also
|
39
|
+
registers the fake with the name `foo_bar`.
|
40
|
+
`Fakery.reseed(:foo_bar)` then reseeds the fake named `foo_bar` from the same
|
41
|
+
URL.
|
42
|
+
|
43
|
+
## Badges
|
10
44
|
|
11
45
|
[](https://travis-ci.org/betterplace/fakery)
|
12
46
|
[](https://codeclimate.com/github/betterplace/fakery)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/fakery.gemspec
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: fakery 0.
|
2
|
+
# stub: fakery 0.4.0 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "fakery"
|
6
|
-
s.version = "0.
|
6
|
+
s.version = "0.4.0"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib"]
|
10
10
|
s.authors = ["betterplace Developers"]
|
11
|
-
s.date = "2016-06-
|
11
|
+
s.date = "2016-06-06"
|
12
12
|
s.description = "This library fakes ruby objects from JSON API responses for testing purposes."
|
13
13
|
s.email = "developers@betterplace.org"
|
14
|
-
s.extra_rdoc_files = ["README.md", "lib/fakery.rb", "lib/fakery/api.rb", "lib/fakery/api_error.rb", "lib/fakery/change.rb", "lib/fakery/fake.rb", "lib/fakery/fakery_error.rb", "lib/fakery/registry.rb", "lib/fakery/seeding.rb", "lib/fakery/version.rb", "lib/fakery/wrapping.rb"]
|
15
|
-
s.files = [".gitignore", ".rspec", ".travis.yml", "Gemfile", "LICENSE", "README.md", "Rakefile", "TODO.md", "VERSION", "fakery.gemspec", "lib/fakery.rb", "lib/fakery/api.rb", "lib/fakery/api_error.rb", "lib/fakery/change.rb", "lib/fakery/fake.rb", "lib/fakery/fakery_error.rb", "lib/fakery/registry.rb", "lib/fakery/seeding.rb", "lib/fakery/version.rb", "lib/fakery/wrapping.rb", "spec/api_spec.rb", "spec/change_spec.rb", "spec/fake_spec.rb", "spec/registry_spec.rb", "spec/seeding_spec.rb", "spec/spec_helper.rb", "spec/wrapping_spec.rb"]
|
14
|
+
s.extra_rdoc_files = ["README.md", "lib/fakery.rb", "lib/fakery/api.rb", "lib/fakery/api_error.rb", "lib/fakery/change.rb", "lib/fakery/fake.rb", "lib/fakery/fakery_error.rb", "lib/fakery/registry.rb", "lib/fakery/seeding.rb", "lib/fakery/state_error.rb", "lib/fakery/version.rb", "lib/fakery/wrapping.rb"]
|
15
|
+
s.files = [".gitignore", ".rspec", ".travis.yml", "Gemfile", "LICENSE", "README.md", "Rakefile", "TODO.md", "VERSION", "fakery.gemspec", "lib/fakery.rb", "lib/fakery/api.rb", "lib/fakery/api_error.rb", "lib/fakery/change.rb", "lib/fakery/fake.rb", "lib/fakery/fakery_error.rb", "lib/fakery/registry.rb", "lib/fakery/seeding.rb", "lib/fakery/state_error.rb", "lib/fakery/version.rb", "lib/fakery/wrapping.rb", "spec/api_spec.rb", "spec/change_spec.rb", "spec/fake_spec.rb", "spec/registry_spec.rb", "spec/seeding_spec.rb", "spec/spec_helper.rb", "spec/wrapping_spec.rb"]
|
16
16
|
s.homepage = "http://github.com/betterplace/fakery"
|
17
17
|
s.licenses = ["Apache-2.0"]
|
18
18
|
s.rdoc_options = ["--title", "Fakery -- ", "--main", "README.md"]
|
data/lib/fakery.rb
CHANGED
@@ -9,6 +9,7 @@ module Fakery
|
|
9
9
|
require 'fakery/version'
|
10
10
|
require 'fakery/fakery_error'
|
11
11
|
require 'fakery/api_error'
|
12
|
+
require 'fakery/state_error'
|
12
13
|
require 'fakery/api'
|
13
14
|
require 'fakery/change'
|
14
15
|
require 'fakery/fake'
|
@@ -19,8 +20,7 @@ module Fakery
|
|
19
20
|
class << self
|
20
21
|
extend Forwardable
|
21
22
|
|
22
|
-
def_delegators :'Fakery::Registry', :register, :registered?, :build,
|
23
|
-
:source, :register_files
|
23
|
+
def_delegators :'Fakery::Registry', :register, :registered?, :build, :register_files
|
24
24
|
|
25
25
|
def_delegators :'Fakery::Seeding', :seed, :reseed
|
26
26
|
|
data/lib/fakery/api.rb
CHANGED
@@ -3,7 +3,7 @@ module Fakery::Api
|
|
3
3
|
|
4
4
|
# Get a http response from +url+ with parameters +params+.
|
5
5
|
def get_response(url, params: {})
|
6
|
-
Typhoeus.get(url, params: params)
|
6
|
+
Typhoeus.get(url, params: params, followlocation: true)
|
7
7
|
end
|
8
8
|
|
9
9
|
# Get the +url+ and parse the response body into a Fakery::Fake object. If
|
data/lib/fakery/fake.rb
CHANGED
@@ -58,6 +58,8 @@ class Fakery::Fake < JSON::GenericObject
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def reseed
|
61
|
+
__api_seed_url__.nil? and raise Fakery::StateError,
|
62
|
+
'reseeding not possible, this fake was not originally seeded'
|
61
63
|
myself = self
|
62
64
|
self.class.from_hash(Fakery::Api.get(__api_seed_url__)).instance_eval do
|
63
65
|
self.__api_seed_url__ = myself.__api_seed_url__
|
@@ -68,15 +70,6 @@ class Fakery::Fake < JSON::GenericObject
|
|
68
70
|
myself
|
69
71
|
end
|
70
72
|
|
71
|
-
def register_as_ruby(register_name)
|
72
|
-
register_name = register_name.to_sym
|
73
|
-
<<EOT
|
74
|
-
Fakery.register(#{register_name.inspect}, %{
|
75
|
-
#{JSON.pretty_generate(self).gsub(/^/, ' ')}
|
76
|
-
})
|
77
|
-
EOT
|
78
|
-
end
|
79
|
-
|
80
73
|
def initialize_copy(other)
|
81
74
|
other.instance_variable_set :@changes, @changes.dup
|
82
75
|
super
|
data/lib/fakery/registry.rb
CHANGED
@@ -6,6 +6,10 @@ module Fakery::Registry
|
|
6
6
|
end
|
7
7
|
private :registered_fakes
|
8
8
|
|
9
|
+
def list
|
10
|
+
registered_fakes.keys
|
11
|
+
end
|
12
|
+
|
9
13
|
# Clear all registered fakes.
|
10
14
|
def clear
|
11
15
|
registered_fakes.clear
|
@@ -28,6 +32,7 @@ module Fakery::Registry
|
|
28
32
|
registered_fakes[register_name] = Fakery::Fake.cast(fake)
|
29
33
|
end
|
30
34
|
|
35
|
+
# Register all +files+ as fakes with their filename as their name.
|
31
36
|
def register_files(*files)
|
32
37
|
files = files.flatten
|
33
38
|
puts "Registering fakes…"
|
@@ -52,10 +57,4 @@ module Fakery::Registry
|
|
52
57
|
rescue KeyError
|
53
58
|
raise ArgumentError, "no fake registered under the name #{register_name.inspect}"
|
54
59
|
end
|
55
|
-
|
56
|
-
# Returns the ruby source to register +fake+ under the +name+.
|
57
|
-
def source(name, fake)
|
58
|
-
fake = Fakery::Fake.cast(fake)
|
59
|
-
fake.__send__(:register_as_ruby, name)
|
60
|
-
end
|
61
60
|
end
|
data/lib/fakery/seeding.rb
CHANGED
@@ -1,14 +1,30 @@
|
|
1
1
|
module Fakery::Seeding
|
2
2
|
module_function
|
3
3
|
|
4
|
-
#
|
5
|
-
|
6
|
-
|
4
|
+
# Seed a fake from the JSON returned by +api_seed_url+. If a name was passed
|
5
|
+
# via +register+ option the fake is registered under that name.
|
6
|
+
def seed(api_seed_url, register: nil)
|
7
|
+
fake = Fakery::Fake.seed_from_url(api_seed_url)
|
8
|
+
register and Fakery::Registry.register register, fake
|
9
|
+
fake
|
7
10
|
end
|
8
11
|
|
9
|
-
#
|
10
|
-
|
12
|
+
# Reseed the fake (also the name of a registered fake) given as +fake+ from
|
13
|
+
# its original +api_seed_url+ or from the URL passed as +url+ option. If the
|
14
|
+
# +register+ option is true and the fake was registered the newly seeded fake
|
15
|
+
# will be registered under its original name again. If +register+ was a name
|
16
|
+
# this name will be used instead.
|
17
|
+
def reseed(fake, url: nil, register: true)
|
18
|
+
if register == true
|
19
|
+
if Fakery::Registry.registered?(fake)
|
20
|
+
register = fake
|
21
|
+
else
|
22
|
+
register = nil
|
23
|
+
end
|
24
|
+
end
|
25
|
+
fake = Fakery::Fake.cast(fake)
|
11
26
|
url and fake.__api_seed_url__ = url
|
27
|
+
register and Fakery::Registry.register register, fake
|
12
28
|
fake.__send__(:reseed)
|
13
29
|
end
|
14
30
|
end
|
data/lib/fakery/version.rb
CHANGED
data/spec/fake_spec.rb
CHANGED
@@ -49,15 +49,6 @@ describe Fakery::Fake do
|
|
49
49
|
expect(fake.name).to eq 'foo'
|
50
50
|
end
|
51
51
|
|
52
|
-
it 'can output ruby code for registration in the Fake::Registry' do
|
53
|
-
string = Fakery.source(:my_name, fake)
|
54
|
-
expect(string).to be_a String
|
55
|
-
expect(Fakery).to_not be_registered :my_name
|
56
|
-
eval(string)
|
57
|
-
expect(Fakery).to be_registered :my_name
|
58
|
-
expect(Fakery.build(:my_name).name).to eq 'foo'
|
59
|
-
end
|
60
|
-
|
61
52
|
context 'casting' do
|
62
53
|
it 'casts to itself' do
|
63
54
|
casted = Fakery::Fake.cast(fake)
|
@@ -66,7 +57,6 @@ describe Fakery::Fake do
|
|
66
57
|
end
|
67
58
|
|
68
59
|
it 'casts from a name to a registered fake' do
|
69
|
-
Fakery.register(:foo, fake)
|
70
60
|
casted = Fakery::Fake.cast(:foo)
|
71
61
|
expect(casted).to be_a Fakery::Fake
|
72
62
|
expect(casted.name).to eq 'foo'
|
data/spec/registry_spec.rb
CHANGED
@@ -14,7 +14,7 @@ describe Fakery::Registry do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'warns iff a fake was registered a second time' do
|
17
|
-
expect(Fakery::Registry).to receive(:warn).with(any_args)
|
17
|
+
expect(Fakery::Registry).to receive(:warn).with(any_args)
|
18
18
|
Fakery.register 'foo', fake
|
19
19
|
Fakery.register 'foo', fake
|
20
20
|
end
|
@@ -46,5 +46,9 @@ describe Fakery::Registry do
|
|
46
46
|
Fakery.register(:bar, foo)
|
47
47
|
expect(Fakery.build(:bar).bar).to eq true
|
48
48
|
end
|
49
|
+
|
50
|
+
it 'can be listed' do
|
51
|
+
expect(Fakery::Registry.list).to eq %i[ foo ]
|
52
|
+
end
|
49
53
|
end
|
50
54
|
end
|
data/spec/seeding_spec.rb
CHANGED
@@ -5,24 +5,59 @@ describe Fakery::Seeding do
|
|
5
5
|
Fakery::Fake.from_hash(name: 'foo')
|
6
6
|
end
|
7
7
|
|
8
|
+
let :another_fake do
|
9
|
+
f = fake.dup
|
10
|
+
f.name = 'bar'
|
11
|
+
f
|
12
|
+
end
|
13
|
+
|
14
|
+
before do
|
15
|
+
expect(Fakery::Api).to receive(:get).and_return(another_fake)
|
16
|
+
end
|
17
|
+
|
8
18
|
it 'can be seeded from an URL' do
|
9
19
|
url = 'http://api.some.where/foo.json'
|
10
|
-
another_fake = fake.dup
|
11
|
-
another_fake.name = 'bar'
|
12
|
-
expect(Fakery::Api).to receive(:get).and_return(another_fake)
|
13
20
|
fake = Fakery.seed url
|
14
21
|
expect(fake.name).to eq another_fake.name
|
15
22
|
expect(fake.__api_seed_url__).to eq url
|
16
23
|
end
|
17
24
|
|
18
|
-
it 'can be
|
25
|
+
it 'can be seeded from an URL and registered' do
|
26
|
+
url = 'http://api.some.where/foo.json'
|
27
|
+
fake = Fakery.seed url, register: :foo
|
28
|
+
expect(Fakery.build(:foo).name).to eq another_fake.name
|
29
|
+
expect(Fakery.build(:foo).__api_seed_url__).to eq url
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'can be reseeded from its original URL' do
|
19
33
|
url = 'http://api.some.where/foo.json'
|
20
|
-
another_fake = fake.dup
|
21
|
-
another_fake.name = 'bar'
|
22
34
|
fake.__api_seed_url__ = url
|
23
|
-
expect(Fakery::Api).to receive(:get).and_return(another_fake)
|
24
35
|
Fakery.reseed(fake)
|
25
36
|
expect(fake.name).to eq another_fake.name
|
26
37
|
expect(fake.__api_seed_url__).to eq url
|
27
38
|
end
|
39
|
+
|
40
|
+
it 'can be reseeded from an URL' do
|
41
|
+
url = 'http://api.some.where/foo.json'
|
42
|
+
Fakery.reseed(fake, url: url)
|
43
|
+
expect(fake.name).to eq another_fake.name
|
44
|
+
expect(fake.__api_seed_url__).to eq url
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'can be reseeded from an URL and registered' do
|
48
|
+
url = 'http://api.some.where/foo.json'
|
49
|
+
fake.__api_seed_url__ = url
|
50
|
+
Fakery.reseed(fake, register: :foo)
|
51
|
+
expect(Fakery.build(:foo).name).to eq another_fake.name
|
52
|
+
expect(Fakery.build(:foo).__api_seed_url__).to eq url
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'can be reseeded from an URL and registered under its previous name' do
|
56
|
+
url = 'http://api.some.where/foo.json'
|
57
|
+
Fakery.register :foo, fake
|
58
|
+
expect(Fakery.build(:foo).name).to eq fake.name
|
59
|
+
expect(Fakery::Registry).to receive(:warn).with(any_args)
|
60
|
+
Fakery.reseed(:foo, url: url, register: true)
|
61
|
+
expect(Fakery.build(:foo).name).to eq another_fake.name
|
62
|
+
end
|
28
63
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fakery
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- betterplace Developers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gem_hadar
|
@@ -150,6 +150,7 @@ extra_rdoc_files:
|
|
150
150
|
- lib/fakery/fakery_error.rb
|
151
151
|
- lib/fakery/registry.rb
|
152
152
|
- lib/fakery/seeding.rb
|
153
|
+
- lib/fakery/state_error.rb
|
153
154
|
- lib/fakery/version.rb
|
154
155
|
- lib/fakery/wrapping.rb
|
155
156
|
files:
|
@@ -171,6 +172,7 @@ files:
|
|
171
172
|
- lib/fakery/fakery_error.rb
|
172
173
|
- lib/fakery/registry.rb
|
173
174
|
- lib/fakery/seeding.rb
|
175
|
+
- lib/fakery/state_error.rb
|
174
176
|
- lib/fakery/version.rb
|
175
177
|
- lib/fakery/wrapping.rb
|
176
178
|
- spec/api_spec.rb
|