active_record_schema_scrapper 0.1.2 → 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: fd1b57d1f85ff5c858486752ed97ff2a83800ffc
4
- data.tar.gz: b80d941344f8bc4a7821b876dfbf9ec634504c9a
3
+ metadata.gz: b0261a688a5b528f4a5d8b2f922fdb7171de34e4
4
+ data.tar.gz: 7114a739b6a62c5ebabd8204072db81f750a05a2
5
5
  SHA512:
6
- metadata.gz: 074306e429e870119dda643b8dd915ec370413ec4df0100a43d5546e0aa75502beac48213d6a8dd6180836e7e0ddbe69449184f2317d8a50541ef60a15416a47
7
- data.tar.gz: a3da99ad3a1a02677a5dd680a57704548a0a09d71beb21b2165fd727a576ee4a89322bd1a06c25832a1d2c7e10961c61d888e3d60654f31a61ef6c113d709151
6
+ metadata.gz: c0a6346779dffe3efede7bccf053ca6223541a9b20ece0cb71a400f26a80c4e5e3f60a66d0ca9d15fdb7bf4554f07c5495a95cdf077db834497fde69eb3334a0
7
+ data.tar.gz: f3a20ad4b4b402e6318ddb6a1576e5f5ce3612b169164d638785fc9cf9d445a95817e0af099d1ac42b394ad6262f7741dca438b4c0a4891e0db685c8c6709cc2
data/.travis.yml CHANGED
@@ -1,7 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.1.6
3
+ - 2.1.7
4
4
  - 2.2.3
5
- addons:
6
- code_climate:
7
- repo_token: 195e47348f8bfd2121f478ac86ae42bcc65679b4e2beed7e7e2867469b27fd01
5
+ gemfile:
6
+ - gemfiles/activerecord_4.0.gemfile
7
+ - gemfiles/activerecord_4.1.gemfile
8
+ - Gemfile
data/Appraisals CHANGED
@@ -8,4 +8,4 @@ end
8
8
 
9
9
  appraise "activerecord-4.2" do
10
10
  gem "activerecord", "~>4.2"
11
- end
11
+ end
data/README.md CHANGED
@@ -23,16 +23,38 @@ Or install it yourself as:
23
23
 
24
24
  ## Usage
25
25
 
26
- ActiveRecordSchemaScrapper::Attributes.new(model: User).to_h
27
- #=>[{ name: "id", type: Fixnum },
28
- { name: "name", type: String },
29
- { name: "email", type: String, default: "" },
30
- { name: "credits", type: BigDecimal, precision: 19, scale: 6 },
31
- { name: "created_at", type: DateTime },
32
- { name: "updated_at", type: DateTime },
33
- { name: "password_digest", type: String },
34
- { name: "remember_token", type: Axiom::Types::Boolean, default: true },
35
- { name: "admin", type: Axiom::Types::Boolean, default: false }]
26
+ ### Attributes
27
+ ```ruby
28
+ ActiveRecordSchemaScrapper::Attributes.new(model: User).map(&:to_h)
29
+ #=>[{ name: "id", type: Fixnum },
30
+ { name: "name", type: String },
31
+ { name: "email", type: String, default: "" },
32
+ { name: "credits", type: BigDecimal, precision: 19, scale: 6 },
33
+ { name: "created_at", type: DateTime },
34
+ { name: "updated_at", type: DateTime },
35
+ { name: "password_digest", type: String },
36
+ { name: "remember_token", type: Axiom::Types::Boolean, default: true },
37
+ { name: "admin", type: Axiom::Types::Boolean, default: false }]
38
+
39
+ ActiveRecordSchemaScrapper::Attributes.new(model: User).errors
40
+ #=> []
41
+ ```
42
+
43
+ ### Associations
44
+ ```ruby
45
+ ActiveRecordSchemaScrapper::Associations.new(model: User).map(&:to_h)
46
+ #=>[{ name: :account, class_name: :Account, type: :has_one, through: nil, source: nil, foreign_key: :user_id, join_table: nil, dependent: nil },
47
+ { name: :microposts, class_name: :Micropost, type: :has_many, through: nil, source: nil, foreign_key: :user_id, join_table: nil, dependent: nil },
48
+ { name: :relationships, class_name: :Relationship, type: :has_many, through: nil, source: nil, foreign_key: :follower_id, join_table: nil, dependent: :destroy },
49
+ { name: :followed_users, class_name: :User, type: :has_many, through: :relationships, source: :followed, foreign_key: :followed_id, join_table: nil, dependent: nil },
50
+ { name: :reverse_relationships, class_name: :Relationship, type: :has_many, through: nil, source: nil, foreign_key: :followed_id, join_table: nil, dependent: :destroy },
51
+ { name: :followers, :class_name => :User, :type => :has_many, :through => :reverse_relationships, :source => :follower, :foreign_key => :follower_id, :join_table => nil, :dependent => nil }]
52
+
53
+ ActiveRecordSchemaScrapper::Attributes.new(model: User).errors.map(&:message)
54
+ #=> ["'Missing model Account for association User.belongs_to :account')"]
55
+ ```
56
+
57
+ Supported versions of ActiveRecord: 4.0 - 4.2
36
58
 
