jafry 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a9863ee8e6abf4b6d4f8aba49ea6b41122416f4a
4
- data.tar.gz: 08a660e1a68d756ab3ee1e9be8490907eab61003
3
+ metadata.gz: ec06dcef0467623fe62f15c9f2df86ec4c8893ea
4
+ data.tar.gz: ba71ac4388445f3f2f88661497c51b541ae2da5f
5
5
  SHA512:
6
- metadata.gz: 198ae3da6fe4cbd9b397c8fca45012d8ca88aa84ab57f101ea274c703dc35adf93ce57df92a608144a62765c1e672b216f410096666cd55d996eb5ced3ff0b44
7
- data.tar.gz: 1f508036377378b7d4ef3a8f82e81d0271dfd4ec07e0d3522ecc69aef7827a14487c70066cae020852d2c1e114b559bf1f8babc32447e455f5edefcccf68bfa6
6
+ metadata.gz: 13ca8c4e473ec752093e90e508f7c396beac45955acabca2b5b98895a4426689fd938c6f8dbb24116ce1e3d24fc913cf6e11216b48b0ef043aa90ce5d7a5918d
7
+ data.tar.gz: 4121b4b9fcc89470b955be7b4501013061b20dbaad79f6559d7614bfeef0cbed1444eac089f41c6fce4833aa2361a0da1eea243be5e4e86862b200c00ac318ed
data/.gitignore CHANGED
@@ -20,3 +20,4 @@ tmp
20
20
  *.o
21
21
  *.a
22
22
  mkmf.log
23
+ try
data/Gemfile CHANGED
@@ -2,3 +2,6 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in jafry.gemspec
4
4
  gemspec
5
+
6
+ gem 'coveralls'
7
+ gem 'yard'
data/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  This gem allows you to easily create JSON data fixtures from data schemes you can specify by yourself.
8
8
  The main purpose is to stub JSON received form wide range of JSON API's for testing.
9
9
  And if you use many API's or kind of difficult one you may want to have a tool for easy creation of tons of JSON data you have.
10
- And Jafry can help you here.
10
+ And Jafry can helps you here.
11
11
  Just specify data scheme in json file and then you can change your data easly, wrap it namespaces, build lists, etc.
12
12
 
13
13
  ## Installation
@@ -24,12 +24,16 @@ Or install it yourself as:
24
24
 
25
25
  $ gem install jafry
26
26
 
27
+ ## Versioning
28
+
29
+ Gem is under active development so version 0.2.0 has some breakable changes.
30
+
27
31
  ## Usage
28
32
 
29
33
  1. Create file `data_scheme_name.json`.
30
34
  2. Put json data in it.
31
35
  3. In your `spec_helper.rb` require `jafry`: `require "jafry"`.
32
- 4. Call `Jafry.build('data_scheme_name')` to get object or `Jafry.create('data_scheme_name')` in your spec.
36
+ 4. Call `Jafry.build('data_scheme_name')` to get object or `Jafry.create('data_scheme_name')` to get JSON in your spec.
33
37
 
34
38
  ## Contributing
35
39
 
@@ -37,4 +41,4 @@ Or install it yourself as:
37
41
  2. Create your feature branch (`git checkout -b my-new-feature`)
38
42
  3. Commit your changes (`git commit -am 'Add some feature'`)
39
43
  4. Push to the branch (`git push origin my-new-feature`)
40
- 5. Create a new Pull Request
44
+ 5. Create a new Pull Request on `dev` branch
@@ -23,8 +23,8 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "bundler", "~> 1.6"
24
24
  spec.add_development_dependency "rake"
25
25
  spec.add_development_dependency "rspec"
26
- spec.add_development_dependency "coveralls"
26
+ # spec.add_development_dependency "coveralls"
27
27
  spec.add_development_dependency "yajl-ruby"
28
28
  spec.add_development_dependency "hashie"
29
- spec.add_development_dependency "yard"
29
+ # spec.add_development_dependency "yard"
30
30
  end
@@ -1,22 +1,23 @@
1
1
  require 'jafry/version'
2
- require 'jafry/actions'
2
+ require 'jafry/builder'
3
+ require 'jafry/accessor'
3
4
 
4
5
  # Main Jafry module
5
- #
6
- # @attr [String] schemes_path Path to Jafry schemes
7
-
8
6
  module Jafry
