dummy_urls 0.9

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md ADDED
@@ -0,0 +1,4 @@
1
+ ## 0.9 (August 10, 2010)
2
+
3
+ Features:
4
+ - generating routes for Rails 3 applications by using dummy (functionality split up from old project)
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Gonçalo Silva
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,52 @@
1
+ # Dummy routes
2
+
3
+ "Dummy urls" uses [dummy](http://github.com/goncalossilva/dummy) to generate test urls for your Rails 3 application.
4
+
5
+ ## Description
6
+
7
+ "Dummy urls" generates GET, POST, PUT and DELETE test urls for your Rails 3 application. It depends on [dummy\_data](http://github.com/goncalossilva/dummy_data) since it expects you to generate your test data with it (you can change it later). It also uses [dummy](http://github.com/goncalossilva/dummy) to generate the needed data for POST and PUT requests. Check dummy's description for a better understanding of what it does.
8
+
9
+ ## Installation
10
+
11
+ $ gem install dummy_urls
12
+
13
+ ## Usage
14
+
15
+ Add the following to the Gemfile of your Rails 3 application:
16
+ gem "dummy_urls"
17
+
18
+ Now you have access to the generator:
19
+ rails generate dummy:urls
20
+
21
+ You can change the divisor in use (what these mean exactly is explained latter on):
22
+ rails generate dummy:urls --divisor=3
23
+
24
+ Also, you can manually define the amount of urls to generate for each model (or just accept the defaults):
25
+ rails generate dummy:urls --manual-amounts
26
+
27
+ And you can manually set the output folder of the dummy data (which defaults to test/dummy):
28
+ rails generate dummy:urls --output-folder test/awesome_fixtures
29
+
30
+ The files will be placed under _output-folder_/urls.
31
+
32
+ Feel free to mix all of these options.
33
+
34
+ ## More information
35
+
36
+ ### URLs with smart data
37
+
38
+ "Dummy urls" tells dummy to try to understand your database columns and generate data accordingly, instead of dumping "Lorem ipsum" all over the place.
39
+
40
+ For instance, if you have a field called _company\_name_, it will generate a company name. If you have a field called _awesome\_postal\_code_, it will generate a valid ZIP Code. If you have a field called _longitude_, it will generate a valid longitude, and so on. You get the picture.
41
+
42
+ Dummy cares about associations. It will create random associations between the automatically generated records, so you don't have to worry about that.
43
+
44
+ This way, the generated POST and PUT requests will look very realistic.
45
+
46
+ ### Smart amounts of urls
47
+
48
+ "Dummy urls" analyzes the amount of records that dummy\_data generated and uses this amount to estimate the amount of url groups to generate (each group composed by a GET, a POST, a PUT and a DELETE request).
49
+
50
+ It uses the divisor for this estimation. If dummy\_data generated 15 records for a given model and dummy\_urls is using the default divisor (5), it will generate 3 groups of urls for this model (12 requests in total).
51
+
52
+ Copyright (c) 2010 Gonçalo Silva
data/lib/dummy_urls.rb ADDED
@@ -0,0 +1,10 @@
1
+ require "rubygems"
2
+ require "dummy"
3
+ require "dummy_data"
4
+ require "generators/urls/urls_generator"
5
+
6
+ module Dummy
7
+ module Generators
8
+ class MissingDummyfile < RuntimeError; end
9
+ end
10
+ end
@@ -0,0 +1,25 @@
1
+ <%= "# '#{@model_name}' urls generated automatically by dummy at #{Time.now.strftime("%H:%M %m/%d/%Y")} (#{@url_amount} groups of urls)." %>
2
+ <% for i in 1..@url_amount do %>
3
+ <% id = generate_id(@model_name) -%>
4
+ get_<%= i %>:
5
+ type: get
6
+ url: /<%= @model_name %>/<%= id %>
7
+
8
+ post_<%= i %>:
9
+ type: post
10
+ url: /<%= @model_name %>/new
11
+ params:
12
+ :<%= @model_name.singularize %>:
13
+ <%= generate_data(@model_name).map { |field, value| "#{field}: #{value}" }.join("\n ") %>
14
+
15
+ put_<%= i %>:
16
+ type: put
17
+ url: /<%= @model_name %>/<%= id %>
18
+ params:
19
+ :<%= @model_name.singularize %>:
20
+ <%= generate_data(@model_name).map { |field, value| "#{field}: #{value}" }.join("\n ") %>
21
+
22
+ delete_<%= i %>:
23
+ type: delete
24
+ url: /<%= @model_name %>/<%= id %>
25
+ <% end %>
@@ -0,0 +1,130 @@
1
+ module Dummy
2
+ module Generators
3
+ class UrlsGenerator < Rails::Generators::Base
4
+ include Dummy::Generators::Common
5
+
6
+ def self.source_root
7
+ @source_root ||= File.expand_path("../templates", __FILE__)
8
+ end
9
+
10
+ class_option :divisor, :type => :numeric, :default => 10,
11
+ :desc => "The divisor to use when determining the amount of urls to generate."
12
+ class_option :manual_amounts, :type => :boolean, :default => false,
13
+ :desc => "Manually set the amount of urls to generate for each model."
14
+ class_option :output_folder, :type => :string, :default => "test/dummy",
15
+ :desc => "Dummy output folder, urls/ will be used when storing the resulting YAML files."
16
+
17
+ def install_dummy_urls
18
+ initialize_application
19
+ generate_dummy_urls
20
+ copy_rake_files
21
+ update_dummyfile
22
+ end
23
+
24
+ private
25
+
26
+ def initialize_application
27
+ require File.expand_path("#{Rails.root}/config/environment.rb")
28
+ say_status :successful, "initialize Rails application"
29
+ end
30
+
31
+ def generate_dummy_urls
32
+ get_table_names
33
+ load_dummyfile
34
+ predict_url_amounts
35
+ gather_associations
36
+ end
37
+
38
+ def get_table_names
39
+ @models = Hash.new
40
+ Dir["app/models/*.rb"].each do |full_path|
41
+ model = File.basename(full_path).chomp(File.extname(full_path)).camelcase.constantize
42
+ @models.merge!({model => {
43
+ :record_amount => 0, :url_amount => 0, :associations => []
44
+ }}) if model.respond_to?(:columns)
45
+ end
46
+ end
47
+
48
+ def load_dummyfile
49
+ begin
50
+ records = YAML.load_file "#{options.output_folder}/Dummyfile"
51
+ rescue
52
+ raise MissingDummyfile, "Could not find the Dummyfile. Did you forget to generate dummy data or specified a different directory?"
53
+ end
54
+
55
+ records.each do |record, amount|
56
+ model = record.singularize.camelcase.constantize
57
+ @models[model][:record_amount] = amount[:records]
58
+ end
59
+ end
60
+
61
+ def predict_url_amounts
62
+ @models.each do |model, data|
63
+ amount = data[:record_amount] / options.divisor
64
+
65
+ if options.manual_amounts
66
+ user_defined = ask("Number of urls for #{model} (default: #{amount}): ")
67
+ amount = user_defined unless user_defined.empty?
68
+ end
69
+
70
+ @models[model][:url_amount] = amount.to_i
71
+ end
72
+ end
73
+
74
+ def copy_rake_files
75
+ empty_directory "test/dummy/urls"
76
+ @models.each do |model, info|
77
+ @generated_ids = Array.new
78
+
79
+ @model_name = model.to_s.underscore.pluralize
80
+ @url_amount = info[:url_amount]
81
+ template "model.yml", "#{options.output_folder}/urls/#{@model_name}.yml"
82
+ end
83
+ end
84
+
85
+ def generate_id(model_name)
86
+ model = model_name.singularize.camelcase.constantize
87
+
88
+ begin
89
+ yaml_id = rand(@models[model][:record_amount])
90
+ end while @generated_ids.include?(yaml_id)
91
+ @generated_ids.push(yaml_id)
92
+
93
+ Fixtures.identify("#{model_name.singularize}_#{yaml_id}")
94
+ end
95
+
96
+ def generate_data(model_name)
97
+ data = Hash.new
98
+ key_value = Hash.new
99
+ model = model_name.singularize.camelcase.constantize
100
+
101
+ model.columns.each do |column|
102
+ name = model.to_s.underscore
103
+ info = @models[model]
104
+
105
+ key_value = generate_record_data(name, info, column, false)
106
+ data.merge!(key_value) unless key_value.nil?
107
+ end
108
+
109
+ data
110
+ end
111
+
112
+ def update_dummyfile
113
+ data = Hash.new
114
+ dummyfile_path = "#{options.output_folder}/Dummyfile"
115
+
116
+ @models.each do |model, info|
117
+ data[model.to_s.underscore.pluralize] = {:records => info[:record_amount],
118
+ :urls => info[:url_amount]}
119
+ end
120
+
121
+ content = "# This file was automatically generated by Dummy. Do NOT change it.\n"
122
+ content << YAML.dump(data)
123
+
124
+ remove_file dummyfile_path, :verbose => false if File.exists?(dummyfile_path)
125
+ create_file dummyfile_path, content
126
+ end
127
+ end
128
+ end
129
+ end
130
+
metadata ADDED
@@ -0,0 +1,114 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dummy_urls
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 9
8
+ version: "0.9"
9
+ platform: ruby
10
+ authors:
11
+ - "Gon\xC3\xA7alo Silva"
12
+ autorequire:
13
+ bindir: bin
14
+ cert_chain: []
15
+
16
+ date: 2010-09-17 00:00:00 +01:00
17
+ default_executable:
18
+ dependencies:
19
+ - !ruby/object:Gem::Dependency
20
+ name: dummy
21
+ prerelease: false
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 9
30
+ version: "0.9"
31
+ type: :runtime
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: dummy_data
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ - 9
44
+ version: "0.9"
45
+ type: :runtime
46
+ version_requirements: *id002
47
+ - !ruby/object:Gem::Dependency
48
+ name: rails
49
+ prerelease: false
50
+ requirement: &id003 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 3
57
+ - 0
58
+ - 0
59
+ - beta
60
+ version: 3.0.0.beta
61
+ type: :runtime
62
+ version_requirements: *id003
63
+ description: Generates dummy URLs to hit Rails 3 applications' routes. Since POST and PUT requests require more information than an URL, it uses dummy to generate appropriate data for these requests
64
+ email:
65
+ - goncalossilva@gmail.com
66
+ executables: []
67
+
68
+ extensions: []
69
+
70
+ extra_rdoc_files: []
71
+
72
+ files:
73
+ - lib/dummy_urls.rb
74
+ - lib/generators/urls/urls_generator.rb
75
+ - lib/generators/urls/templates/model.yml
76
+ - LICENSE
77
+ - CHANGELOG.md
78
+ - README.md
79
+ has_rdoc: true
80
+ homepage: http://github.com/goncalossilva/dummy_urls
81
+ licenses: []
82
+
83
+ post_install_message:
84
+ rdoc_options: []
85
+
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ segments:
94
+ - 0
95
+ version: "0"
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ segments:
102
+ - 1
103
+ - 3
104
+ - 7
105
+ version: 1.3.7
106
+ requirements: []
107
+
108
+ rubyforge_project: dummy_urls
109
+ rubygems_version: 1.3.7
110
+ signing_key:
111
+ specification_version: 3
112
+ summary: Generates dummy URLs for Rails 3 applications
113
+ test_files: []
114
+