37
59
  ## Development
38
60
 
data/Rakefile CHANGED
@@ -1,20 +1,10 @@
1
+ require "rubygems"
2
+ require "bundler/setup"
1
3
  require "bundler/gem_tasks"
2
4
 
5
+
3
6
  task :default => 'specs'
4
7
 
5
8
  task :specs do
6
- if defined?(RUBY_ENGINE) && RUBY_ENGINE == "ruby" && RUBY_VERSION >= "1.9"
7
- module Kernel
8
- alias :__at_exit :at_exit
9
-
10
- def at_exit(&block)
11
- __at_exit do
12
- exit_status = $!.status if $!.is_a?(SystemExit)
13
- block.call
14
- exit exit_status if exit_status
15
- end
16
- end
17
- end
18
- end
19
9
  sh "bundle exec rspec"
20
- end
10
+ end
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.add_runtime_dependency "virtus", "~> 1.0"
23
23
  spec.add_development_dependency "bundler", "~> 1.9"
24
24
  spec.add_development_dependency "rake", "~> 10.0"
25
- spec.add_development_dependency "rspec", "~> 3.2"
25
+ spec.add_development_dependency "rspec", "~> 3.4"
26
26
  spec.add_development_dependency "sqlite3", "~>1.3"
27
27
  spec.add_development_dependency "activerecord", "~>4.2"
28
28
  spec.add_development_dependency "appraisal", "~> 2.0"
@@ -2,6 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
+ gem "codeclimate-test-reporter", :group => :test, :require => nil
5
6
  gem "activerecord", "~> 4.0"
6
7
 
7
8
  gemspec :path => "../"
@@ -1,53 +1,77 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- active_record_schema_scrapper (0.1.0)
4
+ active_record_schema_scrapper (0.2.0)
5
+ virtus (~> 1.0)
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
8
9
  specs:
9
- activemodel (4.2.1)
10
- activesupport (= 4.2.1)
10
+ activemodel (4.2.5)
11
+ activesupport (= 4.2.5)
11
12
  builder (~> 3.1)
12
- activerecord (4.2.1)
13
- activemodel (= 4.2.1)
14
- activesupport (= 4.2.1)
13
+ activerecord (4.2.5)
14
+ activemodel (= 4.2.5)
15
+ activesupport (= 4.2.5)
15
16
  arel (~> 6.0)
16
- activesupport (4.2.1)
17
+ activesupport (4.2.5)
17
18
  i18n (~> 0.7)
18
19
  json (~> 1.7, >= 1.7.7)
19
20
  minitest (~> 5.1)
20
21
  thread_safe (~> 0.3, >= 0.3.4)
21
22
  tzinfo (~> 1.1)
22
- appraisal (2.0.1)
23
- activesupport (>= 3.2.21)
23
+ appraisal (2.1.0)
24
24
  bundler
25
25
  rake
26
26
  thor (>= 0.14.0)
