letters 0.2.7 → 0.3.0

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.
data/README.md CHANGED
@@ -307,4 +307,14 @@ The `o` method takes options, too, so you can add a prefix message to the output
307
307
  </tr>
308
308
  </table>
309
309
 
310
- See full documentation at http://lettersrb.com/api
310
+ See the [full documentation](http://lettersrb.com/api) for examples and more detailed explanations.
311
+
312
+ ### Configuration ###
313
+
314
+ Lastly, you can tune and tweak each Letters method to default to your own tastes. Want to name put files somewhere else? No problem. Don't like YAML? Default `f` to use Pretty Print instead! The world of defaults is your oyster.
315
+
316
+ ```ruby
317
+ Letters.config do
318
+ f :format => "pp", :name => "my-special-file"
319
+ end
320
+ ```
@@ -0,0 +1,44 @@
1
+ require "letters/assertion_error"
2
+
3
+ module Letters
4
+ def self.defaults
5
+ defaults = {
6
+ a: { error_class: Letters::AssertionError },
7
+ d1: { dup: false },
8
+ d2: { format: "ap" },
9
+ f: { format: "yaml", name: "log" },
10
+ k: { max: 0 },
11
+ l: { level: "info", format: "yaml" },
12
+ o: { format: "ap", stream: $stdout },
13
+ t: { time_format: "millis" }
14
+ }
15
+
16
+ defaults.tap do |hash|
17
+ hash.default_proc = lambda {|h, k| h[k] = Hash.new }
18
+ end
19
+ end
20
+
21
+ def self.user_defaults
22
+ @user_defaults ||= Hash.new {|h, k| h[k] = Hash.new }
23
+ end
24
+
25
+ def self.defaults_with(letter, opts={})
26
+ defaults[letter].merge(user_defaults[letter]).merge(opts)
27
+ end
28
+
29
+ def self.reset_config!
30
+ user_defaults.clear
31
+ end
32
+
33
+ def self.config(&block)
34
+ Letters::Config.class_eval(&block)
35
+ end
36
+
37
+ module Config
38
+ ("a".."z").each do |letter|
39
+ define_singleton_method(letter) do |opts={}|
40
+ Letters.user_defaults[letter.to_sym] = opts
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,10 +1,10 @@
1
+ require "letters/config"
1
2
  require "letters/helpers"
2
3
  require "letters/diff"
3
- require "letters/assertion_error"
4
+ require "letters/time_formats"
4
5
  require "letters/empty_error"
5
6
  require "letters/kill_error"
6
7
  require "letters/nil_error"
7
- require "letters/time_formats"
8
8
 
9
9
  module Letters
10
10
  module CoreExt
@@ -12,7 +12,7 @@ module Letters
12
12
 
13
13
  # Assert
14
14
  def a(opts={}, &block)
15
- opts = { error_class: AssertionError }.merge opts
15
+ opts = Letters.defaults_with(:a, opts)
16
16
  tap do |o|
17
17
  Helpers.message opts
18
18
  if block_given? && !o.instance_eval(&block)
@@ -52,8 +52,7 @@ module Letters
52
52
 
53
53
  # Diff 2
54
54
  def d2(opts={})
55
- require "awesome_print"
56
- opts = { format: "ap" }.merge opts
55
+ opts = Letters.defaults_with(:d2, opts)
57
56
  tap do |o|
58
57
  diff = Helpers.diff(Letters.object_for_diff, o)
59
58
  Helpers.message opts
@@ -73,7 +72,7 @@ module Letters
73
72
 
74
73
  # File
75
74
  def f(opts={})
76
- opts = { format: "yaml", name: "log" }.merge opts
75
+ opts = Letters.defaults_with(:f, opts)
77
76
  tap do |o|
78
77
  suffixes = [""] + (1..50).to_a
79
78
  deduper = suffixes.detect {|x| !File.directory? "#{opts[:name]}#{x}" }
@@ -96,7 +95,7 @@ module Letters
96
95
 
97
96
  # Kill
98
97
  def k(opts={})
99
- opts = { max: 0 }.merge(opts)
98
+ opts = Letters.defaults_with(:k, opts)
100
99
  opts.merge! :error_class => KillError
101
100
  tap do |o|
102
101
  @letters_kill_count ||= 0
@@ -109,7 +108,7 @@ module Letters
109
108
 
110
109
  # Log
111
110
  def l(opts={})
112
- opts = { level: "info", format: "yaml" }.merge opts
111
+ opts = Letters.defaults_with(:l, opts)
113
112
  tap do |o|
114
113
  begin
115
114
  logger.send(opts[:level], opts[:message]) if opts[:message]
@@ -141,7 +140,7 @@ module Letters
141
140
 
142
141
  # Print to STDOUT
143
142
  def o(opts={}, &block)
144
- opts = { format: "ap", stream: $stdout }.merge opts
143
+ opts = Letters.defaults_with(:o, opts)
145
144
  tap do |o|
146
145
  Helpers.message opts
147
146
  obj = block_given? ? o.instance_eval(&block) : o
@@ -167,7 +166,7 @@ module Letters
167
166
 
168
167
  # Timestamp
169
168
  def t(opts={})
170
- opts = { time_format: "millis" }.merge opts
169
+ opts = Letters.defaults_with(:t, opts)
171
170
  tap do
172
171
  Helpers.message opts
173
172
  Helpers.out Time.now.to_s(opts[:time_format].to_sym), opts
@@ -1,3 +1,3 @@
1
1
  module Letters
2
- VERSION = "0.2.7"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -0,0 +1,33 @@
1
+ require "spec_helper"
2
+
3
+ module Letters
4
+ describe "configuration" do
5
+ let(:hash) { { a: "b" } }
6
+
7
+ before do
8
+ Letters.config do
9
+ f :format => "pp"
10
+ end
11
+ File.exist?("log").should be_false
12
+ end
13
+
14
+ after do
15
+ FileUtils.rm "log"
16
+ end
17
+
18
+ describe ".config" do
19
+ it "allows default argument configuration" do
20
+ hash.f
21
+ File.read("log").should == hash.pretty_inspect
22
+ end
23
+ end
24
+
25
+ describe ".reset_config!" do
26
+ it "clears out the config hash" do
27
+ Letters.reset_config!
28
+ hash.f
29
+ File.read("log").should == hash.to_yaml
30
+ end
31
+ end
32
+ end
33
+ end
@@ -152,7 +152,7 @@ module Letters
152
152
  end
153
153
 
154
154
  it 'does not raises if number of calls are below max' do
155
- lambda{ hash.k(max: 1) }.should_not raise_error
155
+ lambda { hash.k(max: 1) }.should_not raise_error
156
156
  end
157
157
 
158
158
  it 'raises a KillError if number of calls is above max' do
@@ -1,3 +1,4 @@
1
1
  require "letters"
2
2
  require "awesome_print"
3
3
  require "timecop"
4
+ require "fileutils"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: letters
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-06 00:00:00.000000000 Z
12
+ date: 2012-10-07 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: awesome_print
16
- requirement: &70220468145960 !ruby/object:Gem::Requirement
16
+ requirement: &70172816319040 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70220468145960
24
+ version_requirements: *70172816319040
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: activesupport
27
- requirement: &70220468145520 !ruby/object:Gem::Requirement
27
+ requirement: &70172816318600 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70220468145520
35
+ version_requirements: *70172816318600
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: xml-simple
38
- requirement: &70220468145100 !ruby/object:Gem::Requirement
38
+ requirement: &70172816318180 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70220468145100
46
+ version_requirements: *70172816318180
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: colorize
49
- requirement: &70220468144680 !ruby/object:Gem::Requirement
49
+ requirement: &70172816317760 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70220468144680
57
+ version_requirements: *70172816317760
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: debugger
60
- requirement: &70220468144260 !ruby/object:Gem::Requirement
60
+ requirement: &70172816317340 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70220468144260
68
+ version_requirements: *70172816317340
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: timecop
71
- requirement: &70220468143840 !ruby/object:Gem::Requirement
71
+ requirement: &70172816316920 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70220468143840
79
+ version_requirements: *70172816316920
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rspec
82
- requirement: &70220468143420 !ruby/object:Gem::Requirement
82
+ requirement: &70172816316500 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70220468143420
90
+ version_requirements: *70172816316500
91
91
  description: Letters brings Ruby debugging into the 21st century. It leverages print,
92
92
  the debugger, control transfer, even computer beeps to let you see into your code's
93
93
  state.
@@ -97,6 +97,7 @@ extensions: []
97
97
  extra_rdoc_files: []
98
98
  files:
99
99
  - lib/letters/assertion_error.rb
100
+ - lib/letters/config.rb
100
101
  - lib/letters/core_ext.rb
101
102
  - lib/letters/diff.rb
102
103
  - lib/letters/empty_error.rb
@@ -113,6 +114,7 @@ files:
113
114
  - README.md
114
115
  - COPYING
115
116
  - Gemfile
117
+ - spec/letters/config_spec.rb
116
118
  - spec/letters/core_ext_spec.rb
117
119
  - spec/letters/helpers_spec.rb
118
120
  - spec/letters/patch/core_spec.rb
@@ -145,6 +147,7 @@ signing_key:
145
147
  specification_version: 3
146
148
  summary: A tiny debugging library for Ruby
147
149
  test_files:
150
+ - spec/letters/config_spec.rb
148
151
  - spec/letters/core_ext_spec.rb
149
152
  - spec/letters/helpers_spec.rb
150
153
  - spec/letters/patch/core_spec.rb