9
- extend Actions
10
-
11
- # Schemes path attr getter
7
+ # @attr [String] schemes_path Path to Jafry schemes
8
+ # @attr [String] id_wrapper Defines what symbols will be used for scheme's id
9
+ # @attr [String] id_type Defines type of scheme's id
10
+ # @option id_type [String] 'number' Usually decimial number
11
+ # @option id_type [String] 'hash' 32-digit unique hash
12
+ extend Builder
13
+ extend Accessor
12
14
 
13
- def self.schemes_path
14
- @@schemes_path
15
- end
15
+ mattrs :schemes_path, :id_wrapper, :id_type
16
16
 
17
- # Schemes path attr setter
17
+ @@id_wrapper = 'id'
18
+ @@id_type = 'number'
18
19
 
19
- def self.schemes_path=(schemes_path)
20
- @@schemes_path = schemes_path
20
+ def self.setup
21
+ yield self
21
22
  end
22
23
  end
@@ -0,0 +1,24 @@
1
+ module Jafry
2
+ # Module providing getters/setters for module level variables
3
+ # @since 0.2.0
4
+ module Accessor
5
+ # Method for creating getters/setters by attribute name
6
+ #
7
+ # @param [Array] args Attributes
8
+ def mattrs(*args)
9
+ args.each do |attr|
10
+ class_eval(%Q(
11
+ def self.#{attr}=(attr)
12
+ @@#{attr}=attr
13
+ end
14
+
15
+ def self.#{attr}
16
+ @@#{attr}
17
+ end
18
+ )
19
+ )
20
+ end
21
+ end
22
+ end
23
+ end
24
+
@@ -0,0 +1,68 @@
1
+ require 'jafry/scheme'
2
+ require 'jafry/utilator'
3
+
4
+ module Jafry
5
+ # Module for factoring schemes
6
+ # @since 0.1.0
7
+ module Builder
8
+
9
+ include Utilator
10
+ # Return object builded from scheme
11
+ #
12
+ # @param scheme_name [String] Scheme name
13
+ # @param [Hash] options Options
14
+ # @option options [String] :wrap Namespace to wrap scheme in
15
+ # @return [Scheme] New Scheme object build with pointed options
16
+ # @see Scheme
17
+
18
+ def build(scheme_name, options={})
19
+ scheme = Scheme.new(parse_scheme(scheme_name))
20
+ scheme.update(options) if options
21
+ scheme.self_name = scheme_name
22
+ Jafry::Configurator.set_config(scheme_name) unless Jafry::Configurator.find_config(scheme_name)
23
+ Jafry::Identificator.set_id_for_scheme(scheme)
24
+ return wrap(options[:wrap], scheme) if options[:wrap]
25
+ scheme
26
+ end
27
+
28
+ # Return json from scheme
29
+ #
30
+ # @param scheme_name [String] Scheme name
31
+ # @param options [Hash] Options
32
+ # @option options [String] :wrap Namespace to wrap json in
33
+ # @return [Scheme] New Scheme object encoded to json
34
+ # @see Scheme
35
+
36
+ def create(scheme_name, options={})
37
+ encode_json(build(scheme_name, options))
38
+ end
39
+
40
+ # Retun array of Scheme objects
41
+ #
42
+ # @param scheme_name [String] Scheme name
43
+ # @param count [Integer] Number of objects in array
44
+ # @param options [Hash] Options
45
+ # @option options [String] :wrap Namespace to wrap list in
46
+ # @return [Array] Array of Schemes
47
+ # @see Scheme
48
+
49
+ def build_list(scheme_name, count, options={})
50
+ list = []
51
+ count.times {list << build(scheme_name, options)}
52
+ list
53
+ end
54
+
55
+ # Retun array of Scheme objects encoded to json
56
+ #
57
+ # @param scheme_name [String] Scheme name
58
+ # @param count [Integer] Number of objects in array
59
+ # @param options [Hash] Options
60
+ # @option options [String] :wrap Namespace to wrap json list in
61
+ # @return [Array] Json array of schemes
62
+ # @see Scheme
63
+
64
+ def create_list(scheme_name, count, options={})
65
+ encode_json(build_list(scheme_name, count, options))
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,64 @@
1
+ require 'jafry/accessor'
2
+
3
+ module Jafry
4
+ # Module for saving and changing scheme's configs
5
+ # @since 0.2.0
6
+ module Configurator
7
+
8
+ extend Accessor
9
+
10
+ @@schemes_configs = []
11
+
12
+ mattrs :schemes_configs
13
+
14
+ class << self
15
+ # Setups config for scheme
16
+ #
17
+ # @param scheme_name [String] Scheme name
18
+ # @param [Hash] config Config
19
+
20
+ def set_config(scheme_name, config={})
21
+ config = default if config.empty?
22
+ scheme_config = init_or_update(scheme_name, config)
23
+ self.schemes_configs << scheme_config
24
+ scheme_config
25
+ end
26
+
27
+ # Creates new or updates existed config
28
+ #
29
+ # @param scheme_name [String] Scheme name
30
+ # @param [Hash] config Config to set/update
31
+
32
+ def init_or_update(scheme_name, config)
33
+ return find_config(scheme_name)[:config].merge!(config) if find_config(scheme_name)
34
+ {scheme: scheme_name, config: config}
35
+ end
36
+
37
+ # Finds config by scheme name
38
+ #
39
+ # @param scheme [String] Scheme name
40
+ # @return [Hash] Config
41
+
42
+ def get_config(scheme)
43
+ find_config(scheme)[:config]
44
+ end
45
+
46
+ # Returns scheme by name
47
+ #
48
+ # @param scheme_name [String] Scheme name
49
+ # @return [Hash] Hash of scheme name and config
50
+
51
+ def find_config(scheme_name)
52
+ self.schemes_configs.select {|item| item[:scheme] == scheme_name}.last
53
+ end
54
+
55
+ # Specifies default config
56
+ #
57
+ # @return [Hash] Default config
58
+
59
+ def default
60
+ {id_type: Jafry.id_type, id_wrapper: Jafry.id_wrapper}
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,143 @@
1
+ require 'jafry/accessor'
2
+ require 'jafry/configurator'
3
+
4
+ module Jafry
5
+ # Module for automaticaly creatings schemes ids
6
+ # @since 0.2.0
7
+ module Identificator
8
+
9
+ extend Accessor
10
+
11
+ @@schemes = []
12
+
13
+ mattrs :schemes
14
+
15
+ class << self
16
+ # Creates identification record about scheme
17
+ #
18
+ # @param scheme_name [String] Scheme name
19
+ # @return [Hash] Identification information about scheme
20
+
21
+ def register_scheme(scheme_name)
22
+ config = Jafry::Configurator.get_config(scheme_name)
23
+ config = Jafry::Configurator.set_config(scheme_name) unless config
24
+ scheme = build_type(config[:id_type]).scheme_scaffold(scheme_name)
25
+ self.schemes << scheme
26
+ scheme
27
+ end
28
+
29
+ # Finds registered scheme
30
+ #
31
+ # @param scheme_name [String] Scheme name
32
+ # @return [Hash] Identification information about scheme
33
+
34
+ def find_scheme(scheme_name)
35
+ self.schemes.select {|item| item[:scheme] == scheme_name}.last
36
+ end
37
+
38
+ # Finds registered scheme and if there is no one, creates new
39
+ #
40
+ # @param scheme_name [String] Scheme name
41
+ # @return [Hash] Identification information about scheme
42
+
43
+ def find_or_register(scheme_name)
44
+ return find_scheme(scheme_name) if find_scheme(scheme_name)
45
+ register_scheme(scheme_name)
46
+ end
47
+
48
+ # Modifies scheme with current id
49
+ #
50
+ # @param scheme [Scheme] Scheme instance
51
+ # @return [Scheme] Scheme with id
52
+
53
+ def set_id_for_scheme(scheme)
54
+ scheme.merge!(generate_id(scheme))
55
+ end
56
+
57
+ # Creates new scheme id type
58
+ #
59
+ # @param type [String] Id type
60
+ # @return [Type] Type of id
61
+
62
+ def build_type(type)
63
+ const_get("Jafry::Identificator::#{type.capitalize}").new
64
+ end
65
+
66
+ # Generates id
67
+ #
68
+ # @param [Scheme] scheme Scheme instance
69
+
70
+ def generate_id(scheme)
71
+ config = Jafry::Configurator.get_config(scheme.self_name)
72
+ build_type(config[:id_type]).id_scaffold(config[:id_wrapper], scheme)
73
+ end
74
+
75
+ # Increment id counter by 1
76
+ #
77
+ # @param [Scheme] scheme Scheme instance
78
+
79
+ def inc_scheme_counter(scheme)
80
+ find_or_register(scheme.self_name)[:counter] += 1
81
+ end
82
+
83
+ # Creates hash id
84
+ #
85
+ # @param [Scheme] scheme Scheme instance
86
+
87
+ def hash_counter(scheme)
88
+ find_or_register(scheme.self_name)[:counter] = generate_hash
89
+ end
90
+
91
+ # Helper method for generate unique hash
92
+ #
93
+ # @return [String] Unique md5 hash
94
+
95
+ def generate_hash
96
+ Digest::MD5.hexdigest([Time.now, rand].join)
97
+ end
98
+ end
99
+
100
+ class Number
101
+ # Class for scheme id type 'number'
102
+ # @since 0.2.0
103
+
104
+ # Specify hash for basic scheme id type
105
+ #
106
+ # @return [Hash] Hash with basic id
107
+
108
+ def scheme_scaffold(scheme_name)
109
+ {scheme: scheme_name, counter: 0}
110
+ end
111
+
112
+ # Specify hash for basic scheme id type with custom id wrapper
113
+ #
114
+ # @return [Hash] Hash with basic id
115
+
116
+ def id_scaffold(wrapper, scheme)
117
+ {"#{wrapper}" => Identificator::inc_scheme_counter(scheme)}
118
+ end
119
+ end
120
+
121
+ class Hash
122
+ # Class for scheme id type 'hash'
123
+ # @since 0.2.0
124
+
125
+ # Specify hash for basic scheme id type
126
+ #
127
+ # @return [Hash] Hash with basic id
128
+
129
+ def scheme_scaffold(scheme_name)
130
+ {scheme: scheme_name, counter: generate_hash}
131
+ end
132
+
133
+ # Specify hash for basic scheme id type with custom id wrapper
134
+ #
135
+ # @return [Hash] Hash with basic id
136
+
137
+ def id_scaffold(wrapper, scheme)
138
+ {"#{wrapper}" => Identificator::hash_counter(scheme)}
139
+ end
140
+ end
141
+ end
142
+ end
143
+
@@ -1,48 +1,34 @@
1
- require 'yajl'
2
1
  require 'hashie'