27
- arel (6.0.0)
27
+ arel (6.0.3)
28
+ axiom-types (0.1.1)
29
+ descendants_tracker (~> 0.0.4)
30
+ ice_nine (~> 0.11.0)
31
+ thread_safe (~> 0.3, >= 0.3.1)
28
32
  builder (3.2.2)
33
+ codeclimate-test-reporter (0.4.8)
34
+ simplecov (>= 0.7.1, < 1.0.0)
35
+ coercible (1.0.0)
36
+ descendants_tracker (~> 0.0.1)
37
+ descendants_tracker (0.0.4)
38
+ thread_safe (~> 0.3, >= 0.3.1)
29
39
  diff-lcs (1.2.5)
40
+ docile (1.1.5)
41
+ equalizer (0.0.11)
30
42
  i18n (0.7.0)
43
+ ice_nine (0.11.1)
31
44
  json (1.8.3)
32
- minitest (5.7.0)
45
+ minitest (5.8.3)
33
46
  rake (10.4.2)
34
- rspec (3.3.0)
35
- rspec-core (~> 3.3.0)
36
- rspec-expectations (~> 3.3.0)
37
- rspec-mocks (~> 3.3.0)
38
- rspec-core (3.3.1)
39
- rspec-support (~> 3.3.0)
40
- rspec-expectations (3.3.0)
47
+ rspec (3.4.0)
48
+ rspec-core (~> 3.4.0)
49
+ rspec-expectations (~> 3.4.0)
50
+ rspec-mocks (~> 3.4.0)
51
+ rspec-core (3.4.1)
52
+ rspec-support (~> 3.4.0)
53
+ rspec-expectations (3.4.0)
41
54
  diff-lcs (>= 1.2.0, < 2.0)
42
- rspec-support (~> 3.3.0)
43
- rspec-mocks (3.3.1)
55
+ rspec-support (~> 3.4.0)
56
+ rspec-mocks (3.4.0)
44
57
  diff-lcs (>= 1.2.0, < 2.0)
45
- rspec-support (~> 3.3.0)
46
- rspec-support (3.3.0)
58
+ rspec-support (~> 3.4.0)
59
+ rspec-support (3.4.1)
60
+ simplecov (0.10.0)
61
+ docile (~> 1.1.0)
62
+ json (~> 1.8)
63
+ simplecov-html (~> 0.10.0)
64
+ simplecov-html (0.10.0)
65
+ sqlite3 (1.3.11)
47
66
  thor (0.19.1)
48
67
  thread_safe (0.3.5)
49
68
  tzinfo (1.2.2)
50
69
  thread_safe (~> 0.1)
70
+ virtus (1.0.5)
71
+ axiom-types (~> 0.1)
72
+ coercible (~> 1.0)
73
+ descendants_tracker (~> 0.0, >= 0.0.3)
74
+ equalizer (~> 0.0, >= 0.0.9)
51
75
 
52
76
  PLATFORMS
53
77
  ruby
@@ -57,5 +81,10 @@ DEPENDENCIES
57
81
  activerecord (~> 4.0)
58
82
  appraisal (~> 2.0)
59
83
  bundler (~> 1.9)
84
+ codeclimate-test-reporter
60
85
  rake (~> 10.0)
61
- rspec (~> 3.2)
86
+ rspec (~> 3.4)
87
+ sqlite3 (~> 1.3)
88
+
89
+ BUNDLED WITH
90
+ 1.10.6
@@ -2,6 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
+ gem "codeclimate-test-reporter", :group => :test, :require => nil
5
6
  gem "activerecord", "~>4.1"
6
7
 
7
8
  gemspec :path => "../"
@@ -1,53 +1,77 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- active_record_schema_scrapper (0.1.0)
4
+ active_record_schema_scrapper (0.2.0)
5
+ virtus (~> 1.0)
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
8
9
  specs:
9
- activemodel (4.2.1)
10
- activesupport (= 4.2.1)
10
+ activemodel (4.2.5)
11
+ activesupport (= 4.2.5)
11
12
  builder (~> 3.1)
12
- activerecord (4.2.1)
13
- activemodel (= 4.2.1)
14
- activesupport (= 4.2.1)
13
+ activerecord (4.2.5)
14
+ activemodel (= 4.2.5)
15
+ activesupport (= 4.2.5)
15
16
  arel (~> 6.0)
