push_type_core 0.5.3 → 0.6.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/app/fields/push_type/asset_field.rb +5 -7
  3. data/app/fields/push_type/date_field.rb +4 -3
  4. data/app/fields/push_type/markdown_field.rb +20 -16
  5. data/app/fields/push_type/matrix_field.rb +26 -16
  6. data/app/fields/push_type/node_field.rb +7 -9
  7. data/app/fields/push_type/number_field.rb +2 -5
  8. data/app/fields/push_type/relation_field.rb +78 -0
  9. data/app/fields/push_type/repeater_field.rb +45 -6
  10. data/app/fields/push_type/select_field.rb +9 -21
  11. data/app/fields/push_type/structure_field.rb +40 -0
  12. data/app/fields/push_type/tag_list_field.rb +23 -12
  13. data/app/fields/push_type/taxonomy_field.rb +6 -8
  14. data/app/fields/push_type/time_field.rb +4 -3
  15. data/app/models/concerns/push_type/customizable.rb +41 -21
  16. data/app/models/concerns/push_type/presentable.rb +3 -3
  17. data/app/models/concerns/push_type/templatable.rb +1 -1
  18. data/app/models/push_type/structure.rb +27 -0
  19. data/lib/push_type/field_type.rb +93 -8
  20. data/lib/push_type/primitives/array_type.rb +14 -0
  21. data/lib/push_type/primitives/base.rb +21 -0
  22. data/lib/push_type/primitives/number_type.rb +14 -0
  23. data/lib/push_type/primitives/object_type.rb +7 -0
  24. data/lib/push_type/primitives/string_type.rb +12 -0
  25. data/lib/push_type/testing/factories.rb +1 -1
  26. data/lib/push_type/testing/setup.rb +2 -0
  27. data/lib/push_type/version.rb +1 -1
  28. data/test/dummy/config/initializers/push_type.rb +1 -1
  29. data/test/dummy/config/secrets.yml +2 -2
  30. data/test/dummy/db/schema.rb +1 -1
  31. data/test/dummy/log/test.log +15836 -6164
  32. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/0ANSDcZJu9gPyqtYPIW729qm1kriQ29Vn9LU8T2SGQU.cache +0 -0
  33. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/3T6ioyhwSsEzte_a9viHBvfmuKgORQ019srIEoUYkVs.cache +1 -0
  34. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/5Lly_CA8DZvPhQV2jDQx-Y6P_y3Ygra9t5jfSlGhHDA.cache +2 -0
  35. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/IYzwMwq7DWWSuojH6oXsrP__pcD7O8TQieMFSzQiwnc.cache +1 -0
  36. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/OI6uxGcnsKavdWTtwDAasU3wPx8QXhzBgV0X2n1KjMQ.cache +3 -0
  37. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/_d65qW7wxRtKVSYpmfSenECz5QUWVI9pppUgV7TA1Rk.cache +0 -0
  38. data/test/dummy/tmp/generators/config/initializers/push_type.rb +1 -1
  39. data/test/fields/push_type/asset_field_test.rb +12 -25
  40. data/test/fields/push_type/date_field_test.rb +11 -3
  41. data/test/fields/push_type/markdown_field_test.rb +12 -24
  42. data/test/fields/push_type/matrix_field_test.rb +16 -24
  43. data/test/fields/push_type/node_field_test.rb +36 -59
  44. data/test/fields/push_type/number_field_test.rb +18 -4
  45. data/test/fields/push_type/relation_field_test.rb +48 -0
  46. data/test/fields/push_type/repeater_field_test.rb +20 -11
  47. data/test/fields/push_type/select_field_test.rb +23 -28
  48. data/test/fields/push_type/string_field_test.rb +21 -0
  49. data/test/fields/push_type/structure_field_test.rb +27 -0
  50. data/test/fields/push_type/tag_list_field_test.rb +15 -14
  51. data/test/fields/push_type/taxonomy_field_test.rb +36 -45
  52. data/test/fields/push_type/text_field_test.rb +11 -2
  53. data/test/fields/push_type/time_field_test.rb +11 -3
  54. data/test/lib/push_type/core_test.rb +3 -3
  55. data/test/lib/push_type/field_type_test.rb +15 -13
  56. data/test/lib/push_type/primitives_test.rb +43 -0
  57. data/test/models/concerns/push_type/customizable_test.rb +9 -27
  58. data/test/models/concerns/push_type/nestable_test.rb +3 -0
  59. data/test/models/concerns/push_type/templatable_test.rb +17 -16
  60. metadata +65 -40
  61. data/lib/push_type/fields/arrays.rb +0 -23
  62. data/lib/push_type/fields/base.rb +0 -65
  63. data/lib/push_type/fields/class_methods.rb +0 -21
  64. data/lib/push_type/fields/relations.rb +0 -39
  65. data/lib/push_type/fields/ui.rb +0 -16
  66. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/5hBD45unr3-A8x6pxXjxq708mnY9gJisy1yA5AojZWQ.cache +0 -3
  67. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/M0EVptJKeB1GMjwoMb3w3mgp8VB55MSbItnFhItY4hA.cache +0 -1
  68. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/MSjNaQjz3SH1LnDyk7nWta_i3hcCEV9m1eoNFbOXjwI.cache +0 -2
  69. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/g97nJc5YmnbscVR5pZZoxgfj652ml7dLjUIu0FHDwLA.cache +0 -0
  70. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/utXmZy0kE8zUnHIqwtbjUUJlYlFcGDJreK2YPDuR3n8.cache +0 -1
  71. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vlJujjzOikOTUvCvT3C4o3vK0ySfxbQQ3RBE37vXH0U.cache +0 -0
  72. /data/test/dummy/db/migrate/{20150928114659_create_push_type_users.push_type.rb → 20151015181653_create_push_type_users.push_type.rb} +0 -0
  73. /data/test/dummy/db/migrate/{20150928114660_create_push_type_nodes.push_type.rb → 20151015181654_create_push_type_nodes.push_type.rb} +0 -0
  74. /data/test/dummy/db/migrate/{20150928114661_create_push_type_node_hierarchies.push_type.rb → 20151015181655_create_push_type_node_hierarchies.push_type.rb} +0 -0
  75. /data/test/dummy/db/migrate/{20150928114662_create_push_type_assets.push_type.rb → 20151015181656_create_push_type_assets.push_type.rb} +0 -0
  76. /data/test/dummy/db/migrate/{20150928114663_create_push_type_taxonomies.push_type.rb → 20151015181657_create_push_type_taxonomies.push_type.rb} +0 -0
  77. /data/test/dummy/db/migrate/{20150928114664_create_push_type_taxonomy_hierarchies.push_type.rb → 20151015181658_create_push_type_taxonomy_hierarchies.push_type.rb} +0 -0
  78. /data/test/dummy/db/migrate/{20150928114665_add_field_store_default_values.push_type.rb → 20151015181659_add_field_store_default_values.push_type.rb} +0 -0
  79. /data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/{0VLfu-ipRCm5lg6MOptoyejoCkDcrvsfiei7dJqJR7o.cache → MSZIb53M-WSslpcsxtT_LlGognclDpLjB9YyJ1qLm3c.cache} +0 -0
  80. /data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/{8Mt8KKhDfWMlVzIUM3vc5LZsEDGQkPmtR1lWxp_W0KU.cache → jE1v4kSAksoYAFuvE0Nbl5ZIcuyFYlWX8cb9YkFd5BY.cache} +0 -0