2
+ require 'jafry/identificator'
3
+ require 'jafry/utilator'
3
4
 
4
- # Class for parsing json scheme
5
5
 
6
- class Scheme < Hashie::Mash
7
- #Initialize Scheme
8
- #
9
- # @raise [Exception] Raises when json scheme file not found
6
+ module Jafry
7
+ # Class for parsing json scheme
10
8
 
11
- def initialize(path)
12
- begin
13
- raise "Please, create correct scheme file first" unless File.exists?(build_schemes_path(path))
14
- super(Yajl::Parser.new.parse(File.read(build_schemes_path(path))))
15
- rescue Exception => e
16
- puts e.message
17
- puts e.backtrace
18
- end
19
- end
20
-
21
- # Return json from scheme
22
- #
23
- # @return [String] JSON from scheme
24
-
25
- def build
26
- Yajl::Encoder.encode self
27
- end
9
+ class Scheme < Hashie::Mash
10
+ include Utilator
28
11
 
29
- # Wraps current scheme in specified namespace
30
- #
31
- # @return [Hash] Wrapped hash
12
+ attr_accessor :self_name
32
13
 
33
- def wrap(namespace)
34
- {"#{namespace}" => self}
35
- end
14
+ # Return json from scheme
15
+ #
16
+ # @return [String] JSON from scheme
36
17
 
