migrant 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -118,6 +118,17 @@ These actions won't be performed (because we don't want to hurt your data):
118
118
  irb(main):003:0> my_business.user
119
119
  => #<User id: nil, name: "John", surname: "Smith", description: "Some string">
120
120
 
121
+ == Pickle/Cucumber Integration
122
+
123
+ Add the following to support/env/pickle.rb:
124
+
125
+ require 'pickle/migrant'
126
+ Pickle.configure do |config|
127
+ config.adapters = [Pickle::Migrant]
128
+ end
129
+
130
+ All pickle steps will then return a mocked model by default, overriden with any values you provide.
131
+
121
132
  == Maintability / Usability concerns
122
133
  * You don't have to define a structure on every model, Migrant ignores models with no definitions
123
134
  * You can remove the structure definitions later and nothing bad will happen (besides losing automigration for those fields)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.0
1
+ 1.1.1
@@ -3,7 +3,7 @@ module DataType
3
3
  def column
4
4
  {:type => :decimal, :precision => 10, :scale => 2}
5
5
  end
6
-
6
+
7
7
  def self.default_mock
8
8
  rand(9999999).to_f+0.51
9
9
  end
@@ -1,7 +1,9 @@
1
1
  module DataType
2
2
  class Fixnum < Base
3
3
  def column
4
- {:type => :integer}
4
+ {:type => :integer}.tap do |options|
5
+ options.merge!(:limit => @value.size) if @value > 2147483647 # 32-bit limit. Not checking size here because a 64-bit OS always has at least 8 byte size
6
+ end
5
7
  end
6
8
 
7
9
  def self.default_mock
@@ -86,8 +86,14 @@ module Migrant
86
86
 
87
87
  # Indexes
88
88
  # down_code += NEWLINE+TABS+model.schema.indexes.collect { |fields| "remove_index :#{model.table_name}, #{fields.inspect}"}.join(NEWLINE+TABS)
89
- filename = "#{migrations_path}/#{next_migration_number}_#{activity}.rb"
90
- File.open(filename, 'w') { |migration| migration.write(migration_template(activity, up_code, down_code)) }
89
+ begin
90
+ filename = "#{migrations_path}/#{next_migration_number}_#{activity}.rb"
91
+ File.open(filename, 'w') { |migration| migration.write(migration_template(activity, up_code, down_code)) }
92
+ rescue Errno::ENAMETOOLONG
93
+ activity = activity.split('_')[0..2].join('_')
94
+ filename = "#{migrations_path}/#{next_migration_number}_#{activity}.rb"
95
+ File.open(filename, 'w') { |migration| migration.write(migration_template(activity, up_code, down_code)) }
96
+ end
91
97
  puts "Wrote #{filename}..."
92
98
  end
93
99
  true
@@ -30,6 +30,12 @@ module Migrant
30
30
  end
31
31
 
32
32
  def mock(attributes={}, recursive=true)
33
+ attribs = {}
34
+ attribs.merge!(self.superclass.mock_attributes(attributes, recursive)) unless self.superclass == ActiveRecord::Base
35
+ new attribs.merge(mock_attributes(attributes, recursive))
36
+ end
37
+
38
+ def mock_attributes(attributes={}, recursive=true)
33
39
  attribs = @schema.columns.collect { |name, data_type| [name, data_type.mock] }.flatten
34
40
 
35
41
  # Only recurse to one level, otherwise things get way too complicated
@@ -40,7 +46,13 @@ module Migrant
40
46
  rescue NameError; nil; end # User hasn't defined association, just skip it
41
47
  end.compact.flatten
42
48
  end
43
- new Hash[*attribs].merge(attributes)
49
+ Hash[*attribs].merge(attributes)
50
+ end
51
+
52
+ def mock!(attributes={})
53
+ mock(attributes).tap do |mock|
54
+ mock.save!
55
+ end
44
56
  end
45
57
  end
46
58
  end
@@ -0,0 +1,16 @@
1
+ module Pickle
2
+ class Migrant < Adapter
3
+ def self.factories
4
+ model_classes.select { |model| model.respond_to?(:mock) }.collect { |model| new(model) }
5
+ end
6
+
7
+ def initialize(klass)
8
+ @klass, @name = klass, klass.name.underscore.gsub('/', '_')
9
+ end
10
+
11
+ def create(attrs={})
12
+ @klass.mock!(Hash[attrs.collect { |k,v| [k.to_sym, v] }])
13
+ end
14
+ end
15
+ end
16
+
data/migrant.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{migrant}
8
- s.version = "1.1.0"
8
+ s.version = "1.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Pascal Houliston"]
12
- s.date = %q{2011-03-28}
12
+ s.date = %q{2011-04-01}
13
13
  s.description = %q{Easier schema management for Rails that compliments your domain model.}