16
- activesupport (4.2.1)
17
+ activesupport (4.2.5)
17
18
  i18n (~> 0.7)
18
19
  json (~> 1.7, >= 1.7.7)
19
20
  minitest (~> 5.1)
20
21
  thread_safe (~> 0.3, >= 0.3.4)
21
22
  tzinfo (~> 1.1)
22
- appraisal (2.0.1)
23
- activesupport (>= 3.2.21)
23
+ appraisal (2.1.0)
24
24
  bundler
25
25
  rake
26
26
  thor (>= 0.14.0)
27
- arel (6.0.0)
27
+ arel (6.0.3)
28
+ axiom-types (0.1.1)
29
+ descendants_tracker (~> 0.0.4)
30
+ ice_nine (~> 0.11.0)
31
+ thread_safe (~> 0.3, >= 0.3.1)
28
32
  builder (3.2.2)
33
+ codeclimate-test-reporter (0.4.8)
34
+ simplecov (>= 0.7.1, < 1.0.0)
35
+ coercible (1.0.0)
36
+ descendants_tracker (~> 0.0.1)
37
+ descendants_tracker (0.0.4)
38
+ thread_safe (~> 0.3, >= 0.3.1)
29
39
  diff-lcs (1.2.5)
40
+ docile (1.1.5)
41
+ equalizer (0.0.11)
30
42
  i18n (0.7.0)
43
+ ice_nine (0.11.1)
31
44
  json (1.8.3)
32
- minitest (5.7.0)
45
+ minitest (5.8.3)
33
46
  rake (10.4.2)
34
- rspec (3.3.0)
35
- rspec-core (~> 3.3.0)
36
- rspec-expectations (~> 3.3.0)
37
- rspec-mocks (~> 3.3.0)
38
- rspec-core (3.3.1)
39
- rspec-support (~> 3.3.0)
40
- rspec-expectations (3.3.0)
47
+ rspec (3.4.0)
48
+ rspec-core (~> 3.4.0)
49
+ rspec-expectations (~> 3.4.0)
50
+ rspec-mocks (~> 3.4.0)
51
+ rspec-core (3.4.1)
52
+ rspec-support (~> 3.4.0)
53
+ rspec-expectations (3.4.0)
41
54
  diff-lcs (>= 1.2.0, < 2.0)
42
- rspec-support (~> 3.3.0)
43
- rspec-mocks (3.3.1)
55
+ rspec-support (~> 3.4.0)
56
+ rspec-mocks (3.4.0)
44
57
  diff-lcs (>= 1.2.0, < 2.0)
45
- rspec-support (~> 3.3.0)
46
- rspec-support (3.3.0)
58
+ rspec-support (~> 3.4.0)
59
+ rspec-support (3.4.1)
60
+ simplecov (0.10.0)
61
+ docile (~> 1.1.0)
62
+ json (~> 1.8)
63
+ simplecov-html (~> 0.10.0)
64
+ simplecov-html (0.10.0)
65
+ sqlite3 (1.3.11)
47
66
  thor (0.19.1)
48
67
  thread_safe (0.3.5)
49
68
  tzinfo (1.2.2)
50
69
  thread_safe (~> 0.1)
70
+ virtus (1.0.5)
71
+ axiom-types (~> 0.1)
72
+ coercible (~> 1.0)
73
+ descendants_tracker (~> 0.0, >= 0.0.3)
74
+ equalizer (~> 0.0, >= 0.0.9)
51
75
 
52
76
  PLATFORMS
53
77
  ruby
@@ -57,5 +81,10 @@ DEPENDENCIES
57
81
  activerecord (~> 4.1)
58
82
  appraisal (~> 2.0)
59
83
  bundler (~> 1.9)
84
+ codeclimate-test-reporter
60
85
  rake (~> 10.0)
61
- rspec (~> 3.2)
86
+ rspec (~> 3.4)
87
+ sqlite3 (~> 1.3)
88
+
89
+ BUNDLED WITH
90
+ 1.10.6
@@ -24,7 +24,7 @@ class ActiveRecordSchemaScrapper
24
24
  end
