active_tools 0.0.10 → 0.0.11

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: 51b06ad3dec14fa1f094a6024d64ca9ed4b50ed5
4
- data.tar.gz: 7a599525d1dbefef2de63aca1be53497c0ee8407
3
+ metadata.gz: 2c3a808736336301eb85cdfd4dcda22dca43306b
4
+ data.tar.gz: 46ff38509cbc5f40dc83d8afc70a8a04303fcc6b
5
5
  SHA512:
6
- metadata.gz: 5d609f04f1b350636e47bf4107f438f1a34a654ca5a1e57e8276d322870d7df28df98acd35d3d6409af68871e63b7a63813c0a78b7c9d8e5ad19a01507581a04
7
- data.tar.gz: c392bec6ca96f1b3ea97b27623c16ec88ed837557de8443b7faff5fdccb7914689457df20825a54569f133f03a6dda6555493c116aa010f0d7764f6a5c460cfc
6
+ metadata.gz: ea8c069240fff2daebd6fe87b96fe116e2cb4da2d89083dea00c6a34795136c4ae7fbfcf821a4be0c2775575790721a4f47466603b7ae25f24e790c2324d9319
7
+ data.tar.gz: adf4bff7c29823e5678a021632403438da55969cc4fbf30bc213123ce6278b58571351ef1cea6ae38fce890af9477a974a779ab0f2bd485d113e6470d7733cd6
data/.DS_Store ADDED
Binary file
data/lib/.DS_Store ADDED
Binary file
Binary file
@@ -0,0 +1,32 @@
1
+ module ActiveTools
2
+ module ActionPack
3
+ module ActionController
4
+ module PathHelper
5
+ module ComplexHelpers
6
+ def path?(controller, action = nil)
7
+ controller?(controller) && action?(action)
8
+ end
9
+
10
+ def action?(action)
11
+ actions = case action
12
+ when Array then action.map {|c| c.to_s}
13
+ when String, Symbol then Array.wrap(action.to_s)
14
+ else nil
15
+ end
16
+ actions.blank? ? true : current_action.in?(actions)
17
+ end
18
+
19
+ def controller?(controller)
20
+ controllers = case controller
21
+ when Array then controller.map {|c| c.to_s}
22
+ when String, Symbol then Array.wrap(controller.to_s)
23
+ else nil
24
+ end
25
+ controllers.blank? ? true : current_controller.in?(controllers)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ end
@@ -0,0 +1,39 @@
1
+ require 'active_tools/action_pack/action_controller/path_helper/complex_helpers'
2
+
3
+ module ActiveTools
4
+ module ActionPack
5
+ module ActionController
6
+ module PathHelper
7
+ class HttpReferer
8
+ attr_reader :url, :recognized
9
+ include ComplexHelpers
10
+
11
+ delegate :[], :to => :recognized
12
+
13
+ def initialize(request, environment = {})
14
+ @url = request.env['HTTP_REFERER']
15
+ @recognized = begin
16
+ @url.present? ? Rails.application.routes.recognize_path(@url, environment) : {}
17
+ rescue ::ActionController::RoutingError
18
+ {}
19
+ end
20
+ @recognized.freeze
21
+ end
22
+
23
+ def current_controller
24
+ recognized[:controller]
25
+ end
26
+
27
+ def current_action
28
+ recognized[:action]
29
+ end
30
+
31
+ def to_s
32
+ @url
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ end
@@ -0,0 +1,29 @@
1
+ require 'active_tools/misc/uniq_content'
2
+
3
+ module ActiveTools
4
+ module ActionPack
5
+ module ActionView
6
+ module UniqContentFor
7
+
8
+ end
9
+ end
10
+ end
11
+
12
+ module OnLoadActionView
13
+
14
+ def uniq_content_for(name, content = nil, options = {}, &block)
15
+ if content || block_given?
16
+ if block_given?
17
+ options = content if content
18
+ content = capture(&block)
19
+ end
20
+ if content && !uniq_content_storage.remembered?(content, name)
21
+ content_for(name, uniq_content_storage.remember(content, name), options)
22
+ nil
23
+ end
24
+ end
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -8,9 +8,8 @@ module ActiveTools
8
8
  def valid_with(*args)
