admin_it 1.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.
Files changed (108) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +5 -0
  5. data/.yardopts +3 -0
  6. data/Gemfile +5 -0
  7. data/README.md +58 -0
  8. data/README_RU.md +52 -0
  9. data/Rakefile +23 -0
  10. data/admin_it.gemspec +38 -0
  11. data/app/assets/fonts/admin_it/FontAwesome.otf +0 -0
  12. data/app/assets/fonts/admin_it/fontawesome-webfont.eot +0 -0
  13. data/app/assets/fonts/admin_it/fontawesome-webfont.svg +414 -0
  14. data/app/assets/fonts/admin_it/fontawesome-webfont.ttf +0 -0
  15. data/app/assets/fonts/admin_it/fontawesome-webfont.woff +0 -0
  16. data/app/assets/fonts/admin_it/glyphicons-halflings-regular.eot +0 -0
  17. data/app/assets/fonts/admin_it/glyphicons-halflings-regular.svg +229 -0
  18. data/app/assets/fonts/admin_it/glyphicons-halflings-regular.ttf +0 -0
  19. data/app/assets/fonts/admin_it/glyphicons-halflings-regular.woff +0 -0
  20. data/app/assets/javascript/admin_it/admin_it.js +89 -0
  21. data/app/assets/javascript/admin_it/bootstrap.min.js +6 -0
  22. data/app/assets/stylesheets/admin_it/admin_it.css +25 -0
  23. data/app/assets/stylesheets/admin_it/bootstrap-theme.min.css +7 -0
  24. data/app/assets/stylesheets/admin_it/bootstrap.min.css +7 -0
  25. data/app/assets/stylesheets/admin_it/font-awesome.min.css +4 -0
  26. data/app/views/admin_it/context/_table.html.slim +38 -0
  27. data/app/views/admin_it/context/_tiles.html.slim +23 -0
  28. data/app/views/admin_it/edit.html.slim +2 -0
  29. data/app/views/admin_it/new.html.slim +2 -0
  30. data/app/views/admin_it/shared/_child.html.slim +15 -0
  31. data/app/views/admin_it/shared/_fields.html.slim +19 -0
  32. data/app/views/admin_it/shared/_filters.html.slim +40 -0
  33. data/app/views/admin_it/shared/_form.html.slim +50 -0
  34. data/app/views/admin_it/shared/_pagination.html.slim +41 -0
  35. data/app/views/admin_it/shared/_toolbar.html.slim +30 -0
  36. data/app/views/admin_it/show.html.slim +6 -0
  37. data/app/views/admin_it/table.html.slim +2 -0
  38. data/app/views/admin_it/tiles.html.slim +2 -0
  39. data/app/views/layouts/admin_it.html.slim +37 -0
  40. data/app/views/layouts/admin_it_dialog.html.slim +8 -0
  41. data/config.ru +7 -0
  42. data/lib/admin_it/config.rb +24 -0
  43. data/lib/admin_it/context/collection_context.rb +239 -0
  44. data/lib/admin_it/context/context.rb +232 -0
  45. data/lib/admin_it/context/show_context.rb +45 -0
  46. data/lib/admin_it/context/single_context.rb +199 -0
  47. data/lib/admin_it/context/table_context.rb +66 -0
  48. data/lib/admin_it/context/tiles_context.rb +31 -0
  49. data/lib/admin_it/context.rb +6 -0
  50. data/lib/admin_it/controller.rb +42 -0
  51. data/lib/admin_it/data/active_record.rb +283 -0
  52. data/lib/admin_it/data/data_behavior.rb +18 -0
  53. data/lib/admin_it/data/hash.rb +27 -0
  54. data/lib/admin_it/data/object.rb +51 -0
  55. data/lib/admin_it/data.rb +24 -0
  56. data/lib/admin_it/definitions.rb +89 -0
  57. data/lib/admin_it/engine.rb +56 -0
  58. data/lib/admin_it/env.rb +37 -0
  59. data/lib/admin_it/errors.rb +5 -0
  60. data/lib/admin_it/field/field.rb +174 -0
  61. data/lib/admin_it/field.rb +1 -0
  62. data/lib/admin_it/filters/entity_filter.rb +4 -0
  63. data/lib/admin_it/filters/field_filter.rb +31 -0
  64. data/lib/admin_it/filters/filter.rb +150 -0
  65. data/lib/admin_it/filters/value_filter.rb +52 -0
  66. data/lib/admin_it/filters.rb +4 -0
  67. data/lib/admin_it/helpers/field.rb +25 -0
  68. data/lib/admin_it/helpers/input.rb +22 -0
  69. data/lib/admin_it/helpers/page.rb +26 -0
  70. data/lib/admin_it/helpers/table.rb +85 -0
  71. data/lib/admin_it/helpers/tiles.rb +17 -0
  72. data/lib/admin_it/helpers/toolbar.rb +40 -0
  73. data/lib/admin_it/helpers/top_menu.rb +39 -0
  74. data/lib/admin_it/helpers.rb +12 -0
  75. data/lib/admin_it/locales/en.yml +14 -0
  76. data/lib/admin_it/locales/ru.yml +14 -0
  77. data/lib/admin_it/renderable.rb +18 -0
  78. data/lib/admin_it/resource.rb +292 -0
  79. data/lib/admin_it/utils.rb +21 -0
  80. data/lib/admin_it/version.rb +5 -0
  81. data/lib/admin_it.rb +19 -0
  82. data/lib/extend_it/array_of.rb +181 -0
  83. data/lib/extend_it/asserts.rb +38 -0
  84. data/lib/extend_it/callbacks.rb +105 -0
  85. data/lib/extend_it/caller.rb +35 -0
  86. data/lib/extend_it/class.rb +47 -0
  87. data/lib/extend_it/dsl.rb +94 -0
  88. data/lib/extend_it/refines.rb +6 -0
  89. data/lib/extend_it/symbolize.rb +39 -0
  90. data/lib/extend_it.rb +5 -0
  91. data/spec/internal/config/database.yml +3 -0
  92. data/spec/internal/config/routes.rb +3 -0
  93. data/spec/internal/db/combustion_test.sqlite +0 -0
  94. data/spec/internal/db/schema.rb +3 -0
  95. data/spec/internal/log/.gitignore +1 -0
  96. data/spec/internal/public/favicon.ico +0 -0
  97. data/spec/lib/context/collection_context_spec.rb +20 -0
  98. data/spec/lib/context/context_spec.rb +28 -0
  99. data/spec/lib/context/single_context_spec.rb +26 -0
  100. data/spec/lib/data/object_spec.rb +29 -0
  101. data/spec/lib/definitions_spec.rb +171 -0
  102. data/spec/lib/field_spec.rb +62 -0
  103. data/spec/lib/resource_spec.rb +39 -0
  104. data/spec/lib/utils_spec.rb +39 -0
  105. data/spec/spec_helper.rb +21 -0
  106. data/spec/support/example_groups/context_example_group.rb +50 -0
  107. data/spec/support/shared_examples/context.rb +2 -0
  108. metadata +337 -0
