pretentious 0.0.4 → 0.0.6
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/README.md +120 -1
- data/lib/pretentious.rb +11 -3
- data/lib/pretentious/deconstructor.rb +0 -1
- data/lib/pretentious/version.rb +1 -1
- data/run_test.sh +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 87f10781f0769264b1c39fa2c34463332546ba6a
|
4
|
+
data.tar.gz: ffac481a78ad14c7f5bd62533f135b17aab304d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 54a6a2fdc2985b0920b61535f58dbfb4288315cc7c54f7d808dd68a587824a12b5f12aa0400c5fff508a23f537d259efc9e47b835e422856ac0c93f46b377ac4
|
7
|
+
data.tar.gz: 0fc245c408de5c2f667e2c7d17d859f01aec59d54d12fa173e88a7d57b049fbdd7792843838e5a5ae65ea026d031aed92c579dbdb11209e76a4fbfa5b55224fd
|
data/README.md
CHANGED
@@ -9,7 +9,8 @@ you've written in a straightfoward manner!
|
|
9
9
|
|
10
10
|
On a serious note, this gem allows you to generate tests template much better than those generated by default
|
11
11
|
for various frameworks. It is also useful for "recording" current behavior of existing components in order
|
12
|
-
to prepare for refactoring.
|
12
|
+
to prepare for refactoring. As a bonus it also exposes an Object Deconstructor which allows you, given
|
13
|
+
any object, to obtain a ruby code on how it was created.
|
13
14
|
|
14
15
|
## Installation
|
15
16
|
|
@@ -306,6 +307,124 @@ should generate the following in rspec
|
|
306
307
|
# TestClass1#something_is_wrong when passed should return StandardError
|
307
308
|
expect { @fixture.something_is_wrong }.to raise_error
|
308
309
|
```
|
310
|
+
## Object Deconstruction Utility
|
311
|
+
|
312
|
+
As Pretentious as the gem is, there are other uses other than generating tests specs. Tools are also available to
|
313
|
+
deconstruct objects. Object deconstruction basically means that the components used to create and initialized are
|
314
|
+
extracted from an object until only primitive types remain. The pretentious gem will also generate the
|
315
|
+
necessary ruby code to create one form scracth. Below is an example:
|
316
|
+
|
317
|
+
Given an instance of an activerecord base connection for example
|
318
|
+
|
319
|
+
```ruby
|
320
|
+
ActiveRecord::Base.connection
|
321
|
+
```
|
322
|
+
|
323
|
+
running deconstruct would generate:
|
324
|
+
|
325
|
+
```ruby
|
326
|
+
var_70301267513280 = #<File:0x007fe094279f80>
|
327
|
+
logger = ActiveSupport::Logger.new(var_70301267513280)
|
328
|
+
connection_options = ["localhost", "root", "password", "jclviste_test", nil, nil, 131074]
|
329
|
+
config = {adapter: "mysql", encoding: "utf8", reconnect: false, database: "jclviste_test", pool: 5, username: "root", password: "password", host: "localhost"}
|
330
|
+
var_70301281665660 = ActiveRecord::ConnectionAdapters::MysqlAdapter.new(connection, logger, connection_options, config)
|
331
|
+
```
|
332
|
+
Note that
|
333
|
+
|
334
|
+
```ruby
|
335
|
+
var_70301267513280 = #<File:0x007fe094279f80>
|
336
|
+
```
|
337
|
+
|
338
|
+
because the pretentious gem was not able to capture its init arguments.
|
339
|
+
|
340
|
+
### How to use
|
341
|
+
|
342
|
+
Simply call:
|
343
|
+
|
344
|
+
Pretentious.install_watcher
|
345
|
+
|
346
|
+
before all your objects are initalized. This will add the following methods to all objects:
|
347
|
+
|
348
|
+
```ruby
|
349
|
+
object._deconstruct
|
350
|
+
object._deconstruct_to_ruby
|
351
|
+
```
|
352
|
+
The _deconstruct method generates a raw deconstruction data structure using by the _deconstruct_to_ruby method.
|
353
|
+
Of course _deconstruct_to_ruby generates the ruby code necessary to create the object!
|
354
|
+
|
355
|
+
### Using the Object deconstruct in rails
|
356
|
+
|
357
|
+
In your Gemfile, add the pretentious gem.
|
358
|
+
|
359
|
+
```ruby
|
360
|
+
group :test do
|
361
|
+
gem 'pretentious'
|
362
|
+
end
|
363
|
+
```
|
364
|
+
|
365
|
+
The do a bundle
|
366
|
+
|
367
|
+
$ bundle
|
368
|
+
|
369
|
+
|
370
|
+
Note: It is advisable to add it only in the test or development group!
|
371
|
+
The way it logs objects would probably prevent anything from being GC'ed.
|
372
|
+
|
373
|
+
For rails, including inside config.ru is sufficient to capture most objects:
|
374
|
+
|
375
|
+
```ruby
|
376
|
+
#config.ru
|
377
|
+
require File.expand_path('../boot', __FILE__)
|
378
|
+
|
379
|
+
require 'rails/all'
|
380
|
+
# Require the gems listed in Gemfile, including any gems
|
381
|
+
# you've limited to :test, :development, or :production.
|
382
|
+
Bundler.require(*Rails.groups)
|
383
|
+
|
384
|
+
if Rails.env.test?
|
385
|
+
puts "watching new instances"
|
386
|
+
Pretentious::Generator.watch_new_instances
|
387
|
+
end
|
388
|
+
|
389
|
+
module App
|
390
|
+
class Application < Rails::Application
|
391
|
+
# ..... stuf ......
|
392
|
+
|
393
|
+
end
|
394
|
+
end
|
395
|
+
```
|
396
|
+
|
397
|
+
boot up the rails console and blow your mind:
|
398
|
+
|
399
|
+
```
|
400
|
+
$ rails c -e test
|
401
|
+
watching new instances
|
402
|
+
Loading test environment (Rails 4.2.4)
|
403
|
+
irb: warn: can't alias context from irb_context.
|
404
|
+
2.2.0 :001 > puts ActiveRecord::Base.connection._deconstruct_to_ruby
|
405
|
+
connection = #<Mysql:0x007fe095d785c0>
|
406
|
+
var_70301267513280 = #<File:0x007fe094279f80>
|
407
|
+
logger = ActiveSupport::Logger.new(var_70301267513280)
|
408
|
+
connection_options = ["localhost", "root", "password", "app_test", nil, nil, 131074]
|
409
|
+
config = {adapter: "mysql", encoding: "utf8", reconnect: false, database: "app_test", pool: 5, username: "root", password: "password", host: "localhost"}
|
410
|
+
var_70301281665660 = ActiveRecord::ConnectionAdapters::MysqlAdapter.new(connection, logger, connection_options, config)
|
411
|
+
=> nil
|
412
|
+
2.2.0 :004 > w = User.where(id: 1)
|
413
|
+
User Load (2.8ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = ? [["id", 1]]
|
414
|
+
=> #<ActiveRecord::Relation []>
|
415
|
+
2.2.0 :005 > w._deconstruct_to_ruby
|
416
|
+
=> "klass = User\nvar_70301317929300 = \"users\"\ntable = Arel::Table.new(var_70301317929300, klass)\nvar_70301339518120 = User::ActiveRecord_Relation.new(klass, table)\n"
|
417
|
+
2.2.0 :006 > puts w._deconstruct_to_ruby
|
418
|
+
klass = User
|
419
|
+
var_70301317929300 = "users"
|
420
|
+
table = Arel::Table.new(var_70301317929300, klass)
|
421
|
+
var_70301339518120 = User::ActiveRecord_Relation.new(klass, table)
|
422
|
+
=> nil
|
423
|
+
2.2.0 :007 >
|
424
|
+
```
|
425
|
+
|
426
|
+
Note: There are some objects it will fails to capture and as such those would not deconstruct properly.
|
427
|
+
|
309
428
|
|
310
429
|
## Things to do after
|
311
430
|
|
data/lib/pretentious.rb
CHANGED
@@ -18,6 +18,14 @@ module Pretentious
|
|
18
18
|
@results
|
19
19
|
end
|
20
20
|
|
21
|
+
def self.install_watcher
|
22
|
+
Pretentious::Generator.watch_new_instances
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.uninstall_watcher
|
26
|
+
Pretentious::Generator.unwatch_new_instances
|
27
|
+
end
|
28
|
+
|
21
29
|
def self.value_ize(value, let_variables, declared_names)
|
22
30
|
if (value.kind_of? String)
|
23
31
|
"#{value.dump}"
|
@@ -397,9 +405,9 @@ module Pretentious
|
|
397
405
|
p = params[index]
|
398
406
|
if p.size > 1
|
399
407
|
@_variable_names[arg.object_id] = p[1].to_s
|
400
|
-
end
|
408
|
+
end unless p.nil?
|
401
409
|
index+=1
|
402
|
-
end
|
410
|
+
end unless args.nil?
|
403
411
|
|
404
412
|
end
|
405
413
|
|
@@ -412,7 +420,7 @@ module Pretentious
|
|
412
420
|
end
|
413
421
|
|
414
422
|
def _deconstruct_to_ruby(indentation = 0)
|
415
|
-
Pretentious::Deconstructor.new().deconstruct_to_ruby(indentation, _variable_map, self)
|
423
|
+
Pretentious::Deconstructor.new().deconstruct_to_ruby(indentation, _variable_map, {}, self)
|
416
424
|
end
|
417
425
|
|
418
426
|
end
|
@@ -154,7 +154,6 @@ class Pretentious::Deconstructor
|
|
154
154
|
target_objects.each { |target_object|
|
155
155
|
variable_map.merge!(target_object._variable_map) if target_object.methods.include?(:_variable_map) && !target_object._variable_map.nil?
|
156
156
|
}
|
157
|
-
|
158
157
|
declarations, dependencies = deconstruct *target_objects
|
159
158
|
declarations[:declaration].each do |d|
|
160
159
|
|
data/lib/pretentious/version.rb
CHANGED
data/run_test.sh
CHANGED