9
9
  options = args.extract_options!
10
10
  object_name = args.first
11
- passed_attr_map = options.delete(:attributes)
11
+ passed_attr_map = options.delete(:attributes)||{}
12
12
  prefix = options.delete(:prefix)
13
- raise(TypeError, "Option :attributes must be a Hash. #{passed_attr_map.class} passed!") unless passed_attr_map.is_a?(Hash)
14
13
  attr_map_name = :"_valid_with_#{object_name}"
15
14
  unless respond_to?(attr_map_name)
16
15
  class_attribute attr_map_name
@@ -19,23 +18,20 @@ module ActiveTools
19
18
  self.send(attr_map_name).merge!(passed_attr_map)
20
19
  end
21
20
 
22
- if passed_attr_map.any?
23
- class_eval <<-EOV
24
- validate do
25
- if object = #{object_name}
26
- #{"object.instance_variable_set(:@errors, ActiveTools::ActiveModel::ValidWith::FakeErrors.new(object))" if options[:fit] == true}
27
- if !object.valid?
28
- object.errors.messages.each do |attribute, suberrors|
29
- if local_attribute = self.#{attr_map_name}[attribute]
30
- suberrors.each do |suberror|
31
- errors.add(["#{prefix}", local_attribute].select(&:present?).join("_"), suberror)
32
- end
33
- end
34
- end
21
+ validate(*[options]) do
22
+ if object = send(object_name)
23
+ if options[:fit] == true
24
+ object.instance_variable_set(:@errors, ActiveTools::ActiveModel::ValidWith::FakeErrors.new(object))
25
+ end
26
+ if !object.valid?
27
+ object.errors.messages.each do |attribute, suberrors|
28
+ local_attribute = send(attr_map_name)[attribute]||attribute
29
+ suberrors.each do |suberror|
30
+ errors.add([prefix.to_s, local_attribute].select(&:present?).join("_"), suberror)
35
31
  end
36
32
  end
37
33
  end
38
- EOV
34
+ end
39
35
  end
40
36
  end
41
37
  end
@@ -52,22 +52,22 @@ module ActiveTools
52
52
  raise(ArgumentError, ":#{assoc_name} method doesn't look like an association accessor!")
53
53
  end
54
54
  adapter_name = "#{assoc_name}_adaptive"
55
- config_name = "#{assoc_name}_adaptive_options"
56
55
 
57
56
  raise(TypeError, "Option :attributes must be a Hash. #{options[:attributes].class} passed!") unless options[:attributes].is_a?(Hash)
58
57
  attr_map = options.delete(:attributes).with_indifferent_access
59
58
 
60
- valid_with assoc_name, :attributes => attr_map
59
+ valid_with assoc_name, :attributes => attr_map#, :fit => true
61
60
 
62
- class_attribute config_name
63
- self.send("#{config_name}=", options.merge(:remote_attributes => attr_map.keys))
61
+ class_attribute :adaptive_options unless defined?(adaptive_options)
62
+ self.adaptive_options ||= {}
63
+ self.adaptive_options[assoc_name.to_sym] = options.merge(:remote_attributes => attr_map.keys)
64
64
 
65
65
  class_eval <<-EOV
66
66
  before_validation do
67
67
  #{adapter_name}.try_nullify
68
68
  end
69
69
 
70
- #{Rails.version >= "4.1.0" ? "after_validation" : "before_save"} do
70
+ #{Rails.version >= "4.1.0" ? "before_validation" : "before_save"} do
71
71
  #{adapter_name}.try_commit
72
72
  end
73
73
 
@@ -81,7 +81,7 @@ module ActiveTools
81
81
  end
82
82
 
83
83
  def #{adapter_name}
84
- @#{adapter_name} ||= ActiveTools::ActiveRecord::AdaptiveBelongsTo::Adapter.new(association(:#{assoc_name}), #{config_name})
84
+ @#{adapter_name} ||= ActiveTools::ActiveRecord::AdaptiveBelongsTo::Adapter.new(self, :#{assoc_name}, adaptive_options[:#{assoc_name}])
85
85
  end
86
86
  EOV
87
87
 
