sugar-high 0.5.5 → 0.6.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.
Files changed (54) hide show
  1. data/README.textile +2 -29
  2. data/VERSION +1 -1
  3. data/lib/sugar-high/class_ext.rb +2 -133
  4. data/lib/sugar-high/file.rb +10 -11
  5. data/lib/sugar-high/file_ext.rb +13 -11
  6. data/lib/sugar-high/rails/concerns.rb +10 -4
  7. data/spec/sugar-high/file_spec.rb +26 -28
  8. data/spec/sugar-high/rails/concerns_spec.rb +31 -1
  9. data/spec/sugar-high/rails/fixture_user/scopes.rb +4 -0
  10. data/spec/sugar-high/rails/fixture_user/validations.rb +4 -0
  11. data/spec/sugar-high/rails/shared/associations.rb +1 -0
  12. data/spec/sugar-high/rails/shared/caching.rb +4 -0
  13. data/sugar-high.gemspec +6 -42
  14. metadata +19 -55
  15. data/lib/sugar-high/file_mutate.rb +0 -2
  16. data/lib/sugar-high/file_mutate/append_content.rb +0 -17
  17. data/lib/sugar-high/file_mutate/delete.rb +0 -29
  18. data/lib/sugar-high/file_mutate/insert_content.rb +0 -62
  19. data/lib/sugar-high/file_mutate/mutate.rb +0 -57
  20. data/lib/sugar-high/file_mutate/overwrite_content.rb +0 -17
  21. data/lib/sugar-high/file_mutate/remove_content.rb +0 -33
  22. data/lib/sugar-high/file_mutate/replace_content.rb +0 -45
  23. data/lib/sugar-high/file_mutation.rb +0 -58
  24. data/sandbox/test_routes_mutate.rb +0 -8
  25. data/spec/auto_load_blank_root.rb +0 -3
  26. data/spec/autoload_blank_root.rb +0 -3
  27. data/spec/autoload_blank_root/hello.rb +0 -6
  28. data/spec/autoload_blank_root/sailor.rb +0 -7
  29. data/spec/fixtures/application_file.rb +0 -6
  30. data/spec/fixtures/autoload_modules.rb +0 -3
  31. data/spec/fixtures/autoload_modules/subdir/first.rb +0 -7
  32. data/spec/fixtures/autoload_modules/subdir/second.rb +0 -5
  33. data/spec/fixtures/autoload_modules/subdir/third.rb +0 -4
  34. data/spec/fixtures/autoload_modules_root.rb +0 -3
  35. data/spec/fixtures/autoload_modules_root/first.rb +0 -7
  36. data/spec/fixtures/autoload_modules_root/second.rb +0 -4
  37. data/spec/fixtures/autoload_modules_root/third.rb +0 -7
  38. data/spec/fixtures/autoload_modulez.rb +0 -4
  39. data/spec/fixtures/autoload_modulez/first.rb +0 -7
  40. data/spec/fixtures/autoload_modulez/second.rb +0 -5
  41. data/spec/fixtures/autoload_modulez/third_one_here.rb +0 -4
  42. data/spec/fixtures/class_file.rb +0 -22
  43. data/spec/fixtures/class_file.txt +0 -0
  44. data/spec/fixtures/content_file.txt +0 -1
  45. data/spec/fixtures/routes_file.rb +0 -85
  46. data/spec/sugar-high/class_ext_spec.rb +0 -189
  47. data/spec/sugar-high/file/file_dsl_spec.rb +0 -4
  48. data/spec/sugar-high/file_mutate/append_content_spec.rb +0 -61
  49. data/spec/sugar-high/file_mutate/delete_spec.rb +0 -47
  50. data/spec/sugar-high/file_mutate/insert_before_last_spec.rb +0 -56
  51. data/spec/sugar-high/file_mutate/insert_content_spec.rb +0 -111
  52. data/spec/sugar-high/file_mutate/overwrite_content_spec.rb +0 -80
  53. data/spec/sugar-high/file_mutate/remove_content_spec.rb +0 -109
  54. data/spec/sugar-high/file_mutate/replace_content_spec.rb +0 -33