@@ -13,13 +13,13 @@ module PushType
13
13
  module ClassMethods
14
14
 
15
15
  def presenter_class_name
16
- "#{ name }Presenter"
16
+ "#{ self.name.demodulize }Presenter"
17
17
  end
18
18
 
19
19
  def presenter_class
20
- Object.const_get presenter_class_name
20
+ self.parent.const_get presenter_class_name
21
21
  rescue NameError
22
- Object.const_set presenter_class_name, Class.new(PushType::Presenter)
22
+ self.parent.const_set presenter_class_name, Class.new(PushType::Presenter)
23
23
  end
24
24
 
25
25
  end
@@ -13,7 +13,7 @@ module PushType
13
13
  module ClassMethods
14
14
 
15
15
  def template(name, opts = {})
16
- @template_name = name
16
+ @template_name = name.to_s
17
17
  @template_opts = opts
18
18
  end
19
19
 
@@ -0,0 +1,27 @@
1
+ module PushType
2
+ class Structure
3
+
4
+ attr_accessor :field_store
5
+
6
+ include ActiveModel::Model
7
+ include ActiveRecord::AttributeAssignment
8
+ include ActiveRecord::Store
9
+
10
+ extend ActiveModel::Callbacks
11
+ define_model_callbacks :initialize, only: :after
12
+
13
+ include PushType::Customizable
14
+
15
+ def self.name
16
+ 'PushType::Structure'
17
+ end
18
+
19
+ def initialize(*args)
20
+ run_callbacks :initialize do
21
+ @field_store ||= {}
22
+ super
23
+ end
24
+ end
25
+
26
+ end
27
+ end
@@ -1,16 +1,101 @@
1
- require 'push_type/fields/class_methods'
2
- require 'push_type/fields/base'
3
- require 'push_type/fields/ui'
4
- require 'push_type/fields/arrays'
5
- require 'push_type/fields/relations'
1
+ require 'push_type/primitives/base'
2
+ require 'push_type/primitives/string_type'
3
+ require 'push_type/primitives/number_type'
4
+ require 'push_type/primitives/array_type'
5
+ require 'push_type/primitives/object_type'
6
6
 