@@ -91,15 +91,25 @@ module ActiveTools
91
91
  define_method local_attribute do
92
92
  send(adapter_name).read(remote_attribute)
93
93
  end
94
-
95
94
  define_method "#{local_attribute}=" do |value|
96
95
  send(adapter_name).write(remote_attribute, value)
97
96
  end
98
97
  end
99
98
  end
100
99
 
101
- end
100
+ end
102
101
  end
102
+
103
+ # def reload(*args)
104
+ # super.tap do |record|
105
+ # adaptive_options.keys.each do |assoc_name|
106
+ # puts assoc_name
107
+ # adapter_name = "#{assoc_name}_adaptive"
108
+ # eval("@#{adapter_name}.try(:replace_association, association(:#{assoc_name}))")
109
+ # end
110
+ # end
111
+ # end
112
+
103
113
  end
104
114
  end
105
115
 
@@ -2,12 +2,13 @@ module ActiveTools
2
2
  module ActiveRecord
3
3
  module AdaptiveBelongsTo
4
4
  class Adapter
5
- attr_reader :association, :options
5
+ attr_reader :owner, :assoc_name, :options
6
6
 
7
- delegate :target, :target_id, :klass, :owner, :reflection, :to => :association
7
+ delegate :target, :target_id, :reflection, :to => :association
8
8
 
9
- def initialize(association, options = {})
10
- @association = association
9
+ def initialize(owner, assoc_name, options = {})
10
+ @owner = owner
11
+ @assoc_name = assoc_name
11
12
  @options = options.with_indifferent_access
12
13
  @foreign_key = reflection.foreign_key
13
14
  @remote_attributes = @options[:remote_attributes]
@@ -16,7 +17,15 @@ module ActiveTools
16
17
  @update_if = @options[:update_if]
17
18
  @destroy_if = @options[:destroy_if]
18
19
  @uniq_by = Array(@options[:uniq_by]).map(&:to_s)
19
- @association.load_target
20
+ association.load_target
21
+ end
22
+
23
+ def klass
24
+ association.klass||reflection.class_name.constantize
25
+ end
26
+
27
+ def association
28
+ owner.association(assoc_name)
20
29
  end
21
30
 
22
31
  def read(name)
@@ -43,7 +52,7 @@ module ActiveTools
43
52
  end
44
53
  end
45
54
 
46
- def try_commit
55
+ def try_commit
47
56
  try_commit_existed || try_update
48
57
  end
49
58
 
@@ -52,13 +61,24 @@ module ActiveTools
52
61
  try_destroy_target
53
62
  end
54
63
 
64
+ def template_attributes
65
+ attributes(@template, *@remote_attributes)
66
+ end
67
+
68
+ def target_attributes
69
+ attributes(target, *@remote_attributes)
70
+ end
71
+
55
72
  def try_update
56
73
  if updateable_backup?
57
74
  begin
58
- @backup.update(attributes(@template, *@remote_attributes))
75
+ @backup.update(template_attributes)
59
76
  rescue ::ActiveRecord::StaleObjectError
60
77
  @backup.reload
61
78
  try_update
79
+ rescue ::ActiveRecord::StatementInvalid
80
+ @backup.reload
81
+ try_update
62
82
  end
63
83
  self.target = @backup
64
84
  end
@@ -81,6 +101,9 @@ module ActiveTools
81
101
  rescue ::ActiveRecord::StaleObjectError
82
102
  @backup.reload
83
103
  try_destroy_backup
104
+ rescue ::ActiveRecord::StatementInvalid
105
+ @backup.reload
106
+ try_destroy_backup
84
107
  end
85
108
  end
86
109
  end
@@ -92,6 +115,9 @@ module ActiveTools
92
115
  rescue ::ActiveRecord::StaleObjectError
93
116
  target.reload
94
117
  try_destroy_target
118
+ rescue ::ActiveRecord::StatementInvalid
119
+ target.reload
120
+ try_destroy_target
95
121
  end
96
122
  end
97
123
  end
@@ -136,7 +162,14 @@ module ActiveTools
136
162
  end
137
163
 
138
164
  def attributes(object, *attrs)