@@ -1,17 +0,0 @@
1
- module SugarHigh
2
- module FileMutate
3
- module OverwriteContent
4
- def overwrite content=nil, &block
5
- File.overwrite self.path, content, &block
6
- end
7
-
8
- module ClassMethods
9
- def overwrite file, content=nil, &block
10
- File.open(get_filepath(file).path, 'w') do |f|
11
- f.puts content ||= yield
12
- end
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,33 +0,0 @@
1
- module SugarHigh
2
- module FileMutate
3
- module RemoveContent
4
- def remove_content options=nil, &block
5
- opt_str = case options
6
- when String
7
- options
8
- when Hash
9
- content = options[:content] || options[:where]
10
- raise ArgumentError, "Bad :content value in Hash" if !content || content.strip.empty?
11
- content.strip
12
- else
13
- raise ArgumentError, "non-block argument must be either String or Hash with a :content option" if !block
14
- end
15
- content = block ? yield : opt_str
16
-
17
- File.remove_content_from self.path, :content => content, :with => '', &block
18
- end
19
- alias_method :remove, :remove_content
20
-
21
- module ClassMethods
22
- def remove_from file_name, content=nil, &block
23
- content ||= yield
24
- replace_content_from file_name, :content => content, :with => '', &block
25
- end
26
-
27
- def remove_content_from file_name, options = {}, &block
28
- replace_content_from file_name, options.merge(:with => ''), &block
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,45 +0,0 @@
1
- module SugarHigh
2
- module FileMutate
3
- module ReplaceContent
4
- def replace_content options = {}, &block
5
- File.replace_content_from self.path, options, &block
6
- end
7
-
8
- module ClassMethods
9
- # replaces content found at replacement_expr with content resulting from yielding block
10
- # File.replace_content_from 'myfile.txt', where => /HelloWorld/, with => 'GoodBye'
11
- def replace_content_from file_name, options = {}, &block
12
- replacement_expr = options[:where] || options[:content]
13
- new_content = options[:with]
14
-
15
- begin
16
- replacement_expr = replacement_expr.to_regexp
17
- rescue
18
- raise ArgumentError, "Content to be replaced must be specified as either a String or Regexp in a :where or :content option"
19
- end
20
-
21
- file = get_file file_name
22
-
23
- # get existing file content
24
- content = file.read
25
-
26
- # return nil if no mathing replacement found
27
- return nil if !(content =~ replacement_expr)
28
-
29
- new_content ||= yield if block
30
-
31
- raise ArgumentError, "Content to be replaced with must be specified as a :with option or as a block" if !new_content
32
-
33
- # remove content that matches expr, by replacing with empty
34
- mutated_content = content.gsub replacement_expr, new_content
35
-
36
- # write mutated content as new file
37
- file.overwrite mutated_content
38
-
39
- true # signal success!
40
- end
41
- alias_method :replace_content_in, :replace_content_from
42
- end
43
- end
44
- end
45
- end
@@ -1,58 +0,0 @@
1
- require 'sugar-high/blank'
2
- require 'sugar-high/arguments'
3
- require 'sugar-high/path'
4
- require 'sugar-high/regexp'
5
- require 'sugar-high/string'
6
- require 'sugar-high/file'
7
- require 'sugar-high/array'
8
-
9
- require 'sugar-high/file_mutate/delete'
10
- require 'sugar-high/file_mutate/overwrite_content'
11
- require 'sugar-high/file_mutate/append_content'
12
- require 'sugar-high/file_mutate/remove_content'
13
- require 'sugar-high/file_mutate/replace_content'
14
- require 'sugar-high/file_mutate/insert_content'
15
-
16
- require 'sugar-high/class_ext'
17
- require 'active_support/inflector'
18
-
19
- module SugarHigh
20
- module FileMutate
21
- autoload :Mutate, 'sugar-high/file_mutate/mutate'
22
- autoload :Delete, 'sugar-high/file_mutate/delete'
23
- autoload :AppendContent, 'sugar-high/file_mutate/append_content'
24
- autoload :InsertContent, 'sugar-high/file_mutate/insert_content'
25
- autoload :OverwriteContent, 'sugar-high/file_mutate/overwrite_content'
26
- autoload :RemoveContent, 'sugar-high/file_mutate/remove_content'
27
- autoload :ReplaceContent, 'sugar-high/file_mutate/replace_content'
28
- end
29
- end
30
-
31
-
32
- class File
33
- def self.mutate_ext name
34
- if name == :all
35
- add_mutate_exts mutate_apis
36
- return
37
- end
38
- raise ArgumentError, "Unknown FileMutate API: #{name}, must be one of: #{mutate_apis}" if !mutate_apis.include? name
39
- add_mutate_exts [:mutate, name]
40
- end
41
-
42
- protected
43
-
44
- def self.mutate_apis
45
- [:delete, :mutate, :append_content, :insert_content, :overwrite_content, :remove_content, :replace_content]
46
- end
47
-
48
- def self.add_mutate_exts *names
49
- names.flat_uniq.each do |api|
50
- ns = "SugarHigh::FileMutate::#{api.to_s.camelize}"
51
- begin
52
- self.send :include, ns.constantize
53
- self.extend "#{ns}::ClassMethods".constantize
54
- end
55
- end
56
- end
57
-
58
- end
@@ -1,8 +0,0 @@
1
- s = %q{content: Fixtures::Application.routes.draw do
2
- resources :users}
3
-
4
- marker = 'routes.draw do'
5
-
6
- puts "esc marker: #{Regexp.escape(marker.to_s)}"
7
-
8
- puts (s =~ /#{Regexp.escape(marker.to_s)}/)
@@ -1,3 +0,0 @@
1
- module AutoLoadBlankRoot
2
- autoload_modules :HelloSailor
3
- end
@@ -1,3 +0,0 @@
1
- module AutoloadBlankRoot
2
- autoload_modules :Hello
3
- end
@@ -1,6 +0,0 @@
1
- module AutoloadBlankRoot
2
- module Hello
3
- def self.test
4
- end
5
- end
6
- end
@@ -1,7 +0,0 @@
1
- module AutoLoadBlankRoot
2
- module HelloSailor
3
- def self.test
4
- "test"
5
- end
6
- end
7
- end
@@ -1,6 +0,0 @@
1
- # Load the rails application
2
- require File.expand_path('../application', __FILE__)
3
-
4
- # Initialize the rails application
5
- Fixtures::Application.initialize!
6
- hello
@@ -1,3 +0,0 @@
1
- module AutoloadModules
2
- autoload_modules :First, :Second, :Third, :from => 'fixtures/autoload_modules/subdir'
3
- end
@@ -1,7 +0,0 @@
1
- module AutoloadModules
2
- module First
3
- def test
4
- puts "here is the test"
5
- end
6
- end
7
- end
@@ -1,5 +0,0 @@
1
- module AutoloadModules
2
- class Second
3
- extend AutoloadModules::First
4
- end
5
- end
@@ -1,4 +0,0 @@
1
- module AutoloadModules
2
- class Third < AutoloadModules::Second
3
- end
4
- end
@@ -1,3 +0,0 @@
1
- module AutoloadModulesRoot
2
- autoload_modules :First, :Second, :Third
3
- end
@@ -1,7 +0,0 @@
1
- module AutoloadModulesRoot
2
- module First
3
- def test
4
- puts "here is the test"
5
- end
6
- end
7
- end
@@ -1,4 +0,0 @@
1
- module AutoloadModulesRoot
2
- class Second
3
- end
4
- end
@@ -1,7 +0,0 @@
1
- module AutoloadModulesRoot
2
- class Third
3
- def self.test
4
- puts "here is the test"
5
- end
6
- end
7
- end
@@ -1,4 +0,0 @@
1
- module AutoloadModulez
2
- autoload_modules :First, :Second, :ThirdOneHere, :root => 'fixtures'
3
- end
4
-
@@ -1,7 +0,0 @@
1
- module AutoloadModulez
2
- module First
3
- def test
4
- puts "here is the test"
5
- end
6
- end
7
- end
@@ -1,5 +0,0 @@
1
- module AutoloadModulez
2
- class Second
3
- extend AutoloadModulez::First
4
- end
5
- end
@@ -1,4 +0,0 @@
1
- module AutoloadModulez
2
- class ThirdOneHere < AutoloadModulez::Second
3
- end
4
- end
@@ -1,22 +0,0 @@
1
- class Abc
2
- def begin
3
- end
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
- end
File without changes
@@ -1 +0,0 @@
1
- {:with=>"New content"}
@@ -1,85 +0,0 @@
1
- Fixtures::Application.routes.draw do
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
- resources :users
28
-
29
- # The priority is based upon order of creation:
30
- # first created -> highest priority.
31
-
32
- # Sample of regular route:
33
- # match 'products/:id' => 'catalog#view'
34
- # Keep in mind you can assign values other than :controller and :action
35
-
36
- # Sample of named route:
37
- # match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase
38
- # This route can be invoked with purchase_url(:id => product.id)
39
-
40
- # Sample resource route (maps HTTP verbs to controller actions automatically):
41
- # resources :products
42
-
43
- # Sample resource route with options:
44
- # resources :products do
45
- # member do
46
- # get 'short'
47
- # post 'toggle'
48
- # end
49
- #
50
- # collection do
51
- # get 'sold'
52
- # end
53
- # end
54
-
55
- # Sample resource route with sub-resources:
56
- # resources :products do
57
- # resources :comments, :sales
58
- # resource :seller
59
- # end
60
-
61
- # Sample resource route with more complex sub-resources
62
- # resources :products do
63
- # resources :comments
64
- # resources :sales do
65
- # get 'recent', :on => :collection
66
- # end
67
- # end
68
-
69
- # Sample resource route within a namespace:
70
- # namespace :admin do
71
- # # Directs /admin/products/* to Admin::ProductsController
72
- # # (app/controllers/admin/products_controller.rb)
73
- # resources :products
74
- # end
75
-
76
- # You can have the root of your site routed with "root"
77
- # just remember to delete public/index.html.
78
- # root :to => "welcome#index"
79
-
80
- # See how all your routes lay out with "rake routes"
81
-
82
- # This is a legacy wild controller route that's not recommended for RESTful applications.
83
- # Note: This route will make all actions in every controller accessible via GET requests.
84
- # match ':controller(/:action(/:id(.:format)))'
85
- end
@@ -1,189 +0,0 @@
1
- require 'spec_helper'
2
- require 'sugar-high/class_ext'
3
-
4
- class Trial
5
- include ClassExt
6
- end
7
-
8
- class Hello
9
- end
10
-
11
- module GoodBye
12
- module Alpha
13
- module Beta
14
- end
15
- end
16
- end
17
-
18
- module First
19
- module ClassMethods
20
- def class_method
21
- end
22
- end
23
-
24
- module InstanceMethods
25
- def instance_method
26
- end
27
- end
28
- end
29
-
30
- module Second
31
- include_and_extend First
32
- end
33
-
34
- class Third
35
- include_and_extend Second
36
- end
37
-
38
- def trial
39
- @trial ||= Trial.new
40
- end
41
-
42
- describe Module do
43
-
44
- describe "#include_and_extend" do
45
- it "should include class methods directly" do
46
- Second.should respond_to(:class_method)
47
- end
48
-
49
-
50
- it "should not include class methods indirectly" do
51
- Third.should_not respond_to(:class_method)
52
- end
53
-
54
- it "should include class methods" do
55
- Third.new.should respond_to(:instance_method)
56
- end
57
- end
58
-
59
- describe "#autoload_modules" do
60
- it "should autoload modules using :from => path" do
61
- require 'fixtures/autoload_modules'
62
- AutoloadModules::Third.should respond_to(:test)
63
- end
64
-
65
- it "should autoload modules from __FILE__'s dir if :from is omitted'" do
66
- require 'fixtures/autoload_modulez'
67
- AutoloadModulez::ThirdOneHere.should respond_to(:test)
68
- end
69
-
70
- context 'using AutoLoader.root' do
71
- it 'empty root' do
72
- AutoLoader.root = ''
73
- require 'autoload_blank_root'
74
- AutoloadBlankRoot::Hello.should respond_to(:test)
75
- end
76
-
77
- it 'should autoload modules using ClassExt#autoload_root' do
78
- AutoLoader.root = 'fixtures'
79
- require 'fixtures/autoload_modules_root'
80
- AutoloadModulesRoot::Third.should respond_to(:test)
81
- end
82
- end
83
-
84
- context 'using AutoLoader.namespaces' do
85
- it 'empty root' do
86
- AutoLoader.root = ''
87
- AutoLoader.namespaces= {:AutoLoadBlankRoot => 'autoload_blank_root', :HelloSailor => 'sailor'}
88
- require 'auto_load_blank_root'
89
- AutoLoadBlankRoot::HelloSailor.should respond_to(:test)
90
- end
91
- end
92
- end
93
- end
94
-
95
- describe ClassExt do
96
- describe '#try_module' do
97
- it "should return false if no module found" do
98
- trial.try_module('Blip').should be_false
99
- trial.try_module(:Blip).should be_false
100
- trial.try_module(nil).should be_false
101
- end
102
-
103
- it "should return module if found" do
104
- trial.try_module('GoodBye').should be_a(Module)
105
- trial.try_module(:GoodBye).should be_a(Module)
106
- end
107
-
108
- it "should return namespaced module if found" do
109
- trial.try_module('GoodBye::Alpha::Beta').should be_a(Module)
110
- end
111
-
112
- it "should return false if only class of that name is found" do
113
- trial.try_module('Hello').should be_true
114
- end
115
- end
116
-
117
- describe '#try_class' do
118
- it "should return false if no class found" do
119
- trial.try_class('Blip').should be_false
120
- trial.try_class(:Blip).should be_false
121
- trial.try_class(nil).should be_false
122
- end
123
-
124
- it "should return class if found" do
125
- trial.try_class('Hello').should be_a(Class)
126
- trial.try_class(:Hello).should be_a(Class)
127
- end
128
-
129
- it "should return false if only class of that name is found" do
130
- trial.try_class('GoodBye').should be_false
131
- end
132
- end
133
-
134
- describe '#class_exists?' do
135
- it "should return false if no class found" do
136
- trial.class_exists?('Blip').should be_false
137
- end
138
-
139
- it "should return true if class found" do
140
- trial.class_exists?('Hello').should be_true
141
- end
142
-
143
- it "should return false if module found" do
144
- trial.class_exists?('GoodBye').should be_false
145
- end
146
- end
147
-
148
- describe '#module_exists?' do
149
- it "should return false if no module found" do
150
- trial.module_exists?('Blip').should be_false
151
- end
152
-
153
- it "should return true if module found" do
154
- trial.module_exists?('GoodBye').should be_true
155
- end
156
-
157
- it "should return false if only class found" do
158
- trial.module_exists?('Hello').should be_false
159
- end
160
- end
161
-
162
- describe '#try_module_only' do
163
- it 'should find module' do
164
- trial.try_module_only('Hello').should be_false
165
- trial.try_module_only('GoodBye').should be_true
166
- end
167
- end
168
-
169
- describe '#find_first_class' do
170
- it 'should find first class' do
171
- trial.find_first_class('GoodBye', 'Hello').should == Hello
172
- end
173
-
174
- it 'should not find any module' do
175
- lambda {trial.find_first_class('Good', 'Bye') }.should raise_error
176
- end
177
- end
178
-
179
- describe '#find_first_module' do
180
- it 'should find first module' do
181
- first_module = trial.find_first_module('GoodBye::Alpha::Beta', 'Hello')
182
- first_module.should == GoodBye::Alpha::Beta
183
- end
184
-
185
- it 'should not find any module' do
186
- lambda {trial.find_first_module('Good', 'Bye') }.should raise_error
187
- end
188
- end
189
- end