7
7
  module PushType
8
8
  class FieldType
9
9
 
10
- extend PushType::Fields::ClassMethods
10
+ class << self
11
+ attr_reader :def_block, :init_block
11
12
 
12
- include PushType::Fields::Base
13
- include PushType::Fields::Ui
13
+ def options(opts = {})
14
+ @options ||= opts
15
+ end
16
+
17
+ def on_class(&block)
18
+ @def_block = block
19
+ end
20
+
21
+ def on_instance(&block)
22
+ @init_block = block
23
+ end
24
+ end
25
+
26
+ attr_reader :name, :model
27
+
28
+ def initialize(name, model, opts = {})
29
+ @name = name
30
+ @model = model
31
+ @opts = [defaults, self.class.options, opts].compact.inject(&:merge)
32
+ end
33
+
34
+ def kind
35
+ self.class.name.demodulize.underscore.gsub(/_(field|type)$/, '').to_sym
36
+ end
37
+
38
+ def primitive
39
+ begin
40
+ "push_type/primitives/#{ json_primitive }_type".camelize.constantize
41
+ rescue NameError
42
+ "#{ json_primitive }_type".camelize.constantize
43
+ end
44
+ end
45
+
46
+ def json_value
47
+ model.field_store[name.to_s]
48
+ end
49
+
50
+ def value
51
+ json_value
52
+ end
53
+
54
+ def json_primitive
55
+ @opts[:json_primitive]
56
+ end
57
+
58
+ def css_class
59
+ @opts[:css_class]
60
+ end
61
+
62
+ def template
63
+ @opts[:template]
64
+ end
65
+
66
+ def label
67
+ @opts[:label]
68
+ end
69
+
70
+ def form_helper
71
+ @opts[:form_helper]
72
+ end
73
+
74
+ def html_options
75
+ @opts[:html_options]
76
+ end
77
+
78
+ def field_options
79
+ @opts[:field_options]
80
+ end
81
+
82
+ def multiple?
83
+ @opts[:multiple]
84
+ end
85
+
86
+ private
87
+
88
+ def defaults
89
+ {
90
+ json_primitive: :string,
91
+ template: 'default',
92
+ label: name.to_s.humanize,
93
+ form_helper: :text_field,
94
+ html_options: {},
95
+ field_options: {},
96
+ multiple: false
97
+ }
98
+ end
14
99
 
15
100
  end
16
101
  end