37
- private
18
+ def build
19
+ encode_json self
20
+ end
38
21
 
39
- # Method for creating full path to scheme file
40
- #
41
- # @private
42
- # @param scheme [String] Scheme name
43
- # @return [String] Full path to file
22
+ # Updates scheme with specified options
23
+ #
24
+ # @param options [Hash] Options to update
25
+ # @return [Scheme] Updated scheme
44
26
 
45
- def build_schemes_path(scheme)
46
- "#{Jafry.schemes_path}/#{scheme}.json"
27
+ def update(options)
28
+ options.each do |attr, value|
29
+ self[attr] = value if self[attr]
30
+ end
31
+ self
32
+ end
47
33
  end
48
- end
34
+ end
@@ -0,0 +1,88 @@
1
+ require 'yajl'
2
+
3
+ module Jafry
4
+ # Bunch of functions to work with encode/decode JSON and files
5
+ # @since 0.2.0
6
+
7
+ module Utilator
8
+ private
9
+ # Method for creating full path to scheme file
10
+ #
11
+ # @private
12
+ # @param scheme [String] Scheme name
13
+ # @return [String] Full path to file
14
+
15
+ def build_schemes_path(scheme)
16
+ "#{Jafry.schemes_path}/#{scheme}.json".gsub(/\/{2,}/, '/')
17
+ end
18
+
19
+ # Method for check scheme file existance
20
+ #
21
+ # @private
22
+ # @param scheme_name [String] Scheme name
23
+ # @return [Boolean] True or false
24
+
25
+ def scheme_file_exists?(scheme_name)
26
+ File.exists?(build_schemes_path(scheme_name))
27
+ end
28
+
29
+ # Specify message will be shown when scheme file not exist
30
+ #
31
+ # @private
32
+ # @return [String] Message
33
+
34
+ def not_exists_message
35
+ "Please, create correct scheme file first"
36
+ end
37
+
38
+ # Parses JSON
39
+ #
40
+ # @private
41
+ # @param [String] json JSON to parse
42
+ # @return [Hash] Parsed json
43
+
44
+ def parse_json(json)
45
+ Yajl::Parser.new.parse(json)
46
+ end
47
+
48
+ # Encodes JSON
49
+ #
50
+ # @private
51
+ # @param [Hash] hash Hash to convert to JSON
52
+ # @return [String] Parsed json
53
+
54
+ def encode_json(hash)
55
+ Yajl::Encoder.encode hash
56
+ end
57
+
58
+ # Creates Hash from JSON-based scheme file
59
+ #
60
+ # @private
61
+ # @param [String] file_name Scheme file name
62
+ # @return [Hash] Parsed scheme
63
+
64
+ def parse_scheme(file_name)
65
+ begin
66
+ raise not_exists_message unless scheme_file_exists?(file_name)
67
+ parse_json(File.read(build_schemes_path(file_name)))
68
+ rescue Exception => e
69
+ puts e.message
70
+ puts e.backtrace
71
+ end
72
+ end
73
+
74
+ # Wraps hash in specified wrapper
75
+ #
76
+ # @private
77
+ # @param [String] wrapper Namespace hash will be wrapped in
78
+ # @param [Hash] hash Hash to wrap
79
+ # @return [Hash] Wrapped hash
80
+ #
81
+ # @example Wrap
82
+ # wrap('baz', {foo: 'bar'}) #=> {'baz' => {foo: 'bar'}}
83
+
84
+ def wrap(wrapper, hash)
85
+ {"#{wrapper}" => hash}
86
+ end
87
+ end
88
+ end
@@ -1,3 +1,3 @@
1
1
  module Jafry
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe Jafry do
4
+ before {Jafry.setup {|s| s.schemes_path='./schemes'}}
5
+
6
+ it {expect(described_class.schemes_path).to eq('./schemes')}
7
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Jafry::Accessor do
4
+ subject(:stub_module) { Module.new { extend Jafry::Accessor; mattrs :foo; } }
5
+
6
+ it {is_expected.to respond_to(:foo)}
7
+ it {is_expected.to respond_to(:foo=)}
8
+
9
+ context "sets value" do
10
+ before {stub_module.foo = "bar"}
11
+ it {expect(stub_module.foo).to eq('bar')}
12
+ end
13
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe Jafry::Builder do
4
+ before(:each) do
5
+ write_file('test.json', %Q({"name":"test"}))
6
+ end
7
+
8
+ after(:each) do
9
+ Jafry::Identificator.schemes.clear
10
+ delete_file('test.json')
11
+ end
12
+
13
+ let(:stub_obj) { Class.new { include Jafry::Builder }.new }
14
+
15
+ it '#build' do
16
+ expect(stub_obj.build('test')).to eq({"id" => 1, "name" => "test"})
17
+ end
18
+
19
+ it 'builds scheme with options' do
20
+ expect(stub_obj.build('test', {name: "foo", wrap: "data"})).to eq({"data" => {"id" => 1, "name" => "foo"}})
21
+ end
22
+
23
+ it '#create' do
24
+ expect(stub_obj.create('test')).to eq("{\"name\":\"test\",\"id\":1}")
25
+ end
26
+
27
+ it '#build_list' do
28
+ expect(stub_obj.build_list('test', 2)).to eq([{"id" => 1, "name" => "test"}, {"id" => 2, "name" => "test"}])
29
+ end
30
+
31
+ it '#create_list' do
32
+ expect(stub_obj.create_list('test', 2)).to eq("[{\"name\":\"test\",\"id\":1},{\"name\":\"test\",\"id\":2}]")
33
+ end
34
+
35
+ context "from unexisting file" do
36
+ it {expect { stub_obj.build('foo') }.to output(/Please, create correct scheme file first/).to_stdout}
37
+ end
38
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe Jafry::Configurator do
4
+ before{described_class.schemes_configs.clear}
5
+ it ".set_config" do
6
+ expect(described_class.set_config('foo')).to eq({scheme: 'foo', config: {id_type: 'number', id_wrapper: 'id'}})
7
+ expect(described_class.set_config('test', {id_type: 'bar', id_wrapper: 'baz'})).to eq({scheme: 'test', config: {id_type: 'bar', id_wrapper: 'baz'}})
8
+ expect(described_class.schemes_configs.size).to eq(2)
9
+ end
10
+
11
+ it ".get_config" do
12
+ described_class.set_config('foo')
13
+ expect(described_class.get_config('foo')).to eq({id_type: 'number', id_wrapper: 'id'})
14
+ end
15
+
16
+ it "find_config" do
17
+ described_class.set_config('foo')
18
+ expect(described_class.find_config('foo')).to eq({scheme: 'foo', config: {id_type: 'number', id_wrapper: 'id'}})
19
+ end
20
+ end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe Jafry::Identificator do
4
+ let(:scheme) {Jafry::Scheme.new({name: "test"})}
5
+
6
+ context "with unregistered scheme" do
7
+ it {expect(described_class.schemes).to be_empty}
8
+ end
9
+
10
+ context "with registered scheme" do
11
+ before(:each) do
12
+ scheme.self_name = 'test'
13
+ Jafry::Configurator.set_config('test')
14
+ described_class.register_scheme('foo')
15
+ end
16
+
17
+ it '.register_scheme' do
18
+ expect(described_class.schemes.last).to eq({scheme: 'foo', counter: 0})
19
+ end
20
+
21
+ it ".find_scheme" do
22
+ expect(described_class.find_scheme('foo')).to eq({scheme: 'foo', counter: 0})
23
+ end
24
+
25
+ it ".find_scheme_or_register" do
26
+ expect(described_class.find_or_register('foo')).to eq({scheme: 'foo', counter: 0})
27
+ Jafry::Configurator.set_config('bar')
28
+ described_class.find_or_register('bar')
29
+ expect(described_class.schemes).to include({scheme: 'bar', counter: 0})
30
+ end
31
+
32
+ it ".set_id_for_scheme" do
33
+
34
+ described_class.set_id_for_scheme(scheme)
35
+ expect(scheme.id).to eq(1)
36
+ end
37
+
38
+ context "sets with another id_wrapper" do
39
+ before do
40
+ scheme.self_name = 'test'
41
+ Jafry::Configurator.set_config('test', {id_wrapper: 'foo_id'})
42
+ described_class.set_id_for_scheme(scheme)
43
+ end
44
+
45
+ it {expect(scheme).to respond_to(:foo_id)}
46
+ end
47
+
48
+ context "sets with another id_type" do
49
+ before do
50
+ scheme.self_name = 'test'
51
+ Jafry::Configurator.set_config('test', {id_type: 'hash'})
52
+ described_class.set_id_for_scheme(scheme)
53
+ end
54
+
55
+ it {expect(scheme.id.size).to eq(32)}
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe Jafry::Scheme do
4
+
5
+ subject(:scheme) {described_class.new({name: "test"})}
6
+
7
+ it '#build' do
8
+ expect(scheme.build).to eq(%Q({"name":"test"}))
9
+ end
10
+
11
+ it '#update' do
12
+ expect(scheme.update({name: "foo"})).to eq({'name'=>"foo"})
13
+ end
14
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe Jafry::Utilator do
4
+ let(:stub_obj) { Class.new { include Jafry::Utilator }.new }
5
+
6
+ it '#build_schemes_path' do
7
+ expect(stub_obj.send(:build_schemes_path, 'foo')).to eq("./foo.json")
8
+ end
9
+
10
+ it "#scheme_file_exists?" do
11
+ expect(stub_obj.send(:scheme_file_exists?, 'foo')).to eq(false)
12
+ end
13
+
14
+ it "#parse_json" do
15
+ expect(stub_obj.send(:parse_json, "{\"foo\":\"bar\"}")).to eq({"foo" => "bar"})
16
+ end
17
+
18
+ it "#encode_json" do
19
+ expect(stub_obj.send(:encode_json, {"foo" => "bar"})).to eq("{\"foo\":\"bar\"}")
20
+ end
21
+
22
+ it "#parse_scheme" do
23
+ expect { stub_obj.send(:parse_scheme, 'foo') }.to output(/Please, create correct scheme file first/).to_stdout
24
+ write_file("test.json", %Q({"name":"test"}))
25
+ expect(stub_obj.send(:parse_scheme, 'test')).to eq({"name" => "test"})
26
+ end
27
+ end
@@ -1,4 +1,14 @@
1
+ Dir[Dir.pwd + '/spec/support/**/*.rb'].each {|f| puts f;require f;}
2
+
1
3
  require 'coveralls'
