super_tools 0.0.1

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.
@@ -0,0 +1,40 @@
1
+ require 'super_table/builder'
2
+
3
+ module SuperTable
4
+ module ActionView
5
+
6
+ def super_table(table, options={}, &block)
7
+
8
+ options[:hover] = options.fetch(:hover, true)
9
+ is_hover = options.delete(:hover)
10
+ table_responsive = options.delete(:responsive)
11
+ table_size = options.delete(:size).to_s
12
+
13
+ classes = ['table']
14
+ classes << options[:class] if options[:class]
15
+ classes.push("table-hover") if is_hover && table.collection.present?
16
+ classes.push("table-sm") if table_size == 'sm'
17
+
18
+ options[:class] = classes.join(" ")
19
+
20
+ case table_responsive.to_s
21
+ when 'sm', 'md', 'lg', 'xl'
22
+ content_tag(:div, class: "table-responsive-#{table_responsive}") do
23
+ render_table(table, options, &block)
24
+ end
25
+ else
26
+ render_table(table, options, &block)
27
+ end
28
+ end
29
+
30
+ protected
31
+
32
+ def render_table(table, options={}, &block)
33
+ content_tag(:table, options) do
34
+ yield Builder.new(table, self) if block_given?
35
+ end
36
+ end
37
+ end
38
+
39
+ ::ActionView::Base.send :include, ActionView
40
+ end
@@ -0,0 +1,116 @@
1
+ require 'super_table/view_helpers'
2
+ module SuperTable
3
+ class Builder
4
+ include ViewHelpers
5
+
6
+ attr_accessor :table, :view_context
7
+
8
+ delegate :content_tag, :concat, to: :view_context
9
+ delegate :collection, to: :table
10
+
11
+ def initialize(table, view_context)
12
+ self.view_context = view_context
13
+ self.table = table
14
+ end
15
+
16
+ def heads(*args, &block)
17
+ options = args.extract_options!
18
+
19
+ classes = ['table-secondary']
20
+ classes << options[:class] if options[:class]
21
+ options[:class] = classes.join(" ")
22
+
23
+ if block_given?
24
+ tr(options, &block)
25
+ else
26
+ tr(options) do
27
+ args.each do |key|
28
+ concat head(key)
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ def head(key=nil, options={}, &block)
35
+ if block_given?
36
+ options = key
37
+ return th(options, &block)
38
+ end
39
+
40
+ case key
41
+ when Symbol
42
+ column_options = table.columns[key].clone
43
+ title, desc = column_options.delete(:title), column_options.delete(:desc)
44
+ else
45
+ column_options = {}
46
+ title = key
47
+ end
48
+
49
+ classes = []
50
+ classes << options.delete(:class) if options[:class]
51
+ classes << column_options.delete(:class) if column_options[:class]
52
+ column_options.merge!(options)
53
+ column_options.merge!(class: classes.join(" ")) if classes.present?
54
+
55
+ th(column_options) do
56
+ concat(title)
57
+ concat content_tag(:div, desc, class: 'small text-primary') if desc
58
+ end
59
+ end
60
+
61
+ def columns(*args, &block)
62
+ @rows = []
63
+ options = args.extract_options!
64
+ wrap_options = options.delete(:wrap) || {}
65
+ if collection.empty?
66
+ return placeholder_row
67
+ end
68
+ collection.each do |record|
69
+ @rows << record
70
+ html = wrap_tr(options, wrap_options) do
71
+ if block_given?
72
+ yield record
73
+ else
74
+ args.each do |key|
75
+ concat td(record.send(key))
76
+ end
77
+ end
78
+ end
79
+ concat html
80
+ end
81
+ nil
82
+ end
83
+
84
+ def column(key=nil, options={}, &block)
85
+ if block_given?
86
+ options = key
87
+ return td(options, &block)
88
+ end
89
+
90
+ content = case key
91
+ when Symbol
92
+ @rows.last.send(key)
93
+ else
94
+ key
95
+ end
96
+ td(content, options)
97
+ end
98
+
99
+ def placeholder_row
100
+ tr do
101
+ content = table.placeholder || "尚無資料"
102
+ td(content, colspan: table.columns.length, class: 'text-center')
103
+ end
104
+ end
105
+
106
+ protected
107
+
108
+ def wrap_tr(options, wrap_options={}, &block)
109
+ if wrap_options == false
110
+ block.()
111
+ else
112
+ tr(options, &block)
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,23 @@
1
+ require 'forwardable'
2
+
3
+ module SuperTable
4
+ class Record < Struct.new(:model)
5
+ include ViewHelpers
6
+ extend Forwardable
7
+
8
+ delegate_missing_to :model
9
+
10
+ class << self
11
+
12
+ def property(attr_name)
13
+ def_delegator :model, attr_name
14
+ end
15
+ end
16
+
17
+ def helpers
18
+ @helpers ||= Class.new do
19
+ include ViewHelpers
20
+ end.new
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,44 @@
1
+ module SuperTable
2
+ class Tableable
3
+ include ViewHelpers
4
+
5
+ attr_accessor :records
6
+ class_attribute :columns
7
+ class_attribute :record_klass
8
+
9
+ delegate :columns, to: :class
10
+
11
+ def initialize(records)
12
+ self.records = records
13
+ end
14
+
15
+ def placeholder; end
16
+
17
+ class << self
18
+
19
+ def column(method_name, title, options={})
20
+ self.columns ||= {}
21
+ self.columns[method_name] = options.merge(title: title)
22
+ end
23
+
24
+ def collection(records_name, options={}, &block)
25
+ parent_klass = ancestors.find { |klass|
26
+ klass.respond_to?(:record_klass) && klass.record_klass.present?
27
+ }
28
+ self.record_klass = if parent_klass
29
+ Class.new(parent_klass.record_klass, &block)
30
+ else
31
+ Class.new(SuperTable::Record, &block)
32
+ end
33
+
34
+ define_method(records_name) do
35
+ @collection ||= self.records.map { |record| record_klass.new(record) }
36
+ end
37
+
38
+ define_method(:collection) do
39
+ send(records_name)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,40 @@
1
+ module SuperTable
2
+ module ViewHelpers
3
+
4
+ def td(*args, &block)
5
+ content_tag(:td, *args, &block)
6
+ end
7
+
8
+ def tr(*args, &block)
9
+ content_tag(:tr, *args, &block)
10
+ end
11
+
12
+ def th(*args, &block)
13
+ content_tag(:th, *args, &block)
14
+ end
15
+
16
+ def strong(*args, &block)
17
+ content_tag(:strong, *args, &block)
18
+ end
19
+
20
+ def div(*args, &block)
21
+ content_tag(:div, *args, &block)
22
+ end
23
+
24
+ def small(*args, &block)
25
+ content_tag(:small, *args, &block)
26
+ end
27
+
28
+ def span(*args, &block)
29
+ content_tag(:span, *args, &block)
30
+ end
31
+
32
+ def self.included(base)
33
+ base.include ::ActionView::Context
34
+ base.include ::ActionView::Helpers
35
+ if Rails.respond_to?(:application)
36
+ base.include ::Rails.application.routes.url_helpers
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,41 @@
1
+ # RAILS LIBs
2
+ require 'active_support'
3
+ require 'active_model'
4
+ require 'active_record'
5
+ require 'action_view'
6
+ # VERSION
7
+ require "super_tools/version"
8
+ # TASKS
9
+ require "super_process/core"
10
+ # FORMS
11
+ require "super_spreadsheet/loader"
12
+ require "super_form/basic"
13
+ require "super_form/reform"
14
+ # TABLES
15
+ require "super_table/action_view"
16
+ require "super_table/builder"
17
+ require "super_table/record"
18
+ require "super_table/tableable"
19
+ require "super_table/view_helpers"
20
+ # FORMATTER
21
+ require 'super_formatter/import'
22
+ require 'super_formatter/row'
23
+ # FORMATTER (ECAN)
24
+ require 'super_formatter/ecan/head'
25
+ require 'super_formatter/ecan/row'
26
+ require 'super_formatter/ecan/import'
27
+ # FORMATTER (TCAT)
28
+ require 'super_formatter/tcat/head'
29
+ require 'super_formatter/tcat/row'
30
+ require 'super_formatter/tcat/import'
31
+ # FORMATTER (HCT)
32
+ require 'super_formatter/hct/head'
33
+ require 'super_formatter/hct/row'
34
+ require 'super_formatter/hct/import'
35
+ # FORMATTER (SHOPLINE)
36
+ require 'super_formatter/shopline/head'
37
+ require 'super_formatter/shopline/row'
38
+ require 'super_formatter/shopline/order'
39
+ require 'super_formatter/shopline/import'
40
+ module SuperTools
41
+ end
@@ -0,0 +1,3 @@
1
+ module SuperTools
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,48 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "super_tools/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "super_tools"
8
+ spec.version = SuperTools::VERSION
9
+ spec.authors = ["eddie"]
10
+ spec.email = ["eddie.li.624@gmail.com"]
11
+
12
+ spec.summary = %q{Rails 開發環境常用工具 Forms/Process/Spreadsheet}
13
+ spec.description = %q{Rails 開發環境常用工具 Forms/Process/Spreadsheet}
14
+ spec.homepage = "https://github.com/superlanding/super_tools"
15
+ spec.license = "MIT"
16
+
17
+ # Specify which files should be added to the gem when it is released.
18
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
19
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
20
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
+ end
22
+ spec.bindir = "exe"
23
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
+ spec.require_paths = ["lib"]
25
+
26
+ spec.add_development_dependency "bundler", "~> 1.16"
27
+ spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "minitest", "~> 5.0"
29
+ spec.add_development_dependency "shoulda-context"
30
+
31
+ spec.add_dependency "actionview"
32
+ spec.add_dependency 'activerecord'
33
+ spec.add_dependency "activemodel"
34
+ spec.add_dependency "activeview"
35
+
36
+ spec.add_dependency "fast_excel"
37
+ spec.add_dependency "roo"
38
+ spec.add_dependency "roo-xls"
39
+ spec.add_dependency "spreadsheet"
40
+ spec.add_dependency "iconv"
41
+ spec.add_dependency "virtus", '~> 1.0.5'
42
+ spec.add_dependency "reform-rails"
43
+ spec.add_dependency "reform", '~> 2.2.4'
44
+ spec.add_dependency "dry-types", '~> 0.13.2'
45
+ spec.add_dependency 'dry-logic', '~> 0.4.2'
46
+ spec.add_dependency 'forwardable'
47
+ spec.add_dependency 'warehouse_items', '~> 0.2.0'
48
+ end
metadata ADDED
@@ -0,0 +1,361 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: super_tools
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - eddie
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-04-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: shoulda-context
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: actionview
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: activerecord
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: activemodel
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: activeview
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: fast_excel
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: roo
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: roo-xls
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: spreadsheet
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: iconv
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: virtus
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: 1.0.5
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: 1.0.5
209
+ - !ruby/object:Gem::Dependency
210
+ name: reform-rails
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :runtime
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: reform
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - "~>"
228
+ - !ruby/object:Gem::Version
229
+ version: 2.2.4
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - "~>"
235
+ - !ruby/object:Gem::Version
236
+ version: 2.2.4
237
+ - !ruby/object:Gem::Dependency
238
+ name: dry-types
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - "~>"
242
+ - !ruby/object:Gem::Version
243
+ version: 0.13.2
244
+ type: :runtime
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - "~>"
249
+ - !ruby/object:Gem::Version
250
+ version: 0.13.2
251
+ - !ruby/object:Gem::Dependency
252
+ name: dry-logic
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - "~>"
256
+ - !ruby/object:Gem::Version
257
+ version: 0.4.2
258
+ type: :runtime
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - "~>"
263
+ - !ruby/object:Gem::Version
264
+ version: 0.4.2
265
+ - !ruby/object:Gem::Dependency
266
+ name: forwardable
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - ">="
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ type: :runtime
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ version: '0'
279
+ - !ruby/object:Gem::Dependency
280
+ name: warehouse_items
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - "~>"
284
+ - !ruby/object:Gem::Version
285
+ version: 0.2.0
286
+ type: :runtime
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - "~>"
291
+ - !ruby/object:Gem::Version
292
+ version: 0.2.0
293
+ description: Rails 開發環境常用工具 Forms/Process/Spreadsheet
294
+ email:
295
+ - eddie.li.624@gmail.com
296
+ executables: []
297
+ extensions: []
298
+ extra_rdoc_files: []
299
+ files:
300
+ - ".gitignore"
301
+ - ".travis.yml"
302
+ - Gemfile
303
+ - Gemfile.lock
304
+ - LICENSE.txt
305
+ - README.md
306
+ - Rakefile
307
+ - bin/console
308
+ - bin/setup
309
+ - lib/super_form/basic.rb
310
+ - lib/super_form/concerns/atomic_save.rb
311
+ - lib/super_form/reform.rb
312
+ - lib/super_formatter/ecan/head.rb
313
+ - lib/super_formatter/ecan/import.rb
314
+ - lib/super_formatter/ecan/row.rb
315
+ - lib/super_formatter/hct/head.rb
316
+ - lib/super_formatter/hct/import.rb
317
+ - lib/super_formatter/hct/row.rb
318
+ - lib/super_formatter/import.rb
319
+ - lib/super_formatter/row.rb
320
+ - lib/super_formatter/shopline/head.rb
321
+ - lib/super_formatter/shopline/import.rb
322
+ - lib/super_formatter/shopline/order.rb
323
+ - lib/super_formatter/shopline/row.rb
324
+ - lib/super_formatter/tcat/head.rb
325
+ - lib/super_formatter/tcat/import.rb
326
+ - lib/super_formatter/tcat/row.rb
327
+ - lib/super_process/core.rb
328
+ - lib/super_spreadsheet/loader.rb
329
+ - lib/super_table/action_view.rb
330
+ - lib/super_table/builder.rb
331
+ - lib/super_table/record.rb
332
+ - lib/super_table/tableable.rb
333
+ - lib/super_table/view_helpers.rb
334
+ - lib/super_tools.rb
335
+ - lib/super_tools/version.rb
336
+ - super_tools.gemspec
337
+ homepage: https://github.com/superlanding/super_tools
338
+ licenses:
339
+ - MIT
340
+ metadata: {}
341
+ post_install_message:
342
+ rdoc_options: []
343
+ require_paths:
344
+ - lib
345
+ required_ruby_version: !ruby/object:Gem::Requirement
346
+ requirements:
347
+ - - ">="
348
+ - !ruby/object:Gem::Version
349
+ version: '0'
350
+ required_rubygems_version: !ruby/object:Gem::Requirement
351
+ requirements:
352
+ - - ">="
353
+ - !ruby/object:Gem::Version
354
+ version: '0'
355
+ requirements: []
356
+ rubyforge_project:
357
+ rubygems_version: 2.4.8
358
+ signing_key:
359
+ specification_version: 4
360
+ summary: Rails 開發環境常用工具 Forms/Process/Spreadsheet
361
+ test_files: []