139
- Hash[attrs.map {|a| [a, object.send(a)]}]
165
+ array = attrs.map do |a|
166
+ begin
167
+ [a, object.send(a)]
168
+ rescue NoMethodError
169
+ nil
170
+ end
171
+ end.compact
172
+ Hash[array]
140
173
  end
141
174
 
142
175
  def create_template!
@@ -191,7 +224,7 @@ module ActiveTools
191
224
  def template
192
225
  @template ||=
193
226
  if target.try(:persisted?)
194
- klass.new(attributes(target, *@remote_attributes))
227
+ klass.new(target_attributes)
195
228
  elsif target.nil?
196
229
  klass.new
197
230
  elsif target.try(:new_record?)
@@ -12,10 +12,8 @@ module ActiveTools
12
12
  end
13
13
 
14
14
  def custom_counter_cache_before_destroy(assoc_name, reflection, assoc_mapping)
15
- foreign_key = reflection.foreign_key.to_sym
16
- unless destroyed_by_association && destroyed_by_association.foreign_key.to_sym == foreign_key
17
- record = send(assoc_name)
18
- if record && !self.destroyed?
15
+ unless destroyed_by_association && (destroyed_by_association.foreign_key.to_sym == reflection.foreign_key.to_sym)
16
+ if (record = send(assoc_name)) && !self.destroyed?
19
17
  ActiveRecord::CustomCounterCache.digger(self, record, assoc_mapping) do |parent, cache_column, value|
20
18
  parent.class.update_counters(parent.id, cache_column => -value)
21
19
  end
@@ -24,20 +22,27 @@ module ActiveTools
24
22
  end
25
23
 
26
24
  def custom_counter_cache_after_update(assoc_name, reflection, assoc_mapping)
27
- foreign_key = reflection.foreign_key
25
+ record_changed =
26
+ if reflection.polymorphic?
27
+ send(:attribute_changed?, reflection.foreign_type)||send(:attribute_changed?, reflection.foreign_key)
28
+ else
29
+ send(:attribute_changed?, reflection.foreign_key) && defined?(reflection.klass.to_s.camelize)
30
+ end
31
+
28
32
  if (@_after_create_custom_counter_called ||= false)
29
33
  @_after_create_custom_counter_called = false
30
- elsif send(:attribute_changed?, foreign_key) && !new_record? && defined?(reflection.klass.to_s.camelize)
31
- model = reflection.klass
32
- foreign_key_was = attribute_was foreign_key
33
- foreign_key = attribute foreign_key
34
+ elsif !new_record? && record_changed
35
+ model = reflection.polymorphic? ? attribute(reflection.foreign_type).try(:constantize) : reflection.klass
36
+ model_was = reflection.polymorphic? ? attribute_was(reflection.foreign_type).try(:constantize) : reflection.klass
37
+ foreign_key = attribute(reflection.foreign_key)
38
+ foreign_key_was = attribute_was(reflection.foreign_key)
34
39
 
35
40
  if foreign_key && model.respond_to?(:increment_counter) && to_increment = model.find_by_id(foreign_key)
36
41
  ActiveRecord::CustomCounterCache.digger(self, to_increment, assoc_mapping) do |parent, cache_column, value|
37
42
  parent.class.update_counters(parent.id, cache_column => value)
38
43
  end
39
44
  end
40
- if foreign_key_was && model.respond_to?(:decrement_counter) && to_decrement = model.find_by_id(foreign_key_was)
45
+ if foreign_key_was && model_was.respond_to?(:decrement_counter) && to_decrement = model_was.find_by_id(foreign_key_was)
41
46
  ActiveRecord::CustomCounterCache.digger(self, to_decrement, assoc_mapping) do |parent, cache_column, value|
42
47
  parent.class.update_counters(parent.id, cache_column => -value)
43
48
  end
