active_mocker 1.7.1 → 1.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/lib/active_mocker/config.rb +3 -1
- data/lib/active_mocker/generate.rb +60 -26
- data/lib/active_mocker/mock/base.rb +9 -0
- data/lib/active_mocker/mock/collection.rb +1 -1
- data/lib/active_mocker/mock/queries.rb +2 -2
- data/lib/active_mocker/model_reader.rb +10 -7
- data/lib/active_mocker/model_schema/assemble.rb +4 -4
- data/lib/active_mocker/string_reader.rb +5 -1
- data/lib/active_mocker/version.rb +1 -1
- metadata +2 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 70b459ba8b9483e0ad60206fbdc59bcabb9d53b1
|
4
|
+
data.tar.gz: c1477e53e36c6d5897864788adcade51e62016a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bfb38756e480aa1ef4daa7f0e3891949837ae1a659b98a76dd9dbae3862066610071118781e24e4f36d3a138a6e42990e727e23a0735ced9460f171debba9c36
|
7
|
+
data.tar.gz: f43a9a48f74cec85c015727c1108fc765d92dec0b1ed27b694cce7a2b87dca37eec962018560564024bbbb0ba0bede939a1cbbbc3780823c154641b4b623575b
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
# Changelog
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
+
## 1.7.2 - 2014-10-27
|
5
|
+
|
6
|
+
### Enhancement
|
7
|
+
- Build command can take aa Environment variable of model to just generate a mock for a specific model. `rake active_mocker:build MODEL=user`
|
8
|
+
- Add Method #freeze, see Doc for limitation.
|
9
|
+
- Method `find` can take a string number or an array of string numbers
|
10
|
+
- Query #all can take take method []
|
11
|
+
|
4
12
|
## 1.7.1 - 2014-10-20
|
5
13
|
|
6
14
|
### Enhancement
|
data/lib/active_mocker/config.rb
CHANGED
@@ -10,7 +10,8 @@ module ActiveMocker
|
|
10
10
|
:file_reader,
|
11
11
|
:build_in_progress,
|
12
12
|
:log_location,
|
13
|
-
:clear_log_on_build
|
13
|
+
:clear_log_on_build,
|
14
|
+
:generate_for_mock
|
14
15
|
|
15
16
|
def model_base_classes=(val)
|
16
17
|
@model_base_classes = val
|
@@ -29,6 +30,7 @@ module ActiveMocker
|
|
29
30
|
@file_reader = FileReader unless @file_reader
|
30
31
|
@log_location = 'log/active_mocker.log' unless @log_location
|
31
32
|
@clear_log_on_build = true
|
33
|
+
@generate_for_mock = ENV['MODEL']
|
32
34
|
rails_defaults if Object.const_defined?('Rails')
|
33
35
|
end
|
34
36
|
|
@@ -9,7 +9,9 @@ class Generate
|
|
9
9
|
def initialize(silence: false)
|
10
10
|
@silence = silence
|
11
11
|
Config.clear_log
|
12
|
+
Config.build_in_progress = true
|
12
13
|
create_template
|
14
|
+
Config.build_in_progress = false
|
13
15
|
end
|
14
16
|
|
15
17
|
private
|
@@ -34,41 +36,73 @@ class Generate
|
|
34
36
|
progress.increment unless silence
|
35
37
|
end
|
36
38
|
|
39
|
+
attr_accessor :mocks_created, :not_valid_models
|
37
40
|
def create_template
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
FileUtils.rm_rf("#{Config.mock_dir}/", secure: true)
|
42
|
-
FileUtils::mkdir_p Config.mock_dir unless File.directory? Config.mock_dir
|
41
|
+
@mocks_created = 0
|
42
|
+
@not_valid_models = 0
|
43
|
+
clean_up
|
43
44
|
generate_model_schema.each do |model|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
Config.logger.debug $!.backtrace
|
58
|
-
Config.logger.debug exception
|
59
|
-
Config.logger.info "Failed to load #{model.class_name} model."
|
60
|
-
next
|
61
|
-
end
|
62
|
-
mocks_created += 1
|
63
|
-
increment_progress
|
45
|
+
next unless generate_and_rescue(model)
|
46
|
+
end
|
47
|
+
exit_message
|
48
|
+
end
|
49
|
+
|
50
|
+
def generate_and_rescue(model)
|
51
|
+
begin
|
52
|
+
raise_if_is_exception!(model)
|
53
|
+
generate_mock(model)
|
54
|
+
increase_mocks_created
|
55
|
+
rescue Exception => exception
|
56
|
+
log_failed_mock(exception, model)
|
57
|
+
false
|
64
58
|
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def increase_mocks_created
|
62
|
+
@mocks_created += 1
|
63
|
+
increment_progress
|
64
|
+
end
|
65
|
+
|
66
|
+
def raise_if_is_exception!(model)
|
67
|
+
raise model if model.class.ancestors.include?(Exception)
|
68
|
+
end
|
69
|
+
|
70
|
+
def exit_message
|
65
71
|
progress.finish unless silence
|
66
72
|
Config.logger.info "Generated #{mocks_created} of #{model_count} mocks."
|
67
73
|
failed_mocks = (model_count - not_valid_models) - mocks_created
|
68
74
|
if failed_mocks > 0
|
69
75
|
puts "#{failed_mocks} mock(s) out of #{model_count} failed. See `log/active_mocker.log` for more info."
|
70
76
|
end
|
71
|
-
|
77
|
+
end
|
78
|
+
|
79
|
+
def generate_mock(model)
|
80
|
+
klass_str = generate_mock_string(model)
|
81
|
+
save_mock_file(klass_str, model)
|
82
|
+
log_save(model)
|
83
|
+
end
|
84
|
+
|
85
|
+
def log_failed_mock(exception, model)
|
86
|
+
Config.logger.debug $!.backtrace
|
87
|
+
Config.logger.debug exception
|
88
|
+
Config.logger.info "Failed to load #{model.class_name} model."
|
89
|
+
end
|
90
|
+
|
91
|
+
def log_save(model)
|
92
|
+
Config.logger.info "saving mock #{model.class_name} to #{Config.mock_dir}"
|
93
|
+
end
|
94
|
+
|
95
|
+
def save_mock_file(klass_str, model)
|
96
|
+
File.open(File.join(Config.mock_dir, "#{model.class_name.tableize.singularize}_mock.rb"), 'w').write(klass_str)
|
97
|
+
end
|
98
|
+
|
99
|
+
def generate_mock_string(model)
|
100
|
+
model.render(File.open(File.join(File.expand_path('../', __FILE__), 'mock_template.erb')).read, mock_append_name)
|
101
|
+
end
|
102
|
+
|
103
|
+
def clean_up
|
104
|
+
FileUtils.rm_rf("#{Config.mock_dir}/", secure: true) unless Config.generate_for_mock
|
105
|
+
FileUtils::mkdir_p Config.mock_dir unless File.directory? Config.mock_dir
|
72
106
|
end
|
73
107
|
|
74
108
|
def mock_append_name
|
@@ -275,6 +275,15 @@ class Base
|
|
275
275
|
ObjectInspect.new(self.class.name, attributes).to_s
|
276
276
|
end
|
277
277
|
|
278
|
+
# Will not allow attributes to be changed
|
279
|
+
#
|
280
|
+
# Will freeze attributes forever. Querying for the record again will not unfreeze it because records exist in memory
|
281
|
+
# and are not initialized upon a query. This behaviour differs from ActiveRecord, beware of any side effect this may
|
282
|
+
# have when using this method.
|
283
|
+
def freeze
|
284
|
+
@attributes.freeze; self
|
285
|
+
end
|
286
|
+
|
278
287
|
module PropertiesGetterAndSetter
|
279
288
|
|
280
289
|
# Returns the value of the attribute identified by <tt>attr_name</tt> after
|
@@ -16,7 +16,7 @@ module Mock
|
|
16
16
|
end
|
17
17
|
|
18
18
|
extend ::Forwardable
|
19
|
-
def_delegators :@collection, :take, :push, :clear, :first, :last, :concat, :replace, :uniq, :count, :size, :length, :empty?, :any?, :many?, :include?, :delete
|
19
|
+
def_delegators :@collection, :[], :take, :push, :clear, :first, :last, :concat, :replace, :uniq, :count, :size, :length, :empty?, :any?, :many?, :include?, :delete
|
20
20
|
alias_method :distinct, :uniq
|
21
21
|
|
22
22
|
def select(&block)
|
@@ -118,10 +118,10 @@ module Mock
|
|
118
118
|
# Person.find([7, 17]) # returns an array for objects with IDs in (7, 17)
|
119
119
|
# Person.find([1]) # returns an array for the object with ID = 1
|
120
120
|
#
|
121
|
-
# <tt>
|
121
|
+
# <tt>ActiveMocker::Mock::RecordNotFound</tt> will be raised if one or more ids are not found.
|
122
122
|
def find(ids)
|
123
123
|
results = [*ids].map do |id|
|
124
|
-
find_by!(id: id)
|
124
|
+
find_by!(id: id.to_i)
|
125
125
|
end
|
126
126
|
return new_relation(results) if ids.class == Array
|
127
127
|
results.first
|
@@ -17,16 +17,19 @@ module ActiveMocker
|
|
17
17
|
|
18
18
|
def sandbox_model
|
19
19
|
source = RubyParse.new(read_file)
|
20
|
-
|
21
|
-
|
22
|
-
end
|
23
|
-
|
24
|
-
unless source.has_parent_class?
|
25
|
-
raise ModelLoadError::HasNoParentClass.new("#{model_name}")
|
26
|
-
end
|
20
|
+
has_no_parent_class!(source)
|
21
|
+
get_non_active_record_parent_class(source)
|
27
22
|
source.modify_parent_class('ActiveMocker::ActiveRecord::Base')
|
28
23
|
end
|
29
24
|
|
25
|
+
def get_non_active_record_parent_class(source)
|
26
|
+
@parent_class = source.parent_class_name unless Config.model_base_classes.include?(source.parent_class_name)
|
27
|
+
end
|
28
|
+
|
29
|
+
def has_no_parent_class!(source)
|
30
|
+
raise ModelLoadError::HasNoParentClass.new("#{model_name}") unless source.has_parent_class?
|
31
|
+
end
|
32
|
+
|
30
33
|
def module_namespace
|
31
34
|
@module ||= Module.new
|
32
35
|
end
|
@@ -28,8 +28,6 @@ module ActiveMocker
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
|
32
|
-
|
33
31
|
class ModelSchema
|
34
32
|
|
35
33
|
class Assemble
|
@@ -185,14 +183,16 @@ module ActiveMocker
|
|
185
183
|
public
|
186
184
|
|
187
185
|
def models
|
188
|
-
|
186
|
+
models = '*'
|
187
|
+
models = Config.generate_for_mock.underscore if Config.generate_for_mock
|
188
|
+
Dir["#{Config.model_dir}/#{models}.rb"].map do |file|
|
189
189
|
Pathname.new(file).basename.to_s.sub('.rb', '')
|
190
190
|
end
|
191
191
|
end
|
192
192
|
|
193
193
|
def get_model(model_file_name)
|
194
194
|
model = ModelReader.new.parse(model_file_name)
|
195
|
-
raise ModelLoadError::General.new(model_file_name) unless model
|
195
|
+
raise ModelLoadError::General.new(model_file_name) unless model
|
196
196
|
model
|
197
197
|
end
|
198
198
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_mocker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.
|
4
|
+
version: 1.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dustin Zeisler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -178,34 +178,6 @@ dependencies:
|
|
178
178
|
- - "~>"
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '3.5'
|
181
|
-
- !ruby/object:Gem::Dependency
|
182
|
-
name: mutant
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
184
|
-
requirements:
|
185
|
-
- - "~>"
|
186
|
-
- !ruby/object:Gem::Version
|
187
|
-
version: '0.5'
|
188
|
-
type: :development
|
189
|
-
prerelease: false
|
190
|
-
version_requirements: !ruby/object:Gem::Requirement
|
191
|
-
requirements:
|
192
|
-
- - "~>"
|
193
|
-
- !ruby/object:Gem::Version
|
194
|
-
version: '0.5'
|
195
|
-
- !ruby/object:Gem::Dependency
|
196
|
-
name: mutant-rspec
|
197
|
-
requirement: !ruby/object:Gem::Requirement
|
198
|
-
requirements:
|
199
|
-
- - "~>"
|
200
|
-
- !ruby/object:Gem::Version
|
201
|
-
version: '0.5'
|
202
|
-
type: :development
|
203
|
-
prerelease: false
|
204
|
-
version_requirements: !ruby/object:Gem::Requirement
|
205
|
-
requirements:
|
206
|
-
- - "~>"
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
version: '0.5'
|
209
181
|
- !ruby/object:Gem::Dependency
|
210
182
|
name: fuubar
|
211
183
|
requirement: !ruby/object:Gem::Requirement
|