@@ -0,0 +1,181 @@
1
+ require 'forwardable'
2
+ require File.join %w(extend_it symbolize)
3
+ require File.join %w(extend_it asserts)
4
+
5
+ using ExtendIt::Symbolize
6
+
7
+ module ExtendIt
8
+ module ArrayOf
9
+ def array_of(entity_class, &block)
10
+ array_name = "ArrayOf#{entity_class.name.split('::').last}"
11
+ array_class = Class.new(SimpleDelegator) do
12
+ @entity_class = entity_class
13
+ @scopes = {}
14
+ @finder = nil
15
+ extend ArrayOf::ArrayClassMethods
16
+ include ArrayOf::ArrayMethods
17
+ end
18
+ array_class.class_eval(&block) if block_given?
19
+ const_set(array_name, array_class)
20
+ end
21
+
22
+ module ArrayClassMethods
23
+ include Asserts
24
+
25
+ attr_reader :scopes, :finder
26
+
27
+ def select(arr)
28
+ if arr.is_a?(self)
29
+ arr.to_a
30
+ else
31
+ arr.select { |a| a.is_a?(@entity_class) }
32
+ end
33
+ end
34
+
35
+ def entity?(obj)
36
+ obj.is_a?(@entity_class)
37
+ end
38
+
39
+ def scope(*names, &block)
40
+ names.flatten.uniq.each do |name|
41
+ name = name.symbolize || next
42
+ @scopes[name] = block.nil? ? proc { |e| e.send(name) } : block
43
+ str = name.to_s
44
+ if str[-1] == '?'
45
+ @scopes[str[0..-2].to_sym] = block.nil? ? proc { |e| e.send(name) } : block
46
+ end
47
+ end
48
+ end
49
+
50
+ def find_by(name, &block)
51
+ assert_symbol(:name)
52
+ @finder = block.nil? ? proc { |e| e.send(name) } : block
53
+ end
54
+
55
+ def has_finder?
56
+ !@finder.nil?
57
+ end
58
+ end
59
+
60
+ module ArrayMethods
61
+ def initialize(*arr)
62
+ @array = self.class.select(arr.flatten)
63
+ super(@array)
64
+ end
65
+
66
+ def scope(name)
67
+ if name.is_a?(Symbol)
68
+ if self.class.scopes.include?(name)
69
+ self.class.new(@array.select(&self.class.scopes[name]))
70
+ end
71
+ else
72
+ end
73
+ end
74
+
75
+ def [](*args)
76
+ if args.size == 1 && args.first.is_a?(Symbol)
77
+ unless self.class.finder.nil?
78
+ return @array.find { |e| self.class.finder.call(e) == args.first }
79
+ end
80
+ else
81
+ end
82
+ @array[*args]
83
+ end
84
+
85
+ %i(& + * - | clear collect collect! delete_if drop drop_while each
86
+ each_index keep_if first last map reject reject! reverse reverse!
87
+ reverse_each rotate rotate! sample select select! shift shuffle
88
+ shuffle! slice slice! sort sort! sort_by! take take_while uniq uniq!
89
+ values_at).each do |method|
90
+ define_method method do |*args, &block|
91
+ result = @array.send(method, *args, &block)
92
+ if result == @array
93
+ self
94
+ elsif result.is_a?(Array)
95
+ self.class.new(result)
96
+ else
97
+ result
98
+ end
99
+ end
100
+ end
101
+
102
+ def <<(obj)
103
+ return unless self.class.entity?(obj)
104
+ @array << obj
105
+ end
106
+
107
+ def []=(*args)
108
+ return unless self.class.entity?(args.last)
109
+ @array.send(:[]=, *args)
110
+ end
111
+
112
+ def to_a
113
+ @array
114
+ end
115
+
116
+ def to_ary
117
+ @array
118
+ end
119
+
120
+ %i(concat replace).each do |method|
121
+ define_method method do |other|
122
+ @array.send(method, self.class.select(other))
123
+ self
124
+ end
125
+ end
126
+
127
+ def fill(*args)
128
+ if block_given?
129
+ @array.fill(*args) do |index|
130
+ obj = yield index
131
+ self.class.entity?(obj) ? obj : @array[index]
132
+ end
133
+ else
134
+ return self unless self.class.entity?(args.first)
135
+ @array.fill(*args)
136
+ end
137
+ self
138
+ end
139
+
140
+ def insert(index, *other)
141
+ @array.insert(index, self.class.select(other))
142
+ self
143
+ end
144
+
145
+ def map!(&block)
146
+ array = @array
147
+ array_class = self.class
148
+ enum = Enumerator.new do |yielder|
149
+ array.replace(array.map do |entity|
150
+ obj = (yielder << entity)
151
+ array_class.entity?(obj) ? obj : nil
152
+ end.compact)
153
+ end
154
+ if block_given?
155
+ enum.each(&block)
156
+ self
157
+ else
158
+ enum
159
+ end
160
+ end
161
+
162
+ %i(push unshift).each do |method|
163
+ define_method method do |*args|
164
+ @array.send(method, *self.class.select(args))
165
+ self
166
+ end
167
+ end
168
+
169
+ %i(assoc combination compact compact! flatten flatten pack permutation
170
+ product rassoc repeated_combination repeated_permutation transpose
171
+ zip).each do |method|
172
+ define_method method do |*args|
173
+ fail(
174
+ RuntimError,
175
+ "Method #{method} is not allowed in #{self.class.name}"
176
+ )
177
+ end
178
+ end
179
+ end
180
+ end
181
+ end
@@ -0,0 +1,38 @@
1
+ require File.join %w(extend_it caller)
2
+ require File.join %w(extend_it symbolize)
3
+
4
+ using ExtendIt::Caller
5
+ using ExtendIt::Symbolize
6
+
7
+ module ExtendIt
8
+ module Asserts
9
+ private
10
+
11
+ if RUBY_VERSION >= '2.1.0'
12
+ def assert_symbol(*names, binding: nil)
13
+ return unless binding ||= caller_binding
14
+ names.each do |name|
15
+ name = name.ensure_symbol || next
16
+ var = binding.local_variable_get(name)
17
+ var = var.ensure_symbol || fail(
18
+ ArgumentError,
19
+ "Argument `#{name}` should be a Symbol or String",
20
+ caller[1..-1]
21
+ )
22
+ binding.local_variable_set(name, var)
23
+ end
24
+ end
25
+ else
26
+ def assert_symbol(*names, binding: nil)
27
+ return unless binding ||= caller_binding
28
+ names.each do |name|
29
+ name = name.ensure_symbol || next
30
+ binding.eval(
31
+ "#{name} = #{name}.ensure_symbol || fail(ArgumentError," \
32
+ " 'Argument `#{name}` should be a Symbol or String')"
33
+ )
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,105 @@
1
+ require File.join %w(extend_it symbolize)
2
+ require File.join %w(extend_it class)
3
+
4
+ using ExtendIt::Symbolize
5
+
6
+ module ExtendIt
7
+ module Callbacks
8
+ CALLBACKS = %i(before after around)
9
+
10
+ def self.included(base)
11
+ unless base.is_a?(Class)
12
+ fail RuntimeError, 'Can be included in classes only'
13
+ end
14
+ unless (class << base; self end).included_modules.include?(ExtendIt::Class)
15
+ fail RuntimeError, "#{base.name} should extend ExtendIt::Class"
16
+ end
17
+ base.extend(ClassMethods)
18
+ end
19
+
20
+ def self.extended(base)
21
+ fail RuntimeError, 'This module can\'t be extended'
22
+ end
23
+
24
+ def run_callbacks(*names, arguments: [], original_context: false)
25
+ # sanitize arguments
26
+ arguments = [] if arguments.nil?
27
+ arguments = [arguments] unless arguments.is_a?(Array)
28
+
29
+ parents = self.class.parents
30
+ parents_rev = parents.reverse
31
+
32
+ names.ensure_symbols.each do |name|
33
+ around = []
34
+ around_name = "@around_#{name}".to_sym
35
+ var_name = "@before_#{name}".to_sym
36
+ parents_rev.each do |p|
37
+ if p.instance_variable_defined?(around_name)
38
+ arr = p.instance_variable_get(around_name)
39
+ arr.each do |b|
40
+ if original_context == true
41
+ b.call(*arguments)
42
+ else
43
+ instance_exec(*arguments, &b)
44
+ end
45
+ end
46
+ around.concat(arr)
47
+ end
48
+ if p.instance_variable_defined?(var_name)
49
+ p.instance_variable_get(var_name).each do |b|
50
+ if original_context == true
51
+ b.call(*arguments)
52
+ else
53
+ instance_exec(*arguments, &b)
54
+ end
55
+ end
56
+ end
57
+ end
58
+ yield if block_given?
59
+ around.reverse.each do |b|
60
+ if original_context == true
61
+ b.call(*arguments)
62
+ else
63
+ instance_exec(*arguments, &b)
64
+ end
65
+ end
66
+ var_name = "@after_#{name}".to_sym
67
+ parents.each do |p|
68
+ if p.instance_variable_defined?(var_name)
69
+ p.instance_variable_get(var_name).each do |b|
70
+ if original_context == true
71
+ b.call(*arguments)
72
+ else
73
+ instance_exec(*arguments, &b)
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
80
+
81
+ module ClassMethods
82
+ def define_callbacks(*names, callbacks: [:before, :after])
83
+ callbacks = [:before, :after] unless callbacks.is_a?(Array)
84
+ callbacks.select! { |cb| CALLBACKS.include?(cb) }
85
+ names.each do |name|
86
+ name = name.symbolize || next
87
+ callbacks.each do |cb|
88
+ cb_name = "#{cb}_#{name}".to_sym
89
+ var_name = "@#{cb_name}".to_sym
90
+ define_singleton_method cb_name do |&block|
91
+ return if block.nil?
92
+ arr =
93
+ if instance_variable_defined?(var_name)
94
+ instance_variable_get(var_name)
95
+ else
96
+ instance_variable_set(var_name, [])
97
+ end
98
+ arr << block
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,35 @@
1
+ require 'continuation' if RUBY_VERSION >= '1.9.0'
2
+
3
+ module ExtendIt
4
+ module Caller
5
+ # http://rubychallenger.blogspot.ru/2011/07/caller-binding.html
6
+ refine Object do
7
+ def caller_binding
8
+ cc, count = nil, 0
9
+ set_trace_func(lambda { |event, file, lineno, id, binding, klass|
10
+ if count == 2
11
+ set_trace_func nil
12
+ cc.call(binding)
13
+ elsif event == 'return'
14
+ count += 1
15
+ end
16
+ })
17
+ return callcc { |cont| cc = cont }
18
+ end
19
+
20
+ def caller_eval(str)
21
+ cc, ok = nil, false
22
+ set_trace_func(lambda { |event, file, lineno, id, binding, klass|
23
+ if ok
24
+ set_trace_func nil
25
+ cc.call(binding)
26
+ else
27
+ ok = event == "return"
28
+ end
29
+ })
30
+ return unless bb = callcc { |c| cc = c; nil }
31
+ eval(str, bb)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,47 @@
1
+ require File.join %w(extend_it symbolize)
2
+
3
+ using ExtendIt::Symbolize
4
+
5
+ module ExtendIt
6
+ module Class
7
+ def self.extended(base)
8
+ base.instance_eval do
9
+ define_singleton_method :parents do
10
+ @parents ||= ancestors.take_while { |a| a != base }.concat([base])
11
+ end
12
+ end
13
+ end
14
+
15
+ def call_inherited(method_name, *args, base_first: false, &block)
16
+ arr = parents.select { |parent| parent.methods.include?(method_name) }
17
+ arr.reverse! if base_first == true
18
+ arr.reduce([]) { |a, e| a << e.send(method_name, *args, &block) }
19
+ end
20
+
21
+ def inherited_class_reader(*names)
22
+ names.ensure_symbols.each do |name|
23
+ var = "@#{name}"
24
+ define_singleton_method(name) do
25
+ p = parents.find { |parent| parent.instance_variable_defined?(var) }
26
+ p.nil? ? nil : p.instance_variable_get(var)
27
+ end
28
+ end
29
+ end
30
+
31
+ def class_attr_reader(*attrs)
32
+ attrs.flatten.uniq.each do |attr_name|
33
+ attr_name = attr_name.to_sym if attr_name.is_a?(String)
34
+ next unless attr_name.is_a?(Symbol)
35
+ next if instance_methods.include?(attr_name)
36
+ var_name = "@#{attr_name}".to_sym
37
+ if methods.include?(attr_name)
38
+ define_method(attr_name) { self.class.send(attr_name) }
39
+ elsif instance_variable_defined?(var_name)
40
+ define_method attr_name do
41
+ self.class.instance_variable_get(var_name)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,94 @@
1
+ require File.join %w(extend_it asserts)
2
+ require File.join %w(extend_it symbolize)
3
+
4
+ using ExtendIt::Symbolize
5
+
6
+ module ExtendIt
7
+ module Dsl
8
+ include Asserts
9
+
10
+ def dsl_accessor(*names, default: nil, &setter)
11
+ names.flatten.uniq.each do |name|
12
+ name = name.symbolize || next
13
+ var_name = "@#{name}".to_sym
14
+ setter_name = "#{name}=".to_sym
15
+ define_method setter_name do |*args|
16
+ obj =
17
+ if setter.nil?
18
+ default || args.first
19
+ else
20
+ instance_exec(*args, &setter)
21
+ end
22
+ instance_variable_set(var_name, obj)
23
+ end
24
+ define_method name do |*args, &block|
25
+ if args.empty? && block.nil?
26
+ if instance_variable_defined?(var_name)
27
+ instance_variable_get(var_name)
28
+ else
29
+ obj = setter.nil? ? default : instance_exec(&setter)
30
+ instance_variable_set(var_name, obj)
31
+ end
32
+ else
33
+ obj = send(setter_name, *args)
34
+ obj.instance_eval(&block) unless obj.nil? || block.nil?
35
+ obj
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ def dsl_boolean(*names, default: true)
42
+ default = default == true
43
+ names.flatten.uniq.each do |name|
44
+ name = name.symbolize || next
45
+ var_name = "@#{name}".to_sym
46
+ define_method "#{name}=" do |value = default|
47
+ instance_variable_set(var_name, value == true)
48
+ end
49
+ define_method "#{name}?" do
50
+ if instance_variable_defined?(var_name)
51
+ instance_variable_get(var_name) == true
52
+ else
53
+ instance_variable_set(var_name, default)
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ def dsl_block(*names)
60
+ names.flatten.uniq.each do |name|
61
+ var_name = "@#{name}".to_sym
62
+ define_method name do |*args, &block|
63
+ if block.nil?
64
+ if instance_variable_defined?(var_name)
65
+ instance_variable_get(var_name)
66
+ # instance_exec(*args, &b) unless b.nil?
67
+ # else
68
+ # nil
69
+ end
70
+ else
71
+ instance_variable_set(var_name, block)
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ def dsl_use_hash(hash_name)
78
+ assert_symbol(:hash_name, binding: binding)
79
+ define_method "use_#{hash_name}" do |*names, except: nil|
80
+ hash = instance_variable_get("@#{hash_name}")
81
+ if names.empty?
82
+ names = hash.keys
83
+ else
84
+ names = names.ensure_symbols & hash.keys
85
+ end
86
+ except = [except] if !except.nil? && !except.is_a?(Array)
87
+ if except.is_a?(Array)
88
+ names -= except.ensure_symbols
89
+ end
90
+ hash.delete_if { |k, v| !names.include?(k) }
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,6 @@
1
+ module ExtendIt
2
+ module Refines; end
3
+ end
4
+
5
+ glob = File.extend_path(File.join(%w(.. refines ** *.rb)), __FILE__)
6
+ Dir[glob].each { |file| require(file) }
@@ -0,0 +1,39 @@
1
+ module ExtendIt
2
+ module Symbolize
3
+ refine Object do
4
+ def symbolize
5
+ nil
6
+ end
7
+
8
+ def ensure_symbol
9
+ nil
10
+ end
11
+ end
12
+
13
+ refine String do
14
+ def symbolize
15
+ to_sym
16
+ end
17
+
18
+ def ensure_symbol
19
+ to_sym
20
+ end
21
+ end
22
+
23
+ refine Symbol do
24
+ def symbolize
25
+ self
26
+ end
27
+
28
+ def ensure_symbol
29
+ self
30
+ end
31
+ end
32
+
33
+ refine Array do
34
+ def ensure_symbols
35
+ flatten.map { |x| x.ensure_symbol }.compact
36
+ end
37
+ end
38
+ end
39
+ end
data/lib/extend_it.rb ADDED
@@ -0,0 +1,5 @@
1
+ require File.join %w(extend_it refines)
2
+ #require File.join %w(extend_it caller)
3
+ #require File.join %w(extend_it array_of)
4
+ #require File.join %w(extend_it dsl)
5
+
@@ -0,0 +1,3 @@
1
+ test:
2
+ adapter: sqlite3
3
+ database: db/combustion_test.sqlite
@@ -0,0 +1,3 @@
1
+ Rails.application.routes.draw do
2
+ #
3
+ end
@@ -0,0 +1,3 @@
1
+ ActiveRecord::Schema.define do
2
+ #
3
+ end
@@ -0,0 +1 @@
1
+ *.log
File without changes
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe AdminIt::CollectionContext do
4
+ let(:context_class) { described_class.create_class(:test, object_resource) }
5
+ subject { context_class.new }
6
+
7
+ # class DSL methods
8
+ it { expect(context_class.collection?).to be_true }
9
+ it { expect(context_class.single?).to be_false }
10
+
11
+ # instance methods
12
+ it { expect(subject.collection?).to be_true }
13
+ it { expect(subject.single?).to be_false }
14
+
15
+ it 'has entities setter' do
16
+ arr = [object_class.new, object_class.new]
17
+ subject.entities = arr
18
+ expect(subject.entities).to be_kind_of Enumerator
19
+ end
20
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe AdminIt::Context do
4
+ let(:context_class) { described_class.create_class(:test, object_resource) }
5
+ subject { context_class.new }
6
+
7
+ # DSL methods
8
+ it { expect(context_class.collection?).to be_false }
9
+ it { expect(context_class.single?).to be_false }
10
+
11
+ # instance methods
12
+ it { expect(subject.collection?).to be_false }
13
+ it { expect(subject.single?).to be_false }
14
+
15
+ it 'sets entity class to Resource entity class' do
16
+ expect(subject.entity_class).to eq object_resource.entity_class
17
+ end
18
+
19
+ it 'sets fields to empty array by default' do
20
+ expect(subject.class.fields).to eq []
21
+ end
22
+
23
+ it 'extends AdminIt::Object context by default' do
24
+ expect(subject.class.included_modules)
25
+ .to include AdminIt::ObjectData::Context
26
+ end
27
+ end
28
+
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe AdminIt::SingleContext do
4
+ let(:context_class) { described_class.create_class(:test, object_resource) }
5
+
6
+ describe 'DSL methods' do
7
+ subject { context_class }
8
+
9
+ it { expect(subject.collection?).to be_false }
10
+ it { expect(subject.single?).to be_true }
11
+ end
12
+
13
+ describe 'instance methods' do
14
+ subject { context_class.new }
15
+
16
+ it 'sets empty emtity for nil values' do
17
+ subject.entity = nil
18
+ expect(subject.values).to be_kind_of Hash
19
+ end
20
+
21
+ it 'sets entity Object' do
22
+ subject.entity = Object.new
23
+ expect(subject.values).to be_kind_of Hash
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe AdminIt::ObjectData::Context do
4
+ before do
5
+ object_class.class_eval do
6
+ def r; 'r_value'; end
7
+ def rw; @rw_value ||= 'rw_value'; end
8
+ def rw=(value); @rw_value = value; end
9
+ def w=(value); @w_value = value; end
10
+ def bool?; true; end
11
+ def wrong_getter_arity(test); true; end
12
+ def wrong_setter1_arity=(test, me); true; end
13
+ def wrong_setter2_arity=; true; end
14
+ end
15
+ end
16
+
17
+ it 'retrieves all fields for ancestors' do
18
+ fields = object_context.fields(scope: :all)
19
+ expect(fields.size).to eq 3
20
+ end
21
+
22
+ it 'reads fields' do
23
+ single_object_context.entity = object
24
+ expect(single_object_context.values).to eq r: 'r_value', rw: 'rw_value'
25
+ end
26
+ end
27
+
28
+ describe AdminIt::ObjectData::Field do
29
+ end