25
25
 
26
26
  def abstract_class?
27
- model.abstract_class? || false
27
+ !!model.abstract_class?
28
28
  end
29
29
 
30
30
  private
@@ -2,14 +2,16 @@ class ActiveRecordSchemaScrapper
2
2
  class Associations
3
3
 
4
4
  def initialize(model:, types: self.class.types)
5
- @model = model
6
- @types = types
5
+ @model = model
6
+ @types = types
7
+ @errors = []
7
8
  end
8
9
 
9
10
  include Enumerable
10
11
 
11
12
  def each
12
- types.each do |type|
13
+ return [] if abstract_class
14
+ @each ||= types.each do |type|
13
15
  model.reflect_on_all_associations(type).each do |a|
14
16
  begin
15
17
  hash = if a.try(:delegate_reflection)
@@ -28,30 +30,35 @@ class ActiveRecordSchemaScrapper
28
30
 
29
31
  yield(ActiveRecordSchemaScrapper::Association.new(hash))
30
32
  rescue NameError => e
31
- errors << OpenStruct.new(class_name: model.name,
32
- message: "Missing model #{a.name.to_s.camelize} for association #{model.name}.belongs_to :#{a.name}",
33
- original_error: e)
33
+ errors << OpenStruct.new(class_name: model.name,
34
+ message: "Missing model #{a.name.to_s.camelize} for association #{model.name}.belongs_to :#{a.name}",
35
+ original_error: e,
36
+ level: :error)
34
37
  end
35
38
  end
36
39
  end
37
40
  end
38
41
 
39
42
  def to_a
40
- map { |v| v }
43
+ @to_a ||= map { |v| v }
41
44
  end
42
45
 
43
- def errors
44
- @errors ||= []
45
- end
46
-
47
-
48
46
  def self.types
49
47
  [:has_and_belongs_to_many, :belongs_to, :has_one, :has_many]
50
48
  end
51
49
 
50
+ attr_reader :errors
51
+
52
52
  private
53
53
 
54
54
  attr_reader :model, :types
55
55
 
56
+ def abstract_class
57
+ if model.abstract_class?
58
+ errors << OpenStruct.new(class_name: model.name,
59
+ message: "#{model.name} is an abstract class and has no associated table.",
60
+ level: :warn)
61
+ end
62
+ end
56
63
  end
57
64
  end
@@ -1,6 +1,27 @@
1
1
  class ActiveRecordSchemaScrapper
2
2
  class Attributes
3
3
 
4
+ class << self
5
+ def register_type(name:, klass:)
6
+ registered_types << [name, klass]
7
+ end
8
+
9
+ def registered_types
10
+ @registered_types ||= []
11
+ end
12
+
13
+ def register_default(name:, klass:)
14
+ registered_defaults << [name, klass]
15
+ end
16
+
17
+ def registered_defaults
18
+ @registered_defaults ||= []
19
+ end
20
+ end
21
+
22
+ attr_reader :errors, :model
23
+ private :model
24
+
4
25
  def initialize(model:)
5
26
  @model = model
6
27
  @errors = []
@@ -13,47 +34,28 @@ class ActiveRecordSchemaScrapper
13
34
  end
14
35
 
15
36
  def to_a
16
- map { |v| v }
37
+ @to_a ||= map { |v| v }
17
38
  end
18
39
 
19
- def self.register_type(name:, klass:)
20
- registered_types << [name, klass]
21
- end
22
-
23
- def self.registered_types
24
- @registered_types ||= []
25
- end
26
-
27
- def self.register_default(name:, klass:)
28
- registered_defaults << [name, klass]
29
- end
30
-
31
- def self.registered_defaults
32
- @registered_defaults ||= []
33
- end
34
-
35
- attr_reader :errors
36
-
37
40
  private
38
41
 
39
- attr_reader :model
40
-
41
42
  def call
42
43
  @attributes ||= model.columns_hash.map do |k, v|
