GithubHelp home page GithubHelp logo

northwoodspd / data_magic Goto Github PK

View Code? Open in Web Editor NEW

This project forked from cheezy/data_magic

0.0 1.0 0.0 164 KB

Provides datasets to application via yaml files

License: MIT License

Ruby 85.38% Gherkin 14.62%

data_magic's Introduction

data_magic

Build Status

An easy to use gem that provides datasets that can be used by your application and tests. The data is stored in yaml files.

Using

In order to use data_magic you will have to inform the gem where it can find the yaml files. You can do this with the following code:

DataMagic.yml_directory = 'data/yml'

If you do not specify a directory the gem will default to using a directory named config/data.

After setting the directory you must load a file. This can be accomplished by calling the load method.

DataMagic.load 'filename.yml'

Another way to specify the file to load is to use a tag in a cucumber scenario. You tag should take the form of @datamagic_FILENAME where FILENAME is replaced with the file you wish to load. For example, if you add the tag @datamagic_foo then the file foo.yml will be loaded. If you want to use the tags you simply have to add the following code in a hook:

Before do |scenario|
  DataMagic.load_for_scenario(scenario)
end

If you do not specify a filename the gem will attempt to use a file named default.yml. If you are using this for testing you will more than likely want to call load before each test to load the proper data for the specific test, or use the namespaced keys method, detailed below.

Another option is to set an environment variable DATA_MAGIC_FILE. When this is set it will be used instead of the default.yml file.

The final thing to do is use the data. The gem has a data_for method that will return the data for a specific key. The most common way to use this is to include the DataMagic module in a page-object and then populate a page with the data. Here's an example:

class MyPage
  include PageObject
  include DataMagic
  
  ...
  
  def populate_page
    populate_page_with data_for :my_page
  end
end

Notice that I am including the module on line 3. On lin 8 I am calling the data_for method passing the key :my_page. The populate_page_with method is a part of the page-object gem.

To organize your data into namespaces, and load that data just in time for testing, use namespaced keys instead:

  page.populate_page_with data_for "user_form/valid"

This will load user_form.yml, and populate the page with the valid: record therein.

Your data might look something like this:

my_page:
  name: Cheezy
  address: 123 Main Street
  email: [email protected]
  pay_type: 'Credit card'

In order to access the data directly you can just call the method on the module like this:

  page = MyPage.new
  my_data = page.data_for :my_test

Data generators

You can call one of many built-in methods in your yaml file to randomize the data. Here is an example of how you would randomize the above yaml:

my_page:
  name: ~full_name
  address: ~street_address
  email: ~email_address
  pay_type: ~randomize ['Credit card', 'Purchase order', 'Check']

Here is a list of the built-in methods:

built-in methods built-in methods
first_name last_name
last_name full_name
name_prefix name_suffix
title street_address(include_secondary=false)
secondary_address city
state state_abbr
zip_code country
company_name catch_phrase
words(number = 3) sentence(min_word_count = 4)
sentences(sentence_count = 3) paragraphs(paragraph_count = 3)
characters(character_count = 255) email_address(name = nil)
domain_name url
user_name
phone_number cell_phone
randomize([]) randomize(1..4)
mask - #=num a=lower A=upper
today(format = '%D') tomorrow(format = '%D')
yesterday(format = '%D')
3.days_from_today(format = '%D') 3.days_ago(format = '%D')
month month_abbr
day_of_week day_of_week_abbr
sequential([]) sequential(1..4)

If you wish to add your own built-in methods you can simply pass a module to DataMagic and all of the methods will be available.

module MyData
  def abc
    'abc'
  end
end
   
DataMagic.add_translator MyData # this line must go in the same file as the module
    
# can now use ~abc in my yml files

Documentation

The rdocs for this project can be found at rubydoc.info.

To see the changes from release to release please look at the ChangeLog

Older versions of Ruby:

This gem only works with Ruby >= 2.2. Use versions 1.1 or below if you have an older Ruby.

Known Issues

See http://github.com/cheezy/data_magic/issues

Contributing

Please ensure all contributions contain proper tests.

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Copyright

Copyright (c) 2012-2013 Jeffrey S. Morgan. See LICENSE for details.

data_magic's People

Contributors

abotalov avatar amckinnell avatar anilreddy avatar bak avatar cheezy avatar donavan avatar gmalette avatar jacob-ewald avatar snowe2010 avatar vveliev-tc avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.