2
4
  Coveralls.wear!
3
5
 
4
- require 'jafry'
6
+ require 'jafry'
7
+
8
+ RSpec.configure do |config|
9
+ config.before(:all) do
10
+ Jafry.schemes_path = './'
11
+ Jafry.id_wrapper = 'id'
12
+ Jafry.id_type = 'number'
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ def write_file(file_name, text)
2
+ File.open(file_name, 'w+') {|f| f.write(text) }
3
+ end
4
+
5
+ def delete_file(file_name)
6
+ File.delete(file_name)
7
+ end
@@ -0,0 +1 @@
1
+ {"name":"test"}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jafry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Kur
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-11 00:00:00.000000000 Z
11
+ date: 2014-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: coveralls
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: yajl-ruby
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -94,20 +80,6 @@ dependencies:
94
80
  - - ">="
95
81
  - !ruby/object:Gem::Version
96
82
  version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: yard
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
83
  description: |-
112
84
  This gem allows you to easily create JSON data fixtures
113
85
  from data schemes you can specify by yourself.
@@ -127,12 +99,23 @@ files:
127
99
  - Rakefile
128
100
  - jafry.gemspec
129
101
  - lib/jafry.rb
130
- - lib/jafry/actions.rb
102
+ - lib/jafry/accessor.rb
103
+ - lib/jafry/builder.rb
104
+ - lib/jafry/configurator.rb
105
+ - lib/jafry/identificator.rb
131
106
  - lib/jafry/scheme.rb