14
14
  s.email = %q{101pascal@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -42,6 +42,7 @@ Gem::Specification.new do |s|
42
42
  "lib/migrant/migration_generator.rb",
43
43
  "lib/migrant/model_extensions.rb",
44
44
  "lib/migrant/schema.rb",
45
+ "lib/pickle/migrant.rb",
45
46
  "lib/railtie.rb",
46
47
  "lib/simple_object.rb",
47
48
  "lib/tasks/db.rake",
@@ -68,10 +68,6 @@ class TestDataSchema < Test::Unit::TestCase
68
68
  assert_schema(User, :email, :type => :string)
69
69
  end
70
70
 
71
- should "generate the column type specified by the :as key irrespective of the data type" do
72
-
73
- end
74
-
75
71
  should "generate indexes for all foreign keys automatically" do
76
72
  assert_contains(Business.schema.indexes, :user_id, 'Missing index on belongs_to')
77
73
  assert_contains(Business.schema.indexes, [:owner_type, :owner_id], 'Missing index on polymorphic belongs_to')
@@ -83,6 +79,7 @@ class TestDataSchema < Test::Unit::TestCase
83
79
  assert_contains(Category.schema.indexes, :title, 'Missing index on :index => true column')
84
80
  end
85
81
 
82
+
86
83
  end
87
84
 
88
85
  end
@@ -118,7 +118,8 @@ class TestMigrationGenerator < Test::Unit::TestCase
118
118
  assert_equal true, Migrant::MigrationGenerator.new.run, "Migration Generator reported an error"
119
119
  rake_migrate
120
120
  BusinessCategory.reset_column_information
121
- mock = BusinessCategory.mock
121
+ BusinessCategory.mock!
122
+ mock = BusinessCategory.last
122
123
  assert_not_nil(mock)
123
124
  assert(mock.test_mockup_of_text.is_a?(String))
124
125
  assert(mock.test_mockup_of_string.is_a?(String))
@@ -128,6 +129,24 @@ class TestMigrationGenerator < Test::Unit::TestCase
128
129
  assert(mock.test_mockup_of_datetime.is_a?(Time))
129
130
  assert(DataType::Base.default_mock.is_a?(String))
130
131
  end
132
+
133
+ should "generate example mocks for an inherited model when STI is in effect" do
134
+ assert_equal(5.00, Customer.mock.average_rating)
135
+ assert_equal("somebody@somewhere.com", Customer.mock.email)
136
+ assert(Customer.mock.is_a?(Customer))
137
+ end
138
+
139
+ should "remove extraneous text from a filename too large for the operating system" do
140
+ BusinessCategory.structure do
141
+ a_very_very_long_field_indeed_far_too_long_for_any_good_use_really true
142
+ a_very_very_long_field_indeed_far_too_long_for_any_good_use_really_2 true
143
+ a_very_very_long_field_indeed_far_too_long_for_any_good_use_really_3 true
144
+ end
145
+
146
+ BusinessCategory.belongs_to(:verylongclassthatissuretogenerateaverylargeoutputfilename, :polymorphic => true)
147
+ assert_equal true, Migrant::MigrationGenerator.new.run, "Migration Generator reported an error"
148
+ rake_migrate
149
+ end
131
150
  end
132
151
  end
133
152
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: migrant
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.1.0
5
+ version: 1.1.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Pascal Houliston
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-28 00:00:00 +00:00
13
+ date: 2011-04-01 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -136,6 +136,7 @@ files:
136
136
  - lib/migrant/migration_generator.rb
137
137
  - lib/migrant/model_extensions.rb
138
138
  - lib/migrant/schema.rb
139
+ - lib/pickle/migrant.rb
139
140
  - lib/railtie.rb
140
141
  - lib/simple_object.rb
141
142
  - lib/tasks/db.rake
@@ -203,7 +204,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
203
204
  requirements:
204
205
  - - ">="
205
206
  - !ruby/object:Gem::Version
206
- hash: 480929263
207
+ hash: -2795285372725483730
207
208
  segments:
208
209
  - 0
209
210
  version: "0"