@@ -0,0 +1,14 @@
1
+ module PushType
2
+ module Primitives
3
+ class ArrayType < Base
4
+
5
+ def to_json
6
+ unless value.blank?
7
+ Array(value).reject(&:blank?)
8
+ end
9
+ end
10
+
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,21 @@
1
+ module PushType
2
+ module Primitives
3
+ class Base
4
+
5
+ def self.to_json(val)
6
+ new(val).to_json
7
+ end
8
+
9
+ attr_reader :value
10
+
11
+ def initialize(value)
12
+ @value = value
13
+ end
14
+
15
+ def to_json
16
+ value.as_json
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,14 @@
1
+ module PushType
2
+ module Primitives
3
+ class NumberType < Base
4
+
5
+ def to_json
6
+ unless value.blank? || value.to_s !~ /^[\+\-]?\d+/
7
+ (f = value.to_f) && (f % 1.0 == 0) ? f.to_i : f
8
+ end
9
+ end
10
+
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,7 @@
1
+ module PushType
2
+ module Primitives
3
+ class ObjectType < Base
4
+ end
5
+ end
6
+ end
7
+
@@ -0,0 +1,12 @@
1
+ module PushType
2
+ module Primitives
3
+ class StringType < Base
4
+
5
+ def to_json
6
+ value.to_s unless value.blank?
7
+ end
8
+
9
+ end
10
+ end
11
+ end
12
+
@@ -16,7 +16,7 @@ FactoryGirl.define do
16
16
 
17
17
  factory :published_node do
18
18
  status 'published'
19
- end
19
+ end
20
20
  end
21
21
 
22
22
  sequence :email do |n|
@@ -6,6 +6,8 @@ require 'database_cleaner'
6
6
  # Load support files
7
7
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
8
8
 
9
+ Rails.backtrace_cleaner.remove_silencers!
10
+
9
11
  DatabaseCleaner.strategy = :transaction
10
12
  DatabaseCleaner.clean_with :truncation
11
13
  Dragonfly.app.use_datastore :memory
@@ -1,3 +1,3 @@
1
1
  module PushType
2
- VERSION = '0.5.3'
2
+ VERSION = '0.6.0.beta.1'
3
3
  end
@@ -50,6 +50,6 @@ PushType.setup do |config|
50
50
  # secret_access_key: ENV['SECRET_ACCESS_KEY_ID']
51
51
  # }
52
52
 
53
- # config.dragonfly_secret = 'b9476f7fd2c545f81e0bc28402dd38a0e2de03942eedf493548c37dc8aab841a'
53
+ # config.dragonfly_secret = '00043bc391450eed15067f573d180cdbe11701d4ac2071846afedf63a0b0ff97'
54
54
 
55
55
  end
@@ -11,10 +11,10 @@
11
11
  # if you're sharing your code publicly.
12
12
 
13
13
  development:
14
- secret_key_base: 043e8f325af09cd6a8beea1d081427b966f2745bb082b1b5fad84ee8af59dc0bd1315377697ee686a4ea3eabdcd875ba266ec59c30a3da3f66c14ba9d88f81d0
14
+ secret_key_base: f1b64e4e941325944b2519b10024c2b271e7237e0938afb8aad157c8701a1ef3f899fd1026297f82fad973d6c4f070ee56c6b4d54b80cbd01f98577a254dd7da
15
15
 
16
16
  test:
17
- secret_key_base: 48dfc0ccdd4da998c1dc305bf1adb18f358d5507483f30633baff6f3ebd6cb5b6949180dcb01a1e8582984e21d52bfb78f23250cde425bdc2fa6a9b4be10af48
17
+ secret_key_base: fef760fdb11a957790330541b9117b84f83b8355d4795cecc6e28fe4877abf837eb20a317380d203880d4e0e439bfa064d0dede3697edd70feaa1304917e65ab
18
18
 
19
19
  # Do not keep production secrets in the repository,
20
20
  # instead read values from the environment.
@@ -11,7 +11,7 @@
11
11
  #
12
12
  # It's strongly recommended that you check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(version: 20150928114665) do
14
+ ActiveRecord::Schema.define(version: 20151015181659) do
15
15
 
16
16
  # These are extensions that must be enabled in order to support this database
17
17
  enable_extension "plpgsql"