43
44
  ActiveRecordSchemaScrapper::Attribute.new(
44
- name: k,
45
- type: v.type,
46
- precision: v.cast_type.precision,
47
- limit: v.cast_type.limit,
48
- scale: v.cast_type.scale,
49
- default: v.default,
50
- null: v.null,
45
+ name: k,
46
+ type: v.type,
47
+ precision: v.cast_type.precision,
48
+ limit: v.cast_type.limit,
49
+ scale: v.cast_type.scale,
50
+ default: v.default,
51
+ null: v.null,
51
52
  )
52
53
  end
53
54
  rescue NoMethodError => e
54
- @errors << OpenStruct.new(class_name: model.name,
55
- message: "#{model.name} is not a valid ActiveRecord model.",
56
- original_error: e)
55
+ @errors << OpenStruct.new(class_name: model.name,
56
+ message: "#{model.name} is not a valid ActiveRecord model.",
57
+ original_error: e,
58
+ level: :error)
57
59
  end
58
60
  end
59
61
  end
@@ -1,3 +1,3 @@
1
1
  class ActiveRecordSchemaScrapper
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_record_schema_scrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dustin Zeisler
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-22 00:00:00.000000000 Z
11
+ date: 2015-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: virtus
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '3.2'
61
+ version: '3.4'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '3.2'
68
+ version: '3.4'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: sqlite3
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -132,8 +132,6 @@ files:
132
132
  - gemfiles/activerecord_4.0.gemfile.lock
133
133
  - gemfiles/activerecord_4.1.gemfile
134
134
  - gemfiles/activerecord_4.1.gemfile.lock
135
- - gemfiles/activerecord_4.2.gemfile
136
- - gemfiles/activerecord_4.2.gemfile.lock
137
135
  - lib/active_record_schema_scrapper.rb
138
136
  - lib/active_record_schema_scrapper/association.rb
139
137
  - lib/active_record_schema_scrapper/associations.rb
@@ -1,7 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "activerecord", "~>4.2"
6
-
7
- gemspec :path => "../"
@@ -1,61 +0,0 @@
1
- PATH
2
- remote: ../
3
- specs:
4
- active_record_schema_scrapper (0.1.0)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- activemodel (4.2.1)
10
- activesupport (= 4.2.1)
11
- builder (~> 3.1)
12
- activerecord (4.2.1)
13
- activemodel (= 4.2.1)
14
- activesupport (= 4.2.1)
15
- arel (~> 6.0)
16
- activesupport (4.2.1)
17
- i18n (~> 0.7)
18
- json (~> 1.7, >= 1.7.7)
19
- minitest (~> 5.1)
20
- thread_safe (~> 0.3, >= 0.3.4)
21
- tzinfo (~> 1.1)
22
- appraisal (2.0.1)
23
- activesupport (>= 3.2.21)
24
- bundler
25
- rake
26
- thor (>= 0.14.0)
27
- arel (6.0.0)
28
- builder (3.2.2)
29
- diff-lcs (1.2.5)
30
- i18n (0.7.0)
31
- json (1.8.3)
32
- minitest (5.7.0)
33
- rake (10.4.2)
34
- rspec (3.3.0)
35
- rspec-core (~> 3.3.0)
36
- rspec-expectations (~> 3.3.0)
37
- rspec-mocks (~> 3.3.0)
38
- rspec-core (3.3.1)
39
- rspec-support (~> 3.3.0)
40
- rspec-expectations (3.3.0)
41
- diff-lcs (>= 1.2.0, < 2.0)
42
- rspec-support (~> 3.3.0)
43
- rspec-mocks (3.3.1)
44
- diff-lcs (>= 1.2.0, < 2.0)
45
- rspec-support (~> 3.3.0)
46
- rspec-support (3.3.0)
47
- thor (0.19.1)
48
- thread_safe (0.3.5)
49
- tzinfo (1.2.2)
50
- thread_safe (~> 0.1)
51
-
52
- PLATFORMS
53
- ruby
54
-
55
- DEPENDENCIES
56
- active_record_schema_scrapper!
57
- activerecord (~> 4.2)
58
- appraisal (~> 2.0)
59
- bundler (~> 1.9)
60
- rake (~> 10.0)
61
- rspec (~> 3.2)