107
+ - lib/jafry/utilator.rb
132
108
  - lib/jafry/version.rb
133
- - spec/jafry_spec.rb
134
- - spec/scheme_spec.rb
109
+ - spec/acceptance/config_spec.rb
110
+ - spec/modules/accessor_spec.rb
111
+ - spec/modules/builder_spec.rb
112
+ - spec/modules/configurator_spec.rb
113
+ - spec/modules/identificator_spec.rb
114
+ - spec/modules/scheme_spec.rb
115
+ - spec/modules/utilator_spec.rb
135
116
  - spec/spec_helper.rb
117
+ - spec/support/filer.rb
118
+ - test.json
136
119
  homepage: ''
137
120
  licenses:
138
121
  - MIT
@@ -158,7 +141,13 @@ signing_key:
158
141
  specification_version: 4
159
142
  summary: Gem for creating JSON data stubs
160
143
  test_files:
161
- - spec/jafry_spec.rb
162
- - spec/scheme_spec.rb
144
+ - spec/acceptance/config_spec.rb
145
+ - spec/modules/accessor_spec.rb
146
+ - spec/modules/builder_spec.rb
147
+ - spec/modules/configurator_spec.rb
148
+ - spec/modules/identificator_spec.rb
149
+ - spec/modules/scheme_spec.rb
150
+ - spec/modules/utilator_spec.rb
163
151
  - spec/spec_helper.rb