@@ -0,0 +1,92 @@
1
+ module ActiveTools
2
+ module ActiveRecord
3
+ module WithPermalink
4
+ extend ::ActiveSupport::Concern
5
+
6
+ module ClassMethods
7
+ def with_permalink(*args)
8
+ options = args.extract_options!
9
+ unless (column_name = args.first.to_sym) || options[:from].present?
10
+ raise "WithPermalink: column_name and/or options[:from] expected!"
11
+ end
12
+
13
+ options[:uniq] ||= true
14
+
15
+ cattr_accessor :with_permalink_options unless defined?(with_permalink_options)
16
+ self.with_permalink_options ||= {}
17
+ self.with_permalink_options[column_name] = options
18
+
19
+ validates_presence_of column_name
20
+ validates_uniqueness_of column_name, options[:scope] ? {:scope => Array(options[:scope])} : {}
21
+
22
+ before_validation do
23
+ self.with_permalink_options.each do |column_name, options|
24
+ eval <<-EOV
25
+ source = @_#{column_name}_demanded
26
+ EOV
27
+ source ||= case options[:from]
28
+ when String, Symbol then send(options[:from])
29
+ when Proc then options[:from].call(self)
30
+ end
31
+ if options[:uniq]
32
+ self.send("#{column_name}=", generate_permalink(column_name, source, options))
33
+ else
34
+ self.send("#{column_name}=", source)
35
+ end
36
+ end
37
+ end
38
+
39
+ after_save do
40
+ instance_variable_set(:"@_#{column_name}_demanded", nil)
41
+ end
42
+
43
+ class_eval <<-EOV
44
+ def #{column_name}=(value)
45
+ @_#{column_name}_demanded = value if value.present?
46
+ super(value)
47
+ end
48
+
49
+ def to_param
50
+ changes["#{column_name}"].try(:first)||#{column_name}
51
+ end
52
+ EOV
53
+
54
+ end
55
+ end
56
+
57
+ def generate_permalink(column_name, permalink, options = {})
58
+ tester, correction = permalink, 0
59
+ while exists_permalink?(column_name, tester, options)
60
+ correction += 1
61
+ tester = [permalink, correction].select(&:present?).join("-")
62
+ end
63
+ tester
64
+ end
65
+
66
+ def exists_permalink?(column_name, permalink, options = {})
67
+ sql_clause, values = [], []
68
+ sql_clause << "#{column_name} = ?"
69
+ values << permalink
70
+ if options[:scope]
71
+ Array(options[:scope]).each do |field|
72
+ if value = send(field)
73
+ sql_clause << "#{field} = ?"
74
+ values << value
75
+ end
76
+ end
77
+ end
78
+ if persisted?
79
+ sql_clause << "id != ?"
80
+ values << self.id
81
+ end
82
+ self.class.exists?([sql_clause.join(" AND "), *values])
83
+ end
84
+
85
+ end
86
+ end
87
+
88
+ module OnLoadActiveRecord
89
+ include ActiveRecord::WithPermalink
90
+ end
91
+
92
+ end
@@ -29,8 +29,9 @@ module ActiveTools
29
29
  uniq_content_storage.append_content(content, Misc::DEFAULT_JS_FLOW_KEY)
30
30
  nil
31
31
  when Mime::HTML then
32
- unless uniq_content_storage.remembered?(content, options[:volume])
33
- flow = uniq_content_storage.remember(content, options[:volume])
32
+ volume = options.delete(:volume)
33
+ unless uniq_content_storage.remembered?(content, volume)
34
+ flow = uniq_content_storage.remember(content, volume)
34
35
  options[:javascript_tag] == false ? flow : javascript_tag(flow, options)
35
36
  end
36
37
  end
