html_slicer 0.1.2 → 0.1.7

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/CHANGELOG CHANGED
@@ -1,3 +1,24 @@
1
+ == 0.1.6
2
+
3
+ * Dependency bugfixes.
4
+
5
+ == 0.1.5
6
+
7
+ * Gem description updated.
8
+
9
+ == 0.1.4
10
+
11
+ * Dependency bugfixes. Update with 'bundle update html_slicer'!
12
+
13
+ == 0.1.3
14
+
15
+ * Code refactored. Specific tools and methods extracted to stand-alone 'active_tools' gem.
16
+
17
+ == 0.1.2
18
+
19
+ * Visual separating (:text_break) functionality improved.
20
+ * "Read more": Now, pass dynamic content to the end of slice, directly from ActionView environment.
21
+
1
22
  == 0.1.1
2
23
 
3
24
  * Code optimized for speed.
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in html_slicer.gemspec
4
- gemspec
4
+ gemspec
data/html_slicer.gemspec CHANGED
@@ -10,11 +10,12 @@ Gem::Specification.new do |s|
10
10
  s.authors = ["Valery Kvon"]
11
11
  s.email = ["addagger@gmail.com"]
12
12
  s.homepage = %q{http://vkvon.ru/projects/html_slicer}
13
- s.summary = %q{HTML text pagination for Ruby on Rails}
14
- s.description = %q{HTML truncation & pagination for Rails 3. It also provides on option to resize "width"/"height" HTML tags (also as CSS elements in "style="), such as <iframe>, <object>, <img> or any other.}
13
+ s.summary = %q{Paginate (split) long HTML text to pages and partials. Resize embeddings on fly. Flexible configuration.}
14
+ s.description = %q{HTML truncation & pagination for Rails 3. Optional feature: recalculate resolution values of HTML tags (within width/height/style attributes).}
15
15
 
16
- s.add_development_dependency "actionpack", ['>= 3.0.0']
17
- s.add_development_dependency "activesupport", ['>= 3.0.0']
16
+ s.add_dependency "actionpack", ['>= 3.0.0']
17
+ s.add_dependency "activesupport", ['>= 3.0.0']
18
+ s.add_dependency "active_tools", ['>= 0.0.2']
18
19
 
19
20
  s.rubyforge_project = "html_slicer"
20
21
 
@@ -46,7 +46,6 @@ module HtmlSlicer
46
46
  class Configuration #:nodoc:
47
47
 
48
48
  include ActiveSupport::Configurable
49
- include HtmlSlicer::Utilities::Deepcopy
50
49
 
51
50
  config_accessor :as
52
51
  config_accessor :slice
@@ -69,7 +68,7 @@ module HtmlSlicer
69
68
 
70
69
  def duplicate
71
70
  Configuration.new.tap do |c|
72
- c.config.replace(deepcopy(config))
71
+ c.config.replace(config.deep_copy)
73
72
  end
74
73
  end
75
74
 
@@ -1,3 +1,6 @@
1
+ require 'rubygems'
2
+ require 'active_tools/core_extension'
3
+
1
4
  module HtmlSlicer #:nodoc:
2
5
  class Engine < ::Rails::Engine #:nodoc:
3
6
  end
@@ -1,7 +1,8 @@
1
- # This part of code is almost completely ported from +Kaminari+ gem by Akira Matsuda.
2
- # Look at http://github.com/amatsuda/kaminari/tree/master/lib/kaminari/helpers
3
1
  module HtmlSlicer
4
-
2
+ # This part of code is almost completely ported from +Kaminari+ gem by Akira Matsuda.
3
+ # Look at http://github.com/amatsuda/kaminari/tree/master/lib/kaminari/helpers
4
+ # ===================================================================================
5
+ #
5
6
  # The part of code, processing the +:param_name+ was rewritten by me.
6
7
  # Now you can define +:param_name+ as a +symbol+ or +string+, or as an +array of any object that responses +.to_s+ method and returns +string+.
7
8
  # Passing +array+ is the way to define nested :param_name.
@@ -54,7 +55,7 @@ module HtmlSlicer
54
55
  def link_to_next_slice(object, name, options = {}, &block)
55
56
  params = options[:params] ? self.params.merge(options.delete :params) : self.params
56
57
  param_name = options.delete(:param_name) || object.options.param_name
57
- link_to_unless object.last_slice?, name, HtmlSlicer::SmartParams.new(params, param_name, (object.current_slice + 1)), options.reverse_merge(:rel => 'next') do
58
+ link_to_unless object.last_slice?, name, params.merge_hashup(*param_name, object.current_slice + 1), options.reverse_merge(:rel => 'next') do
58
59
  block.call if block
59
60
  end
60
61
  end
@@ -1,18 +1,18 @@
1
- # This part of code is almost completely ported from +Kaminari+ gem by Akira Matsuda.
2
- # Look at http://github.com/amatsuda/kaminari/tree/master/lib/kaminari/helpers
3
-
4
1
  require 'active_support/inflector'
5
2
  require 'action_view'
6
3
  require 'action_view/log_subscriber'
7
4
  require 'action_view/context'
8
- require 'html_slicer/helpers/smart_params'
9
5
  require 'html_slicer/helpers/tags'
10
6
 
11
7
  module HtmlSlicer
12
8
 
13
9
  module Helpers
10
+ # This part of code is almost completely ported from +Kaminari+ gem by Akira Matsuda.
11
+ # Look at http://github.com/amatsuda/kaminari/tree/master/lib/kaminari/helpers
12
+ # ===================================================================================
13
+ #
14
14
  # The main container tag
15
-
15
+ #
16
16
  # Configure ActiveSupport inflections to pluralize 'slice' in a correct way = 'slices'. # By default would be 'slouse'.
17
17
  ActiveSupport::Inflector.inflections do |inflect|
18
18
  inflect.plural 'slice', 'slices'
@@ -1,8 +1,10 @@
1
- # This part of code is almost completely ported from +Kaminari+ gem by Akira Matsuda.
2
- # Look at http://github.com/amatsuda/kaminari/tree/master/lib/kaminari/helpers
3
1
  module HtmlSlicer
2
+
4
3
  module Helpers
5
-
4
+ # This part of code is almost completely ported from +Kaminari+ gem by Akira Matsuda.
5
+ # Look at http://github.com/amatsuda/kaminari/tree/master/lib/kaminari/helpers
6
+ # ===================================================================================
7
+ #
6
8
  # A tag stands for an HTML tag inside the paginator.
7
9
  # Basically, a tag has its own partial template file, so every tag can be
8
10
  # rendered into String using its partial template.
@@ -29,8 +31,8 @@ module HtmlSlicer
29
31
  end
30
32
 
31
33
  def slice_url_for(slice)
32
- # +HtmlSlicer::SmartParams+: return deep merged params with a new slice number value.
33
- @template.url_for HtmlSlicer::SmartParams.new(@params, @param_name, (slice <= 1 ? nil : slice))
34
+ # +@params.merge_hashup+: returns deep merged params with a new slice number value.
35
+ @template.url_for @params.merge_hashup(*@param_name, (slice <= 1 ? nil : slice))
34
36
  end
35
37
  end
36
38
 
@@ -67,14 +67,12 @@ module HtmlSlicer
67
67
  values << absolute_resolution(node.attributes["width"])
68
68
  end
69
69
  if style = node.attributes["style"]
70
- style.gsub!(/width:\s+\d+px;/) do |t|
71
- t.gsub(/\d+/) do |w|
72
- if block_given?
73
- yield
74
- else
75
- values << w.to_i
76
- w
77
- end
70
+ style.gsub!(/width:\s+\d+(?=px);/) do |w|
71
+ if block_given?
72
+ yield
73
+ else
74
+ values << w.to_i
75
+ w
78
76
  end
79
77
  end
80
78
  end
@@ -89,14 +87,12 @@ module HtmlSlicer
89
87
  values << absolute_resolution(node.attributes["height"])
90
88
  end
91
89
  if style = node.attributes["style"]
92
- style.gsub!(/height:\s+\d+px;/) do |t|
93
- t.gsub(/\d+/) do |h|
94
- if block_given?
95
- yield
96
- else
97
- values << h.to_i
98
- h
99
- end
90
+ style.gsub!(/height:\s+\d+(?=px);/) do |h|
91
+ if block_given?
92
+ yield
93
+ else
94
+ values << h.to_i
95
+ h
100
96
  end
101
97
  end
102
98
  end
@@ -17,95 +17,6 @@ module HtmlSlicer
17
17
  [node.line, node.position]
18
18
  end
19
19
  end
20
-
21
- module Deepcopy
22
- # Return the 'deep' brand new copy of Hash or Array. All nested hashes/arrays rebuilded at the same way.
23
- def deepcopy(object)
24
- array_copy = Proc.new do |a|
25
- duplicate = Array.new
26
- a.each do |value|
27
- duplicate << case value
28
- when Hash then hash_copy.call(value)
29
- when Array then array_copy.call(value)
30
- else value
31
- end
32
- end
33
- duplicate
34
- end
35
- hash_copy = Proc.new do |h|
36
- duplicate = Hash.new
37
- h.each do |key, value|
38
- duplicate[key] = case value
39
- when Hash then hash_copy.call(value)
40
- when Array then array_copy.call(value)
41
- else value
42
- end
43
- end
44
- duplicate
45
- end
46
- case object
47
- when Hash then hash_copy.call(object)
48
- when Array then array_copy.call(object)
49
- else object
50
- end
51
- end
52
- end
53
-
54
- module HashupArray
55
- # Return a nested Hash object from Array's elements sequence, where elements used as names of +hash+ keys.
56
- # The last element of array would be the last nested value.
57
- #
58
- # === Example:
59
- #
60
- # hashup([:vehicle, :car, :ford, :mustang, "2 please"])
61
- #
62
- # #=> {:vehicle=>{:car=>{:ford=>{:mustang=>"2 please"}}}}
63
- def hashup(array)
64
- raise(TypeError, "Array expected!") unless array.is_a?(Array)
65
- raise(Exception, "At least 2 elements needed!") if array.size < 2
66
- value = array.delete_at(-1)
67
- {}.tap do |hash|
68
- index = 0
69
- while index < array.size
70
- hash = hash[array.at(index)] = (index + 1 == array.size) ? value : {}
71
- index += 1
72
- end
73
- end
74
- end
75
- end
76
-
77
- module NestedMergeHash
78
- include Deepcopy
79
-
80
- # Return the merged Hash with another +hash+, where the possible child hashes are also merged.
81
- #
82
- # === Example:
83
- #
84
- # h1 = {:breakfast => {:eggs => 2, :bread => 1}, :lunch => {:steak => 1, :salad => 1}}
85
- # h2 = {:breakfast => {:coffee => :espresso, :juice => 1}, :lunch => {:tea => 2}, :dinner => :none}
86
- # nested_merge(h1, h2)
87
- # #=> {:breakfast=>{:eggs=>2, :bread=>1, :coffee=>:espresso, :juice=>1}, :lunch=>{:steak=>1, :salad=>1, :tea=>2}, :dinner=>:none}
88
- #
89
- def nested_merge(hash, other_hash = {})
90
- raise(TypeError, "Hash expected!") unless hash.is_a?(Hash)
91
- a = Proc.new do |original, change|
92
- change.each do |key, value|
93
- if !original.has_key?(key) || !original[key].is_a?(Hash)
94
- original[key] = value
95
- elsif original[key].is_a?(Hash) && value.is_a?(Hash)
96
- a.call(original[key], value)
97
- end
98
- end
99
- original
100
- end
101
- a.call(deepcopy(hash), other_hash)
102
- end
103
-
104
- # .nested_merge replaces the source hash.
105
- def nested_merge!(hash, other_hash = {})
106
- hash.replace(nested_merge(hash, other_hash = {}))
107
- end
108
- end
109
20
 
110
21
  module NodeMatchExtension
111
22
 
@@ -1,3 +1,3 @@
1
1
  module HtmlSlicer
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.7"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: html_slicer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-25 00:00:00.000000000 Z
12
+ date: 2013-01-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -19,7 +19,7 @@ dependencies:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
21
  version: 3.0.0
22
- type: :development
22
+ type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  none: false
@@ -35,7 +35,7 @@ dependencies:
35
35
  - - ! '>='
36
36
  - !ruby/object:Gem::Version
37
37
  version: 3.0.0
38
- type: :development
38
+ type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  none: false
@@ -43,9 +43,24 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: 3.0.0
46
- description: HTML truncation & pagination for Rails 3. It also provides on option
47
- to resize "width"/"height" HTML tags (also as CSS elements in "style="), such as
48
- <iframe>, <object>, <img> or any other.
46
+ - !ruby/object:Gem::Dependency
47
+ name: active_tools
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 0.0.2
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.0.2
62
+ description: ! 'HTML truncation & pagination for Rails 3. Optional feature: recalculate
63
+ resolution values of HTML tags (within width/height/style attributes).'
49
64
  email:
50
65
  - addagger@gmail.com
51
66
  executables: []
@@ -87,7 +102,6 @@ files:
87
102
  - lib/html_slicer/engine.rb
88
103
  - lib/html_slicer/helpers/action_view_extension.rb
89
104
  - lib/html_slicer/helpers/slicer.rb
90
- - lib/html_slicer/helpers/smart_params.rb
91
105
  - lib/html_slicer/helpers/tags.rb
92
106
  - lib/html_slicer/installer.rb
93
107
  - lib/html_slicer/interface.rb
@@ -120,8 +134,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
134
  version: '0'
121
135
  requirements: []
122
136
  rubyforge_project: html_slicer
123
- rubygems_version: 1.8.24
137
+ rubygems_version: 1.8.25
124
138
  signing_key:
125
139
  specification_version: 3
126
- summary: HTML text pagination for Ruby on Rails
140
+ summary: Paginate (split) long HTML text to pages and partials. Resize embeddings
141
+ on fly. Flexible configuration.
127
142
  test_files: []
@@ -1,35 +0,0 @@
1
- module HtmlSlicer
2
-
3
- class SmartParams < Hash
4
- # Implements smart and flexible +params+ merging.
5
- # Method accepts passed +params+ hash and merge it with a new :+param_name+ and it's value.
6
- # In the case when you passed +param_name+ option as an Array, method returns merged new
7
- # instance of hashed params where all subhashes merged into the same way.
8
- #
9
- # === Example:
10
- #
11
- # params = {:controller => "comments", :action => "show", :id => 34, :article_id => 3, :page => {:article => 2}}
12
- #
13
- # :slice_params => [:page, :comment]
14
- #
15
- # HtmlSlicer::SmartParams.new(params, slice_params, 34)
16
- # # => {:controller => "comments", :action => "show", :id => 34, :article_id => 3, :page => {:article => 2, :comment => 34}}
17
- #
18
- def initialize(params = {}, param_name = nil, value = nil)
19
- super()
20
- param_subhash = case param_name
21
- when Array then hashup(param_name.collect {|e| e.to_s} << value)
22
- when String, Symbol then {param_name.to_s => value}
23
- else {}
24
- end
25
- update(nested_merge(params, param_subhash))
26
- end
27
-
28
- private
29
-
30
- include HtmlSlicer::Utilities::HashupArray
31
- include HtmlSlicer::Utilities::NestedMergeHash
32
-
33
- end
34
-
35
- end