152
+ - spec/support/filer.rb
164
153
  has_rdoc:
@@ -1,63 +0,0 @@
1
- require 'yajl'
2
- require 'jafry/scheme'
3
-
4
- # This module contains main functionality for Jafry
5
-
6
- module Actions
7
- # Return object builded from scheme
8
-
9
- # @param scheme_name [String] Scheme name
10
- # @param [Hash] options Options
11
- # @option options [String] :wrap Namespace to wrap scheme in
12
- # @return [Scheme] New Scheme object build with pointed options
13
- # @see Scheme
14
-
15
- def build(scheme_name, options={})
16
- scheme = Scheme.new(scheme_name)
17
- options.each do |attr, value|
18
- scheme[attr] = value if scheme[attr]
19
- end
20
- return scheme.wrap(options[:wrap]) if options[:wrap]
21
- scheme
22
- end
23
-
24
- # Return json from scheme
25
-
26
- # @param scheme_name [String] Scheme name
27
- # @param options [Hash] Options
28
- # @option options [String] :wrap Namespace to wrap json in
29
- # @return [Scheme] New Scheme object encoded to json
30
- # @see Scheme
31
-
32
- def create(scheme_name, options={})
33
- Yajl::Encoder.encode(build(scheme_name, options))
34
- end
35
-
36
- # Retun array of Scheme objects
37
-
38
- # @param scheme_name [String] Scheme name
39
- # @param count [Integer] Number of objects in array
40
- # @param options [Hash] Options
41
- # @option options [String] :wrap Namespace to wrap list in
42
- # @return [Array] Array of Schemes
43
- # @see Scheme
44
-
45
- def build_list(scheme_name, count, options={})
46
- list = []
47
- count.times {list << build(scheme_name, options)}
48
- list
49
- end
50
-
51
- # Retun array of Scheme objects encoded to json
52
-
53
- # @param scheme_name [String] Scheme name
54
- # @param count [Integer] Number of objects in array
55
- # @param options [Hash] Options
56
- # @option options [String] :wrap Namespace to wrap json list in
57
- # @return [Array] Json array of schemes
58
- # @see Scheme
59
-
60
- def create_list(scheme_name, count, options={})
61
- Yajl::Encoder.encode(build_list(scheme_name, count, options))
62
- end
63
- end
@@ -1,26 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Jafry do
4
- before(:each) do
5
- File.open("test.json", 'w+') {|f| f.write(%Q({"name":"test"})) }
6
- Jafry.schemes_path = './'
7
- end
8
- after(:each) do
9
- File.delete("test.json")
10
- end
11
- it 'builds scheme' do
12
- expect(Jafry.build('test')).to eq({"name" => "test"})
13
- end
14
- it 'builds scheme with options' do
15
- expect(Jafry.build('test', {name: "foo", wrap: "data"})).to eq({"data" => {"name" => "foo"}})
16
- end
17
- it 'creates json from scheme' do
18
- expect(Jafry.create('test')).to eq(%Q({"name":"test"}))
19
- end
20
- it 'builds list' do
21
- expect(Jafry.build_list('test', 2)).to eq([{"name" => "test"}, {"name" => "test"}])
22
- end
23
- it 'creates json list' do
24
- expect(Jafry.create_list('test', 2)).to eq("[{\"name\":\"test\"},{\"name\":\"test\"}]")
25
- end
26
- end
@@ -1,31 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Scheme do
4
- before(:all) {Jafry.schemes_path = '.'}
5
- context "from existing file" do
6
- before(:each) do
7
- File.open("test.json", 'w+') {|f| f.write(%Q({"name":"test"})) }
8
- @scheme = Scheme.new('test')
9
- end
10
- after(:each) do
11
- File.delete("test.json")
12
- end
13
- it 'initializes from file' do
14
- expect(@scheme.name).to eq('test')
15
- end
16
- it 'builds json' do
17
- expect(@scheme.build).to eq(%Q({"name":"test"}))
18
- end
19
- it 'wraps json' do
20
- expect(@scheme.wrap("user")).to eq({"user" => {"name" => "test"}})
21
- end
22
- it 'builds schemes path' do
23
- expect(@scheme.send(:build_schemes_path, 'foo')).to eq("./foo.json")
24
- end
25
- end
26
- context "from unexisting file" do
27
- it "returns `create file` caution" do
28
- expect { Scheme.new('foo') }.to output(/Please, create correct scheme file first/).to_stdout
29
- end
30
- end
31
- end