@@ -0,0 +1,76 @@
1
+ module ActiveTools
2
+ module Misc
3
+ module UniqContent
4
+ class Storage
5
+ attr_reader :content
6
+
7
+ delegate :any?, :empty?, :to => :content
8
+
9
+ def initialize
10
+ @content = ::ActiveSupport::OrderedHash.new {|h,k| h[k] = []}
11
+ @hashes = ::ActiveSupport::OrderedHash.new {|h,k| h[k] = []}
12
+ end
13
+
14
+ # Called by _layout_for to read stored values.
15
+ def get_content(key = nil)
16
+ @content[key]
17
+ end
18
+
19
+ # Called by each renderer object to set the layout contents.
20
+ def set_content(value, key = nil)
21
+ @content[key] = Array(value)
22
+ end
23
+
24
+ # Called by content_for
25
+ def append_content(value, key = nil)
26
+ @content[key] |= Array(value)
27
+ end
28
+ alias_method :append_content!, :append_content
29
+
30
+ def render_content(key = nil)
31
+ @content[key].join("\n").html_safe
32
+ end
33
+
34
+ def remember(value, key = nil)
35
+ unless remembered?(value, key)
36
+ @hashes[key] << value.hash
37
+ value
38
+ end
39
+ end
40
+
41
+ def remembered?(value, key = nil)
42
+ @hashes[key].include?(value.hash)
43
+ end
44
+
45
+ end
46
+ end
47
+ end
48
+
49
+ module OnLoadActionController
50
+ included do
51
+ helper_method :uniq_content_storage
52
+ end
53
+
54
+ def uniq_content_storage
55
+ @_uniq_content_storage ||= Misc::UniqContent::Storage.new
56
+ end
57
+ end
58
+
59
+ module OnLoadActionView
60
+ def uniq_content(*args, &block)
61
+ options = args.extract_options!
62
+ content = args.first
63
+ if content || block_given?
64
+ if block_given?
65
+ content = capture(&block)
66
+ end
67
+ if content && !uniq_content_storage.remembered?(content, options[:volume])
68
+ uniq_content_storage.remember(content, options[:volume])
69
+ else
70
+ nil
71
+ end
72
+ end
73
+ end
74
+ end
75
+
76
+ end
@@ -1,3 +1,3 @@
1
1
  module ActiveTools
2
- VERSION = "0.0.10"
2
+ VERSION = "0.0.11"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Valery Kvon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-12 00:00:00.000000000 Z
11
+ date: 2014-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -45,23 +45,27 @@ executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
+ - ".DS_Store"
48
49
  - ".gitignore"
49
- - ".ruby-gemset"
50
- - ".ruby-version"
51
50
  - Gemfile
52
51
  - LICENSE.txt
53
52
  - README.md
54
53
  - Rakefile
55
54
  - active_tools.gemspec
56
55
  - copy
56
+ - lib/.DS_Store
57
57
  - lib/active_tools.rb
58
+ - lib/active_tools/.DS_Store
58
59
  - lib/active_tools/action_pack/action_controller.rb
59
60
  - lib/active_tools/action_pack/action_controller/path_helper.rb
61
+ - lib/active_tools/action_pack/action_controller/path_helper/complex_helpers.rb
62
+ - lib/active_tools/action_pack/action_controller/path_helper/http_referer.rb
60
63
  - lib/active_tools/action_pack/action_dispatch.rb
61
64
  - lib/active_tools/action_pack/action_dispatch/flash_stack.rb
62
65
  - lib/active_tools/action_pack/action_view.rb
63
66
  - lib/active_tools/action_pack/action_view/perform_as_tree.rb
64
67
  - lib/active_tools/action_pack/action_view/tag_attributes.rb
68
+ - lib/active_tools/action_pack/action_view/uniq_content_for.rb
65
69
  - lib/active_tools/actionpack.rb
66
70
  - lib/active_tools/active_model/delegate_attributes.rb
67
71
  - lib/active_tools/active_model/valid_with.rb
@@ -71,6 +75,7 @@ files:
71
75
  - lib/active_tools/active_record/custom_counter_cache.rb
72
76
  - lib/active_tools/active_record/custom_counter_cache/instance_methods.rb
73
77
  - lib/active_tools/active_record/record_id.rb
78
+ - lib/active_tools/active_record/with_permalink.rb
74
79
  - lib/active_tools/activemodel.rb
75
80
  - lib/active_tools/activerecord.rb
76
81
  - lib/active_tools/activesupport.rb
@@ -89,6 +94,7 @@ files:
89
94
  - lib/active_tools/misc.rb
90
95
  - lib/active_tools/misc/input_source.rb
91
96
  - lib/active_tools/misc/script_flow.rb
97
+ - lib/active_tools/misc/uniq_content.rb
92
98
  - lib/active_tools/railtie.rb
93
99
  - lib/active_tools/version.rb
94
100
  - spec/active_tools/active_model/delegate_attributes_spec.rb
data/.ruby-gemset DELETED
@@ -1 +0,0 @@
1
- delegate_attributes
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- ruby-2.0.0-p247